CMS 3D CMS Logo

VisG4VisSceneHandler Class Reference

#include <VisGeant4/VisG4Core/interface/VisG4VisSceneHandler.h>

List of all members.

Public Types

typedef
G4ViewParameters::DrawingStyle 
DrawStyle
typedef G4ViewParameters::RepStyle RepStyle

Public Member Functions

virtual void AddCompound (const G4VHit &hit)
virtual void AddCompound (const G4VTrajectory &trajectory)
virtual void addMaterial (SoMaterial *mat)
virtual void AddPrimitive (const G4NURBS &object)
virtual void AddPrimitive (const G4Polyhedron &object)
virtual void AddPrimitive (const G4Polymarker &object)
virtual void AddPrimitive (const G4Square &object)
virtual void AddPrimitive (const G4Circle &object)
virtual void AddPrimitive (const G4Text &object)
virtual void AddPrimitive (const G4Scale &object)
virtual void AddPrimitive (const G4Polyline &object)
virtual void AddSolid (const G4VSolid &solid)
virtual void AddSolid (const G4Polyhedra &solid)
virtual void AddSolid (const G4Polycone &solid)
virtual void AddSolid (const G4Torus &solid)
virtual void AddSolid (const G4Para &solid)
virtual void AddSolid (const G4Sphere &solid)
virtual void AddSolid (const G4Trap &solid)
virtual void AddSolid (const G4Trd &solid)
virtual void AddSolid (const G4Tubs &solid)
virtual void AddSolid (const G4Cons &solid)
virtual void AddSolid (const G4Box &solid)
virtual void addStyle (DrawStyle style)
virtual void addStyle (const G4VisAttributes *from)
virtual void addTransform (const G4Transform3D &by)
virtual void beginObject (SoSeparator *node, const void *object)
virtual void clearCache (void)
virtual void defineBounds (G4VisExtent bbox)
virtual void defineFallback (RepStyle style)
virtual void defineNoOfSides (int sides)
virtual void enableCache (bool enabled)
virtual void endObject (void)

Static Public Member Functions

static VisG4VisSceneHandlerinstance (void)

Private Types

enum  MarkerSizeType { world, screen }
typedef std::map< const
G4Material *, SoMaterial * > 
MaterialCache
typedef std::map< const void *,
SoGroup * > 
NodeCache

Private Member Functions

void addTranslation (SoSeparator *to, SbVec3f center)
void addTranslation (SoSeparator *to, const G4Point3D &center)
virtual void BeginPrimitives (const G4Transform3D &transform)
virtual void BeginPrimitives2D ()
void cache (SoNode *node)
void cacheBegin (const void *object)
bool cached (void)
void cacheEnd (void)
virtual void EndPrimitives (void)
virtual void EndPrimitives2D ()
DrawStyle GetDrawingStyle (const G4VisAttributes *)
DrawStyle GetDrawingStyle (const G4Visible &)
double GetMarkerSize (const G4VMarker &mark, MarkerSizeType &type)
double GetMarkerSize (const G4VMarker &mark)
SoMarkerSet * makeScreenMarker (G4Polymarker::MarkerType type, G4VMarker::FillStyle fill, double size)
SoShape * makeWorldMarker (G4Polymarker::MarkerType type, double size)
virtual void PostAddSolid (void)
virtual void PreAddSolid (const G4Transform3D &transform, const G4VisAttributes &attributes)
void RequestPrimitives (const G4VSolid &solid)
 VisG4VisSceneHandler (void)
virtual ~VisG4VisSceneHandler (void)

Private Attributes

G4VisExtent m_bbox
bool m_cached
int m_cacheIndex
SoGroup * m_cacheNodes
bool m_caching
RepStyle m_fallback
double m_fontSize
SoDrawStyle * m_lines
MaterialCache m_materialCache
SoSeparator * m_node
SoResetTransform * m_reset
NodeCache m_shapeCache
int m_sides
SoDrawStyle * m_solid


Detailed Description

Definition at line 278 of file VisG4VisSceneHandler.h.


Member Typedef Documentation

typedef G4ViewParameters::DrawingStyle VisG4VisSceneHandler::DrawStyle

Definition at line 282 of file VisG4VisSceneHandler.h.

typedef std::map<const G4Material *, SoMaterial *> VisG4VisSceneHandler::MaterialCache [private]

Definition at line 336 of file VisG4VisSceneHandler.h.

typedef std::map<const void *, SoGroup *> VisG4VisSceneHandler::NodeCache [private]

Definition at line 335 of file VisG4VisSceneHandler.h.

typedef G4ViewParameters::RepStyle VisG4VisSceneHandler::RepStyle

Definition at line 281 of file VisG4VisSceneHandler.h.


Member Enumeration Documentation

enum VisG4VisSceneHandler::MarkerSizeType [private]

Enumerator:
world 
screen 

Definition at line 337 of file VisG4VisSceneHandler.h.

00337 { world, screen };


Constructor & Destructor Documentation

VisG4VisSceneHandler::VisG4VisSceneHandler ( void   )  [private]

Definition at line 101 of file VisG4VisSceneHandler.cc.

References m_caching, m_lines, and m_solid.

00102     : m_node (0),
00103       m_caching (false),
00104       m_cached (false),
00105       m_cacheNodes (0),
00106       m_cacheIndex (0),
00107       m_lines (new SoDrawStyle),
00108       m_solid (new SoDrawStyle),
00109       m_fallback (G4ViewParameters::polyhedron),
00110       m_bbox (0, .5),
00111       m_sides (24),
00112       m_fontSize (12)
00113 {
00114     // Initialise a shared scenegraph scaler node
00115     m_lines->ref ();
00116     m_solid->ref ();
00117     m_lines->style = SoDrawStyle::LINES;
00118     m_solid->style = SoDrawStyle::FILLED;
00119 
00120     // Determine if we can reuse OIV nodes for the volume.  We do not
00121     // reuse entire rep hierarchies, only solid shape lists, mainly
00122     // for the following reasons: 1) we do not yet have support for
00123     // shared reps, 2) each different volume path can have different
00124     // visualisation preferences, and 4) parametrised replicas might
00125     // vary solids (?).
00126     //
00127     // Note that we never clear our cache.  We assume the nodes
00128     // created for a particular solid are valid for forever (FIXME?).
00129     // Note that VisG4VolumeModel invokes this method exactly once.
00130     // Thus we can get away with single non-stacked caching state.
00131     //
00132     // We first check if we can share anything at all: in a replica we
00133     // can't.  Secondly, we only cache the solid shape nodes, the rest
00134     // is not cached (transformation matrices, material settings,
00135     // multiple broken down solid structures) (FIXME).  m_cacheIndex
00136     // tracks our progress in a complex solid structure; we assume
00137     // (and ASSERT) that the calls to solid description methods below
00138     // always appear in the same order for the same cached solid.
00139     //
00140     // Caching is on by default.  If $IGUANA_CACHING is defined, it
00141     // must be `1', `on' or `yes' for caching to be enabled.
00142     const char *cachingStr = getenv ("IGUANA_CACHING");
00143     m_caching = (! cachingStr
00144                  || !strcmp (cachingStr, "1")
00145                  || !strcmp (cachingStr, "on")
00146                  || !strcmp (cachingStr, "yes"));
00147 }

