Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
SoStyleCache.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#ifdef G4VIS_BUILD_OI_DRIVER
27
28/*----------------------------HEPVis----------------------------------------*/
29/* */
30/* Node: SoStyleCache */
31/* Author: Guy Barrand */
32/* */
33/*--------------------------------------------------------------------------*/
34
35// this :
37
38#include <Inventor/nodes/SoMaterial.h>
39#include <Inventor/nodes/SoDrawStyle.h>
40#include <Inventor/nodes/SoLightModel.h>
41#include <Inventor/nodes/SoResetTransform.h>
42
43//////////////////////////////////////////////////////////////////////////////
45)
46:fMaterials(0)
47,fLineStyles(0)
48,fLightModels(0)
49,fResetTransform(0)
50//////////////////////////////////////////////////////////////////////////////
51//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
52{
53 fMaterials = new SoGroup;
54 addChild(fMaterials);
55 fLineStyles = new SoGroup;
56 addChild(fLineStyles);
57 fLightModels = new SoGroup;
58 addChild(fLightModels);
59 fResetTransform = new SoResetTransform;
60 addChild(fResetTransform);
61}
62//////////////////////////////////////////////////////////////////////////////
64)
65//////////////////////////////////////////////////////////////////////////////
66//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
67{
68}
69//////////////////////////////////////////////////////////////////////////////
71 const SbColor& aRGB
72,float aTransparency
73)
74//////////////////////////////////////////////////////////////////////////////
75//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
76{
77 int number = fMaterials->getNumChildren();
78 for(int index=0;index<number;index++) {
79 SoMaterial* material = (SoMaterial*)fMaterials->getChild(index);
80 if( (material->diffuseColor[0]==aRGB) &&
81 (material->transparency[0]==aTransparency) ) {
82 return material;
83 }
84 }
85 SoMaterial* material = new SoMaterial;
86 material->diffuseColor.setValue(aRGB);
87 material->transparency.setValue(aTransparency);
88 fMaterials->addChild(material);
89 return material;
90}
91//////////////////////////////////////////////////////////////////////////////
93 float aRed
94,float aGreen
95,float aBlue
96,float aTransparency
97)
98//////////////////////////////////////////////////////////////////////////////
99//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
100{
101 SbColor aRGB(aRed,aGreen,aBlue);
102 int number = fMaterials->getNumChildren();
103 for(int index=0;index<number;index++) {
104 SoMaterial* material = (SoMaterial*)fMaterials->getChild(index);
105 if( (material->diffuseColor[0]==aRGB) &&
106 (material->transparency[0]==aTransparency) ) {
107 return material;
108 }
109 }
110 SoMaterial* material = new SoMaterial;
111 material->diffuseColor.setValue(aRGB);
112 material->transparency.setValue(aTransparency);
113 fMaterials->addChild(material);
114 return material;
115}
116/*
117//////////////////////////////////////////////////////////////////////////////
118SoDrawStyle* SoStyleCache::getLineStyle(
119 SbLineStyle aStyle
120,float aWidth
121)
122//////////////////////////////////////////////////////////////////////////////
123//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
124{
125 unsigned short pattern = 0xFFFF;
126 switch(aStyle) {
127 case SbLineDashed:
128 pattern = 0x00FF;
129 break;
130 case SbLineDotted:
131 pattern = 0x0101;
132 break;
133 case SbLineDashDotted:
134 pattern = 0x1C47;
135 break;
136 default: //SbLineSolid:
137 pattern = 0xFFFF;
138 break;
139 }
140 int number = fLineStyles->getNumChildren();
141 for(int index=0;index<number;index++) {
142 SoDrawStyle* drawStyle = (SoDrawStyle*)fLineStyles->getChild(index);
143 if( (drawStyle->style.getValue()==SoDrawStyle::LINES) &&
144 (drawStyle->lineWidth.getValue()==aWidth) &&
145 (drawStyle->linePattern.getValue()==pattern) ) {
146 return drawStyle;
147 }
148 }
149 SoDrawStyle* drawStyle = new SoDrawStyle;
150 drawStyle->style.setValue(SoDrawStyle::LINES);
151 drawStyle->lineWidth.setValue(aWidth);
152 drawStyle->linePattern.setValue(pattern);
153 fLineStyles->addChild(drawStyle);
154 return drawStyle;
155}
156*/
157//////////////////////////////////////////////////////////////////////////////
158SoDrawStyle* SoStyleCache::getLineStyle(
159 unsigned short aPattern
160,float aWidth
161)
162//////////////////////////////////////////////////////////////////////////////
163//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
164{
165 int number = fLineStyles->getNumChildren();
166 for(int index=0;index<number;index++) {
167 SoDrawStyle* drawStyle = (SoDrawStyle*)fLineStyles->getChild(index);
168 if( (drawStyle->style.getValue()==SoDrawStyle::LINES) &&
169 (drawStyle->lineWidth.getValue()==aWidth) &&
170 (drawStyle->linePattern.getValue()==aPattern) ) {
171 return drawStyle;
172 }
173 }
174 SoDrawStyle* drawStyle = new SoDrawStyle;
175 drawStyle->style.setValue(SoDrawStyle::LINES);
176 drawStyle->lineWidth.setValue(aWidth);
177 drawStyle->linePattern.setValue(aPattern);
178 fLineStyles->addChild(drawStyle);
179 return drawStyle;
180}
181//////////////////////////////////////////////////////////////////////////////
183)
184//////////////////////////////////////////////////////////////////////////////
185//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
186{
187 SoLightModel* lightModel = new SoLightModel;
188 lightModel->model.setValue(SoLightModel::PHONG);
189 fLightModels->addChild(lightModel);
190 return lightModel;
191}
192//////////////////////////////////////////////////////////////////////////////
194)
195//////////////////////////////////////////////////////////////////////////////
196//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
197{
198 SoLightModel* lightModel = new SoLightModel;
199 lightModel->model.setValue(SoLightModel::BASE_COLOR);
200 fLightModels->addChild(lightModel);
201 return lightModel;
202}
203//////////////////////////////////////////////////////////////////////////////
204SoResetTransform* SoStyleCache::getResetTransform(
205)
206//////////////////////////////////////////////////////////////////////////////
207//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
208{
209 return fResetTransform;
210}
211
212#endif
SoLightModel * getLightModelPhong()
SoLightModel * getLightModelBaseColor()
SoDrawStyle * getLineStyle(unsigned short=0xFFFF, float=0)
SoResetTransform * getResetTransform()
SoMaterial * getMaterial(const SbColor &, float=0)