]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Changed inheritance to include Reve::RenderElement; use ZTrans to store transformatio...
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 25 Oct 2006 16:18:43 +0000 (16:18 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 25 Oct 2006 16:18:43 +0000 (16:18 +0000)
EVE/Reve/BoxSet.cxx
EVE/Reve/BoxSet.h

index 3ae4ba115ebee75fd120d5b3db7f03479ab67a7d..4810a114b48fe35f0e68839b6cad91101c9c155c 100644 (file)
@@ -13,30 +13,53 @@ using namespace Reve;
 // 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
 //
@@ -44,8 +67,9 @@ Box::Box(TRandom& rnd, Float_t origin, Float_t size)
 ClassImp(BoxSet)
 
 BoxSet::BoxSet(const Text_t* n, const Text_t* t) :
+  RenderElement(fDefaultColor),
   TNamed(n, t),
-  fTrans(kFALSE)
+  fRenderMode (RM_AsIs)
 {}
 
 /**************************************************************************/
@@ -86,9 +110,7 @@ void BoxSet::Paint(Option_t* /*option*/)
   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);
index e0e4a0f5ba89119b7e87db3ec10992fbfb6f0df4..839c2fbadbcf17e61fced73fc6cb4017213a4fdc 100644 (file)
@@ -7,9 +7,13 @@
 #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 {
@@ -19,27 +23,37 @@ struct Box
   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;
@@ -47,15 +61,21 @@ public:
   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);