virtual VisG4VisSceneHandler::~VisG4VisSceneHandler ( void   )  [inline, private, virtual]

Definition at line 340 of file VisG4VisSceneHandler.h.

00340 {};


Member Function Documentation

void VisG4VisSceneHandler::AddCompound ( const G4VHit &  hit  )  [virtual]

Definition at line 520 of file VisG4VisSceneHandler.cc.

00521 { // FIXME
00522 }

void VisG4VisSceneHandler::AddCompound ( const G4VTrajectory &  trajectory  )  [virtual]

Definition at line 515 of file VisG4VisSceneHandler.cc.

00516 { // FIXME 
00517 }

void VisG4VisSceneHandler::addMaterial ( SoMaterial *  mat  )  [virtual]

Definition at line 298 of file VisG4VisSceneHandler.cc.

References ASSERT, and m_node.

Referenced by drawVolumeTwig().

00299 {
00300     ASSERT (mat);    
00301     ASSERT (m_node);
00302     
00303     m_node->addChild (mat);
00304 }

void VisG4VisSceneHandler::AddPrimitive ( const G4NURBS &  object  )  [virtual]

Definition at line 838 of file VisG4VisSceneHandler.cc.

References ASSERT, c, cache(), cached(), i, j, m_node, me, n, reco::JetTracksAssociation::setValue(), v, and V.

00839 {
00840     // FIXME: Does G4 support NURB trimming?
00841     ASSERT (m_node);
00842     ASSERT (G4NURBS::NofC == 4);
00843     if (cached ()) return;
00844 
00845     // Knots and control points must be G4floats.
00846     std::vector<G4float> uknots (nurb.GetnbrKnots(G4NURBS::U), 0.);
00847     std::vector<G4float> vknots (nurb.GetnbrKnots(G4NURBS::V), 0.);
00848     std::vector<G4float> ctrls (nurb.GettotalnbrCtrlPts () * G4NURBS::NofC,0.);
00849 
00850     G4NURBS::KnotsIterator u (nurb, G4NURBS::U);
00851     for (int i = 0; u.pick (&uknots [i]); i++)
00852         ;
00853 
00854     G4NURBS::KnotsIterator v (nurb, G4NURBS::V);
00855     for (int i = 0; v.pick (&vknots [i]); i++)
00856         ;
00857     
00858     G4NURBS::CtrlPtsCoordsIterator c (nurb);
00859     for (int i = 0; c.pick (&ctrls [i]); i++)
00860         ;
00861   
00862     // Add owner
00863     SoSeparator *me = new SoSeparator;
00864     m_node->addChild (me);
00865 
00866     // Set up NURBS
00867     G4int n = nurb.GettotalnbrCtrlPts ();
00868     std::vector<SbVec4f> points (n, SbVec4f ());
00869     for (G4int i = 0, j = 0; i < n ; ++i, j += 4)
00870         points [i].setValue (ctrls[j+0], ctrls[j+1], ctrls[j+2], ctrls[j+3]);
00871 
00872     SoComplexity *complexity = new SoComplexity;
00873     complexity->value = 0.6;
00874     me->addChild (complexity);
00875 
00876     SoCoordinate4 *controls = new SoCoordinate4;
00877     controls->point.setValues (0, n, &points[0]);
00878     me->addChild (controls);
00879 
00880     SoNurbsSurface *surface = new SoNurbsSurface;
00881     surface->numUControlPoints = uknots.size ();
00882     surface->numVControlPoints = vknots.size ();
00883     surface->uKnotVector.setValues (0,uknots.size (), &uknots [0]);
00884     surface->vKnotVector.setValues (0,vknots.size (), &vknots [0]);
00885     me->addChild (surface);
00886     cache (me);
00887 }

void VisG4VisSceneHandler::AddPrimitive ( const G4Polyhedron &  object  )  [virtual]

Definition at line 790 of file VisG4VisSceneHandler.cc.

References ASSERT, cache(), cached(), m_node, and me.

00791 {
00792     ASSERT (m_node);
00793     if (! object.GetNoFacets () || cached ())
00794         return;
00795 
00796     // Collect the faces
00797     G4bool                      notLastFace;
00798     std::vector<SbVec3f>        vertices;
00799     std::vector<SbVec3f>        normals;
00800     std::vector<G4int>          nfaces;
00801     G4Normal3D                  normal;
00802     do {
00803         notLastFace = object.GetNextUnitNormal (normal);
00804         normals.push_back (SbVec3f (normal.x (), normal.y (), normal.z ()));
00805 
00806         G4int           faces = 0;
00807         G4bool          notLastEdge;
00808         G4Point3D       vertex;
00809         G4int           edgeFlag = 1;
00810 
00811         do {
00812             notLastEdge = object.GetNextVertex (vertex, edgeFlag);
00813             vertices.push_back (SbVec3f (vertex.x(), vertex.y(), vertex.z()));
00814             faces++;
00815         } while (notLastEdge);
00816 
00817         nfaces.push_back (faces);
00818     } while (notLastFace);
00819 
00820     // Add owner
00821     SoSeparator *me = new SoSeparator;
00822     m_node->addChild (me);
00823 
00824     // Store faces with normals and coordinates
00825     SoFaceSet        *faces = new SoFaceSet;
00826     SoVertexProperty *vtx = new SoVertexProperty;
00827 
00828     vtx->normalBinding = SoNormalBinding::PER_FACE;
00829     vtx->normal.setValues (0, normals.size (), &normals[0]);
00830     vtx->vertex.setValues (0, vertices.size (), &vertices[0]);
00831     faces->numVertices.setValues (0, nfaces.size (), &nfaces[0]);
00832     faces->vertexProperty = vtx;
00833     me->addChild (faces);
00834     cache (me);
00835 }

void VisG4VisSceneHandler::AddPrimitive ( const G4Polymarker &  object  )  [virtual]

Definition at line 890 of file VisG4VisSceneHandler.cc.

References addTranslation(), ASSERT, cache(), cached(), edm::pset::fill(), GetMarkerSize(), i, prof2calltree::last, m_lines, m_node, makeScreenMarker(), makeWorldMarker(), me, python::EventAnalyzer_cfg::pset, screen, reco::JetTracksAssociation::setValue(), size, world, and x.

