ATLAS Offline Software
Public Member Functions | Private Member Functions | Private Attributes | List of all members
SoVisualizeAction Class Reference

#include <SoVisualizeAction.h>

Inheritance diagram for SoVisualizeAction:
Collaboration diagram for SoVisualizeAction:

Public Member Functions

 SoVisualizeAction ()
 
virtual ~SoVisualizeAction ()
 
virtual void handleShape (const GeoShape *subtract)
 
virtual void handleBox (const GeoBox *box)
 
virtual void handleCons (const GeoCons *cons)
 
virtual void handlePcon (const GeoPcon *pcon)
 
virtual void handleTrap (const GeoTrap *trap)
 
virtual void handleTrd (const GeoTrd *trd)
 
virtual void handleTube (const GeoTube *tube)
 
virtual void handleTubs (const GeoTubs *tubs)
 
virtual void handleSimplePolygonBrep (const GeoSimplePolygonBrep *)
 
virtual void handleTessellatedSolid (const GeoTessellatedSolid *)
 
virtual void handleGenericTrap (const GeoGenericTrap *)
 
SoShape * getShape ()
 
void reset ()
 

Private Member Functions

 SoVisualizeAction (const SoVisualizeAction &)
 
const SoVisualizeActionoperator= (const SoVisualizeAction &)
 

Private Attributes

SoShape * m_shape
 

Detailed Description

Definition at line 19 of file SoVisualizeAction.h.

Constructor & Destructor Documentation

◆ SoVisualizeAction() [1/2]

SoVisualizeAction::SoVisualizeAction ( )

Definition at line 40 of file SoVisualizeAction.cxx.

41  : m_shape(0)
42 {
44  setDepthLimit(0);
45 }

◆ ~SoVisualizeAction()

SoVisualizeAction::~SoVisualizeAction ( )
virtual

Definition at line 47 of file SoVisualizeAction.cxx.

48 {
49  // Don't delete. Let ref count take care of the memory.
50 }

◆ SoVisualizeAction() [2/2]

SoVisualizeAction::SoVisualizeAction ( const SoVisualizeAction )
private

Member Function Documentation

◆ getShape()

SoShape* SoVisualizeAction::getShape ( )
inline

Definition at line 49 of file SoVisualizeAction.h.

49 { return m_shape; }

◆ handleBox()

void SoVisualizeAction::handleBox ( const GeoBox *  box)
virtual

Definition at line 146 of file SoVisualizeAction.cxx.

147 {
148  //qDebug() << "SoVisualizeAction::handleBox";
149  SoGenericBox * gb = new SoGenericBox;
150  gb->setParametersForBox( box->getXHalfLength(),box->getYHalfLength(),box->getZHalfLength() );
151  m_shape=gb;
152 }

◆ handleCons()

void SoVisualizeAction::handleCons ( const GeoCons *  cons)
virtual

Definition at line 154 of file SoVisualizeAction.cxx.

155 {
156  //qDebug() << "SoVisualizeAction::handleCons";
158  SoCons *socons= new SoCons;
159  socons->fRmin1 =cons->getRMin1();
160  socons->fRmin2 =cons->getRMin2();
161  socons->fRmax1 =cons->getRMax1();
162  socons->fRmax2 =cons->getRMax2();
163  socons->fDz =cons->getDZ();
164  socons->fSPhi =cons->getSPhi();
165  socons->fDPhi =cons->getDPhi();
166 
167  m_shape=socons;
168 }

◆ handleGenericTrap()

void SoVisualizeAction::handleGenericTrap ( const GeoGenericTrap *  gentrap)
virtual

Definition at line 311 of file SoVisualizeAction.cxx.

