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 OSGVOLUMESETTINGS
15#define OSGVOLUMESETTINGS 1
16
17#include <osg/Object>
18#include <osgVolume/Property>
19
20namespace osgVolume {
21
22class OSGVOLUME_EXPORT VolumeSettings : public Property
23{
24    public:
25
26        VolumeSettings();
27
28        /** Copy constructor using CopyOp to manage deep vs shallow copy.*/
29        VolumeSettings(const VolumeSettings&,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
30
31        META_Object(osgVolume, VolumeSettings);
32
33        virtual void accept(PropertyVisitor& pv);
34        virtual void traverse(PropertyVisitor& pv);
35
36        void setFilename(const std::string& str) { _filename = str; dirty(); }
37        const std::string& getFilename() const { return _filename; }
38
39        enum Technique
40        {
41            FixedFunction,
42            RayTraced,
43            MultiPass
44        };
45
46        void setTechnique(Technique technique) { _technique = technique; dirty(); }
47        Technique getTechnique() const { return _technique; }
48
49        enum ShadingModel
50        {
51            Standard,
52            Light,
53            Isosurface,
54            MaximumIntensityProjection
55        };
56
57        void setShadingModel(ShadingModel sm) { _shadingModel = sm; dirty(); }
58        ShadingModel getShadingModel() const { return _shadingModel; }
59
60        void setSampleRatio(float sr) { _sampleRatioProperty->setValue(sr); dirty(); }
61        float getSampleRatio() const { return _sampleRatioProperty->getValue(); }
62
63        void setSampleRatioWhenMoving(float sr) { _sampleRatioWhenMovingProperty->setValue(sr); dirty(); }
64        float getSampleRatioWhenMoving() const { return _sampleRatioWhenMovingProperty->getValue(); }
65
66        void setCutoff(float co);
67        float getCutoff() const { return _cutoffProperty->getValue(); }
68
69        void setTransparency(float t) { _transparencyProperty->setValue(t); dirty(); }
70        float getTransparency() const { return _transparencyProperty->getValue(); }
71
72
73        SampleRatioProperty* getSampleRatioProperty() { return _sampleRatioProperty.get(); }
74        const SampleRatioProperty* getSampleRatioProperty() const { return _sampleRatioProperty.get(); }
75
76        SampleRatioWhenMovingProperty* getSampleRatioWhenMovingProperty() { return _sampleRatioWhenMovingProperty.get(); }
77        const SampleRatioWhenMovingProperty* getSampleRatioWhenMovingProperty() const { return _sampleRatioWhenMovingProperty.get(); }
78
79        AlphaFuncProperty* getCutoffProperty() { return _cutoffProperty.get(); }
80        const AlphaFuncProperty* getCutoffProperty() const { return _cutoffProperty.get(); }
81
82        TransparencyProperty* getTransparencyProperty() { return _transparencyProperty.get(); }
83        const TransparencyProperty* getTransparencyProperty() const { return _transparencyProperty.get(); }
84
85        IsoSurfaceProperty* getIsoSurfaceProperty() { return _isoSurfaceProperty.get(); }
86        const IsoSurfaceProperty* getIsoSurfaceProperty() const { return _isoSurfaceProperty.get(); }
87
88protected:
89
90        virtual ~VolumeSettings() {}
91
92        std::string     _filename;
93
94        Technique       _technique;
95        ShadingModel    _shadingModel;
96
97        osg::ref_ptr<SampleRatioProperty>               _sampleRatioProperty;
98        osg::ref_ptr<SampleRatioWhenMovingProperty>     _sampleRatioWhenMovingProperty;
99        osg::ref_ptr<AlphaFuncProperty>                 _cutoffProperty;
100        osg::ref_ptr<TransparencyProperty>              _transparencyProperty;
101        osg::ref_ptr<IsoSurfaceProperty>                _isoSurfaceProperty;
102};
103
104}
105
106#endif
107