1 #ifndef CAPTURESETTINGS_H
2 #define CAPTURESETTINGS_H
3 
4 #include <osgDB/ReadFile>
5 #include <osgDB/FileNameUtils>
6 #include <osgDB/WriteFile>
7 #include <osgViewer/Viewer>
8 #include <osg/AnimationPath>
9 
10 #include "UpdateProperty.h"
11 
12 namespace gsc
13 {
14 
15 class CaptureSettings : public osg::Object
16 {
17 public:
18     CaptureSettings();
19     CaptureSettings(const CaptureSettings& cs, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
20 
21     META_Object(gsc, CaptureSettings);
22 
setInputFileName(const std::string & filename)23     void setInputFileName(const std::string& filename) { _inputFileName = filename; }
getInputFileName()24     const std::string& getInputFileName() const { return _inputFileName; }
25 
26     void setOutputFileName(const std::string& filename);
27     const std::string& getOutputFileName() const;
28 
29     std::string getOutputFileName(unsigned int frameNumber) const;
30     std::string getOutputFileName(unsigned int cameraNumber, unsigned int frameNumber) const;
31 
32     enum StereoMode
33     {
34         OFF,
35         HORIZONTAL_SPLIT,
36         VERTICAL_SPLIT
37     };
38 
setStereoMode(StereoMode mode)39     void setStereoMode(StereoMode mode) { _stereoMode = mode; }
getStereoMode()40     StereoMode getStereoMode() const { return _stereoMode; }
41 
setOffscreen(bool o)42     void setOffscreen(bool o) { _offscreen = o; }
getOffscreen()43     bool getOffscreen() const { return _offscreen; }
44 
setOutputImageFlip(bool flip)45     void setOutputImageFlip(bool flip) { _outputImageFlip = flip; }
getOutputImageFlip()46     bool getOutputImageFlip() const { return _outputImageFlip; }
47 
setWidth(unsigned int width)48     void setWidth(unsigned int width) { _width = width; }
getWidth()49     unsigned int getWidth() const { return _width; }
50 
setHeight(unsigned int height)51     void setHeight(unsigned int height) { _height = height; }
getHeight()52     unsigned int getHeight() const { return _height; }
53 
setScreenWidth(float width)54     void setScreenWidth(float width) { _screenWidth = width; }
getScreenWidth()55     float getScreenWidth() const { return _screenWidth; }
56 
setScreenHeight(float height)57     void setScreenHeight(float height) { _screenHeight = height; }
getScreenHeight()58     float getScreenHeight() const { return _screenHeight; }
59 
setScreenDistance(float distance)60     void setScreenDistance(float distance) { _screenDistance = distance; }
getScreenDistance()61     float getScreenDistance() const { return _screenDistance; }
62 
63 
64     enum PixelFormat
65     {
66         RGB,
67         RGBA
68     };
69 
setPixelFormat(PixelFormat format)70     void setPixelFormat(PixelFormat format) { _pixelFormat = format; }
getPixelFormat()71     PixelFormat getPixelFormat() const { return _pixelFormat; }
72 
setSamples(unsigned int s)73     void setSamples(unsigned int s) { _samples = s; }
getSamples()74     unsigned int getSamples() const { return _samples; }
75 
setSampleBuffers(unsigned int s)76     void setSampleBuffers(unsigned int s) { _sampleBuffers = s; }
getSampleBuffers()77     unsigned int getSampleBuffers() const { return _sampleBuffers; }
78 
setFrameRate(double fr)79     void setFrameRate(double fr) { _frameRate = fr; }
getFrameRate()80     double getFrameRate() const { return _frameRate; }
81 
setNumberOfFrames(unsigned int nf)82     void setNumberOfFrames(unsigned int nf) { _numberOfFrames = nf; }
getNumberOfFrames()83     unsigned int getNumberOfFrames() const { return _numberOfFrames; }
84 
85     typedef std::vector< osg::ref_ptr<osgGA::GUIEventHandler> > EventHandlers;
86     void setEventHandlers(const EventHandlers& eh);
getEventHandlers()87     EventHandlers& getEventHandlers() { return _eventHandlers; }
getEventHandlers()88     const EventHandlers& getEventHandlers() const { return _eventHandlers; }
89 
90     typedef std::vector< osg::ref_ptr<UpdateProperty> > Properties;
91 
addUpdateProperty(UpdateProperty * up)92     void addUpdateProperty(UpdateProperty* up) { _properties.push_back(up); }
93 
setProperties(const Properties & pl)94     void setProperties(const Properties& pl) { _properties = pl; }
getProperties()95     Properties& getProperties() { return _properties; }
getProperties()96     const Properties& getProperties() const { return _properties; }
97 
98     template<typename T>
getPropertyOfType()99     T* getPropertyOfType()
100     {
101         for(Properties::iterator itr = _properties.begin();
102             itr != _properties.end();
103             ++itr)
104         {
105             T* p = dynamic_cast<T*>(itr->get());
106             if (p) return p;
107         }
108         return 0;
109     }
110 
111     bool valid() const;
112 
113 protected:
~CaptureSettings()114     virtual ~CaptureSettings() {}
115 
116     std::string _inputFileName;
117 
118     std::string _outputFileName;
119     std::string _outputDirectoryName;
120     std::string _outputBaseFileName;
121     std::string _outputExtension;
122 
123     StereoMode                          _stereoMode;
124     bool                                _offscreen;
125     bool                                _outputImageFlip;
126 
127     unsigned int                        _width;
128     unsigned int                        _height;
129 
130     float                               _screenWidth;
131     float                               _screenHeight;
132     float                               _screenDistance;
133 
134     PixelFormat                         _pixelFormat;
135     unsigned int                        _samples;
136     unsigned int                        _sampleBuffers;
137 
138     double                              _frameRate;
139     unsigned int                        _numberOfFrames;
140 
141     EventHandlers                       _eventHandlers;
142     Properties                          _properties;
143 
144 };
145 
146 }
147 
148 #endif
149