312 {
313  //qDebug() << "SoVisualizeAction::handleGenericTrap";
314  SoGenericBox * gb = new SoGenericBox;
315  const GeoGenericTrapVertices& trapVertices = gentrap->getVertices();
316  double dZ = gentrap->getZHalfLength();
317  gb->setGenericParameters(trapVertices[0].x(),trapVertices[0].y(),-dZ,
318  trapVertices[1].x(),trapVertices[1].y(),-dZ,
319  trapVertices[2].x(),trapVertices[2].y(),-dZ,
320  trapVertices[3].x(),trapVertices[3].y(),-dZ,
321  trapVertices[4].x(),trapVertices[4].y(),dZ,
322  trapVertices[5].x(),trapVertices[5].y(),dZ,
323  trapVertices[6].x(),trapVertices[6].y(),dZ,
324  trapVertices[7].x(),trapVertices[7].y(),dZ);
325  m_shape=gb;
326 }

◆ handlePcon()

void SoVisualizeAction::handlePcon ( const GeoPcon *  pcon)
virtual

Definition at line 170 of file SoVisualizeAction.cxx.

171 {
172 
173  //qDebug() << "SoVisualizeAction::handlePcon";
174 
175  //Set up temporary data arrays for profile:
176  float *z = new float[pcon->getNPlanes()];
177  float *rmn= new float[pcon->getNPlanes()];
178  float *rmx= new float[pcon->getNPlanes()];
179 
180  for (unsigned s=0;s<pcon->getNPlanes();++s) {
181  z[s]=pcon->getZPlane(s);
182  rmn[s]=pcon->getRMinPlane(s);
183  rmx[s]=pcon->getRMaxPlane(s);
184  }
185 
187  SoPcons *sopcons = new SoPcons();
188  sopcons->fSPhi = pcon->getSPhi();
189  sopcons->fDPhi = pcon->getDPhi();
190  sopcons->fRmin.setValues(0,pcon->getNPlanes(),rmn);
191  sopcons->fRmax.setValues(0,pcon->getNPlanes(),rmx);
192  sopcons->fDz.setValues (0,pcon->getNPlanes(),z);
193 
194  //Delete temporary arrays:
195  delete [] z;
196  delete [] rmn;
197  delete [] rmx;
198 
199  m_shape=sopcons;
200 
201 }

◆ handleShape()

void SoVisualizeAction::handleShape ( const GeoShape *  subtract)
virtual

Definition at line 52 of file SoVisualizeAction.cxx.

