Skip to content
Snippets Groups Projects
Commit 88974c11 authored by Rene Brun's avatar Rene Brun
Browse files

From Andrei:

New method in TGeoPatternFinder to retrieve division axis
- modifications in TGeoPainter to load automatically the plugin for geometry editors


git-svn-id: http://root.cern.ch/svn/root/trunk@15402 27541ba8-7e3a-0410-8455-c3a389f83636
parent 64adbb6e
No related branches found
No related tags found
No related merge requests found
// @(#)root/geom:$Name: v5-11-02 $:$Id: TGeoPatternFinder.h,v 1.12 2006/04/03 16:19:31 brun Exp $
// @(#)root/geom:$Name: $:$Id: TGeoPatternFinder.h,v 1.13 2006/05/23 04:47:37 brun Exp $
// Author: Andrei Gheata 30/10/01
/*************************************************************************
......@@ -56,6 +56,7 @@ public:
virtual Int_t GetByteCount() const {return 36;}
Int_t GetCurrent() {return fCurrent;}
Int_t GetDivIndex() {return fDivIndex;}
virtual Int_t GetDivAxis() {return 1;}
virtual TGeoMatrix *GetMatrix() {return fMatrix;}
Int_t GetNdiv() const {return fNdivisions;}
TGeoNode *GetNodeOffset(Int_t idiv) {return fVolume->GetNode(fDivIndex+idiv);}
......@@ -92,6 +93,8 @@ public:
virtual void cd(Int_t idiv) {fCurrent=idiv;
((TGeoTranslation*)fMatrix)->SetDx(fStart+idiv*fStep+0.5*fStep);}
virtual TGeoNode *FindNode(Double_t *point);
virtual Double_t FindNextBoundary(Double_t *point, Double_t *dir, Int_t &indnext);
virtual Int_t GetDivAxis() {return 1;}
virtual void SavePrimitive(ofstream &out, Option_t *option);
ClassDef(TGeoPatternX, 1) // X division pattern
......@@ -115,6 +118,8 @@ public:
// methods
virtual void cd(Int_t idiv) {fCurrent=idiv; ((TGeoTranslation*)fMatrix)->SetDy(fStart+idiv*fStep+0.5*fStep);}
virtual TGeoNode *FindNode(Double_t *point);
virtual Double_t FindNextBoundary(Double_t *point, Double_t *dir, Int_t &indnext);
virtual Int_t GetDivAxis() {return 2;}
virtual void SavePrimitive(ofstream &out, Option_t *option);
ClassDef(TGeoPatternY, 1) // Y division pattern
......@@ -138,6 +143,8 @@ public:
// methods
virtual void cd(Int_t idiv) {fCurrent=idiv; ((TGeoTranslation*)fMatrix)->SetDz(fStart+idiv*fStep+0.5*fStep);}
virtual TGeoNode *FindNode(Double_t *point);
virtual Double_t FindNextBoundary(Double_t *point, Double_t *dir, Int_t &indnext);
virtual Int_t GetDivAxis() {return 3;}
virtual void SavePrimitive(ofstream &out, Option_t *option);
ClassDef(TGeoPatternZ, 1) // Z division pattern
......@@ -163,6 +170,7 @@ public:
virtual void cd(Int_t idiv) {fCurrent=idiv;
((TGeoTranslation*)fMatrix)->SetDx(fStart+idiv*fStep+0.5*fStep);}
virtual TGeoNode *FindNode(Double_t *point);
virtual Int_t GetDivAxis() {return 1;}
virtual void SavePrimitive(ofstream &out, Option_t *option);
ClassDef(TGeoPatternParaX, 1) // Para X division pattern
......@@ -190,6 +198,7 @@ public:
// methods
virtual void cd(Int_t idiv);
virtual TGeoNode *FindNode(Double_t *point);
virtual Int_t GetDivAxis() {return 2;}
virtual void SavePrimitive(ofstream &out, Option_t *option);
ClassDef(TGeoPatternParaY, 1) // Para Y division pattern
......@@ -218,6 +227,7 @@ public:
// methods
virtual void cd(Int_t idiv);
virtual TGeoNode *FindNode(Double_t *point);
virtual Int_t GetDivAxis() {return 3;}
virtual void SavePrimitive(ofstream &out, Option_t *option);
ClassDef(TGeoPatternParaZ, 1) // Para Z division pattern
......@@ -248,6 +258,7 @@ public:
Double_t GetTyz() const {return fTyz;}
virtual void cd(Int_t idiv);
virtual TGeoNode *FindNode(Double_t *point);
virtual Int_t GetDivAxis() {return 3;}
virtual void SavePrimitive(ofstream &out, Option_t *option);
ClassDef(TGeoPatternTrapZ, 1) // Trap od Gtra Z division pattern
......@@ -272,6 +283,7 @@ public:
// methods
virtual void cd(Int_t idiv) {fCurrent=idiv;}
virtual TGeoNode *FindNode(Double_t *point);
virtual Int_t GetDivAxis() {return 1;}
virtual void SavePrimitive(ofstream &out, Option_t *option);
ClassDef(TGeoPatternCylR, 1) // Cylindrical R division pattern
......@@ -306,6 +318,7 @@ public:
// methods
virtual void cd(Int_t idiv);
virtual TGeoNode *FindNode(Double_t *point);
virtual Int_t GetDivAxis() {return 2;}
virtual void SavePrimitive(ofstream &out, Option_t *option);
ClassDef(TGeoPatternCylPhi, 1) // Cylindrical phi division pattern
......@@ -329,6 +342,7 @@ public:
// methods
virtual void cd(Int_t idiv) {fCurrent=idiv;}
virtual TGeoNode *FindNode(Double_t *point);
virtual Int_t GetDivAxis() {return 1;}
virtual void SavePrimitive(ofstream &out, Option_t *option);
ClassDef(TGeoPatternSphR, 1) // spherical R division pattern
......@@ -355,6 +369,7 @@ public:
// methods
virtual void cd(Int_t idiv) {fCurrent=idiv;}
virtual TGeoNode *FindNode(Double_t *point);
virtual Int_t GetDivAxis() {return 2;}
virtual void SavePrimitive(ofstream &out, Option_t *option);
ClassDef(TGeoPatternSphTheta, 1) // spherical theta division pattern
......@@ -380,6 +395,7 @@ public:
// methods
virtual void cd(Int_t idiv) {fCurrent=idiv;}
virtual TGeoNode *FindNode(Double_t *point);
virtual Int_t GetDivAxis() {return 3;}
virtual void SavePrimitive(ofstream &out, Option_t *option);
ClassDef(TGeoPatternSphPhi, 1) // Spherical phi division pattern
......
// @(#)root/geom:$Name: $:$Id: TGeoPatternFinder.cxx,v 1.15 2006/05/23 04:47:37 brun Exp $
// @(#)root/geom:$Name: $:$Id: TGeoPatternFinder.cxx,v 1.16 2006/05/24 17:11:54 brun Exp $
// Author: Andrei Gheata 30/10/01
/*************************************************************************
......@@ -158,6 +158,26 @@ TGeoNode *TGeoPatternX::FindNode(Double_t *point)
return node;
}
//______________________________________________________________________________
Double_t TGeoPatternX::FindNextBoundary(Double_t *point, Double_t *dir, Int_t &indnext)
{
// Compute distance to next division layer returning the index of next section.
// Point is in the frame of the divided volume.
indnext = -1;
Double_t dist = TGeoShape::Big();
if (TMath::Abs(dir[0])<TGeoShape::Tolerance()) return dist;
if (fCurrent<0) {
Error("FindNextBoundary", "Must call FindNode first");
return dist;
}
Int_t inc = (dir[0]>0)?1:0;
dist = (fStep*(fCurrent+inc)-point[0])/dir[0];
if (dist<0.) Error("FindNextBoundary", "Negative distance d=%g",dist);
if (!inc) inc = -1;
indnext = fCurrent+inc;
return dist;
}
//______________________________________________________________________________
void TGeoPatternX::SavePrimitive(ofstream &out, Option_t * /*option*/)
{
......@@ -229,6 +249,26 @@ TGeoNode *TGeoPatternY::FindNode(Double_t *point)
return node;
}
//______________________________________________________________________________
Double_t TGeoPatternY::FindNextBoundary(Double_t *point, Double_t *dir, Int_t &indnext)
{
// Compute distance to next division layer returning the index of next section.
// Point is in the frame of the divided volume.
indnext = -1;
Double_t dist = TGeoShape::Big();
if (TMath::Abs(dir[1])<TGeoShape::Tolerance()) return dist;
if (fCurrent<0) {
Error("FindNextBoundary", "Must call FindNode first");
return dist;
}
Int_t inc = (dir[1]>0)?1:0;
dist = (fStep*(fCurrent+inc)-point[1])/dir[1];
if (dist<0.) Error("FindNextBoundary", "Negative distance d=%g",dist);
if (!inc) inc = -1;
indnext = fCurrent+inc;
return dist;
}
//______________________________________________________________________________
void TGeoPatternY::SavePrimitive(ofstream &out, Option_t * /*option*/)
{
......@@ -301,6 +341,26 @@ TGeoNode *TGeoPatternZ::FindNode(Double_t *point)
}
//______________________________________________________________________________
Double_t TGeoPatternZ::FindNextBoundary(Double_t *point, Double_t *dir, Int_t &indnext)
{
// Compute distance to next division layer returning the index of next section.
// Point is in the frame of the divided volume.
indnext = -1;
Double_t dist = TGeoShape::Big();
if (TMath::Abs(dir[2])<TGeoShape::Tolerance()) return dist;
if (fCurrent<0) {
Error("FindNextBoundary", "Must call FindNode first");
return dist;
}
Int_t inc = (dir[2]>0)?1:0;
dist = (fStep*(fCurrent+inc)-point[2])/dir[2];
if (dist<0.) Error("FindNextBoundary", "Negative distance d=%g",dist);
if (!inc) inc = -1;
indnext = fCurrent+inc;
return dist;
}
//______________________________________________________________________________
void TGeoPatternZ::SavePrimitive(ofstream &out, Option_t * /*option*/)
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment