// Box
/**************************************************************************/
+Box::Box(Color_t col)
+{
+ Reve::ColorFromIdx(col, color);
+}
+
+Box::Box(Color_t col, Float_t* p)
+{
+ Reve::ColorFromIdx(col, color);
+ memcpy(vertices, p, 24*sizeof(Float_t));
+}
+
+Box::Box(Color_t col, Float_t x, Float_t y, Float_t z,
+ Float_t dx, Float_t dy, Float_t dz)
+{
+ Reve::ColorFromIdx(col, color);
+ MakeAxisAlignedBox(x, y, z, dx, dy, dz);
+}
+
Box::Box(TRandom& rnd, Float_t origin, Float_t size)
{
Reve::ColorFromIdx(Int_t(30*rnd.Rndm()), color);
- Float_t x0 = 2*origin*(rnd.Rndm() - 0.5);
- Float_t y0 = 2*origin*(rnd.Rndm() - 0.5);
- Float_t z0 = 2*origin*(rnd.Rndm() - 0.5);
- Float_t xo = 2*size*(rnd.Rndm() - 0.5);
- Float_t yo = 2*size*(rnd.Rndm() - 0.5);
- Float_t zo = 2*size*(rnd.Rndm() - 0.5);
- Float_t* p = vertices;
+ Float_t x = 2*origin*(rnd.Rndm() - 0.5);
+ Float_t y = 2*origin*(rnd.Rndm() - 0.5);
+ Float_t z = 2*origin*(rnd.Rndm() - 0.5);
+ Float_t dx = 2*size*(rnd.Rndm() - 0.5);
+ Float_t dy = 2*size*(rnd.Rndm() - 0.5);
+ Float_t dz = 2*size*(rnd.Rndm() - 0.5);
+ MakeAxisAlignedBox(x, y, z, dx, dy, dz);
+}
+void Box::MakeAxisAlignedBox(Float_t x, Float_t y, Float_t z,
+ Float_t dx, Float_t dy, Float_t dz)
+{
+ Float_t* p = vertices;
//bottom
- p[0] = x0 - xo; p[1] = y0 + yo, p[2] = z0 - zo; p += 3;
- p[0] = x0 + xo; p[1] = y0 + yo, p[2] = z0 - zo; p += 3;
- p[0] = x0 + xo; p[1] = y0 - yo, p[2] = z0 - zo; p += 3;
- p[0] = x0 - xo; p[1] = y0 - yo, p[2] = z0 - zo; p += 3;
+ p[0] = x - dx; p[1] = y + dy, p[2] = z - dz; p += 3;
+ p[0] = x + dx; p[1] = y + dy, p[2] = z - dz; p += 3;
+ p[0] = x + dx; p[1] = y - dy, p[2] = z - dz; p += 3;
+ p[0] = x - dx; p[1] = y - dy, p[2] = z - dz; p += 3;
//top
- p[0] = x0 - xo; p[1] = y0 + yo, p[2] = z0 + zo; p += 3;
- p[0] = x0 + xo; p[1] = y0 + yo, p[2] = z0 + zo; p += 3;
- p[0] = x0 + xo; p[1] = y0 - yo, p[2] = z0 + zo; p += 3;
- p[0] = x0 - xo; p[1] = y0 - yo, p[2] = z0 + zo;
+ p[0] = x - dx; p[1] = y + dy, p[2] = z + dz; p += 3;
+ p[0] = x + dx; p[1] = y + dy, p[2] = z + dz; p += 3;
+ p[0] = x + dx; p[1] = y - dy, p[2] = z + dz; p += 3;
+ p[0] = x - dx; p[1] = y - dy, p[2] = z + dz;
+
}
-
//______________________________________________________________________
// BoxSet
//
ClassImp(BoxSet)
BoxSet::BoxSet(const Text_t* n, const Text_t* t) :
+ RenderElement(fDefaultColor),
TNamed(n, t),
- fTrans(kFALSE)
+ fRenderMode (RM_AsIs)
{}
/**************************************************************************/
buff.fID = this;
buff.fColor = 1;
buff.fTransparency = 0;
- buff.fLocalFrame = fTrans;
- if (fTrans)
- memcpy(buff.fLocalMaster, fMatrix, 16*sizeof(Double_t));
+ fHMTrans.SetBuffer3D(buff);
buff.SetSectionsValid(TBuffer3D::kCore);
Int_t reqSections = gPad->GetViewer3D()->AddObject(buff);
#include <TNamed.h>
#include <TAtt3D.h>
#include <TAttBBox.h>
+#include <Reve/RenderElement.h>
#include <Reve/Reve.h>
+#include "ZTrans.h"
+
#include <vector>
+class TGeoMatrix;
class TRandom;
namespace Reve {
Float_t vertices[24];
UChar_t color[4];
- Box(Color_t col = 1)
- { Reve::ColorFromIdx(col, color); }
- Box(Color_t col, Float_t* p)
- { Reve::ColorFromIdx(col, color); memcpy(vertices, p, 24*sizeof(Float_t)); }
+ Box(Color_t col = 1);
+ Box(Color_t col, Float_t* p);
+ Box(Color_t col, Float_t x, Float_t y, Float_t z,
+ Float_t dx, Float_t dy, Float_t dz);
Box(TRandom& rnd, Float_t origin, Float_t size);
virtual ~Box() {}
+ void MakeAxisAlignedBox(Float_t x, Float_t y, Float_t z,
+ Float_t dx, Float_t dy, Float_t dz);
+
ClassDef(Box, 1);
};
/**************************************************************************/
-class BoxSet: public TNamed, public TAtt3D, public TAttBBox
+class BoxSet: public RenderElement,
+ public TNamed,
+ public TAtt3D,
+ public TAttBBox
{
friend class BoxSetGL;
+public:
+ enum RenderMode_e { RM_AsIs, RM_Line, RM_Fill };
+
protected:
- Double_t fMatrix[16];
- Bool_t fTrans;
+ Color_t fDefaultColor;
+ RenderMode_e fRenderMode;
+ ZTrans fHMTrans;
public:
std::vector<Box> fBoxes;
BoxSet(const Text_t* n="BoxSet", const Text_t* t="");
virtual ~BoxSet() {}
+ void AddBox(const Box& b) { fBoxes.push_back(b); }
void ClearSet() { fBoxes.clear(); }
- Bool_t GetTrans() const { return fTrans; }
- void SetTrans(Bool_t t) { fTrans = t; }
- Double_t* ArrTrans() { return fMatrix; }
+ virtual Bool_t CanEditMainColor() { return kTRUE; }
virtual void ComputeBBox();
virtual void Paint(Option_t* option = "");
+ RenderMode_e GetRenderMode() const { return fRenderMode; }
+ void SetRenderMode(RenderMode_e rm) { fRenderMode = rm; }
+
+ ZTrans& RefHMTrans() { return fHMTrans; }
+ void SetTransMatrix(Double_t* carr) { fHMTrans.SetFrom(carr); }
+ void SetTransMatrix(const TGeoMatrix& mat) { fHMTrans.SetFrom(mat); }
+
void Test(Int_t nboxes);
ClassDef(BoxSet, 1);