53 {
54 #ifndef BUILDVP1LIGHT
55  const GeoUnidentifiedShape* custom = dynamic_cast< const GeoUnidentifiedShape* >( shape );
56  if( custom) {
57  std::string customName = custom->name();
58  static const double eta_hi = 3.2;
59  static const double eta_mid = 2.5;
60  static const double eta_low = 1.375;
61 
62  static const double dMechFocaltoWRP = 3691. *SYSTEM_OF_UNITS::mm; //=endg_z1
63  static const double dWRPtoFrontFace = 11. *SYSTEM_OF_UNITS::mm;
64  static const double rOuterCutoff = 2034. *SYSTEM_OF_UNITS::mm; //=endg_rlimit
65  static const double activeLength = 510*SYSTEM_OF_UNITS::mm;
66  static const double straightStartSection = 2*SYSTEM_OF_UNITS::mm;
67  static const double wheelThickness = activeLength+2*straightStartSection;
68 
70  SoLAr *solar = new SoLAr();
71  if (customName.find("Inner")!=std::string::npos) {
72  float zPlane[2],rInner[2],rOuter[2];
73  zPlane[0]=0;
74  zPlane[1]=wheelThickness;
75 
76  double tanThetaInner = 2. * exp(-eta_hi ) / (1. - exp(2.*-eta_hi ));
77  double tanThetaMid = 2. * exp(-eta_mid) / (1. - exp(2.*-eta_mid));
78  double zWheelFrontFace = dMechFocaltoWRP + dWRPtoFrontFace;
79  double zWheelBackFace = zWheelFrontFace + wheelThickness;
80  rInner[0] = zWheelFrontFace * tanThetaInner;
81  rInner[1] = zWheelBackFace * tanThetaInner;
82  // Note that there is a 3mm gap between the outer surface of the
83  // inner wheel and the inner surface of the outer wheel.
84  double HalfGapBetweenWheels = 0.15*SYSTEM_OF_UNITS::cm; // In DB EMECGEOMETRY.DCRACK
85  rOuter[0] = zWheelFrontFace * tanThetaMid - HalfGapBetweenWheels;
86  rOuter[1] = zWheelBackFace * tanThetaMid - HalfGapBetweenWheels;
87  solar->fRmin.setValues(0,2,rInner);
88  solar->fRmax.setValues(0,2,rOuter);
89  solar->fDz.setValues (0,2,zPlane);
90  }
91  else if (customName.find("Outer")!=std::string::npos) {
92  float zPlane[3], rInner[3], rOuter[3];
93  zPlane[0] = 0;
94  zPlane[2] = wheelThickness;
95  double tanThetaMid = 2. * exp(-eta_mid) / (1. - exp(2.*-eta_mid));
96  double tanThetaOuter = 2. * exp(-eta_low) / (1. - exp(2.*-eta_low));
97  double zWheelFrontFace = dMechFocaltoWRP + dWRPtoFrontFace;
98  double zWheelBackFace = zWheelFrontFace + wheelThickness;
99  // Note that there is a 3mm gap between the outer surface of the
100  // inner wheel and the inner surface of the outer wheel.
101  double HalfGapBetweenWheels = 0.15*SYSTEM_OF_UNITS::cm; // In DB! (EMECGEOMETRY.DCRACK);
102  rInner[0] = zWheelFrontFace * tanThetaMid + HalfGapBetweenWheels;
103  rInner[2] = zWheelBackFace * tanThetaMid + HalfGapBetweenWheels;
104  rOuter[0] = zWheelFrontFace * tanThetaOuter;
105  rOuter[2] = zWheelBackFace * tanThetaOuter;
106  // If we simply left it at that, the outer wheel would protrude
107  // beyond the edge of the cryostat. We have to "slice off" the lip
108  // of the outer wheel to create a shape that's roughtly like a
109  // bathtub plug.
110  // Use the endpoints of the outer arrays to define lines in the
111  // (z,r) plane.
112  double slopeMin = (rInner[2] - rInner[0]) / (zPlane[2] - zPlane[0]);
113  double slopeMax = (rOuter[2] - rOuter[0]) / (zPlane[2] - zPlane[0]);
114  double interceptMin = rInner[0] - slopeMin * zPlane[0];
115  double interceptMax = rOuter[0] - slopeMax * zPlane[0];
116  // At what value of z does the outer line hit the cutoff?
117  zPlane[1] = (rOuterCutoff - interceptMax) / slopeMax;
118  // Calculate the radii at this z:
119  rInner[1] = slopeMin * zPlane[1] + interceptMin;
120  rOuter[1] = rOuterCutoff;
121  // Now override the radius to keep the wheel inside the cryostat:
122  rOuter[2] = rOuterCutoff;
123  solar->fRmin.setValues(0,3,rInner);
124  solar->fRmax.setValues(0,3,rOuter);
125  solar->fDz.setValues (0,3,zPlane);
126  }
127 
128  solar->fSPhi= 0;
129  solar->fDPhi= 2*M_PI;
130  m_shape=solar;
131  } else {
132 #endif // not BUILDVP1LIGHT
133  // We don't recognize it. Try to polyhedrize it!
135  shape->exec(&a);
136  const SbPolyhedron *poly =a.getPolyhedron();
137  if (poly) {
138  SoPolyhedron *myPoly = new SoPolyhedron(poly);
139  m_shape=myPoly;
140  }
141 #ifndef BUILDVP1LIGHT
142  }
143 #endif // not BUILDVP1LIGHT
144 }

◆ handleSimplePolygonBrep()

void SoVisualizeAction::handleSimplePolygonBrep ( const GeoSimplePolygonBrep *  brep)
virtual

Definition at line 248 of file SoVisualizeAction.cxx.

249 {
250  //qDebug() << "SoVisualizeAction::handleSimplePolygonBrep";
251  //Fixme: Detect if order of vertices is the wrong way around... and reorder if necessary.
252 
253  double dz = brep->getDZ();
254  std::vector<double> x, y;
255  for(unsigned int i=0; i<brep->getNVertices(); ++i)
256  {
257  x.push_back(brep->getXVertex(i));
258  y.push_back(brep->getYVertex(i));
259  }
260 
261  SbPolyhedronPolygonXSect sbPoly(x,y,dz);
262  SoPolyhedron* soPoly = new SoPolyhedron(sbPoly);
263  m_shape = soPoly;
264 }

