ATLAS Offline Software
Loading...
Searching...
No Matches
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}
static void initAllCustomClasses()

◆ ~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 50 of file SoVisualizeAction.h.

50{ 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}
void setParametersForBox(float dx, float dy, float dz, float xcenter=0.0, float ycenter=0.0, float zcenter=0.0)

◆ 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}
SoSFFloat fDPhi
Delta-angle, in radians.
Definition SoCons.h:87
static void initClass()
Class Initializer, required.
Definition SoCons.cxx:59
SoSFFloat fSPhi
Starting angle, in radians.
Definition SoCons.h:83
SoSFFloat fRmax2
Outside radius at +fDz.
Definition SoCons.h:75
SoSFFloat fRmax1
Outside radius at -fDz.
Definition SoCons.h:71
SoSFFloat fRmin1
Inside radius at -fDz.
Definition SoCons.h:63
SoSFFloat fRmin2
Inside radius at +fDz.
Definition SoCons.h:67
SoSFFloat fDz
Half-length along Z.
Definition SoCons.h:79

◆ 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}
#define y
#define x
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)

◆ 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}
#define z
SoMFFloat fRmax
Outside radii.
Definition SoPcons.h:56
SoSFFloat fDPhi
Delta-angle, in radians.
Definition SoPcons.h:68
SoSFFloat fSPhi
Starting angle, in radians.
Definition SoPcons.h:64
SoMFFloat fRmin
Inside radii.
Definition SoPcons.h:52
static void initClass()
Class Initializer, required.
Definition SoPcons.cxx:67
SoMFFloat fDz
Z Positions.
Definition SoPcons.h:60

◆ 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!
134 SbPolyhedrizeAction a;
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}
#define M_PI
static Double_t a
SoMFFloat fDz
Z Positions.
Definition SoLAr.h:57
SoSFFloat fSPhi
Starting angle, in radians.
Definition SoLAr.h:61
SoMFFloat fRmin
Inside radii.
Definition SoLAr.h:49
SoSFFloat fDPhi
Delta-angle, in radians.
Definition SoLAr.h:65
SoMFFloat fRmax
Outside radii.
Definition SoLAr.h:53
static void initClass()
Class Initializer, required.
Definition SoLAr.cxx:62

◆ 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}
void addTriangularFacet(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3)
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)

◆ 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}
void setParametersForTrapezoid(float dz, float theta, float phi, float dy1, float dx1, float dx2, float dy2, float dx3, float dx4, float alp1, float alp2)

◆ 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}
void setParametersForTrd(float dx1, float dx2, float dy1, float dy2, float dz)

◆ 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}
SoSFFloat pDz
Half-length in Z.
Definition SoTubs.h:70
SoSFFloat pDPhi
Delta-angle, in radians.
Definition SoTubs.h:78
SoSFFloat pSPhi
Starting angle, in radians.
Definition SoTubs.h:74
SoSFFloat pRMin
Inside radius of the tube.
Definition SoTubs.h:62
SoSFFloat pRMax
Outside radius of the tube.
Definition SoTubs.h:66

◆ 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 51 of file SoVisualizeAction.h.

51{ m_shape = 0; }

Member Data Documentation

◆ m_shape

SoShape* SoVisualizeAction::m_shape
private

Definition at line 58 of file SoVisualizeAction.h.


The documentation for this class was generated from the following files: