summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.cpp')
-rw-r--r--src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.cpp62
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);