00891 {
00892     ASSERT (m_node);
00893     if (cached ()) return;
00894 
00895     SoSeparator *me = new SoSeparator;
00896     m_node->addChild (me);
00897 
00898     // Translate to object position
00899     addTranslation (me, object.GetPosition ());
00900 
00901     // Compute points
00902     std::vector<SbVec3f> points (object.size (), SbVec3f ());
00903     for (unsigned i = 0; i < object.size (); ++i)
00904         points [i].setValue (object [i].x(),
00905                              object [i].y(),
00906                              object [i].z());
00907 
00908     // Determine marker type and for circles and squares, subtype too.
00909     MarkerSizeType       type;
00910     G4VMarker::FillStyle fill = object.GetFillStyle ();
00911     double               size = GetMarkerSize (object, type);
00912     SoPointSet           *pset;
00913     SoMarkerSet          *mset;
00914     SoVertexProperty     *vtx;
00915     SoShape              *shape;
00916     SbVec3f              last (0, 0, 0);
00917 
00918     // Render
00919     switch (object.GetMarkerType ())
00920     {
00921     default:
00922     case G4Polymarker::dots:
00923         // Point set
00924         vtx = new SoVertexProperty;
00925         vtx->vertex.setValues (0, object.size (), &points[0]);
00926         pset = new SoPointSet;
00927         pset->numPoints = object.size ();
00928         pset->vertexProperty = vtx;
00929         me->addChild (pset);
00930         break;
00931 
00932     case G4Polymarker::circles:
00933     case G4Polymarker::squares:
00934         // A circle or square at each marker position.
00935         switch (type)
00936         {
00937         case screen:
00938             vtx = new SoVertexProperty;
00939             vtx->vertex.setValues (0, object.size (), &points[0]);
00940             mset = makeScreenMarker (object.GetMarkerType (), fill, size);
00941             mset->numPoints = object.size ();
00942             mset->vertexProperty = vtx;
00943             me->addChild (mset);
00944             break;
00945 
00946         case world:
00947             if (fill != G4VMarker::filled)
00948                 me->addChild (m_lines);
00949             shape = makeWorldMarker (object.GetMarkerType (), size);
00950             for (unsigned i = 0; i < object.size (); last = points [i++])
00951             {
00952                 addTranslation (me, points [i] - last);
00953                 me->addChild (shape);
00954             }
00955             break;
00956         }
00957         break;
00958     }
00959     cache (me);
00960 }

void VisG4VisSceneHandler::AddPrimitive ( const G4Square &  object  )  [virtual]

Definition at line 736 of file VisG4VisSceneHandler.cc.

References addTranslation(), ASSERT, cache(), cached(), edm::pset::fill(), GetMarkerSize(), m_lines, m_node, makeScreenMarker(), makeWorldMarker(), me, screen, size, and world.

00737 {
00738     // FIXME: All this marker code should be replaced by a custom
00739     // marker node a la SoMarkerSet but with our own logic that we
00740     // could more or less steal from G4 OpenGL viewer.
00741     //
00742     // FIXME: Support an option to force markers on the top layer,
00743     // i.e. glDisable(GL_DEPTH_TEST). (IsMarkerNotHidden ()).
00744     ASSERT (m_node);
00745     if (cached ()) return;
00746 
00747     SoSeparator *me = new SoSeparator;
00748     m_node->addChild (me);
00749 
00750     MarkerSizeType       type;
00751     G4VMarker::FillStyle fill = object.GetFillStyle ();
00752     G4ThreeVector        pos (object.GetPosition ());
00753     double               size = GetMarkerSize (object, type);
00754     SoMarkerSet          *mset;
00755     SoVertexProperty     *vtx;
00756 
00757     switch (type)
00758     {
00759     case screen:
00760         // The marker has screen size.  Use SoMarkerSet with just one
00761         // point -- if you have many, use G4Polymarker or IgSoHitsKit,
00762         // this method to draw loads of circles will kill performance.
00763         mset = makeScreenMarker (G4Polymarker::squares, fill, size);
00764         vtx = new SoVertexProperty;
00765         vtx->vertex.setValue (SbVec3f (pos.x (), pos.y (), pos.z ()));
00766         mset->vertexProperty = vtx;
00767         mset->numPoints = 1;
00768         me->addChild (mset);
00769         break;
00770 
00771     case world:
00772         // The marker has world size: draw a cube.  This is wrong, the
00773         // marker should be a circle always facing the viewer.  Filled
00774         // ones the cubes will do, though inefficiently.  Anything
00775         // else is a failure (actually "hashed" probably looks about
00776         // right due to the triangulation :-).  We should use more
00777         // powerful marker nodes that work at raw GL level.  Perhaps
00778         // we can reuse code from the G4 OpenGL viewer.  (FIXME:
00779         // Disable lighting?)
00780         if (fill != G4VMarker::filled)
00781             me->addChild (m_lines);
00782         addTranslation (me, pos);
00783         me->addChild (makeWorldMarker (G4Polymarker::squares, size));
00784         break;
00785     }
00786     cache (me);
00787 }

void VisG4VisSceneHandler::AddPrimitive ( const G4Circle &  object  )  [virtual]

Definition at line 683 of file VisG4VisSceneHandler.cc.

References addTranslation(), ASSERT, cache(), cached(), edm::pset::fill(), GetMarkerSize(), m_lines, m_node, makeScreenMarker(), makeWorldMarker(), me, screen, size, and world.

00684 {
00685     // FIXME: Steal more marker code into special GL shape from G4
00686     // OpenGL viewer and SoMarkerSet implementation.
00687     //
00688     // FIXME: Support an option to force markers on the top layer,
00689     // i.e. glDisable(GL_DEPTH_TEST). (IsMarkerNotHidden ()).
00690     ASSERT (m_node);
00691     if (cached ()) return;
00692 
00693     SoSeparator *me = new SoSeparator;
00694     m_node->addChild (me);
00695 
00696     MarkerSizeType       type;
00697     G4VMarker::FillStyle fill = object.GetFillStyle ();
00698     G4ThreeVector        pos (object.GetPosition ());
00699     double               size = GetMarkerSize (object, type);
00700     SoMarkerSet          *mset;
00701     SoVertexProperty     *vtx;
00702 
00703     switch (type)
00704     {
00705     case screen:
00706         // The marker has screen size.  Use SoMarkerSet with just one
00707         // point -- if you have many, use G4Polymarker or IgSoHitsKit,
00708         // this method to draw loads of circles will kill performance.
00709         mset = makeScreenMarker (G4Polymarker::circles, fill, size);
00710         vtx = new SoVertexProperty;
00711         vtx->vertex.setValue (SbVec3f (pos.x (), pos.y (), pos.z ()));
00712         mset->vertexProperty = vtx;
00713         mset->numPoints = 1;
00714         me->addChild (mset);
00715         break;
00716 
00717     case world:
00718         // The marker has world size: draw a sphere.  This is wrong,
00719         // the marker should be a circle always facing the viewer.
00720         // Filled ones the spheres will do, though inefficiently.
00721         // Anything else is a failure (actually "hashed" probably
00722         // looks about right due to the triangulation :-).  We should
00723         // use more powerful marker nodes that work at raw GL level.
00724         // Perhaps we can reuse code from the G4 OpenGL viewer.
00725         // (FIXME: Disable lighting?)
00726         if (fill != G4VMarker::filled)
00727             me->addChild (m_lines);
00728         addTranslation (me, pos);
00729         me->addChild (makeWorldMarker (G4Polymarker::circles, size));
00730         break;
00731     }
00732     cache (me);
00733 }

void VisG4VisSceneHandler::AddPrimitive ( const G4Text &  object  )  [virtual]

Definition at line 639 of file VisG4VisSceneHandler.cc.

References addTranslation(), ASSERT, cache(), cached(), LEFT, m_fontSize, m_node, me, and size.

