10#include <Inventor/nodes/SoMaterial.h>
11#include <Inventor/nodes/SoSeparator.h>
12#include <Inventor/nodes/SoTranslation.h>
13#include <Inventor/nodes/SoPickStyle.h>
17 SoSeparator * attachsep,
31 mat, attachsep, parent,sys );
36 SoSeparator * attachsep,
50 mat, attachsep, parent,sys );
55 SoSeparator * attachsep,
69 mat, attachsep, parent,sys );
111 InDetProjFlags::InDetProjPartsFlags
parts;
156 double barrel_inner_radius,
157 double barrel_outer_radius,
158 double barrel_posneg_z,
159 double endcap_surface_z,
160 double endcap_surface_length,
161 double endcap_inner_radius,
162 double endcap_outer_radius,
163 double endcap_zasr_disttobarrelcyl,
164 double endcap_zasr_squeezefact,
165 SoMaterial* mat, SoSeparator * attachsep, QObject * parent,
IVP1System*sys)
170 m_d->material->ref();
172 m_d->barrelcylshape = 0;
173 m_d->endcapinnershape = 0;
174 m_d->endcapoutershape = 0;
175 m_d->endcapzasrcylshape = 0;
176 m_d->sep_barrel_central = 0;
177 m_d->sep_barrel_pos = 0;
178 m_d->sep_barrel_neg = 0;
179 m_d->sep_endcap_inner_pos = 0;
180 m_d->sep_endcap_outer_pos = 0;
181 m_d->sep_endcap_inner_neg = 0;
182 m_d->sep_endcap_outer_neg = 0;
183 m_d->sep_endcap_zasr_central = 0;
184 m_d->sep_endcap_zasr_pos = 0;
185 m_d->sep_endcap_zasr_neg = 0;
187 m_d->surfacethickness = surfacethickness;
188 m_d->barrel_inner_radius = barrel_inner_radius;
189 m_d->barrel_outer_radius = barrel_outer_radius;
190 m_d->barrel_posneg_z = barrel_posneg_z;
191 m_d->endcap_surface_z = endcap_surface_z;
192 m_d->endcap_surface_length = endcap_surface_length;
193 m_d->endcap_inner_radius = endcap_inner_radius;
194 m_d->endcap_outer_radius = endcap_outer_radius;
195 m_d->endcap_zasr_disttobarrelcyl = endcap_zasr_disttobarrelcyl;
196 m_d->endcap_zasr_squeezefact = endcap_zasr_squeezefact;
208 <<
m_d->barrelcylshape
209 <<
m_d->endcapinnershape
210 <<
m_d->endcapoutershape
211 <<
m_d->endcapzasrcylshape
212 <<
m_d->sep_barrel_central
213 <<
m_d->sep_barrel_pos
214 <<
m_d->sep_barrel_neg
215 <<
m_d->sep_endcap_inner_pos
216 <<
m_d->sep_endcap_outer_pos
217 <<
m_d->sep_endcap_inner_neg
218 <<
m_d->sep_endcap_outer_neg
219 <<
m_d->sep_endcap_zasr_central
220 <<
m_d->sep_endcap_zasr_pos
221 <<
m_d->sep_endcap_zasr_neg;
243 if (
m_d->parts==newparts)
246 InDetProjFlags::InDetProjPartsFlags changedparts(
m_d->parts ^ newparts);
247 m_d->parts = newparts;
248 bool save =
m_d->attachsep->enableNotify(
false);
254 if (!
m_d->sep_barrel_pos)
255 m_d->initPartsSep(
m_d->barrel_posneg_z,
m_d->sep_barrel_pos,
m_d->barrelCylShape());
256 m_d->ensureAttached(
m_d->sep_barrel_pos);
258 m_d->ensureDetached(
m_d->sep_barrel_pos);
263 if (!
m_d->sep_barrel_neg)
264 m_d->initPartsSep(-
m_d->barrel_posneg_z,
m_d->sep_barrel_neg,
m_d->barrelCylShape());
265 m_d->ensureAttached(
m_d->sep_barrel_neg);
267 m_d->ensureDetached(
m_d->sep_barrel_neg);
272 if (!
m_d->sep_barrel_central)
273 m_d->initPartsSep(0.0,
m_d->sep_barrel_central,
m_d->barrelCylShape());
274 m_d->ensureAttached(
m_d->sep_barrel_central);
276 m_d->ensureDetached(
m_d->sep_barrel_central);
281 if (!
m_d->sep_endcap_inner_pos)
282 m_d->initPartsSep(
m_d->endcap_surface_z,
m_d->sep_endcap_inner_pos,
m_d->endcapInnerShape());
283 m_d->ensureAttached(
m_d->sep_endcap_inner_pos);
285 m_d->ensureDetached(
m_d->sep_endcap_inner_pos);
290 if (!
m_d->sep_endcap_outer_pos)
291 m_d->initPartsSep(
m_d->endcap_surface_z,
m_d->sep_endcap_outer_pos,
m_d->endcapOuterShape());
292 m_d->ensureAttached(
m_d->sep_endcap_outer_pos);
294 m_d->ensureDetached(
m_d->sep_endcap_outer_pos);
299 if (!
m_d->sep_endcap_inner_neg)
300 m_d->initPartsSep(-
m_d->endcap_surface_z,
m_d->sep_endcap_inner_neg,
m_d->endcapInnerShape());
301 m_d->ensureAttached(
m_d->sep_endcap_inner_neg);
303 m_d->ensureDetached(
m_d->sep_endcap_inner_neg);
308 if (!
m_d->sep_endcap_outer_neg)
309 m_d->initPartsSep(-
m_d->endcap_surface_z,
m_d->sep_endcap_outer_neg,
m_d->endcapOuterShape());
310 m_d->ensureAttached(
m_d->sep_endcap_outer_neg);
312 m_d->ensureDetached(
m_d->sep_endcap_outer_neg);
317 if (!
m_d->sep_endcap_zasr_central)
318 m_d->initPartsSep(0.0,
m_d->sep_endcap_zasr_central,
m_d->endcapZAsRCylShape());
319 m_d->ensureAttached(
m_d->sep_endcap_zasr_central);
321 m_d->ensureDetached(
m_d->sep_endcap_zasr_central);
326 if (!
m_d->sep_endcap_zasr_pos)
327 m_d->initPartsSep(
m_d->barrel_posneg_z,
m_d->sep_endcap_zasr_pos,
m_d->endcapZAsRCylShape());
328 m_d->ensureAttached(
m_d->sep_endcap_zasr_pos);
330 m_d->ensureDetached(
m_d->sep_endcap_zasr_pos);
335 if (!
m_d->sep_endcap_zasr_neg)
336 m_d->initPartsSep(-
m_d->barrel_posneg_z,
m_d->sep_endcap_zasr_neg,
m_d->endcapZAsRCylShape());
337 m_d->ensureAttached(
m_d->sep_endcap_zasr_neg);
339 m_d->ensureDetached(
m_d->sep_endcap_zasr_neg);
344 m_d->attachsep->enableNotify(save);
346 m_d->attachsep->touch();
353 theclass->messageVerbose(
"initPartsSep begin");
354 sep =
new SoSeparator();
357 SoTranslation * t =
new SoTranslation;
358 t->translation.setValue(0.0f,0.0f,zpos);
361 sep->addChild(shape);
362 theclass->messageVerbose(
"initPartsSep end");
370 return m_d->material;
376 theclass->messageVerbose(
"barrelCylShape");
395 theclass->messageVerbose(
"endcapInnerShape");
414 theclass->messageVerbose(
"endcapOuterShape");
433 theclass->messageVerbose(
"endcapZAsRCylShape");
454 theclass->messageVerbose(
"ensureDetached");
457 if (
sep->findChild(s)>-1)
465 theclass->messageVerbose(
"ensureAttached");
469 sep =
new SoSeparator;
471 SoPickStyle *pickStyle =
new SoPickStyle;
472 pickStyle->style=SoPickStyle::UNPICKABLE;
473 sep->addChild(pickStyle);
480 theclass->messageVerbose(
"ensureAttached done");
static double sct_barrel_inner_radius()
static double trt_endcap_surface_z()
static double sct_endcap_zasr_squeezefact()
static double trt_barrel_posneg_z()
static double sct_endcap_surface_z()
static double pixel_endcap_outer_radius()
static double trt_endcap_inner_radius()
static double trt_endcap_surface_length()
static double sct_endcap_surface_length()
static double sct_endcap_outer_radius()
static double trt_endcap_zasr_squeezefact()
static double pixel_barrel_outer_radius()
static double sct_endcap_zasr_disttobarrelcyl()
static double pixel_endcap_zasr_disttobarrelcyl()
static double sct_barrel_posneg_z()
static double surfacethickness()
static double pixel_barrel_posneg_z()
static double pixel_endcap_inner_radius()
static double trt_barrel_outer_radius()
static double trt_endcap_zasr_disttobarrelcyl()
static double trt_endcap_outer_radius()
static double pixel_endcap_zasr_squeezefact()
static double pixel_barrel_inner_radius()
static double pixel_endcap_surface_length()
static double pixel_endcap_surface_z()
static double sct_endcap_inner_radius()
static double sct_barrel_outer_radius()
static double trt_barrel_inner_radius()
SoSeparator * sep_endcap_zasr_neg
SoSeparator * sep_endcap_inner_pos
SoShape * endcapinnershape
void ensureAttached(SoSeparator *)
SoSeparator * sep_barrel_pos
SoShape * endcapzasrcylshape
SoShape * endcapOuterShape()
SoShape * barrelCylShape()
SoSeparator * sep_endcap_zasr_central
SoShape * endcapZAsRCylShape()
SoSeparator * sep_endcap_outer_pos
ProjectionSurfacesHelper * theclass
InDetProjFlags::InDetProjPartsFlags parts
SoSeparator * sep_endcap_outer_neg
void initPartsSep(float zpos, SoSeparator *&sep, SoShape *)
double barrel_inner_radius
void ensureDetached(SoSeparator *)
SoShape * endcapInnerShape()
double barrel_outer_radius
SoShape * endcapoutershape
double endcap_inner_radius
SoSeparator * sep_barrel_central
SoSeparator * sep_endcap_zasr_pos
double endcap_outer_radius
double endcap_zasr_disttobarrelcyl
Imp(ProjectionSurfacesHelper *tc, SoSeparator *as)
double endcap_surface_length
SoSeparator * sep_barrel_neg
SoSeparator * sep_endcap_inner_neg
double endcap_zasr_squeezefact
static ProjectionSurfacesHelper * createSCTHelper(SoMaterial *, SoSeparator *attachsep, QObject *parent=0, IVP1System *sys=0)
static ProjectionSurfacesHelper * createTRTHelper(SoMaterial *, SoSeparator *attachsep, QObject *parent=0, IVP1System *sys=0)
void setSurfaces(InDetProjFlags::InDetProjPartsFlags)
static ProjectionSurfacesHelper * createPixelHelper(SoMaterial *, SoSeparator *attachsep, QObject *parent=0, IVP1System *sys=0)
ProjectionSurfacesHelper(double surfacethickness, double barrel_inner_radius, double barrel_outer_radius, double barrel_posneg_z, double endcap_surface_z, double endcap_surface_length, double endcap_inner_radius, double endcap_outer_radius, double endcap_zasr_disttobarrelcyl, double endcap_zasr_squeezefact, SoMaterial *, SoSeparator *attachsep, QObject *parent, IVP1System *sys)
InDetProjFlags::InDetProjPartsFlags shownParts() const
virtual ~ProjectionSurfacesHelper()
SoTubs - Inventor version of the G4Tubs Geant Geometry entity.
SoSFInt32 pOverrideNPhi
Override number of phi subdivision used for rendering shape (i.e.
SoSFFloat pDz
Half-length in Z.
SoSFFloat pDPhi
Delta-angle, in radians.
SoSFFloat pSPhi
Starting angle, in radians.
static void initClass()
Class Initializer, required.
SoSFFloat pRMin
Inside radius of the tube.
SoSFFloat pRMax
Outside radius of the tube.
VP1HelperClassBase(IVP1System *sys=0, QString helpername="")
void messageVerbose(const QString &) const