◆ handleTessellatedSolid()

void SoVisualizeAction::handleTessellatedSolid ( const GeoTessellatedSolid *  geoTessellated)
virtual

Definition at line 266 of file SoVisualizeAction.cxx.

267 {
268  //qDebug() << "SoVisualizeAction::handleTessellatedSolid";
269 
270  SoTessellated * soTessellated = new SoTessellated;
271  for(size_t i=0; i<geoTessellated->getNumberOfFacets();++i) {
272  GeoFacet* facet = geoTessellated->getFacet(i);
273  if(facet->getNumberOfVertices()==3) {
274  if(facet->getVertexType()==GeoFacet::ABSOLUTE)
275  soTessellated->addTriangularFacet(facet->getVertex(0).x(),facet->getVertex(0).y(),facet->getVertex(0).z(),
276  facet->getVertex(1).x(),facet->getVertex(1).y(),facet->getVertex(1).z(),
277  facet->getVertex(2).x(),facet->getVertex(2).y(),facet->getVertex(2).z());
278  else
279  soTessellated->addTriangularFacet(facet->getVertex(0).x(),facet->getVertex(0).y(),facet->getVertex(0).z(),
280  facet->getVertex(0).x()+facet->getVertex(1).x(),
281  facet->getVertex(0).y()+facet->getVertex(1).y(),
282  facet->getVertex(0).z()+facet->getVertex(1).z(),
283  facet->getVertex(0).x()+facet->getVertex(2).x(),
284  facet->getVertex(0).y()+facet->getVertex(2).y(),
285  facet->getVertex(0).z()+facet->getVertex(2).z());
286  }
287  else {
288  if(facet->getVertexType()==GeoFacet::ABSOLUTE)
289  soTessellated->addQuadrangularFacet(facet->getVertex(0).x(),facet->getVertex(0).y(),facet->getVertex(0).z(),
290  facet->getVertex(1).x(),facet->getVertex(1).y(),facet->getVertex(1).z(),
291  facet->getVertex(2).x(),facet->getVertex(2).y(),facet->getVertex(2).z(),
292  facet->getVertex(3).x(),facet->getVertex(3).y(),facet->getVertex(3).z());
293  else
294  soTessellated->addQuadrangularFacet(facet->getVertex(0).x(),facet->getVertex(0).y(),facet->getVertex(0).z(),
295  facet->getVertex(0).x()+facet->getVertex(1).x(),
296  facet->getVertex(0).y()+facet->getVertex(1).y(),
297  facet->getVertex(0).z()+facet->getVertex(1).z(),
298  facet->getVertex(0).x()+facet->getVertex(2).x(),
299  facet->getVertex(0).y()+facet->getVertex(2).y(),
300  facet->getVertex(0).z()+facet->getVertex(2).z(),
301  facet->getVertex(0).x()+facet->getVertex(3).x(),
302  facet->getVertex(0).y()+facet->getVertex(3).y(),
303  facet->getVertex(0).z()+facet->getVertex(3).z());
304 
305  }
306  }
307  soTessellated->finalize();
308  m_shape=soTessellated;
309 }

◆ handleTrap()

void SoVisualizeAction::handleTrap ( const GeoTrap *  trap)
virtual

Definition at line 203 of file SoVisualizeAction.cxx.

204 {
205  //qDebug() << "SoVisualizeAction::handleTrap";
206  SoGenericBox * gb = new SoGenericBox;
207  gb->setParametersForTrapezoid(trap->getZHalfLength(), trap->getTheta(), trap->getPhi(),
208  trap->getDydzn(), trap->getDxdyndzn(), trap->getDxdypdzn(),
209  trap->getDydzp(), trap->getDxdyndzp(), trap->getDxdypdzp(),
210  trap->getAngleydzn(), trap->getAngleydzp());
211  m_shape=gb;
212 }