00640 {
00641     // FIXME: SoText2 supports only screen size.  It is not obvious
00642     // how useful the heroic attempts of G4 to compute screen size
00643     // from world size and current zoom settings are given that it all
00644     // varies very dynamically according to the current camera.  We
00645     // sure don't want to link the two by recomputing the text size on
00646     // the fly if we can avoid it.  OTOH, see the comment on the other
00647     // marker objects as well -- we do manage to do something sensible
00648     // there.  So perhaps we need to go into the trouble of getting it
00649     // right here with massive amount of GL magic?  If so, make it a
00650     // generic Inventor service and just use it here.
00651     ASSERT (m_node);
00652     if (cached ()) return;
00653 
00654     SoSeparator *me = new SoSeparator;
00655     m_node->addChild (me);
00656 
00657     // Translate to object position
00658     addTranslation (me, object.GetPosition ());
00659     // addMaterial (me, FIXME: is text colour special?)
00660 
00661     // FIXME: X/Y offset is in screen coordinates -- not supported;
00662     // needs raw GL support to be able to do that.
00663 
00664     // Font.  FIXME: fallback on global marker text size settings
00665     double size = object.GetScreenSize ();
00666     SoFont *font = new SoFont;
00667     font->size = size ? size : m_fontSize;
00668     me->addChild (font);
00669 
00670     // Text (FIXME: break string into separate values at newlines)
00671     SoText2 *text = new SoText2;
00672     text->string.setValue (object.GetText ());
00673     switch (object.GetLayout ()) {
00674     case G4Text::left:   text->justification = SoText2::LEFT;   break;
00675     case G4Text::centre: text->justification = SoText2::CENTER; break;
00676     case G4Text::right:  text->justification = SoText2::RIGHT;  break;
00677     }
00678     me->addChild (text);
00679     cache (me);
00680 }

void VisG4VisSceneHandler::AddPrimitive ( const G4Scale &  object  )  [virtual]

Definition at line 554 of file VisG4VisSceneHandler.cc.

References AddPrimitive(), addTransform(), m_bbox, m_node, prof2calltree::node, r1, r2, x, y, gen_jpsi2muons_cfg::ymax, gen_jpsi2muons_cfg::ymin, and z.

00555 {
00556     // FIXME: This *really* should not be here.  Axes and scales are a
00557     // feature that should be done properly and only once in IGUANA,
00558     // not some crappy almost-good-for-something stuff like here!
00559 
00560     // Useful constants.
00561     double      length          = object.GetLength ();
00562     double      halfLength      = length / 2;
00563     double      tickLength      = length / 20;
00564     double      piBy2           = M_PI / 2;
00565 
00566     // Get size of the world.
00567     double       xmin           = m_bbox.GetXmin ();
00568     double       xmax           = m_bbox.GetXmax ();
00569     double       ymin           = m_bbox.GetYmin ();
00570     double       ymax           = m_bbox.GetYmax ();
00571     double       zmin           = m_bbox.GetZmin ();
00572     double       zmax           = m_bbox.GetZmax ();
00573 
00574     // Create (empty) polylines with present vis preferences.  Add
00575     // points to them to represent an scale parallel to the x-axis
00576     // centred on the origin.
00577     G4Polyline  scaleLine, tick11, tick12, tick21, tick22;
00578     G4Point3D   r1    (-halfLength, 0, 0);
00579     G4Point3D   r2    ( halfLength, 0, 0);
00580     G4Point3D   ticky (0, tickLength, 0);
00581     G4Point3D   tickz (0, 0, tickLength);
00582 
00583     scaleLine.push_back (r1);
00584     scaleLine.push_back (r2);
00585     tick11.push_back (r1 + ticky);
00586     tick11.push_back (r1 - ticky);
00587     tick12.push_back (r1 + tickz);
00588     tick12.push_back (r1 - tickz);
00589     tick21.push_back (r2 + ticky);
00590     tick21.push_back (r2 - ticky);
00591     tick22.push_back (r2 + tickz);
00592     tick22.push_back (r2 - tickz);
00593 
00594     // Annotation text.
00595     G4Text text (object.GetAnnotation(), G4Point3D (0., tickLength, 0.));
00596     text.SetScreenSize (24.);
00597 
00598     // Transformation.
00599     G4Transform3D rotation;
00600     switch (object.GetDirection ()) {
00601     case G4Scale::x: break;
00602     case G4Scale::y: rotation = G4RotateZ3D (piBy2); break;
00603     case G4Scale::z: rotation = G4RotateY3D (piBy2); break;
00604     }
00605 
00606     G4double    sxmid (object.GetXmid ());
00607     G4double    symid (object.GetYmid ());
00608     G4double    szmid (object.GetZmid ());
00609 
00610     if (object.GetAutoPlacing ()) {
00611         // Margins for comfortably scaled to be inside view volume.
00612         double  lomargin = 0.01;
00613         double  himargin = 1 - lomargin;
00614 
00615         sxmid = xmin + himargin * (xmax - xmin);
00616         symid = ymin + lomargin * (ymax - ymin);
00617         szmid = zmin + himargin * (zmax - zmin);
00618         switch (object.GetDirection ()) {
00619         case G4Scale::x: sxmid -= halfLength; break;
00620         case G4Scale::y: symid += halfLength; break;
00621         case G4Scale::z: szmid -= halfLength; break;
00622         }
00623     }
00624 
00625     // Add the transform and the primitives we've created
00626     SoSeparator *node = m_node;
00627     m_node = new SoSeparator;
00628     addTransform (G4Transform3D (G4Translate3D(sxmid,symid,szmid) * rotation));
00629     AddPrimitive (scaleLine);
00630     AddPrimitive (tick11);
00631     AddPrimitive (tick12);
00632     AddPrimitive (tick21);
00633     AddPrimitive (tick22);
00634     AddPrimitive (text);
00635     m_node = node;
00636 }

void VisG4VisSceneHandler::AddPrimitive ( const G4Polyline &  object  )  [virtual]

Definition at line 528 of file VisG4VisSceneHandler.cc.

References ASSERT, cache(), cached(), i, m_lines, m_node, me, reco::JetTracksAssociation::setValue(), size, and x.

Referenced by AddPrimitive(), and RequestPrimitives().

00529 {
00530     ASSERT (m_node);
00531     if (cached ()) return;
00532 
00533     SoSeparator *me = new SoSeparator;
00534     m_node->addChild (me);
00535 
00536     // Force wireframe (FIXME: useless -- it's a line?).
00537     me->addChild (m_lines);
00538 
00539     // Add line with the points
00540     std::vector<SbVec3f> points (object.size (), SbVec3f ());
00541     for (unsigned i = 0; i < object.size (); ++i)
00542         points [i].setValue (object [i].x(), object [i].y(), object [i].z());
00543 
00544     SoLineSet           *lines = new SoLineSet;
00545     SoVertexProperty    *vtx = new SoVertexProperty;
00546     vtx->vertex.setValues (0, object.size (), &points[0]);
00547     lines->numVertices = object.size ();
00548     lines->vertexProperty = vtx;
00549     me->addChild (lines);
00550     cache (me);
00551 }

void VisG4VisSceneHandler::AddSolid ( const G4VSolid &  solid  )  [virtual]

Definition at line 501 of file VisG4VisSceneHandler.cc.

References AddSolid(), and RequestPrimitives().

00502 {
00503     // Duh, some forms are declared as methods in base class, but
00504     // never called from the solids...  (FIXME: which else can we
00505     // handle -- G4VCSGfaceted?)
00506     if (const G4Polycone *pcon = dynamic_cast<const G4Polycone *> (&solid))
00507         AddSolid (*pcon);
00508     else if (const G4Polyhedra *pgon = dynamic_cast<const G4Polyhedra *> (&solid))
00509         AddSolid (*pgon);
00510     else
00511         RequestPrimitives (solid);
00512 }

void VisG4VisSceneHandler::AddSolid ( const G4Polyhedra &  solid  )  [virtual]

Definition at line 477 of file VisG4VisSceneHandler.cc.

References ASSERT, cache(), cached(), IgSoRotSolid::divisions, i, m_node, IgSoRotSolid::phiDelta, IgSoRotSolid::phiStart, IgSoRotSolid::polygon, and IgSoRotSolid::smooth.

00478 {
00479     ASSERT (m_node);
00480     if (cached ()) return;
00481 
00482     int                         nr = solid.GetNumRZCorner();   
00483     std::vector<SbVec2f>        polygon (nr);
00484     
00485     for (int i = 0; i < nr; ++i)
00486         polygon[i] = SbVec2f (solid.GetCorner (i).r, solid.GetCorner (i).z); 
00487 
00488     IgSoRotSolid *rep = new IgSoRotSolid;
00489     rep->phiStart       = solid.GetStartPhi ();
00490     (solid.GetEndPhi () == solid.GetStartPhi ()) ? rep->phiDelta = 2 * M_PI :
00491     rep->phiDelta       = solid.GetEndPhi () - solid.GetStartPhi ();
00492     rep->divisions      = solid.GetNumSide ();    
00493     rep->smooth         = false;
00494     rep->polygon.setValues (0, nr, &polygon[0]);
00495     
00496     m_node->addChild (rep);
00497     cache (rep);
00498 }

void VisG4VisSceneHandler::AddSolid ( const G4Polycone &  solid  )  [virtual]

Definition at line 455 of file VisG4VisSceneHandler.cc.

References ASSERT, cache(), cached(), i, m_node, IgSoRotSolid::phiDelta, IgSoRotSolid::phiStart, IgSoRotSolid::polygon, and IgSoRotSolid::smooth.

00456 { 
00457     ASSERT (m_node);
00458     if (cached ()) return;
00459 
00460     int                         nr = solid.GetNumRZCorner();   
00461     std::vector<SbVec2f>        polygon (nr);
00462     
00463     for (int i = 0; i < nr; ++i)
00464         polygon[i] = SbVec2f (solid.GetCorner (i).r, solid.GetCorner (i).z);    
00465 
00466     IgSoRotSolid *rep = new IgSoRotSolid;
00467     rep->phiStart       = solid.GetStartPhi ();
00468     rep->phiDelta       = solid.GetEndPhi () - solid.GetStartPhi ();
00469     rep->smooth         = true;
00470     rep->polygon.setValues (0, nr, &polygon[0]);
00471     
00472     m_node->addChild (rep);
00473     cache (rep);
00474 } 

void VisG4VisSceneHandler::AddSolid ( const G4Torus &  solid  )  [virtual]

Definition at line 451 of file VisG4VisSceneHandler.cc.

References RequestPrimitives().

00452 { RequestPrimitives (solid); }

void VisG4VisSceneHandler::AddSolid ( const G4Para &  solid  )  [virtual]

Definition at line 447 of file VisG4VisSceneHandler.cc.

References RequestPrimitives().

00448 { RequestPrimitives (solid); }

void VisG4VisSceneHandler::AddSolid ( const G4Sphere &  solid  )  [virtual]

Definition at line 443 of file VisG4VisSceneHandler.cc.

References RequestPrimitives().

00444 { RequestPrimitives (solid); }

void VisG4VisSceneHandler::AddSolid ( const G4Trap &  solid  )  [virtual]

Definition at line 420 of file VisG4VisSceneHandler.cc.

References IgSoG4Trap::alp1, IgSoG4Trap::alp2, ASSERT, cache(), cached(), IgSoG4Trap::dx1, IgSoG4Trap::dx2, IgSoG4Trap::dx3, IgSoG4Trap::dx4, IgSoG4Trap::dy1, IgSoG4Trap::dy2, IgSoG4Trap::dz, m_node, IgSoG4Trap::phi, and IgSoG4Trap::theta.

00421 {
00422     ASSERT (m_node);
00423     if (cached ()) return;
00424 
00425     G4ThreeVector       axis = solid.GetSymAxis ();
00426     IgSoG4Trap          *rep = new IgSoG4Trap;
00427     rep->phi   = atan2 (axis (kYAxis), axis (kXAxis));
00428     rep->theta = acos (axis (kZAxis));
00429     rep->dz    = solid.GetZHalfLength ();
00430     rep->dy1    = solid.GetYHalfLength1 ();
00431     rep->dx1    = solid.GetXHalfLength1 ();
00432     rep->dx2    = solid.GetXHalfLength2 ();
00433     rep->alp1   = solid.GetTanAlpha1 ();
00434     rep->dy2    = solid.GetYHalfLength2 ();
00435     rep->dx3    = solid.GetXHalfLength3 ();
00436     rep->dx4    = solid.GetXHalfLength4 ();
00437     rep->alp2   = solid.GetTanAlpha2 ();
00438     m_node->addChild (rep);
00439     cache (rep);
00440 }

void VisG4VisSceneHandler::AddSolid ( const G4Trd &  solid  )  [virtual]

Definition at line 404 of file VisG4VisSceneHandler.cc.

References ASSERT, cache(), cached(), IgSoG4Trd::dx1, IgSoG4Trd::dx2, IgSoG4Trd::dy1, IgSoG4Trd::dy2, IgSoG4Trd::dz, and m_node.

00405 {
00406     ASSERT (m_node);
00407     if (cached ()) return;
00408 
00409     IgSoG4Trd *rep = new IgSoG4Trd;
00410     rep->dx1 = solid.GetXHalfLength1 ();
00411     rep->dx2 = solid.GetXHalfLength2 ();
00412     rep->dy1 = solid.GetYHalfLength1 ();
00413     rep->dy2 = solid.GetYHalfLength2 ();
00414     rep->dz  = solid.GetZHalfLength ();
00415     m_node->addChild (rep);
00416     cache (rep);
00417 }

void VisG4VisSceneHandler::AddSolid ( const G4Tubs &  solid  )  [virtual]

Definition at line 387 of file VisG4VisSceneHandler.cc.

References ASSERT, cache(), cached(), m_node, and IgSoRotSolid::makeTubs().

00388 {
00389     ASSERT (m_node);
00390     if (cached ()) return;
00391 
00392     IgSoRotSolid *rep = new IgSoRotSolid;
00393     
00394     rep->makeTubs (solid.GetRMin (), 
00395                    solid.GetRMax (), 
00396                    solid.GetDz (),
00397                    solid.GetSPhi (), 
00398                    solid.GetDPhi ());
00399     m_node->addChild (rep);
00400     cache (rep);
00401 }

