]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/Reve/BoxSet.cxx
Bogdan: fix calculation of squared momentum.
[u/mrichter/AliRoot.git] / EVE / Reve / BoxSet.cxx
index e636ff4d4479c698c2dee01c59860beb1b0c0688..859d84f0b06e25e69bd0592819013c8d66b21855 100644 (file)
@@ -4,7 +4,6 @@
 #include <TRandom.h>
 #include <TBuffer3D.h>
 #include <TBuffer3DTypes.h>
-#include <TGeometry.h>
 #include <TVirtualPad.h>
 #include <TVirtualViewer3D.h>
 
@@ -14,58 +13,84 @@ 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
 //
 
-ClassImp(BoxSet);
+ClassImp(BoxSet)
 
-void BoxSet::Init()
-{
-  fTrans = false;
-  bbox_init();
-}
+BoxSet::BoxSet(const Text_t* n, const Text_t* t) :
+  RenderElement(fDefaultColor),
+  TNamed(n, t),
+  fDefaultColor(0),
+  fRenderMode(RM_AsIs),
+  fHMTrans(),
+  fBoxes()
+{}
 
 /**************************************************************************/
 
 void BoxSet::ComputeBBox()
 {
   if(fBoxes.empty()) {
-    bbox_zero();
+    BBoxZero();
     return;
   }
-  bbox_init();
+  BBoxInit();
   for(std::vector<Box>::iterator q=fBoxes.begin(); q!=fBoxes.end(); ++q) {
     Float_t* p = q->vertices;
     for(int i=0; i<8; ++i, p+=3)
-      bbox_check_point(p);
+      BBoxCheckPoint(p);
   }
-  printf("%s BBox is x(%f,%f), y(%f,%f), z(%f,%f)\n", GetName(),
-        fBBox[0], fBBox[1], fBBox[2], fBBox[3], fBBox[4], fBBox[5]);
+  // printf("%s BBox is x(%f,%f), y(%f,%f), z(%f,%f)\n", GetName(),
+  //        fBBox[0], fBBox[1], fBBox[2], fBBox[3], fBBox[4], fBBox[5]);
 }
 
 void BoxSet::Paint(Option_t* /*option*/)
@@ -76,9 +101,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);