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 147 of file SoVisualizeAction.cxx.

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

◆ handleCons()

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

Definition at line 155 of file SoVisualizeAction.cxx.

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

◆ handleGenericTrap()

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

Definition at line 312 of file SoVisualizeAction.cxx.

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

◆ handlePcon()

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

Definition at line 171 of file SoVisualizeAction.cxx.

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

◆ 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 takes ownership of poly
139  SoPolyhedron *myPoly = new SoPolyhedron(poly);
140  m_shape=myPoly;
141  }
142 #ifndef BUILDVP1LIGHT
143  }
144 #endif // not BUILDVP1LIGHT
145 }

◆ handleSimplePolygonBrep()

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

Definition at line 249 of file SoVisualizeAction.cxx.

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

◆ handleTessellatedSolid()

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

Definition at line 267 of file SoVisualizeAction.cxx.

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

◆ handleTrap()

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

Definition at line 204 of file SoVisualizeAction.cxx.

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

◆ handleTrd()

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

Definition at line 215 of file SoVisualizeAction.cxx.

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

◆ handleTube()

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

Definition at line 225 of file SoVisualizeAction.cxx.

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

◆ handleTubs()

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

Definition at line 237 of file SoVisualizeAction.cxx.

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

◆ 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:79
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:75
SbPolyhedron
Definition: SbPolyhedron.h:231
SoLAr
SoLAr - Inventor version of the G4Cons Geant Geometry entity.
Definition: SoLAr.h:39
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
SoPcons
SoPcons - Inventor version of the G4Cons Geant Geometry entity.
Definition: SoPcons.h:42
SoTessellated::finalize
void finalize()
Definition: SoTessellated.cxx:81
SoTubs
SoTubs - Inventor version of the G4Tubs Geant Geometry entity.
Definition: SoTubs.h:52
SoCons::fDPhi
SoSFFloat fDPhi
Delta-angle, in radians.
Definition: SoCons.h:87
SoCons::fSPhi
SoSFFloat fSPhi
Starting angle, in radians.
Definition: SoCons.h:83
M_PI
#define M_PI
Definition: ActiveFraction.h:11
SoLAr::fRmax
SoMFFloat fRmax
Outside radii.
Definition: SoLAr.h:53
SoPcons::fSPhi
SoSFFloat fSPhi
Starting angle, in radians.
Definition: SoPcons.h:64
SbPolyhedrizeAction
Definition: SbPolyhedrizeAction.h:19
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
x
#define x
SoPcons::fDz
SoMFFloat fDz
Z Positions.
Definition: SoPcons.h:60
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:63
SoPcons::fRmax
SoMFFloat fRmax
Outside radii.
Definition: SoPcons.h:56
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:67
SoPcons::fRmin
SoMFFloat fRmin
Inside radii.
Definition: SoPcons.h:52
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:57
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:78
SoLAr::fSPhi
SoSFFloat fSPhi
Starting angle, in radians.
Definition: SoLAr.h:61
SoLAr::fDPhi
SoSFFloat fDPhi
Delta-angle, in radians.
Definition: SoLAr.h:65
SoPcons::fDPhi
SoSFFloat fDPhi
Delta-angle, in radians.
Definition: SoPcons.h:68
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:59
SoCons
SoCons - Inventor version of the G4Cons Geant Geometry entity.
Definition: SoCons.h:53
SoPolyhedron
SoPolyhedron is an Inventor encapsulation of the HepPolyedron class written by E.Chernyaev.
Definition: SoPolyhedron.h:49
SoTubs::pDz
SoSFFloat pDz
Half-length in Z.
Definition: SoTubs.h:70
calibdata.tube
tube
Definition: calibdata.py:31
SoLAr::fRmin
SoMFFloat fRmin
Inside radii.
Definition: SoLAr.h:49
SoTubs::pRMin
SoSFFloat pRMin
Inside radius of the tube.
Definition: SoTubs.h:62
SoTubs::pRMax
SoSFFloat pRMax
Outside radius of the tube.
Definition: SoTubs.h:66
SoTubs::pSPhi
SoSFFloat pSPhi
Starting angle, in radians.
Definition: SoTubs.h:74
SoLAr::initClass
static void initClass()
Class Initializer, required.
Definition: SoLAr.cxx:62
SoCons::fRmax1
SoSFFloat fRmax1
Outside radius at -fDz.
Definition: SoCons.h:71
SbPolyhedronPolygonXSect
Definition: SbPolyhedron.h:534
SoCons::fRmin2
SoSFFloat fRmin2
Inside radius at +fDz.
Definition: SoCons.h:67
SoGenericBox::setParametersForTrd
void setParametersForTrd(float dx1, float dx2, float dy1, float dy2, float dz)
Definition: SoGenericBox.cxx:276