void VisG4VisSceneHandler::AddSolid ( const G4Cons &  solid  )  [virtual]

Definition at line 367 of file VisG4VisSceneHandler.cc.

References ASSERT, cache(), cached(), m_node, and IgSoRotSolid::makeCons().

00368 {
00369     ASSERT (m_node);
00370     if (cached ()) return;
00371 
00372     IgSoRotSolid *rep = new IgSoRotSolid;
00373     
00374     rep->makeCons (solid.GetRmin1 (),
00375                    solid.GetRmax1 (),
00376                    solid.GetRmin2 (),
00377                    solid.GetRmax2 (),
00378                    solid.GetDz (),
00379                    solid.GetSPhi (),
00380                    solid.GetDPhi ());
00381     
00382     m_node->addChild (rep);
00383     cache (rep);
00384 }

void VisG4VisSceneHandler::AddSolid ( const G4Box &  solid  )  [virtual]

Definition at line 347 of file VisG4VisSceneHandler.cc.

References ASSERT, cache(), cached(), IgSoCube::length, m_node, IgSoCube::thickness, and IgSoCube::width.

Referenced by AddSolid().

00348 {
00349     ASSERT (m_node);
00350     if (cached ()) return;
00351 
00352     // FIXME: Notice if the cube is "thin," in which case just use two
00353     // surfaces instead of the six, or use LOD.  This is to optimise
00354     // for large numbers of very thin boxes frequent in silicon wafers
00355     // etc.  It is useless to render all the sides always, you have to
00356     // be very close to see all the sides other than lines.
00357     IgSoCube *rep = new IgSoCube;
00358     rep->width     = 2 * solid.GetXHalfLength ();
00359     rep->length    = 2 * solid.GetYHalfLength ();
00360     rep->thickness = 2 * solid.GetZHalfLength (); 
00361 
00362     m_node->addChild (rep);
00363     cache (rep);
00364 }

void VisG4VisSceneHandler::addStyle ( DrawStyle  style  )  [virtual]

Definition at line 278 of file VisG4VisSceneHandler.cc.

References ASSERT, m_lines, m_node, and m_solid.

00279 {
00280     ASSERT (m_node);
00281 
00282     switch (style)
00283     {
00284     case G4ViewParameters::hlr:         // hidden lines removed
00285     case G4ViewParameters::wireframe:   // wireframe (no lines removed)
00286         m_node->addChild (m_lines);
00287         break;
00288 
00289     case G4ViewParameters::hlhsr:       // hidden lines and surfaces removed
00290     case G4ViewParameters::hsr:         // hidden surfaces removed
00291     default:
00292         m_node->addChild (m_solid);
00293         break;
00294     }
00295 }

void VisG4VisSceneHandler::addStyle ( const G4VisAttributes *  from  )  [virtual]

Definition at line 269 of file VisG4VisSceneHandler.cc.

References ASSERT, and GetDrawingStyle().

Referenced by drawVolumeTwig().

00270 {
00271     // FIXME: To be removed when we get real vis prefs service
00272     ASSERT (from);
00273     addStyle (GetDrawingStyle (from));
00274     // Now using addMaterial(G4Material to set the material.
00275 }

void VisG4VisSceneHandler::addTransform ( const G4Transform3D &  by  )  [virtual]

Definition at line 307 of file VisG4VisSceneHandler.cc.

References ASSERT, m, m_node, and scale.

Referenced by AddPrimitive(), and drawVolumeTwig().

00308 {
00309     ASSERT (m_node);
00310 
00311     // Force uniform downscale to meters.
00312     SbMatrix scale;
00313     scale.setScale (1./m);
00314 
00315     SoMatrixTransform *xform = new SoMatrixTransform;
00316     xform->matrix.setValue (scale * VisG4VisTransform3D (by));
00317     m_node->addChild (xform);
00318 }

void VisG4VisSceneHandler::addTranslation ( SoSeparator *  to,
SbVec3f  center 
) [private]

Definition at line 334 of file VisG4VisSceneHandler.cc.

References ASSERT, and t.

00335 {
00336     ASSERT (to);
00337 
00338     SoTranslation *t = new SoTranslation;
00339     t->translation = center;
00340     to->addChild (t);
00341 }

void VisG4VisSceneHandler::addTranslation ( SoSeparator *  to,
const G4Point3D &  center 
) [private]

Definition at line 324 of file VisG4VisSceneHandler.cc.

References ASSERT, and t.

Referenced by AddPrimitive().

00325 {
00326     ASSERT (to);
00327 
00328     SoTranslation *t = new SoTranslation;
00329     t->translation.setValue (center.x (), center.y (), center.z ());
00330     to->addChild (t);
00331 }

void VisG4VisSceneHandler::beginObject ( SoSeparator *  node,
const void object 
) [virtual]

Definition at line 246 of file VisG4VisSceneHandler.cc.

References ASSERT, cacheBegin(), and m_node.

Referenced by drawVolumeTwig().

00247 {
00248     // Set up output target.
00249     ASSERT (! m_node);
00250     ASSERT (node);
00251     m_node = node;
00252 
00253     // Setup caching.
00254     cacheBegin (object);
00255 }

void VisG4VisSceneHandler::BeginPrimitives ( const G4Transform3D &  transform  )  [private, virtual]

Definition at line 1166 of file VisG4VisSceneHandler.cc.

References ASSERT.

01167 { ASSERT (false); }

virtual void VisG4VisSceneHandler::BeginPrimitives2D (  )  [inline, private, virtual]

Definition at line 393 of file VisG4VisSceneHandler.h.

00393 {}

void VisG4VisSceneHandler::cache ( SoNode *  node  )  [private]

Definition at line 225 of file VisG4VisSceneHandler.cc.

References m_cacheIndex, and m_cacheNodes.

Referenced by AddPrimitive(), and AddSolid().

00226 {
00227     if (m_cacheNodes)
00228     {
00229         m_cacheNodes->addChild (node);
00230         m_cacheIndex++;
00231     }
00232 }

void VisG4VisSceneHandler::cacheBegin ( const void object  )  [private]

Definition at line 189 of file VisG4VisSceneHandler.cc.

References ASSERT, cacheEnd(), m_cached, m_cacheNodes, m_caching, and m_shapeCache.

Referenced by beginObject().

00190 {
00191     cacheEnd ();
00192     if (m_caching && object)
00193     {
00194         ASSERT (object);
00195         if (! m_shapeCache.count (object))
00196         {
00197             m_shapeCache [object] = m_cacheNodes = new SoGroup;
00198             m_cacheNodes->ref ();
00199         }
00200         else
00201         {
00202             m_cacheNodes = m_shapeCache [object];
00203             m_cached = true;
00204         }
00205     }
00206 }

bool VisG4VisSceneHandler::cached ( void   )  [private]

Definition at line 209 of file VisG4VisSceneHandler.cc.

References ASSERT, m_cached, m_cacheIndex, m_cacheNodes, and m_node.

Referenced by AddPrimitive(), and AddSolid().

