Added preliminary support for writing VolumeSettings to disk from within Present3D in response to pressing and releasing 'Ctrl-S'.

git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14363 16af8721-9629-0410-8352-f15c8da7e697
This commit is contained in:
Robert Osfield
2014-07-04 16:45:05 +00:00
parent 70f9bdc6e1
commit f2d11bb46e
7 changed files with 238 additions and 69 deletions

View File

@@ -292,11 +292,11 @@ public:
useTabbedDragger(false),
useTrackballDragger(false),
region_in_pixel_coords(false),
alphaValue("1.0"),
cutoffValue("0.1"),
exteriorTransparencyFactorValue(""),
sampleDensityValue("0.005"),
sampleRatioValue("1.0"),
alphaValue(),
cutoffValue(),
exteriorTransparencyFactorValue(),
sampleDensityValue(),
sampleRatioValue(),
colorSpaceOperation(osg::NO_COLOR_SPACE_OPERATION),
colorModulate(1.0f,1.0f,1.0f,1.0f),
technique(osgVolume::VolumeSettings::RayTraced)

View File

@@ -40,6 +40,7 @@ class SampleDensityProperty;
class SampleDensityWhenMovingProperty;
class TransparencyProperty;
class ExteriorTransparencyFactorProperty;
class VolumeSettings;
class OSGVOLUME_EXPORT PropertyVisitor
{
@@ -49,24 +50,24 @@ class OSGVOLUME_EXPORT PropertyVisitor
virtual ~PropertyVisitor() {}
virtual void apply(Property&) {}
virtual void apply(Property&);
virtual void apply(CompositeProperty&);
virtual void apply(SwitchProperty&);
virtual void apply(TransferFunctionProperty&) {}
virtual void apply(ScalarProperty&) {}
virtual void apply(IsoSurfaceProperty&) {}
virtual void apply(AlphaFuncProperty&) {}
virtual void apply(MaximumIntensityProjectionProperty&) {}
virtual void apply(LightingProperty&) {}
virtual void apply(SampleRatioProperty&) {}
virtual void apply(SampleRatioWhenMovingProperty&) {}
virtual void apply(SampleDensityProperty&) {}
virtual void apply(SampleDensityWhenMovingProperty&) {}
virtual void apply(TransparencyProperty&) {}
virtual void apply(ExteriorTransparencyFactorProperty&) {}
virtual void apply(TransferFunctionProperty&);
virtual void apply(ScalarProperty&);
virtual void apply(IsoSurfaceProperty&);
virtual void apply(AlphaFuncProperty&);
virtual void apply(MaximumIntensityProjectionProperty&);
virtual void apply(LightingProperty&);
virtual void apply(SampleRatioProperty&);
virtual void apply(SampleRatioWhenMovingProperty&);
virtual void apply(SampleDensityProperty&);
virtual void apply(SampleDensityWhenMovingProperty&);
virtual void apply(TransparencyProperty&);
virtual void apply(ExteriorTransparencyFactorProperty&);
virtual void apply(VolumeSettings&);
bool _traverseOnlyActiveChildren;
};
@@ -82,6 +83,7 @@ class OSGVOLUME_EXPORT Property : public osg::Object
META_Object(osgVolume, Property);
virtual void accept(PropertyVisitor& pv) { pv.apply(*this); }
virtual void traverse(PropertyVisitor& pv) {}
protected:
@@ -101,6 +103,16 @@ class OSGVOLUME_EXPORT CompositeProperty : public Property
virtual void accept(PropertyVisitor& pv) { pv.apply(*this); }
virtual void traverse(PropertyVisitor& pv)
{
for(Properties::iterator itr = _properties.begin();
itr != _properties.end();
++itr)
{
(*itr)->accept(pv);
}
}
void clear();
typedef std::vector< osg::ref_ptr<Property> > Properties;
@@ -139,6 +151,22 @@ class OSGVOLUME_EXPORT SwitchProperty : public CompositeProperty
virtual void accept(PropertyVisitor& pv) { pv.apply(*this); }
virtual void traverse(PropertyVisitor& pv)
{
if (pv._traverseOnlyActiveChildren)
{
if (_activeProperty>=0 && static_cast<unsigned int>(_activeProperty)<=getNumProperties())
{
_properties[_activeProperty]->accept(pv);
}
}
else
{
CompositeProperty::traverse(pv);
}
}
/** Set which child property is active.
* -1 disables all children.*/
void setActiveProperty(int i) { _activeProperty = i; }
@@ -411,7 +439,6 @@ class OSGVOLUME_EXPORT CollectPropertiesVisitor : public osgVolume::PropertyVisi
CollectPropertiesVisitor(bool traverseOnlyActiveChildren=true);
virtual void apply(Property&);
virtual void apply(TransferFunctionProperty&);
virtual void apply(ScalarProperty&);
virtual void apply(IsoSurfaceProperty& iso);

View File

@@ -31,6 +31,7 @@ class OSGVOLUME_EXPORT VolumeSettings : public Property
META_Object(osgVolume, VolumeSettings);
virtual void accept(PropertyVisitor& pv);
virtual void traverse(PropertyVisitor& pv);
enum Technique
{