/* Copyright Robert Osfield, Licensed under the GPL * * Experimental base for refactor of Present3D * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char** argv) { osg::ArgumentParser arguments(&argc, argv); osgViewer::Viewer viewer(arguments); typedef std::list< osg::ref_ptr > Scripts; Scripts scripts; std::string filename; while(arguments.read("--script",filename)) { osg::ref_ptr script = osgDB::readFile(filename); if (script.valid()) scripts.push_back(script.get()); } // create the model osg::ref_ptr model = osgDB::readNodeFiles(arguments); if (!model) return 1; // assgin script engine to scene graphs model->getOrCreateUserDataContainer()->addUserObject(osgDB::readFile("ScriptEngine.lua")); model->getOrCreateUserDataContainer()->addUserObject(osgDB::readFile("ScriptEngine.python")); model->getOrCreateUserDataContainer()->addUserObject(osgDB::readFile("ScriptEngine.js")); // assign scripts to scene graph for(Scripts::iterator itr = scripts.begin(); itr != scripts.end(); ++itr) { model->addUpdateCallback(new osg::ScriptCallback(itr->get())); } #if 0 std::string str; osg::ref_ptr luaScriptEngine = osgDB::readFile("ScriptEngine.lua"); if (luaScriptEngine.valid()) { while (arguments.read("--lua", str)) { osg::ref_ptr script = osgDB::readFile(str); if (script.valid()) { luaScriptEngine->run(script.get()); } } } osg::ref_ptr v8ScriptEngine = osgDB::readFile("ScriptEngine.V8"); if (v8ScriptEngine.valid()) { while (arguments.read("--js",str)) { osg::ref_ptr script = osgDB::readFile(str); if (script.valid()) { v8ScriptEngine->run(script.get()); } } } osg::ref_ptr pythonScriptEngine = osgDB::readFile("ScriptEngine.python"); if (pythonScriptEngine.valid()) { while (arguments.read("--python",str)) { osg::ref_ptr script = osgDB::readFile(str); if (script.valid()) { pythonScriptEngine->run(script.get()); } } } #endif osg::ref_ptr presentation = new osgPresentation::Presentation; osg::ref_ptr slide = new osgPresentation::Slide; osg::ref_ptr layer = new osgPresentation::Layer; osg::ref_ptr group = new osgPresentation::Group; osg::ref_ptr element = new osgPresentation::Element; osg::ref_ptr text = new osgPresentation::Text; presentation->addChild(slide.get()); slide->addChild(layer.get()); //layer->addChild(element.get()); layer->addChild(group.get()); group->addChild(element.get()); element->addChild(model.get()); group->addChild(new osgPresentation::Model); group->addChild(text.get()); group->addChild(new osgPresentation::Audio); group->addChild(new osgPresentation::Movie); group->addChild(new osgPresentation::Volume); text->setProperty("string",std::string("This is a first test")); text->setProperty("font",std::string("times.ttf")); text->setProperty("character_size",2.2); text->setProperty("width",std::string("103.2")); osgPresentation::PrintSupportedProperties psp(std::cout); presentation->accept(psp); osgPresentation::LoadAction load; presentation->accept( load ); viewer.setSceneData( presentation.get() ); osgDB::writeNodeFile(*presentation, "pres.osgt"); return viewer.run(); }