OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Layer.h
Go to the documentation of this file.
1 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2009 Robert Osfield
2  *
3  * This library is open source and may be redistributed and/or modified under
4  * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5  * (at your option) any later version. The full license is in LICENSE file
6  * included with this distribution, and on the openscenegraph.org website.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * OpenSceneGraph Public License for more details.
12 */
13 
14 #ifndef OSGVOLUME_LAYER
15 #define OSGVOLUME_LAYER 1
16 
17 #include <osg/Image>
18 #include <osg/TransferFunction>
19 
20 #include <osgVolume/Locator>
21 #include <osgVolume/Property>
22 
23 namespace osgVolume {
24 
27 {
28  public:
29 
30  ImageDetails();
31 
34 
36 
37  void setTexelOffset(const osg::Vec4& offset) { _texelOffset = offset; }
38  const osg::Vec4& getTexelOffset() const { return _texelOffset; }
39 
40  void setTexelScale(const osg::Vec4& scale) { _texelScale = scale; }
41  const osg::Vec4& getTexelScale() const { return _texelScale; }
42 
43  void setMatrix(osg::RefMatrix* matrix) { _matrix = matrix; }
44  osg::RefMatrix* getMatrix() { return _matrix.get(); }
45  const osg::RefMatrix* getMatrix() const { return _matrix.get(); }
46 
47  protected:
48 
52 
53 };
54 
57 {
58  public:
59 
60  Layer();
61 
63  Layer(const Layer&,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
64 
66 
68  virtual void setFileName(const std::string& filename) { _filename = filename; }
69 
71  virtual const std::string& getFileName() const { return _filename; }
72 
73  void setLocator(Locator* locator) { _locator = locator; }
74  Locator* getLocator() { return _locator.get(); }
75  const Locator* getLocator() const { return _locator.get(); }
76 
77  void setDefaultValue(const osg::Vec4& value) { _defaultValue = value; }
78  const osg::Vec4& getDefaultValue() const { return _defaultValue; }
79 
81  void setMinFilter(osg::Texture::FilterMode filter) { _minFilter = filter; }
82 
84  osg::Texture::FilterMode getMinFilter() const { return _minFilter; }
85 
87  void setMagFilter(osg::Texture::FilterMode filter) { _magFilter = filter; }
88 
90  osg::Texture::FilterMode getMagFilter() const { return _magFilter; }
91 
93  virtual osg::Image* getImage() { return 0; }
94 
96  virtual const osg::Image* getImage() const { return 0; }
97 
98 
100  void setProperty(Property* property) { _property = property; }
101 
103  Property* getProperty() { return _property.get(); }
104 
106  const Property* getProperty() const { return _property.get(); }
107 
109  void addProperty(Property* property);
110 
111 
113  virtual bool requiresUpdateTraversal() const { return false; }
114 
116  virtual void update(osg::NodeVisitor& /*nv*/) {}
117 
119  virtual void dirty() {};
120 
122  virtual void setModifiedCount(unsigned int /*value*/) {};
123 
125  virtual unsigned int getModifiedCount() const { return 0; }
126 
127  virtual osg::BoundingSphere computeBound() const;
128 
129  protected:
130 
131  virtual ~Layer();
132 
133  std::string _filename;
138 
140 
141 };
142 
144 {
145  public:
146 
147  ImageLayer(osg::Image* image=0);
148 
150  ImageLayer(const ImageLayer& imageLayer,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
151 
153 
154  void setFileName(const std::string& filename) { _filename = filename; if (_image.valid()) _image->setFileName(filename); }
155  virtual const std::string& getFileName() const { return _image.get() ? _image->getFileName() : _filename; }
156 
157  void setImage(osg::Image* image);
158 
160  virtual osg::Image* getImage() { return _image.get(); }
161 
163  virtual const osg::Image* getImage() const { return _image.get(); }
164 
165 
166  void setTexelOffset(const osg::Vec4& offset) { _texelOffset = offset; }
167  const osg::Vec4& getTexelOffset() const { return _texelOffset; }
168 
169  void setTexelScale(const osg::Vec4& scale) { _texelScale = scale; }
170  const osg::Vec4& getTexelScale() const { return _texelScale; }
171 
172 
174  bool computeMinMax(osg::Vec4& min, osg::Vec4& max);
175 
177  void offsetAndScaleImage(const osg::Vec4& offset, const osg::Vec4& scale);
178 
180  void rescaleToZeroToOneRange();
181 
183  void translateMinToZero();
184 
185  virtual bool requiresUpdateTraversal() const;
186 
187  virtual void update(osg::NodeVisitor& /*nv*/);
188 
189  virtual void dirty();
190  virtual void setModifiedCount(unsigned int value);
191  virtual unsigned int getModifiedCount() const;
192 
193  protected:
194 
195  virtual ~ImageLayer() {}
196 
200 
201 };
202 
204 {
205  public:
206 
207  CompositeLayer();
208 
210  CompositeLayer(const CompositeLayer& compositeLayer,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
211 
213 
214  void clear();
215 
216  void setFileName(unsigned int i, const std::string& filename) { if (i>=_layers.size()) _layers.resize(i+1); _layers[i].filename = filename; if (_layers[i].layer.valid()) _layers[i].layer->setFileName(filename); }
217  const std::string& getFileName(unsigned int i) const { return _layers[i].layer.valid() ? _layers[i].layer->getFileName() : _layers[i].filename; }
218 
219  void setLayer(unsigned int i, Layer* layer) { if (i>=_layers.size()) _layers.resize(i+1); _layers[i].layer = layer; }
220  Layer* getLayer(unsigned int i) { return i<_layers.size() ? _layers[i].layer.get() : 0; }
221  const Layer* getLayer(unsigned int i) const { return i<_layers.size() ? _layers[i].layer.get() : 0; }
222 
223  void addLayer(Layer* layer) { _layers.push_back(NameLayer(layer->getFileName(),layer)); }
224 
225  void removeLayer(unsigned int i) { _layers.erase(_layers.begin()+i); }
226 
227  unsigned int getNumLayers() const { return _layers.size(); }
228 
229  bool requiresUpdateTraversal() const;
230 
231  virtual void update(osg::NodeVisitor& /*nv*/);
232 
233  protected:
234 
235  virtual ~CompositeLayer() {}
236 
237  struct NameLayer
238  {
240 
241  NameLayer(const NameLayer& cnl):
242  filename(cnl.filename),
243  layer(cnl.layer) {}
244 
245  NameLayer(const std::string& fn, Layer* l):
246  filename(fn),
247  layer(l) {}
248 
249  NameLayer& operator = (const NameLayer& cnl)
250  {
251  if (&cnl==this) return *this;
252 
253  filename = cnl.filename;
254  layer = cnl.layer;
255  return *this;
256  }
257 
258  std::string filename;
260  };
261 
262  typedef std::vector< NameLayer > Layers;
263 
264  Layers _layers;
265 };
266 
269 
272 
273 }
274 
275 #endif
virtual void dirty()
Definition: Layer.h:119
osg::ref_ptr< Locator > _locator
Definition: Layer.h:134
virtual osg::Image * getImage()
Definition: Layer.h:160
virtual const std::string & getFileName() const
Definition: Layer.h:71
osg::Vec4 _texelOffset
Definition: Layer.h:49
void setLocator(Locator *locator)
Definition: Layer.h:73
virtual void setModifiedCount(unsigned int)
Definition: Layer.h:122
OSG_EXPORT bool computeMinMax(const osg::Image *image, osg::Vec4 &min, osg::Vec4 &max)
osg::RefMatrix * getMatrix()
Definition: Layer.h:44
OSGVOLUME_EXPORT osg::Image * applyTransferFunction(osg::Image *image, osg::TransferFunction1D *transferFunction)
void setLayer(unsigned int i, Layer *layer)
Definition: Layer.h:219
virtual void update(osg::NodeVisitor &)
Definition: Layer.h:116
void setProperty(Property *property)
Definition: Layer.h:100
NameLayer(const std::string &fn, Layer *l)
Definition: Layer.h:245
#define OSGVOLUME_EXPORT
Definition: Export.h:39
void addLayer(Layer *layer)
Definition: Layer.h:223
osg::Texture::FilterMode getMinFilter() const
Definition: Layer.h:84
void removeLayer(unsigned int i)
Definition: Layer.h:225
osg::Texture::FilterMode getMagFilter() const
Definition: Layer.h:90
osg::Vec4 _defaultValue
Definition: Layer.h:135
void setTexelScale(const osg::Vec4 &scale)
Definition: Layer.h:40
const osg::Vec4 & getTexelOffset() const
Definition: Layer.h:38
Layer * getLayer(unsigned int i)
Definition: Layer.h:220
std::string _filename
Definition: Layer.h:133
NameLayer(const NameLayer &cnl)
Definition: Layer.h:241
osg::ref_ptr< osg::RefMatrix > _matrix
Definition: Layer.h:51
const Locator * getLocator() const
Definition: Layer.h:75
virtual unsigned int getModifiedCount() const
Definition: Layer.h:125
#define META_Object(library, name)
Definition: Object.h:42
void setDefaultValue(const osg::Vec4 &value)
Definition: Layer.h:77
void setTexelOffset(const osg::Vec4 &offset)
Definition: Layer.h:166
virtual const osg::Image * getImage() const
Definition: Layer.h:163
void setMagFilter(osg::Texture::FilterMode filter)
Definition: Layer.h:87
virtual ~CompositeLayer()
Definition: Layer.h:235
OSGVOLUME_EXPORT osg::Image * createNormalMapTexture(osg::Image *image_3d)
virtual ~ImageLayer()
Definition: Layer.h:195
OSG_EXPORT bool offsetAndScaleImage(osg::Image *image, const osg::Vec4 &offset, const osg::Vec4 &scale)
osg::ref_ptr< Property > _property
Definition: Layer.h:139
virtual const std::string & getFileName() const
Definition: Layer.h:155
virtual bool requiresUpdateTraversal() const
Definition: Layer.h:113
const osg::Vec4 & getTexelScale() const
Definition: Layer.h:41
void setTexelOffset(const osg::Vec4 &offset)
Definition: Layer.h:37
Locator * getLocator()
Definition: Layer.h:74
virtual void setFileName(const std::string &filename)
Definition: Layer.h:68
osg::Vec4 _texelScale
Definition: Layer.h:198
std::vector< NameLayer > Layers
Definition: Layer.h:262
virtual osg::Image * getImage()
Definition: Layer.h:93
unsigned int getNumLayers() const
Definition: Layer.h:227
virtual const osg::Image * getImage() const
Definition: Layer.h:96
void setFileName(const std::string &filename)
Definition: Layer.h:154
const Layer * getLayer(unsigned int i) const
Definition: Layer.h:221
void setTexelScale(const osg::Vec4 &scale)
Definition: Layer.h:169
osg::Texture::FilterMode _minFilter
Definition: Layer.h:136
const osg::RefMatrix * getMatrix() const
Definition: Layer.h:45
const osg::Vec4 & getTexelOffset() const
Definition: Layer.h:167
const Property * getProperty() const
Definition: Layer.h:106
void setFileName(unsigned int i, const std::string &filename)
Definition: Layer.h:216
osg::ref_ptr< osg::Image > _image
Definition: Layer.h:199
const std::string & getFileName(unsigned int i) const
Definition: Layer.h:217
const osg::Vec4 & getDefaultValue() const
Definition: Layer.h:78
osg::ref_ptr< Layer > layer
Definition: Layer.h:259
osg::Vec4 _texelScale
Definition: Layer.h:50
void setMatrix(osg::RefMatrix *matrix)
Definition: Layer.h:43
osg::Texture::FilterMode _magFilter
Definition: Layer.h:137
osg::Vec4 _texelOffset
Definition: Layer.h:197
Property * getProperty()
Definition: Layer.h:103
const osg::Vec4 & getTexelScale() const
Definition: Layer.h:170
void setMinFilter(osg::Texture::FilterMode filter)
Definition: Layer.h:81