00210 {
00211     if (m_cached)
00212     {
00213         ASSERT (m_node);
00214         ASSERT (m_cacheNodes);
00215         ASSERT (m_cacheIndex < m_cacheNodes->getNumChildren ());
00216         m_node->addChild (m_cacheNodes->getChild (m_cacheIndex));
00217         m_cacheIndex++;
00218         return true;
00219     }
00220     else
00221         return false;
00222 }

void VisG4VisSceneHandler::cacheEnd ( void   )  [private]

Definition at line 235 of file VisG4VisSceneHandler.cc.

References m_cached, m_cacheIndex, and m_cacheNodes.

Referenced by cacheBegin(), clearCache(), enableCache(), and endObject().

00236 {
00237     m_cached = false;
00238     m_cacheNodes = 0;
00239     m_cacheIndex = 0;
00240 }

void VisG4VisSceneHandler::clearCache ( void   )  [virtual]

Definition at line 173 of file VisG4VisSceneHandler.cc.

References cacheEnd(), m_materialCache, and m_shapeCache.

Referenced by enableCache().

00174 {
00175     cacheEnd ();
00176     while (! m_shapeCache.empty ())
00177     {
00178         m_shapeCache.begin ()->second->unref ();
00179         m_shapeCache.erase (m_shapeCache.begin ());
00180     }
00181     while (! m_materialCache.empty ())
00182     {
00183         m_materialCache.begin ()->second->unref ();
00184         m_materialCache.erase (m_materialCache.begin ());
00185     }
00186 }

void VisG4VisSceneHandler::defineBounds ( G4VisExtent  bbox  )  [virtual]

Definition at line 154 of file VisG4VisSceneHandler.cc.

References m_bbox.

Referenced by drawVolumeTwig().

00155 { m_bbox = bbox; }

void VisG4VisSceneHandler::defineFallback ( RepStyle  style  )  [virtual]

Definition at line 150 of file VisG4VisSceneHandler.cc.

References m_fallback.

00151 { m_fallback = style; }

void VisG4VisSceneHandler::defineNoOfSides ( int  sides  )  [virtual]

Definition at line 158 of file VisG4VisSceneHandler.cc.

References m_sides.

00159 { m_sides = sides; }

void VisG4VisSceneHandler::enableCache ( bool  enabled  )  [virtual]

Definition at line 165 of file VisG4VisSceneHandler.cc.

References cacheEnd(), clearCache(), and m_caching.

00166 {
00167     cacheEnd ();
00168     if (! (m_caching = enabled))
00169         clearCache ();
00170 }

void VisG4VisSceneHandler::endObject ( void   )  [virtual]

Definition at line 258 of file VisG4VisSceneHandler.cc.

References ASSERT, cacheEnd(), and m_node.

Referenced by drawVolumeTwig().

00259 {
00260     ASSERT (m_node);
00261     cacheEnd ();
00262     m_node = 0;
00263 }

void VisG4VisSceneHandler::EndPrimitives ( void   )  [private, virtual]

Definition at line 1170 of file VisG4VisSceneHandler.cc.

References ASSERT.

01171 { ASSERT (false); }

virtual void VisG4VisSceneHandler::EndPrimitives2D (  )  [inline, private, virtual]

Definition at line 394 of file VisG4VisSceneHandler.h.

00394 {}

G4ViewParameters::DrawingStyle VisG4VisSceneHandler::GetDrawingStyle ( const G4VisAttributes *  attrs  )  [private]

Definition at line 1113 of file VisG4VisSceneHandler.cc.

01114 {
01115     G4ViewParameters::DrawingStyle style = G4ViewParameters::hlhsr;
01116     if (attrs->IsForceDrawingStyle ())
01117         // This is complicated because if hidden line removal has been
01118         // requested we wish to preserve this.
01119         switch (attrs->GetForcedDrawingStyle ())
01120         {
01121         case G4VisAttributes::solid:
01122             switch (style)
01123             {
01124             case G4ViewParameters::hlr:
01125                 style = G4ViewParameters::hlhsr;
01126                 break;
01127             case G4ViewParameters::wireframe:
01128                 style = G4ViewParameters::hsr;
01129                 break;
01130             default:
01131                 break;
01132             } 
01133             break;
01134 
01135         default:
01136         case G4VisAttributes::wireframe:
01137             switch (style)
01138             {
01139             case G4ViewParameters::hlhsr:
01140                 style = G4ViewParameters::hlr;
01141                 break;
01142             case G4ViewParameters::hsr:
01143                 style = G4ViewParameters::wireframe;
01144                 break;
01145             default:
01146                 break;
01147             } 
01148             break;
01149         }
01150 
01151     return style;
01152 }

DrawStyle VisG4VisSceneHandler::GetDrawingStyle ( const G4Visible &   )  [private]

Referenced by addStyle().

double VisG4VisSceneHandler::GetMarkerSize ( const G4VMarker &  mark,
MarkerSizeType type 
) [private]

Definition at line 1068 of file VisG4VisSceneHandler.cc.

References screen, size, and world.

01070 {
01071     // FIXME: fall back on default marker
01072     double size = marker.GetWorldSize ();
01073 
01074     if (size)
01075         // Draw in world coordinates.
01076         type = world;
01077     else
01078     {
01079         // Draw in screen coordinates.
01080         size = marker.GetScreenSize ();
01081         type = screen;
01082     }
01083 
01084     return (size <= 0. ? 1. : size);
01085     // FIXME: * fpViewer -> GetViewParameters().GetGlobalMarkerScale();
01086 }

double VisG4VisSceneHandler::GetMarkerSize ( const G4VMarker &  mark  )  [private]

Referenced by AddPrimitive().

VisG4VisSceneHandler * VisG4VisSceneHandler::instance ( void   )  [static]

Definition at line 94 of file VisG4VisSceneHandler.cc.

Referenced by drawVolumeTwig().

00095 {
00096     static VisG4VisSceneHandler *instance = new VisG4VisSceneHandler;
00097     return instance;
00098 }

SoMarkerSet * VisG4VisSceneHandler::makeScreenMarker ( G4Polymarker::MarkerType  type,
G4VMarker::FillStyle  fill,
double  size 
) [private]

Definition at line 966 of file VisG4VisSceneHandler.cc.

References ASSERT.

Referenced by AddPrimitive().