◆ handleTrd()

void SoVisualizeAction::handleTrd ( const GeoTrd *  trd)
virtual

Definition at line 214 of file SoVisualizeAction.cxx.

215 {
216  //qDebug() << "SoVisualizeAction::handleTrd";
217  SoGenericBox * gb = new SoGenericBox;
218  gb->setParametersForTrd( trd->getXHalfLength1(), trd->getXHalfLength2(),
219  trd->getYHalfLength1(), trd->getYHalfLength2(),
220  trd->getZHalfLength() );
221  m_shape=gb;
222 }

◆ handleTube()

void SoVisualizeAction::handleTube ( const GeoTube *  tube)
virtual

Definition at line 224 of file SoVisualizeAction.cxx.

225 {
226  //qDebug() << "SoVisualizeAction::handleTube";
227  SoTubs *sotubs= new SoTubs;
228  sotubs->pRMin= tube->getRMin();
229  sotubs->pRMax= tube->getRMax();
230  sotubs->pDz = tube->getZHalfLength();
231  sotubs->pSPhi= 0;
232  sotubs->pDPhi= 2*M_PI;
233  m_shape=sotubs;
234 }

◆ handleTubs()

void SoVisualizeAction::handleTubs ( const GeoTubs *  tubs)
virtual

Definition at line 236 of file SoVisualizeAction.cxx.

237 {
238  //qDebug() << "SoVisualizeAction::handleTubs";
239  SoTubs *sotubs= new SoTubs;
240  sotubs->pRMin= tubs->getRMin();
241  sotubs->pRMax= tubs->getRMax();
242  sotubs->pDz = tubs->getZHalfLength();
243  sotubs->pSPhi= tubs->getSPhi();
244  sotubs->pDPhi= tubs->getDPhi();
245  m_shape=sotubs;
246 }

◆ operator=()

const SoVisualizeAction& SoVisualizeAction::operator= ( const SoVisualizeAction )
private

◆ reset()

void SoVisualizeAction::reset ( )
inline

Definition at line 50 of file SoVisualizeAction.h.

50 { m_shape = 0; }

Member Data Documentation

◆ m_shape

SoShape* SoVisualizeAction::m_shape
private

Definition at line 57 of file SoVisualizeAction.h.


