SlideShowConstructor 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637
  1. /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2018 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. #ifndef SLIDESHOWCONSTRUCTOR
  14. #define SLIDESHOWCONSTRUCTOR
  15. #include <osg/Vec3>
  16. #include <osg/Vec4>
  17. #include <osg/ImageUtils>
  18. #include <osg/Group>
  19. #include <osg/ClearNode>
  20. #include <osg/Switch>
  21. #include <osg/AnimationPath>
  22. #include <osg/TransferFunction>
  23. #include <osg/ImageStream>
  24. #include <osg/ImageSequence>
  25. #include <osg/ScriptEngine>
  26. #include <osgText/Text>
  27. #include <osgGA/GUIEventAdapter>
  28. #include <osgDB/FileUtils>
  29. #include <osgVolume/VolumeTile>
  30. #include <osgVolume/VolumeSettings>
  31. #include <osgPresentation/AnimationMaterial>
  32. #include <osgPresentation/SlideEventHandler>
  33. #include <osgPresentation/PropertyManager>
  34. #include <osgPresentation/Timeout>
  35. namespace osgPresentation
  36. {
  37. class OSGPRESENTATION_EXPORT HUDTransform : public osg::Transform
  38. {
  39. public:
  40. HUDTransform(HUDSettings* hudSettings);
  41. virtual bool computeLocalToWorldMatrix(osg::Matrix& matrix,osg::NodeVisitor* nv) const;
  42. virtual bool computeWorldToLocalMatrix(osg::Matrix& matrix,osg::NodeVisitor*) const;
  43. protected:
  44. virtual ~HUDTransform();
  45. osg::ref_ptr<HUDSettings> _hudSettings;
  46. };
  47. class OSGPRESENTATION_EXPORT SlideShowConstructor
  48. {
  49. public:
  50. enum CoordinateFrame { SLIDE, MODEL };
  51. LayerAttributes* getOrCreateLayerAttributes(osg::Node* node);
  52. void setDuration(osg::Node* node,double duration)
  53. {
  54. getOrCreateLayerAttributes(node)->setDuration(duration);
  55. }
  56. void addKey(osg::Node* node,const KeyPosition& kp)
  57. {
  58. getOrCreateLayerAttributes(node)->addKey(kp);
  59. }
  60. void addRunString(osg::Node* node, const std::string& runString)
  61. {
  62. getOrCreateLayerAttributes(node)->addRunString(runString);
  63. }
  64. void setJump(osg::Node* node, const JumpData& jumpData)
  65. {
  66. getOrCreateLayerAttributes(node)->setJump(jumpData);
  67. }
  68. void addPresentationKey(const KeyPosition& kp)
  69. {
  70. if (!_presentationSwitch) createPresentation();
  71. if (_presentationSwitch.valid()) addKey( _presentationSwitch.get(), kp);
  72. }
  73. void addPresentationRunString(const std::string& runString)
  74. {
  75. if (!_presentationSwitch) createPresentation();
  76. if (_presentationSwitch.valid()) addRunString( _presentationSwitch.get(),runString);
  77. }
  78. void addSlideKey(const KeyPosition& kp)
  79. {
  80. if (!_slide) addSlide();
  81. if (_slide.valid()) addKey(_slide.get(),kp);
  82. }
  83. void addSlideRunString(const std::string& runString)
  84. {
  85. if (!_slide) addSlide();
  86. if (_slide.valid()) addRunString(_slide.get(),runString);
  87. }
  88. void setSlideJump(const JumpData& jumpData)
  89. {
  90. if (!_slide) addSlide();
  91. if (_slide.valid()) setJump(_slide.get(),jumpData);
  92. }
  93. void addLayerKey(const KeyPosition& kp)
  94. {
  95. if (!_currentLayer) addLayer();
  96. if (_currentLayer.valid()) addKey(_currentLayer.get(),kp);
  97. }
  98. void addLayerRunString(const std::string& runString)
  99. {
  100. if (!_currentLayer) addLayer();
  101. if (_currentLayer.valid()) addRunString(_currentLayer.get(),runString);
  102. }
  103. void setLayerJump(const JumpData& jumpData)
  104. {
  105. if (!_currentLayer) addLayer();
  106. if (_currentLayer.valid()) setJump(_currentLayer.get(),jumpData);
  107. }
  108. struct PositionData
  109. {
  110. PositionData():
  111. frame(SlideShowConstructor::SLIDE),
  112. position(0.0f,1.0f,0.0f),
  113. //position(0.5f,0.5f,0.0f),
  114. scale(1.0f,1.0f,1.0f),
  115. rotate(0.0f,0.0f,0.0f,1.0f),
  116. rotation(0.0f,0.0f,1.0f,0.0f),
  117. absolute_path(false),
  118. inverse_path(false),
  119. path_time_offset(0.0),
  120. path_time_multiplier(1.0f),
  121. path_loop_mode(osg::AnimationPath::NO_LOOPING),
  122. animation_material_time_offset(0.0),
  123. animation_material_time_multiplier(1.0),
  124. animation_material_loop_mode(AnimationMaterial::NO_LOOPING),
  125. autoRotate(false),
  126. autoScale(false),
  127. hud(false) {}
  128. bool requiresPosition() const
  129. {
  130. return (position[0]!=0.0f || position[1]!=1.0f || position[2]!=1.0f);
  131. }
  132. bool requiresScale() const
  133. {
  134. return (scale[0]!=1.0f || scale[1]!=1.0f || scale[2]!=1.0f);
  135. }
  136. bool requiresRotate() const
  137. {
  138. return rotate[0]!=0.0f;
  139. }
  140. bool requiresAnimation() const
  141. {
  142. return (rotation[0]!=0.0f || !path.empty());
  143. }
  144. bool requiresMaterialAnimation() const
  145. {
  146. return !animation_material_filename.empty() || !fade.empty();
  147. }
  148. CoordinateFrame frame;
  149. osg::Vec3 position;
  150. osg::Vec3 scale;
  151. osg::Vec4 rotate;
  152. osg::Vec4 rotation;
  153. std::string animation_name;
  154. bool absolute_path;
  155. bool inverse_path;
  156. double path_time_offset;
  157. double path_time_multiplier;
  158. osg::AnimationPath::LoopMode path_loop_mode;
  159. std::string path;
  160. double animation_material_time_offset;
  161. double animation_material_time_multiplier;
  162. AnimationMaterial::LoopMode animation_material_loop_mode;
  163. std::string animation_material_filename;
  164. std::string fade;
  165. bool autoRotate;
  166. bool autoScale;
  167. bool hud;
  168. };
  169. struct ModelData
  170. {
  171. ModelData() {}
  172. std::string region;
  173. std::string effect;
  174. std::string options;
  175. };
  176. struct ImageData
  177. {
  178. ImageData():
  179. width(1.0f),
  180. height(1.0f),
  181. region(0.0f,0.0f,1.0f,1.0f),
  182. region_in_pixel_coords(false),
  183. texcoord_rotate(0.0f),
  184. loopingMode(osg::ImageStream::NO_LOOPING),
  185. page(-1),
  186. backgroundColor(1.0f,1.0f,1.0f,1.0f),
  187. fps(30.0),
  188. duration(-1.0),
  189. imageSequence(false),
  190. imageSequencePagingMode(osg::ImageSequence::PAGE_AND_DISCARD_USED_IMAGES),
  191. imageSequenceInteractionMode(PLAY_AUTOMATICALLY_LIKE_MOVIE),
  192. blendingHint(USE_IMAGE_ALPHA),
  193. delayTime(0.0),
  194. startTime(0.0),
  195. stopTime(-1.0),
  196. volume("")
  197. {}
  198. std::string options;
  199. float width;
  200. float height;
  201. osg::Vec4 region;
  202. bool region_in_pixel_coords;
  203. float texcoord_rotate;
  204. osg::ImageStream::LoopingMode loopingMode;
  205. int page;
  206. osg::Vec4 backgroundColor;
  207. double fps;
  208. double duration;
  209. bool imageSequence;
  210. osg::ImageSequence::Mode imageSequencePagingMode;
  211. enum ImageSequenceInteractionMode
  212. {
  213. PLAY_AUTOMATICALLY_LIKE_MOVIE,
  214. USE_MOUSE_X_POSITION,
  215. USE_MOUSE_Y_POSITION
  216. };
  217. ImageSequenceInteractionMode imageSequenceInteractionMode;
  218. enum BlendingHint
  219. {
  220. USE_IMAGE_ALPHA,
  221. OFF,
  222. ON
  223. };
  224. BlendingHint blendingHint;
  225. double delayTime;
  226. double startTime;
  227. double stopTime;
  228. std::string volume;
  229. };
  230. struct VolumeData
  231. {
  232. typedef osgVolume::VolumeSettings::ShadingModel ShadingModel;
  233. typedef osgVolume::VolumeSettings::Technique Technique;
  234. VolumeData():
  235. shadingModel(osgVolume::VolumeSettings::Standard),
  236. useTabbedDragger(false),
  237. useTrackballDragger(false),
  238. region_in_pixel_coords(false),
  239. alphaValue(),
  240. cutoffValue(),
  241. exteriorTransparencyFactorValue(),
  242. sampleDensityValue(),
  243. sampleRatioValue(),
  244. colorSpaceOperation(osg::NO_COLOR_SPACE_OPERATION),
  245. colorModulate(1.0f,1.0f,1.0f,1.0f),
  246. technique(osgVolume::VolumeSettings::RayTraced)
  247. {
  248. hullPositionData.position = osg::Vec3(0.0,0.0,0.0);
  249. hullPositionData.frame = osgPresentation::SlideShowConstructor::MODEL;
  250. }
  251. osg::ref_ptr<osgVolume::VolumeSettings> volumeSettings;
  252. std::string options;
  253. ShadingModel shadingModel;
  254. osg::ref_ptr<osg::TransferFunction1D> transferFunction;
  255. bool useTabbedDragger;
  256. bool useTrackballDragger;
  257. std::string region;
  258. bool region_in_pixel_coords;
  259. std::string alphaValue;
  260. std::string cutoffValue;
  261. std::string exteriorTransparencyFactorValue;
  262. std::string sampleDensityValue;
  263. std::string sampleDensityWhenMovingValue;
  264. std::string sampleRatioValue;
  265. std::string sampleRatioWhenMovingValue;
  266. osg::ColorSpaceOperation colorSpaceOperation;
  267. osg::Vec4 colorModulate;
  268. Technique technique;
  269. std::string hull;
  270. PositionData hullPositionData;
  271. };
  272. struct FontData
  273. {
  274. FontData():
  275. font("fonts/arial.ttf"),
  276. layout(osgText::Text::LEFT_TO_RIGHT),
  277. alignment(osgText::Text::LEFT_BASE_LINE),
  278. axisAlignment(osgText::Text::XZ_PLANE),
  279. characterSizeMode(osgText::Text::OBJECT_COORDS),
  280. characterSize(0.04f),
  281. maximumHeight(1.0f),
  282. maximumWidth(1.0f),
  283. color(1.0f,1.0f,1.0f,1.0f) {}
  284. std::string font;
  285. osgText::Text::Layout layout;
  286. osgText::Text::AlignmentType alignment;
  287. osgText::Text::AxisAlignment axisAlignment;
  288. osgText::Text::CharacterSizeMode characterSizeMode;
  289. float characterSize;
  290. float maximumHeight;
  291. float maximumWidth;
  292. osg::Vec4 color;
  293. };
  294. enum ScriptCallbackType
  295. {
  296. UPDATE_SCRIPT,
  297. EVENT_SCRIPT
  298. };
  299. typedef std::pair<ScriptCallbackType, std::string> ScriptPair;
  300. struct ScriptData
  301. {
  302. ScriptData() {}
  303. typedef std::vector<ScriptPair> Scripts;
  304. Scripts scripts;
  305. bool hasScripts() const { return !scripts.empty(); }
  306. };
  307. SlideShowConstructor(osgDB::Options* options);
  308. void createPresentation();
  309. void setBackgroundColor(const osg::Vec4& color, bool updateClearNode);
  310. const osg::Vec4& getBackgroundColor() const { return _backgroundColor; }
  311. void setTextColor(const osg::Vec4& color);
  312. const osg::Vec4& getTextColor() const { return _textFontDataDefault.color; }
  313. void setPresentationName(const std::string& name);
  314. void setPresentationAspectRatio(float aspectRatio);
  315. void setPresentationAspectRatio(const std::string& str);
  316. void setPresentationDuration(double duration);
  317. void addScriptEngine(const std::string& scriptEngineName);
  318. void addScriptFile(const std::string& name, const std::string& filename);
  319. void addScript(const std::string& name, const std::string& language, const std::string& script);
  320. void addSlide();
  321. void selectSlide(int slideNum);
  322. void setSlideTitle(const std::string& name, PositionData& positionData, FontData& fontData)
  323. {
  324. _titlePositionData = positionData;
  325. _titleFontData = fontData;
  326. _slideTitle = name;
  327. }
  328. void setSlideBackgrondHUD(bool hud) { _slideBackgroundAsHUD = hud; }
  329. void setSlideBackground(const std::string& name) { _slideBackgroundImageFileName = name; }
  330. void setSlideDuration(double duration);
  331. Timeout* addTimeout();
  332. void addLayer(bool inheritPreviousLayers=true, bool defineAsBaseLayer=false);
  333. void selectLayer(int layerNum);
  334. void setLayerDuration(double duration);
  335. // title settings
  336. FontData& getTitleFontData() { return _titleFontData; }
  337. FontData& getTitleFontDataDefault() { return _titleFontDataDefault; }
  338. PositionData& getTitlePositionData() { return _titlePositionData; }
  339. PositionData& getTitlePositionDataDefault() { return _titlePositionDataDefault; }
  340. // text settings
  341. FontData& getTextFontData() { return _textFontData; }
  342. FontData& getTextFontDataDefault() { return _textFontDataDefault; }
  343. PositionData& getTextPositionData() { return _textPositionData; }
  344. PositionData& getTextPositionDataDefault() { return _textPositionDataDefault; }
  345. void translateTextCursor(const osg::Vec3& delta) { _textPositionData.position += delta; }
  346. // image settings
  347. PositionData& getImagePositionData() { return _imagePositionData; }
  348. PositionData& getImagePositionDataDefault() { return _imagePositionDataDefault; }
  349. // model settings
  350. PositionData& getModelPositionData() { return _modelPositionData; }
  351. PositionData& getModelPositionDataDefault() { return _modelPositionDataDefault; }
  352. enum PresentationContext {
  353. CURRENT_PRESENTATION,
  354. CURRENT_SLIDE,
  355. CURRENT_LAYER
  356. };
  357. void addEventHandler(PresentationContext presentationContext, osg::ref_ptr<osgGA::GUIEventHandler> handler);
  358. void keyToDoOperation(PresentationContext presentationContext, int key, Operation operation, const JumpData& jumpData=JumpData());
  359. void keyToDoOperation(PresentationContext presentationContext, int key, const std::string& command, Operation operation, const JumpData& jumpData=JumpData());
  360. void keyEventOperation(PresentationContext presentationContext, int key, const KeyPosition& keyPos, const JumpData& jumpData=JumpData());
  361. void layerClickToDoOperation(Operation operation, const JumpData& jumpData=JumpData());
  362. void layerClickToDoOperation(const std::string& command, Operation operation, const JumpData& jumpData=JumpData());
  363. void layerClickEventOperation(const KeyPosition& keyPos, const JumpData& jumpData=JumpData());
  364. void addPropertyAnimation(PresentationContext presentationContext, PropertyAnimation* propertyAnimation);
  365. void addScriptCallback(PresentationContext presentationContext, ScriptCallbackType scriptCallbackType, const std::string& functionName);
  366. void addScriptToNode(ScriptCallbackType scriptCallbackType, const std::string& name, osg::Node* node);
  367. void addScriptsToNode(const ScriptData& scriptData, osg::Node* node);
  368. void addToCurrentLayer(osg::Node* subgraph);
  369. void addBullet(const std::string& bullet, PositionData& positionData, FontData& fontData, const ScriptData& scriptData);
  370. void addParagraph(const std::string& paragraph, PositionData& positionData, FontData& fontData, const ScriptData& scriptData);
  371. osg::ref_ptr<osg::Image> readImage(const std::string& filename, const ImageData& imageData);
  372. void addImage(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData);
  373. void addStereoImagePair(const std::string& filenameLeft, const ImageData& imageDataLeft, const std::string& filenameRight,const ImageData& imageDataRight, const PositionData& positionData, const ScriptData& scriptData);
  374. void addGraph(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData);
  375. void addVNC(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const std::string& password, const ScriptData& scriptData);
  376. void addBrowser(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData);
  377. void addPDF(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData);
  378. osg::ref_ptr<osg::Image> addInteractiveImage(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData);
  379. void addModel(osg::Node* subgraph, const PositionData& positionData, const ModelData& modelData, const ScriptData& scriptData);
  380. void addModel(const std::string& filename, const PositionData& positionData, const ModelData& modelData, const ScriptData& scriptData);
  381. void setUpVolumeScalarProperty(osgVolume::VolumeTile* tile, osgVolume::ScalarProperty* property, const std::string& source);
  382. void addVolume(const std::string& filename, const PositionData& positionData, const VolumeData& volumeData, const ScriptData& scriptData);
  383. osg::Group* takePresentation() { return _root.release(); }
  384. osg::Group* getPresentation() { return _root.get(); }
  385. osg::Switch* getPresentationSwitch() { return _presentationSwitch.get(); }
  386. osg::Switch* getCurrentSlide() { return _slide.get(); }
  387. void pushCurrentLayer(osg::Group* newLayerGroup);
  388. void popCurrentLayer();
  389. osg::Group* getCurrentLayer() { return _currentLayer.get(); }
  390. void setLoopPresentation(bool loop) { _loopPresentation = loop; }
  391. bool getLoopPresentation() const { return _loopPresentation; }
  392. void setAutoSteppingActive(bool flag = true) { _autoSteppingActive = flag; }
  393. bool getAutoSteppingActive() const { return _autoSteppingActive; }
  394. void setHUDSettings(HUDSettings* hudSettings) { _hudSettings = hudSettings; }
  395. HUDSettings* getHUDSettings() { return _hudSettings.get(); }
  396. const HUDSettings* getHUDSettings() const { return _hudSettings.get(); }
  397. osg::ScriptEngine* getOrCreateScriptEngine(const std::string& language);
  398. protected:
  399. void findImageStreamsAndAddCallbacks(osg::Node* node);
  400. osg::Geometry* createTexturedQuadGeometry(const osg::Vec3& pos, const osg::Vec4& rotation, float width,float height, osg::Image* image, bool& usedTextureRectangle);
  401. void setUpMovieVolume(osg::Node* subgraph, osg::ImageStream* imageStream, const ImageData& imageData);
  402. osg::Vec3 computePositionInModelCoords(const PositionData& positionData) const;
  403. void updatePositionFromInModelCoords(const osg::Vec3& vertex, PositionData& positionData) const;
  404. osg::Vec3 convertSlideToModel(const osg::Vec3& position) const;
  405. osg::Vec3 convertModelToSlide(const osg::Vec3& position) const;
  406. osg::AnimationPathCallback* getAnimationPathCallback(const PositionData& positionData);
  407. osg::Node* attachMaterialAnimation(osg::Node* model, const PositionData& positionData);
  408. bool attachTexMat(osg::StateSet* stateset, const ImageData& imageData, float s, float t, bool textureRectangle);
  409. osg::StateSet* createTransformStateSet()
  410. {
  411. osg::StateSet* stateset = new osg::StateSet;
  412. #if !defined(OSG_GLES2_AVAILABLE)
  413. stateset->setMode(GL_NORMALIZE,osg::StateAttribute::ON);
  414. #endif
  415. return stateset;
  416. }
  417. osg::Node* decorateSubgraphForPosition(osg::Node* node, PositionData& positionData);
  418. osg::Node* decorateSubgraphForPositionAndAnimation(osg::Node* node, const PositionData& positionData);
  419. osg::ref_ptr<osgDB::Options> _options;
  420. osg::Vec3 _slideOrigin;
  421. osg::Vec3 _eyeOrigin;
  422. double _slideWidth;
  423. double _slideHeight;
  424. double _slideDistance;
  425. unsigned int _leftEyeMask;
  426. unsigned int _rightEyeMask;
  427. osg::ref_ptr<HUDSettings> _hudSettings;
  428. // title settings
  429. FontData _titleFontData;
  430. FontData _titleFontDataDefault;
  431. PositionData _titlePositionData;
  432. PositionData _titlePositionDataDefault;
  433. // text settings
  434. FontData _textFontData;
  435. FontData _textFontDataDefault;
  436. PositionData _textPositionData;
  437. PositionData _textPositionDataDefault;
  438. // image settings
  439. PositionData _imagePositionData;
  440. PositionData _imagePositionDataDefault;
  441. // model settings
  442. PositionData _modelPositionData;
  443. PositionData _modelPositionDataDefault;
  444. bool _loopPresentation;
  445. bool _autoSteppingActive;
  446. osg::Vec4 _backgroundColor;
  447. std::string _presentationName;
  448. double _presentationDuration;
  449. osg::ref_ptr<osgPresentation::PropertyManager> _propertyManager;
  450. osg::ref_ptr<osgPresentation::PropertyEventCallback> _propertyEventCallback;
  451. osg::ref_ptr<osg::Group> _root;
  452. osg::ref_ptr<osg::Switch> _presentationSwitch;
  453. typedef std::map< std::string, osg::ref_ptr<osg::ScriptEngine> > ScriptEngineMap;
  454. ScriptEngineMap _scriptEngines;
  455. typedef std::map< std::string, osg::ref_ptr<osg::Script> > ScriptMap;
  456. ScriptMap _scripts;
  457. osg::ref_ptr<osg::ClearNode> _slideClearNode;
  458. osg::ref_ptr<osg::Switch> _slide;
  459. std::string _slideTitle;
  460. std::string _slideBackgroundImageFileName;
  461. bool _slideBackgroundAsHUD;
  462. osg::ref_ptr<osg::Group> _previousLayer;
  463. osg::ref_ptr<osg::Group> _currentLayer;
  464. typedef std::vector< osg::ref_ptr<osg::Group> > LayerStack;
  465. LayerStack _layerStack;
  466. osg::ref_ptr<FilePathData> _filePathData;
  467. osg::ref_ptr<osg::Group> _layerToApplyEventCallbackTo;
  468. typedef std::list< osg::ref_ptr<osgGA::GUIEventHandler> > EventHandlerList;
  469. EventHandlerList _currentEventCallbacksToApply;
  470. std::string findFileAndRecordPath(const std::string& filename);
  471. void recordOptionsFilePath(const osgDB::Options* options);
  472. };
  473. }
  474. #endif