00969 {
00970     // FIXME: If the marker size is not in range, create our own
00971     // custom bitmap of the required type, and then use that for the
00972     // markers.  (Cf. G4 OpenGL viewer for related code!)
00973     //
00974     // FIXME: If drawing screen-size filled markers and point size not
00975     // in range for SoMarkerSet, fall back on bare SoPointSet with
00976     // appropriate point size + glDisable(GL_POINT_SMOOTH)?
00977     SoMarkerSet *mset = new SoMarkerSet;
00978     switch (type)
00979     {
00980     case G4Polymarker::circles:
00981         switch (fill)
00982         {
00983         case G4VMarker::noFill:
00984             mset->markerIndex
00985                 = size <= 2.5 ? SoMarkerSet::CIRCLE_LINE_5_5
00986                 : size <= 3.5 ? SoMarkerSet::CIRCLE_LINE_7_7
00987                 : SoMarkerSet::CIRCLE_LINE_9_9;
00988             break;
00989 
00990         case G4VMarker::hashed:
00991             mset->markerIndex
00992                 = size <= 2.5 ? SoMarkerSet::STAR_5_5
00993                 : size <= 3.5 ? SoMarkerSet::STAR_7_7
00994                 : SoMarkerSet::STAR_9_9;
00995             break;
00996 
00997         case G4VMarker::filled:
00998             mset->markerIndex
00999                 = size <= 2.5 ? SoMarkerSet::CIRCLE_FILLED_5_5
01000                 : size <= 3.5 ? SoMarkerSet::CIRCLE_FILLED_7_7
01001                 : SoMarkerSet::CIRCLE_FILLED_9_9;
01002             break;
01003         }
01004         return mset;
01005 
01006     case G4Polymarker::squares:
01007         switch (fill)
01008         {
01009         case G4VMarker::noFill:
01010             mset->markerIndex
01011                 = size <= 2.5 ? SoMarkerSet::SQUARE_LINE_5_5
01012                 : size <= 3.5 ? SoMarkerSet::SQUARE_LINE_7_7
01013                 : SoMarkerSet::SQUARE_LINE_9_9;
01014             break;
01015 
01016         case G4VMarker::hashed:
01017             mset->markerIndex
01018                 = size <= 2.5 ? SoMarkerSet::CROSS_5_5
01019                 : size <= 3.5 ? SoMarkerSet::CROSS_7_7
01020                 : SoMarkerSet::CROSS_9_9;
01021             break;
01022 
01023         case G4VMarker::filled:
01024             mset->markerIndex
01025                 = size <= 2.5 ? SoMarkerSet::SQUARE_FILLED_5_5
01026                 : size <= 3.5 ? SoMarkerSet::SQUARE_FILLED_7_7
01027                 : SoMarkerSet::SQUARE_FILLED_9_9;
01028             break;
01029         }
01030         return mset;
01031 
01032     default:
01033         ASSERT (false);
01034         return 0;
01035     }
01036 }

SoShape * VisG4VisSceneHandler::makeWorldMarker ( G4Polymarker::MarkerType  type,
double  size 
) [private]

Definition at line 1039 of file VisG4VisSceneHandler.cc.

References ASSERT.

Referenced by AddPrimitive().

01040 {
01041     SoSphere *sphere;
01042     SoCube   *cube;
01043 
01044     switch (type)
01045     {
01046     case G4Polymarker::circles:
01047         sphere = new SoSphere;
01048         sphere->radius = size;
01049         return sphere;
01050 
01051     case G4Polymarker::squares:
01052         cube = new SoCube;
01053         cube->width = size * 2;
01054         cube->height = size * 2;
01055         cube->depth = size * 2;
01056         return cube;
01057 
01058     default:
01059         ASSERT (false);
01060         return 0;
01061     }
01062 }

void VisG4VisSceneHandler::PostAddSolid ( void   )  [private, virtual]

Definition at line 1162 of file VisG4VisSceneHandler.cc.

References ASSERT.

01163 { ASSERT (false); }

void VisG4VisSceneHandler::PreAddSolid ( const G4Transform3D &  transform,
const G4VisAttributes &  attributes 
) [private, virtual]

Definition at line 1158 of file VisG4VisSceneHandler.cc.

References ASSERT.

01159 { ASSERT (false); }

void VisG4VisSceneHandler::RequestPrimitives ( const G4VSolid &  solid  )  [private]

Definition at line 1092 of file VisG4VisSceneHandler.cc.

References AddPrimitive(), m_fallback, and m_sides.

Referenced by AddSolid().

01093 {
01094     if (m_fallback == G4ViewParameters::nurbs)
01095         if (G4NURBS *nurb = solid.CreateNURBS ())
01096         {
01097             AddPrimitive (*nurb);
01098             delete nurb;
01099             return;
01100         }
01101 
01102     // Failed or want polyhedron, keep going (FIXME: barf if fails).
01103     G4Polyhedron::SetNumberOfRotationSteps (m_sides);
01104     if (G4Polyhedron *polyh = solid.CreatePolyhedron ())
01105     {
01106         AddPrimitive (*polyh);
01107         delete polyh;
01108     }
01109     G4Polyhedron::ResetNumberOfRotationSteps ();
01110 }


Member Data Documentation

G4VisExtent VisG4VisSceneHandler::m_bbox [private]

Definition at line 381 of file VisG4VisSceneHandler.h.

Referenced by AddPrimitive(), and defineBounds().

bool VisG4VisSceneHandler::m_cached [private]

Definition at line 371 of file VisG4VisSceneHandler.h.

Referenced by cacheBegin(), cached(), and cacheEnd().

int VisG4VisSceneHandler::m_cacheIndex [private]

Definition at line 373 of file VisG4VisSceneHandler.h.

Referenced by cache(), cached(), and cacheEnd().

SoGroup* VisG4VisSceneHandler::m_cacheNodes [private]

Definition at line 372 of file VisG4VisSceneHandler.h.

Referenced by cache(), cacheBegin(), cached(), and cacheEnd().

bool VisG4VisSceneHandler::m_caching [private]

Definition at line 370 of file VisG4VisSceneHandler.h.

Referenced by cacheBegin(), enableCache(), and VisG4VisSceneHandler().

RepStyle VisG4VisSceneHandler::m_fallback [private]

Definition at line 380 of file VisG4VisSceneHandler.h.

Referenced by defineFallback(), and RequestPrimitives().

double VisG4VisSceneHandler::m_fontSize [private]

Definition at line 383 of file VisG4VisSceneHandler.h.

Referenced by AddPrimitive().

SoDrawStyle* VisG4VisSceneHandler::m_lines [private]

Definition at line 376 of file VisG4VisSceneHandler.h.

Referenced by AddPrimitive(), addStyle(), and VisG4VisSceneHandler().

MaterialCache VisG4VisSceneHandler::m_materialCache [private]

Definition at line 378 of file VisG4VisSceneHandler.h.

Referenced by clearCache().

SoSeparator* VisG4VisSceneHandler::m_node [private]

Definition at line 367 of file VisG4VisSceneHandler.h.

Referenced by addMaterial(), AddPrimitive(), AddSolid(), addStyle(), addTransform(), beginObject(), cached(), and endObject().

SoResetTransform* VisG4VisSceneHandler::m_reset [private]

Definition at line 375 of file VisG4VisSceneHandler.h.

NodeCache VisG4VisSceneHandler::m_shapeCache [private]

Definition at line 369 of file VisG4VisSceneHandler.h.

Referenced by cacheBegin(), and clearCache().

int VisG4VisSceneHandler::m_sides [private]

Definition at line 382 of file VisG4VisSceneHandler.h.

Referenced by defineNoOfSides(), and RequestPrimitives().

SoDrawStyle* VisG4VisSceneHandler::m_solid [private]

Definition at line 377 of file VisG4VisSceneHandler.h.

Referenced by addStyle(), and VisG4VisSceneHandler().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:35:25 2009 for CMSSW by  doxygen 1.5.4