The documentation for this class was generated from the following files:
SoVisualizeAction::m_shape
SoShape * m_shape
Definition: SoVisualizeAction.h:57
SoCons::fDz
SoSFFloat fDz
Half-length along Z.
Definition: SoCons.h:76
SoGenericBox::setParametersForTrapezoid
void setParametersForTrapezoid(float dz, float theta, float phi, float dy1, float dx1, float dx2, float dy2, float dx3, float dx4, float alp1, float alp2)
Definition: SoGenericBox.cxx:293
SoCons::fRmax2
SoSFFloat fRmax2
Outside radius at +fDz.
Definition: SoCons.h:72
SbPolyhedron
Definition: SbPolyhedron.h:231
SoLAr
SoLAr - Inventor version of the G4Cons Geant Geometry entity.
Definition: SoLAr.h:36
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
SoPcons
SoPcons - Inventor version of the G4Cons Geant Geometry entity.
Definition: SoPcons.h:39
SoTessellated::finalize
void finalize()
Definition: SoTessellated.cxx:81
SoTubs
SoTubs - Inventor version of the G4Tubs Geant Geometry entity.
Definition: SoTubs.h:50
SoCons::fDPhi
SoSFFloat fDPhi
Delta-angle, in radians.
Definition: SoCons.h:84
SoCons::fSPhi
SoSFFloat fSPhi
Starting angle, in radians.
Definition: SoCons.h:80
M_PI
#define M_PI
Definition: ActiveFraction.h:11
SoLAr::fRmax
SoMFFloat fRmax
Outside radii.
Definition: SoLAr.h:50
SoPcons::fSPhi
SoSFFloat fSPhi
Starting angle, in radians.
Definition: SoPcons.h:61
SbPolyhedrizeAction
Definition: SbPolyhedrizeAction.h:18
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
x
#define x
SoPcons::fDz
SoMFFloat fDz
Z Positions.
Definition: SoPcons.h:57
VP1HEPVisUtils::initAllCustomClasses
static void initAllCustomClasses()
Definition: VP1HEPVisUtils.cxx:317
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
SoTessellated::addQuadrangularFacet
void addQuadrangularFacet(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, double x4, double y4, double z4)
Definition: SoTessellated.cxx:71
MuonCalib::Legendre::poly
constexpr double poly(const double x)
Definition: LegendrePoly.h:116
SoCons::fRmin1
SoSFFloat fRmin1
Inside radius at -fDz.
Definition: SoCons.h:60
SoPcons::fRmax
SoMFFloat fRmax
Outside radii.
Definition: SoPcons.h:53
SoTessellated
Definition: SoTessellated.h:24
lumiFormat.i
int i
Definition: lumiFormat.py:85
z
#define z
SoPcons::initClass
static void initClass()
Class Initializer, required.
Definition: SoPcons.cxx:72
SoPcons::fRmin
SoMFFloat fRmin
Inside radii.
Definition: SoPcons.h:49
SoGenericBox::setParametersForBox
void setParametersForBox(float dx, float dy, float dz, float xcenter=0.0, float ycenter=0.0, float zcenter=0.0)
Definition: SoGenericBox.cxx:179
SoLAr::fDz
SoMFFloat fDz
Z Positions.
Definition: SoLAr.h:54
SoGenericBox::setGenericParameters
void setGenericParameters(float x0, float y0, float z0, float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4, float x5, float y5, float z5, float x6, float y6, float z6, float x7, float y7, float z7)
Definition: SoGenericBox.cxx:353
SoTubs::pDPhi
SoSFFloat pDPhi
Delta-angle, in radians.
Definition: SoTubs.h:76
SoLAr::fSPhi
SoSFFloat fSPhi
Starting angle, in radians.
Definition: SoLAr.h:58
SoLAr::fDPhi
SoSFFloat fDPhi
Delta-angle, in radians.
Definition: SoLAr.h:62
SoPcons::fDPhi
SoSFFloat fDPhi
Delta-angle, in radians.
Definition: SoPcons.h:65
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
a
TList * a
Definition: liststreamerinfos.cxx:10
y
#define y
SoGenericBox
Definition: SoGenericBox.h:26
SoTessellated::addTriangularFacet
void addTriangularFacet(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3)
Definition: SoTessellated.cxx:43
SoCons::initClass
static void initClass()
Class Initializer, required.
Definition: SoCons.cxx:63
SoCons
SoCons - Inventor version of the G4Cons Geant Geometry entity.
Definition: SoCons.h:50
SoPolyhedron
SoPolyhedron is an Inventor encapsulation of the HepPolyedron class written by E.Chernyaev.
Definition: SoPolyhedron.h:47
SoTubs::pDz
SoSFFloat pDz
Half-length in Z.
Definition: SoTubs.h:68
calibdata.tube
tube
Definition: calibdata.py:31
SoLAr::fRmin
SoMFFloat fRmin
Inside radii.
Definition: SoLAr.h:46
SoTubs::pRMin
SoSFFloat pRMin
Inside radius of the tube.
Definition: SoTubs.h:60
SoTubs::pRMax
SoSFFloat pRMax
Outside radius of the tube.
Definition: SoTubs.h:64
SoTubs::pSPhi
SoSFFloat pSPhi
Starting angle, in radians.
Definition: SoTubs.h:72
SoLAr::initClass
static void initClass()
Class Initializer, required.
Definition: SoLAr.cxx:66
SoCons::fRmax1
SoSFFloat fRmax1
Outside radius at -fDz.
Definition: SoCons.h:68
SbPolyhedronPolygonXSect
Definition: SbPolyhedron.h:534
SoCons::fRmin2
SoSFFloat fRmin2
Inside radius at +fDz.
Definition: SoCons.h:64
SoGenericBox::setParametersForTrd
void setParametersForTrd(float dx1, float dx2, float dy1, float dy2, float dz)
Definition: SoGenericBox.cxx:276