source: trunk/source/visualization/OpenInventor/src/SoStyleCache.cc @ 1202

Last change on this file since 1202 was 529, checked in by garnier, 17 years ago

r658@mac-90108: laurentgarnier | 2007-06-25 12:02:16 +0200
import de visualisation

  • Property svn:mime-type set to text/cpp
File size: 8.1 KB
Line 
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 :
36#include <HEPVis/misc/SoStyleCache.h>
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//////////////////////////////////////////////////////////////////////////////
44SoStyleCache::SoStyleCache(
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//////////////////////////////////////////////////////////////////////////////
63SoStyleCache::~SoStyleCache(
64)
65//////////////////////////////////////////////////////////////////////////////
66//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
67{
68}
69//////////////////////////////////////////////////////////////////////////////
70SoMaterial* SoStyleCache::getMaterial(
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//////////////////////////////////////////////////////////////////////////////
92SoMaterial* SoStyleCache::getMaterial(
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//////////////////////////////////////////////////////////////////////////////
182SoLightModel* SoStyleCache::getLightModelPhong(
183)
184//////////////////////////////////////////////////////////////////////////////
185//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
186{
187  SoLightModel* lightModel = new SoLightModel;
188  lightModel->model.setValue(SoLightModel::PHONG);
189  fLightModels->addChild(lightModel);
190  return lightModel;
191}
192//////////////////////////////////////////////////////////////////////////////
193SoLightModel* SoStyleCache::getLightModelBaseColor(
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
Note: See TracBrowser for help on using the repository browser.