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