Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
SoAlternateRepAction.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26
27// this :
29
30// Inventor :
31#include <Inventor/nodes/SoNode.h>
32#include <Inventor/elements/SoSwitchElement.h>
33#include <Inventor/elements/SoCoordinateElement.h>
34
35SO_ACTION_SOURCE(SoAlternateRepAction)
36
37//////////////////////////////////////////////////////////////////////////////
38void SoAlternateRepAction::initClass(
39)
40//////////////////////////////////////////////////////////////////////////////
41//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
42{
43 static bool first = true;
44 if (first) {
45 first = false;
46 SO_ACTION_INIT_CLASS(SoAlternateRepAction,SoAction);
47
48 SO_ENABLE(SoAlternateRepAction,SoSwitchElement); //SGI wants that.
49 SO_ENABLE(SoAlternateRepAction,SoCoordinateElement); //For SoMarkerSet.
50
51 SO_ACTION_ADD_METHOD(SoNode,nodeAction);
52 }
53}
54//////////////////////////////////////////////////////////////////////////////
56)
57:fGenerate(FALSE)
58//////////////////////////////////////////////////////////////////////////////
59//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
60{
61 SO_ACTION_CONSTRUCTOR(SoAlternateRepAction);
62}
63//////////////////////////////////////////////////////////////////////////////
65)
66//////////////////////////////////////////////////////////////////////////////
67//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
68{
69}
70//////////////////////////////////////////////////////////////////////////////
72 SbBool aGenerate
73)
74//////////////////////////////////////////////////////////////////////////////
75//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
76{
77 fGenerate = aGenerate;
78}
79//////////////////////////////////////////////////////////////////////////////
81) const
82//////////////////////////////////////////////////////////////////////////////
83//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
84{
85 return fGenerate;
86}
87
88// Inventor :
89#include <Inventor/nodes/SoNode.h>
90#include <Inventor/nodes/SoGroup.h>
91#include <Inventor/nodes/SoCoordinate3.h>
92
93// HEPVisUtils :
94//#include <HEPVis/nodes/SoHighlightMaterial.h>
95//#include <HEPVis/nodes/SoSplineCurve.h>
96
97#define IF_CLASS(aClass) \
98 if(aNode->isOfType(aClass::getClassTypeId())) {\
99 /*printf("debug : SoAlternateRepAction::nodeAction : %s generate %d\n",#aClass,This->fGenerate);*/\
100 aClass* node = (aClass*)aNode;\
101 if(This->fGenerate==TRUE) {\
102 if(node->alternateRep.getValue()==NULL) {\
103 node->generateAlternateRep();\
104 /* Then go down if needed : */\
105 SoNode* altRep = node->alternateRep.getValue();\
106 if((altRep!=NULL) && altRep->isOfType(SoGroup::getClassTypeId()))\
107 altRep->doAction(This);\
108 }\
109 } else {\
110 /* First go down if needed : */\
111 SoNode* altRep = node->alternateRep.getValue();\
112 if((altRep!=NULL) && altRep->isOfType(SoGroup::getClassTypeId()))\
113 altRep->doAction(This);\
114 /* Then clear : */\
115 node->clearAlternateRep();\
116 }\
117 }
118
119//////////////////////////////////////////////////////////////////////////////
120void SoAlternateRepAction::nodeAction(
121 SoAction* aThis
122,SoNode* aNode
123)
124//////////////////////////////////////////////////////////////////////////////
125//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
126{
127 /*printf("debug : SoAlternateRepAction::nodeAction : %s %s\n",
128 aNode->getName().getString(),
129 aNode->getTypeId().getName().getString());*/
130 //SoAlternateRepAction* This = (SoAlternateRepAction*)aThis;
131
132 if(false) {}
133 // HEPVisUtils :
134 //else IF_CLASS(SoHighlightMaterial)
135 //else IF_CLASS(SoSplineCurve)
136
137 // Inventor :
138 else if(aNode->isOfType(SoGroup::getClassTypeId())) {
139 aNode->doAction(aThis);
140 }
141 else if(aNode->isOfType(SoCoordinate3::getClassTypeId())) { //For SoMakerSet.
142 aNode->doAction(aThis);
143 }
144 // Else :
145 else if(aNode->getField("alternateRep")!=NULL) {
146 aNode->doAction(aThis);
147 }
148
149}
void setGenerate(SbBool)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
virtual ~SoAlternateRepAction()
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
SbBool getGenerate() const
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
#define FALSE
Definition: globals.hh:38