diff --git a/include/osgPresentation/deprecated/SlideShowConstructor b/include/osgPresentation/deprecated/SlideShowConstructor index ae10b1e5c..a93342cd1 100644 --- a/include/osgPresentation/deprecated/SlideShowConstructor +++ b/include/osgPresentation/deprecated/SlideShowConstructor @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -354,6 +355,24 @@ public: osg::Vec4 color; }; + enum ScriptCallbackType + { + UPDATE_SCRIPT, + EVENT_SCRIPT + }; + + typedef std::pair ScriptPair; + + struct ScriptData + { + ScriptData() {} + + typedef std::vector Scripts; + Scripts scripts; + + bool hasScripts() const { return !scripts.empty(); } + }; + SlideShowConstructor(osgDB::Options* options); void createPresentation(); @@ -372,6 +391,11 @@ public: void setPresentationDuration(double duration); + void addScriptEngine(const std::string& scriptEngineName); + + void addScriptFile(const std::string& name, const std::string& filename); + + void addScript(const std::string& name, const std::string& language, const std::string& script); void addSlide(); @@ -442,31 +466,37 @@ public: void addPropertyAnimation(PresentationContext presentationContext, PropertyAnimation* propertyAnimation); + void addScriptCallback(PresentationContext presentationContext, ScriptCallbackType scriptCallbackType, const std::string& functionName); + + void addScriptToNode(ScriptCallbackType scriptCallbackType, const std::string& name, osg::Node* node); + + void addScriptsToNode(const ScriptData& scriptData, osg::Node* node); + void addToCurrentLayer(osg::Node* subgraph); - void addBullet(const std::string& bullet, PositionData& positionData, FontData& fontData); + void addBullet(const std::string& bullet, PositionData& positionData, FontData& fontData, const ScriptData& scriptData); - void addParagraph(const std::string& paragraph, PositionData& positionData, FontData& fontData); + void addParagraph(const std::string& paragraph, PositionData& positionData, FontData& fontData, const ScriptData& scriptData); osg::Image* readImage(const std::string& filename, const ImageData& imageData); - void addImage(const std::string& filename,const PositionData& positionData, const ImageData& imageData); + void addImage(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData); - void addStereoImagePair(const std::string& filenameLeft, const ImageData& imageDataLeft, const std::string& filenameRight,const ImageData& imageDataRight, const PositionData& positionData); + void addStereoImagePair(const std::string& filenameLeft, const ImageData& imageDataLeft, const std::string& filenameRight,const ImageData& imageDataRight, const PositionData& positionData, const ScriptData& scriptData); - void addGraph(const std::string& filename,const PositionData& positionData, const ImageData& imageData); - void addVNC(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const std::string& password); - void addBrowser(const std::string& filename,const PositionData& positionData, const ImageData& imageData); - void addPDF(const std::string& filename,const PositionData& positionData, const ImageData& imageData); - osg::Image* addInteractiveImage(const std::string& filename,const PositionData& positionData, const ImageData& imageData); + void addGraph(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData); + void addVNC(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const std::string& password, const ScriptData& scriptData); + void addBrowser(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData); + void addPDF(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData); + osg::Image* addInteractiveImage(const std::string& filename,const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData); - void addModel(osg::Node* subgraph, const PositionData& positionData, const ModelData& modelData); + void addModel(osg::Node* subgraph, const PositionData& positionData, const ModelData& modelData, const ScriptData& scriptData); - void addModel(const std::string& filename, const PositionData& positionData, const ModelData& modelData); + void addModel(const std::string& filename, const PositionData& positionData, const ModelData& modelData, const ScriptData& scriptData); void setUpVolumeScalarProperty(osgVolume::VolumeTile* tile, osgVolume::ScalarProperty* property, const std::string& source); - void addVolume(const std::string& filename, const PositionData& positionData, const VolumeData& volumeData); + void addVolume(const std::string& filename, const PositionData& positionData, const VolumeData& volumeData, const ScriptData& scriptData); osg::Group* takePresentation() { return _root.release(); } @@ -568,6 +598,12 @@ protected: osg::ref_ptr _root; osg::ref_ptr _presentationSwitch; + typedef std::map< std::string, osg::ref_ptr > ScriptEngineMap; + ScriptEngineMap _scriptEngines; + + typedef std::map< std::string, osg::ref_ptr > ScriptMap; + ScriptMap _scripts; + osg::ref_ptr _slideClearNode; osg::ref_ptr _slide; std::string _slideTitle; diff --git a/src/osgPlugins/p3d/ReaderWriterP3D.cpp b/src/osgPlugins/p3d/ReaderWriterP3D.cpp index de9cc3f8b..917a53644 100644 --- a/src/osgPlugins/p3d/ReaderWriterP3D.cpp +++ b/src/osgPlugins/p3d/ReaderWriterP3D.cpp @@ -203,6 +203,7 @@ public: bool getProperties(osgDB::XmlNode*cur, osgPresentation::SlideShowConstructor::FontData& value) const; bool getProperties(osgDB::XmlNode*cur, osgPresentation::SlideShowConstructor::ModelData& value) const; bool getProperties(osgDB::XmlNode*cur, osgPresentation::SlideShowConstructor::ImageData& value) const; + bool getProperties(osgDB::XmlNode*cur, osgPresentation::SlideShowConstructor::ScriptData& value) const; bool getJumpProperties(osgDB::XmlNode*cur, osgPresentation::JumpData& jumpData) const; @@ -1018,6 +1019,26 @@ bool ReaderWriterP3DXML::getProperties(osgDB::XmlNode*cur, osgPresentation::Slid return propertiesRead; } +bool ReaderWriterP3DXML::getProperties(osgDB::XmlNode*cur, osgPresentation::SlideShowConstructor::ScriptData& value) const +{ + bool propertiesRead=false; + + std::string name; + if (getProperty(cur, "update_script", name)) + { + value.scripts.push_back(osgPresentation::SlideShowConstructor::ScriptPair(osgPresentation::SlideShowConstructor::UPDATE_SCRIPT, name)); + propertiesRead = true; + } + + if (getProperty(cur, "event_script", name)) + { + value.scripts.push_back(osgPresentation::SlideShowConstructor::ScriptPair(osgPresentation::SlideShowConstructor::EVENT_SCRIPT, name)); + propertiesRead = true; + } + + return propertiesRead; +} + bool ReaderWriterP3DXML::parseProperties(osgDB::XmlNode* root, osg::UserDataContainer& udc) const { bool readProperties = false; @@ -1155,10 +1176,13 @@ void ReaderWriterP3DXML::parseModel(osgPresentation::SlideShowConstructor& const { osgPresentation::SlideShowConstructor::PositionData positionData = constructor.getModelPositionData(); - bool positionRead = getProperties(cur,positionData); + bool positionRead = getProperties(cur, positionData); osgPresentation::SlideShowConstructor::ModelData modelData;// = constructor.getModelData(); - getProperties(cur,modelData); + getProperties(cur, modelData); + + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur, scriptData); std::string filename = cur->getTrimmedContents(); @@ -1166,7 +1190,9 @@ void ReaderWriterP3DXML::parseModel(osgPresentation::SlideShowConstructor& const { constructor.addModel(filename, positionRead ? positionData : constructor.getModelPositionData(), - modelData); + modelData, + scriptData + ); } } @@ -1312,12 +1338,17 @@ void ReaderWriterP3DXML::parseVolume(osgPresentation::SlideShowConstructor& cons } } + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur, scriptData); + std::string filename = cur->getTrimmedContents(); if (!filename.empty()) { constructor.addVolume(filename, positionRead ? positionData : constructor.getModelPositionData(), - volumeData); + volumeData, + scriptData + ); } } @@ -1371,14 +1402,17 @@ void ReaderWriterP3DXML::parseStereoPair(osgPresentation::SlideShowConstructor& } } + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur, scriptData); + OSG_INFO<<" filenameLeft="<contents, positionRead ? positionData : constructor.getTextPositionData(), - fontRead ? fontData : constructor.getTextFontData()); + fontRead ? fontData : constructor.getTextFontData(), + scriptData + ); return true; } else if (cur->name == "image") @@ -1642,9 +1686,14 @@ bool ReaderWriterP3DXML::parseLayerChild(osgPresentation::SlideShowConstructor& osgPresentation::SlideShowConstructor::ImageData imageData;// = constructor.getImageData(); getProperties(cur,imageData); + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur, scriptData); + constructor.addImage(cur->getTrimmedContents(), positionRead ? positionData : constructor.getImagePositionData(), - imageData); + imageData, + scriptData + ); return true; } else if (cur->name == "imagesequence") @@ -1656,9 +1705,14 @@ bool ReaderWriterP3DXML::parseLayerChild(osgPresentation::SlideShowConstructor& imageData.imageSequence = true; getProperties(cur,imageData); + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur, scriptData); + constructor.addImage(cur->getTrimmedContents(), positionRead ? positionData : constructor.getImagePositionData(), - imageData); + imageData, + scriptData + ); return true; } else if (cur->name == "graph") @@ -1672,9 +1726,14 @@ bool ReaderWriterP3DXML::parseLayerChild(osgPresentation::SlideShowConstructor& std::string options; getProperty(cur, "options", options); + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur, scriptData); + constructor.addGraph(cur->getTrimmedContents(), positionRead ? positionData : constructor.getImagePositionData(), - imageData); + imageData, + scriptData + ); return true; } else if (cur->name == "vnc") @@ -1688,10 +1747,14 @@ bool ReaderWriterP3DXML::parseLayerChild(osgPresentation::SlideShowConstructor& std::string password; getProperty(cur, "password", password); + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur, scriptData); + constructor.addVNC(cur->getTrimmedContents(), positionRead ? positionData : constructor.getImagePositionData(), imageData, - password + password, + scriptData ); return true; } @@ -1703,9 +1766,13 @@ bool ReaderWriterP3DXML::parseLayerChild(osgPresentation::SlideShowConstructor& osgPresentation::SlideShowConstructor::ImageData imageData;// = constructor.getImageData(); getProperties(cur,imageData); + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur, scriptData); + constructor.addBrowser(cur->getTrimmedContents(), positionRead ? positionData : constructor.getImagePositionData(), - imageData); + imageData, + scriptData); return true; } else if (cur->name == "pdf") @@ -1716,9 +1783,14 @@ bool ReaderWriterP3DXML::parseLayerChild(osgPresentation::SlideShowConstructor& osgPresentation::SlideShowConstructor::ImageData imageData;// = constructor.getImageData(); getProperties(cur,imageData); + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur, scriptData); + constructor.addPDF(cur->getTrimmedContents(), positionRead ? positionData : constructor.getImagePositionData(), - imageData); + imageData, + scriptData + ); return true; } else if (cur->name == "stereo_pair") @@ -1773,6 +1845,17 @@ void ReaderWriterP3DXML::parseLayer(osgPresentation::SlideShowConstructor& const float totalIndent = 0.0f; + osgPresentation::SlideShowConstructor::ScriptData scriptData; + if (getProperties(root, scriptData)) + { + for(osgPresentation::SlideShowConstructor::ScriptData::Scripts::iterator itr = scriptData.scripts.begin(); + itr != scriptData.scripts.end(); + ++itr) + { + constructor.addScriptCallback(osgPresentation::SlideShowConstructor::CURRENT_LAYER, itr->first, itr->second); + } + } + for(osgDB::XmlNode::Children::iterator itr = root->children.begin(); itr != root->children.end(); ++itr) @@ -1948,9 +2031,14 @@ void ReaderWriterP3DXML::parseBullets(osgPresentation::SlideShowConstructor& con osgPresentation::SlideShowConstructor::FontData fontData = constructor.getTextFontData(); bool fontRead = getProperties(cur,fontData); + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur,scriptData); + constructor.addBullet(cur->contents, positionRead ? positionData : constructor.getTextPositionData(), - fontRead ? fontData : constructor.getTextFontData()); + fontRead ? fontData : constructor.getTextFontData(), + scriptData + ); } @@ -1965,9 +2053,14 @@ void ReaderWriterP3DXML::parseText(osgPresentation::SlideShowConstructor& constr osgPresentation::SlideShowConstructor::FontData fontData = constructor.getTextFontData(); bool fontRead = getProperties(cur,fontData); + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur,scriptData); + constructor.addParagraph(cur->contents, positionRead ? positionData : constructor.getTextPositionData(), - fontRead ? fontData : constructor.getTextFontData()); + fontRead ? fontData : constructor.getTextFontData(), + scriptData + ); } void ReaderWriterP3DXML::parsePage(osgPresentation::SlideShowConstructor& constructor, osgDB::XmlNode*cur) const @@ -2005,9 +2098,14 @@ void ReaderWriterP3DXML::parsePage(osgPresentation::SlideShowConstructor& constr osgPresentation::SlideShowConstructor::FontData fontData = constructor.getTextFontData(); bool fontRead = getProperties(cur,fontData); + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur, scriptData); + constructor.addParagraph(cur->contents, positionRead ? positionData : constructor.getTextPositionData(), - fontRead ? fontData : constructor.getTextFontData()); + fontRead ? fontData : constructor.getTextFontData(), + scriptData + ); } void ReaderWriterP3DXML::parsePdfDocument(osgPresentation::SlideShowConstructor& constructor, osgDB::XmlNode*cur) const @@ -2046,7 +2144,10 @@ void ReaderWriterP3DXML::parsePdfDocument(osgPresentation::SlideShowConstructor& imageData.page = 0; getProperties(cur,imageData); - osg::Image* image = constructor.addInteractiveImage(cur->contents, positionData, imageData); + osgPresentation::SlideShowConstructor::ScriptData scriptData; + getProperties(cur, scriptData); + + osg::Image* image = constructor.addInteractiveImage(cur->contents, positionData, imageData, scriptData); osgWidget::PdfImage* pdfImage = dynamic_cast(image); if (pdfImage) { @@ -2080,7 +2181,7 @@ void ReaderWriterP3DXML::parsePdfDocument(osgPresentation::SlideShowConstructor& constructor.addLayer(true,false); - constructor.addPDF(cur->getTrimmedContents(), positionData, imageData); + constructor.addPDF(cur->getTrimmedContents(), positionData, imageData, scriptData); } } @@ -2096,6 +2197,17 @@ void ReaderWriterP3DXML::parseSlide (osgPresentation::SlideShowConstructor& cons // create a keyPosition just in case we need it. osgPresentation::KeyPosition keyPosition; + osgPresentation::SlideShowConstructor::ScriptData scriptData; + if (getProperties(root, scriptData)) + { + for(osgPresentation::SlideShowConstructor::ScriptData::Scripts::iterator itr = scriptData.scripts.begin(); + itr != scriptData.scripts.end(); + ++itr) + { + constructor.addScriptCallback(osgPresentation::SlideShowConstructor::CURRENT_SLIDE, itr->first, itr->second); + } + } + for(osgDB::XmlNode::Children::iterator itr = root->children.begin(); itr != root->children.end(); ++itr) @@ -2808,7 +2920,25 @@ osg::Node* ReaderWriterP3DXML::parseXmlGraph(osgDB::XmlNode* root, bool readOnly { osgDB::XmlNode* cur = itr->get(); - if (cur->name == "name") + if (cur->name == "script_engine") + { + constructor.addScriptEngine(cur->contents); + } + else if (cur->name == "script_file") + { + std::string name; + getProperty(cur, "name", name); + constructor.addScriptFile(name, cur->contents); + } + else if (cur->name == "script") + { + std::string name; + getProperty(cur, "name", name); + std::string language("lua"); + getProperty(cur, "language", language); + constructor.addScript(name, language, cur->contents); + } + else if (cur->name == "name") { constructor.setPresentationName(cur->contents); } @@ -2946,6 +3076,17 @@ osg::Node* ReaderWriterP3DXML::parseXmlGraph(osgDB::XmlNode* root, bool readOnly } } + osgPresentation::SlideShowConstructor::ScriptData scriptData; + if (getProperties(root, scriptData)) + { + for(osgPresentation::SlideShowConstructor::ScriptData::Scripts::iterator itr = scriptData.scripts.begin(); + itr != scriptData.scripts.end(); + ++itr) + { + constructor.addScriptCallback(osgPresentation::SlideShowConstructor::CURRENT_PRESENTATION, itr->first, itr->second); + } + } + osgDB::getDataFilePathList() = previousPaths; return constructor.takePresentation(); diff --git a/src/osgPresentation/deprecated/SlideShowConstructor.cpp b/src/osgPresentation/deprecated/SlideShowConstructor.cpp index 9a9207aac..7c520a4d9 100644 --- a/src/osgPresentation/deprecated/SlideShowConstructor.cpp +++ b/src/osgPresentation/deprecated/SlideShowConstructor.cpp @@ -240,6 +240,15 @@ void SlideShowConstructor::createPresentation() //_root->addEventCallback(_propertyEventCallback.get()); _presentationSwitch->setEventCallback(_propertyEventCallback.get()); + + for(ScriptEngineMap::iterator itr = _scriptEngines.begin(); + itr != _scriptEngines.end(); + ++itr) + { + OSG_NOTICE<<"Assigning '"<first<<"' ScriptEngine to Presentation in createPresentation()."<getOrCreateUserDataContainer()->addUserObject(itr->second.get()); + } + } LayerAttributes* SlideShowConstructor::getOrCreateLayerAttributes(osg::Node* node) @@ -290,6 +299,48 @@ void SlideShowConstructor::setPresentationDuration(double duration) } } +void SlideShowConstructor::addScriptEngine(const std::string& scriptEngineName) +{ + if (_scriptEngines.count(scriptEngineName)!=0) + { + OSG_NOTICE<<"Script engine "< scriptEngine = osgDB::readFile(std::string("ScriptEngine.")+scriptEngineName); + if (scriptEngine.valid()) + { + _scriptEngines[scriptEngineName] = scriptEngine; + + if (_presentationSwitch.valid()) + { + _presentationSwitch->getOrCreateUserDataContainer()->addUserObject(scriptEngine.get()); + } + } + else + { + OSG_NOTICE<<"Warning: Failed to load "<addUpdateCallback(new osg::ScriptCallback(script_itr->second.get(), entry_point)); + break; + case(EVENT_SCRIPT) : + node->addEventCallback(new osg::ScriptCallback(script_itr->second.get(), entry_point)); + break; + } + } + else + { + OSG_NOTICE<<"Warning: script '"<first, itr->second, node); + } +} + + osg::Node* SlideShowConstructor::decorateSubgraphForPosition(osg::Node* node, PositionData& positionData) { @@ -675,7 +788,7 @@ osg::Node* SlideShowConstructor::decorateSubgraphForPosition(osg::Node* node, Po return subgraph; } -void SlideShowConstructor::addBullet(const std::string& bullet, PositionData& positionData, FontData& fontData) +void SlideShowConstructor::addBullet(const std::string& bullet, PositionData& positionData, FontData& fontData, const ScriptData& scriptData) { osg::Geode* geode = new osg::Geode; @@ -721,9 +834,11 @@ void SlideShowConstructor::addBullet(const std::string& bullet, PositionData& po { updatePositionFromInModelCoords(localPosition, _textPositionData); } + + if (scriptData.hasScripts()) addScriptsToNode(scriptData, geode); } -void SlideShowConstructor::addParagraph(const std::string& paragraph, PositionData& positionData, FontData& fontData) +void SlideShowConstructor::addParagraph(const std::string& paragraph, PositionData& positionData, FontData& fontData, const ScriptData& scriptData) { osg::Geode* geode = new osg::Geode; @@ -768,6 +883,8 @@ void SlideShowConstructor::addParagraph(const std::string& paragraph, PositionDa { updatePositionFromInModelCoords(localPosition, _textPositionData); } + + if (scriptData.hasScripts()) addScriptsToNode(scriptData, geode); } class FindImageStreamsVisitor : public osg::NodeVisitor @@ -1180,7 +1297,7 @@ void SlideShowConstructor::setUpMovieVolume(osg::Node* subgraph, osg::ImageStrea } } -void SlideShowConstructor::addImage(const std::string& filename, const PositionData& positionData, const ImageData& imageData) +void SlideShowConstructor::addImage(const std::string& filename, const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData) { osg::ref_ptr image = readImage(filename, imageData); if (!image) return; @@ -1338,9 +1455,11 @@ void SlideShowConstructor::addImage(const std::string& filename, const PositionD } addToCurrentLayer(subgraph); + + if (scriptData.hasScripts()) addScriptsToNode(scriptData, subgraph); } -void SlideShowConstructor::addStereoImagePair(const std::string& filenameLeft, const ImageData& imageDataLeft, const std::string& filenameRight, const ImageData& imageDataRight,const PositionData& positionData) +void SlideShowConstructor::addStereoImagePair(const std::string& filenameLeft, const ImageData& imageDataLeft, const std::string& filenameRight, const ImageData& imageDataRight,const PositionData& positionData, const ScriptData& scriptData) { osg::ref_ptr imageLeft = readImage(filenameLeft, imageDataLeft); osg::ref_ptr imageRight = (filenameRight==filenameLeft) ? imageLeft.get() : readImage(filenameRight, imageDataRight); @@ -1560,9 +1679,11 @@ void SlideShowConstructor::addStereoImagePair(const std::string& filenameLeft, c } addToCurrentLayer(subgraph); + + if (scriptData.hasScripts()) addScriptsToNode(scriptData, subgraph); } -void SlideShowConstructor::addGraph(const std::string& contents, const PositionData& positionData, const ImageData& imageData) +void SlideShowConstructor::addGraph(const std::string& contents, const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData) { static int s_count=0; @@ -1620,7 +1741,7 @@ void SlideShowConstructor::addGraph(const std::string& contents, const PositionD _options = _options.valid() ? _options->cloneOptions() : (new osgDB::Options); _options->setObjectCacheHint(osgDB::Options::CACHE_NONE); - addImage(tmpSvgFileName, positionData, imageData); + addImage(tmpSvgFileName, positionData, imageData, scriptData); _options = previousOptions; @@ -1630,7 +1751,7 @@ void SlideShowConstructor::addGraph(const std::string& contents, const PositionD } -void SlideShowConstructor::addVNC(const std::string& hostname, const PositionData& positionData, const ImageData& imageData, const std::string& password) +void SlideShowConstructor::addVNC(const std::string& hostname, const PositionData& positionData, const ImageData& imageData, const std::string& password, const ScriptData& scriptData) { if (!password.empty()) { @@ -1639,17 +1760,17 @@ void SlideShowConstructor::addVNC(const std::string& hostname, const PositionDat osgDB::Registry::instance()->getAuthenticationMap()->addAuthenticationDetails(hostname, new osgDB::AuthenticationDetails("", password)); } - addInteractiveImage(hostname+".vnc", positionData, imageData); + addInteractiveImage(hostname+".vnc", positionData, imageData, scriptData); } -void SlideShowConstructor::addBrowser(const std::string& url, const PositionData& positionData, const ImageData& imageData) +void SlideShowConstructor::addBrowser(const std::string& url, const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData) { - addInteractiveImage(url+".gecko", positionData, imageData); + addInteractiveImage(url+".gecko", positionData, imageData, scriptData); } -void SlideShowConstructor::addPDF(const std::string& filename, const PositionData& positionData, const ImageData& imageData) +void SlideShowConstructor::addPDF(const std::string& filename, const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData) { - addInteractiveImage(filename, positionData, imageData); + addInteractiveImage(filename, positionData, imageData, scriptData); } class SetPageCallback: public LayerCallback @@ -1676,7 +1797,7 @@ public: }; -osg::Image* SlideShowConstructor::addInteractiveImage(const std::string& filename, const PositionData& positionData, const ImageData& imageData) +osg::Image* SlideShowConstructor::addInteractiveImage(const std::string& filename, const PositionData& positionData, const ImageData& imageData, const ScriptData& scriptData) { osg::ref_ptr options = _options; if (!imageData.options.empty()) @@ -1819,6 +1940,7 @@ osg::Image* SlideShowConstructor::addInteractiveImage(const std::string& filenam } + if (scriptData.hasScripts()) addScriptsToNode(scriptData, subgraph); return image; } @@ -1902,7 +2024,7 @@ protected: }; -void SlideShowConstructor::addModel(const std::string& filename, const PositionData& positionData, const ModelData& modelData) +void SlideShowConstructor::addModel(const std::string& filename, const PositionData& positionData, const ModelData& modelData, const ScriptData& scriptData) { OSG_INFO<<"SlideShowConstructor::addModel("<