diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-11-16 16:45:34 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-11-16 16:45:34 (GMT) |
commit | a5b2c2081329958710a59107854349f5b6a14bcb (patch) | |
tree | cd4724968c4eb865db853450ebab19094ca6d6dc /src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.cpp | |
parent | 22ddb37efb48c484e022fef5516491ad69608397 (diff) | |
download | uscxml-a5b2c2081329958710a59107854349f5b6a14bcb.zip uscxml-a5b2c2081329958710a59107854349f5b6a14bcb.tar.gz uscxml-a5b2c2081329958710a59107854349f5b6a14bcb.tar.bz2 |
Builds on windows again
Diffstat (limited to 'src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.cpp')
-rw-r--r-- | src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.cpp | 62 |
1 files changed, 31 insertions, 31 deletions
diff --git a/src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.cpp b/src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.cpp index c742ec7..536d276 100644 --- a/src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.cpp +++ b/src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.cpp @@ -133,14 +133,14 @@ void OSGConverter::send(const SendRequest& req) { for (std::list<Data>::const_iterator formatIter = formats.begin(); formatIter != formats.end(); formatIter++) { actualReq.params.insert(std::make_pair("format", *formatIter)); } - + // format given as expression std::list<Data> formatExprs; Event::getParam(req.params, "formatexpr", formatExprs); for (std::list<Data>::const_iterator formatIter = formatExprs.begin(); formatIter != formatExprs.end(); formatIter++) { actualReq.params.insert(std::make_pair("format", _interpreter->getDataModel().getStringAsData(*formatIter))); } - + if (actualReq.params.find("format") == actualReq.params.end()) { // no explicit format, try to get from destination std::string dest; @@ -154,7 +154,7 @@ void OSGConverter::send(const SendRequest& req) { } } } - + if (actualReq.params.find("format") == actualReq.params.end()) { LOG(ERROR) << "missing format"; reportFailure(req); @@ -244,8 +244,8 @@ void OSGConverter::process(const SendRequest& req) { bool optimizeGeometry = false; if (req.params.find("optimizegeometry") != req.params.end()) { if (iequals(req.params.find("optimizegeometry")->second.atom, "on") || - iequals(req.params.find("optimizegeometry")->second.atom, "1") || - iequals(req.params.find("optimizegeometry")->second.atom, "true")) { + iequals(req.params.find("optimizegeometry")->second.atom, "1") || + iequals(req.params.find("optimizegeometry")->second.atom, "true")) { optimizeGeometry = true; } } @@ -253,8 +253,8 @@ void OSGConverter::process(const SendRequest& req) { bool antiAliased = true; if (req.params.find("antialiased") != req.params.end()) { if (iequals(req.params.find("antialiased")->second.atom, "off") || - iequals(req.params.find("antialiased")->second.atom, "0") || - iequals(req.params.find("antialiased")->second.atom, "false")) { + iequals(req.params.find("antialiased")->second.atom, "0") || + iequals(req.params.find("antialiased")->second.atom, "false")) { antiAliased = false; } } @@ -271,9 +271,9 @@ void OSGConverter::process(const SendRequest& req) { osgUtil::Optimizer optimizer; optimizer.optimize(model, osgUtil::Optimizer::ALL_OPTIMIZATIONS); } - + Data retContent; - + // setup scenegraph osg::ref_ptr<osg::Group> sceneGraph = new osg::Group(); sceneGraph->addChild(model); @@ -282,7 +282,7 @@ void OSGConverter::process(const SendRequest& req) { for (std::list<Data>::iterator formatIter = formats.begin(); formatIter != formats.end(); formatIter++) { std::string format = *formatIter; - + osg::ref_ptr<osgDB::ReaderWriter> writer = osgDB::Registry::instance()->getReaderWriterForExtension(format); if (writer.valid()) { @@ -294,7 +294,7 @@ void OSGConverter::process(const SendRequest& req) { // pass option to disable tristrips when writing osgjs files if (strcmp(format.c_str(), "osgjs") == 0) rwOptions->setOptionString("disableTriStrip"); - + result = writer->writeNode(*sceneGraph, ss, rwOptions); if (result.success()) { if (dest.length() > 0) { @@ -305,12 +305,12 @@ void OSGConverter::process(const SendRequest& req) { continue; } } - + // conversion from 3d model to image tthread::lock_guard<tthread::recursive_mutex> lock(_viewerMutex); osgViewer::Viewer viewer; osg::Camera *camera = viewer.getCamera(); - + osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; traits->width = width; @@ -325,55 +325,55 @@ void OSGConverter::process(const SendRequest& req) { viewer.setDisplaySettings(ds); } osg::GraphicsContext *gc = - osg::GraphicsContext::createGraphicsContext(traits.get()); - + osg::GraphicsContext::createGraphicsContext(traits.get()); + camera->setGraphicsContext(gc); camera->setDrawBuffer(GL_FRONT); camera->setViewport(new osg::Viewport(0, 0, width, height)); - + viewer.setSceneData(sceneGraph); - + viewer.setCameraManipulator(new osgGA::TrackballManipulator()); viewer.getCamera()->setClearColor(osg::Vec4f(1.0f,1.0f,1.0f,1.0f)); viewer.getCamera()->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - + double zoom = 1; CAST_PARAM(req.params, zoom, "zoom", double); - + viewer.getCameraManipulator()->setByMatrix(osg::Matrix::lookAt(osg::Vec3d(0,0,bs.radius() * (-3.4 * zoom)), // eye - (osg::Vec3d)bs.center(), // center - osg::Vec3d(0,1,0))); // up - + (osg::Vec3d)bs.center(), // center + osg::Vec3d(0,1,0))); // up + osg::Image *image = new osg::Image(); camera->attach(osg::Camera::COLOR_BUFFER0, image); - + viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded); viewer.realize(); viewer.frame(); - + std::string tempFile = URL::getTmpFilename(format); - + if (!osgDB::writeImageFile(*image, tempFile)) { LOG(ERROR) << "Could write image file at " << tempFile; return; } - + // read file into buffer char* buffer = NULL; size_t length = 0; { std::ifstream file(tempFile.c_str()); - + file.seekg(0, std::ios::end); length = file.tellg(); file.seekg(0, std::ios::beg); buffer = (char*)malloc(length); file.read(buffer, length); } - + retContent.compound[format] = Data(buffer, length, URL::getMimeType(format), false); } - + if (retContent.compound.size()) { reportSuccess(req, retContent); } else { @@ -389,11 +389,11 @@ void OSGConverter::reportSuccess(const SendRequest& req, const Data& content) { // Data foo = paramIter->second; // std::cout << paramIter->first << " = " << foo << std::endl; // } - + if (event.name.length() == 0) event.name = "convert"; event.name += ".success"; - + if (content) event.data.compound["content"] = content; returnEvent(event); |