summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.h')
-rw-r--r--src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.h82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.h b/src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.h
new file mode 100644
index 0000000..28c908d
--- /dev/null
+++ b/src/uscxml/plugins/invoker/graphics/openscenegraph/converter/OSGConverter.h
@@ -0,0 +1,82 @@
+#ifndef OSGCONVERTER_H_W09J90F0
+#define OSGCONVERTER_H_W09J90F0
+
+#include <uscxml/Interpreter.h>
+#include <osg/Node>
+#include <osgViewer/ViewerEventHandlers>
+
+#ifdef BUILD_AS_PLUGINS
+#include "uscxml/plugins/Plugins.h"
+#endif
+
+namespace uscxml {
+
+class OSGConverter : public InvokerImpl {
+public:
+ OSGConverter();
+ virtual ~OSGConverter();
+ virtual boost::shared_ptr<IOProcessorImpl> create(Interpreter* interpreter);
+
+ virtual std::set<std::string> getNames() {
+ std::set<std::string> names;
+ names.insert("osgconverter");
+ names.insert("osgconvert");
+ names.insert("http://uscxml.tk.informatik.tu-darmstadt.de/#osgconverter");
+ names.insert("http://uscxml.tk.informatik.tu-darmstadt.de/#osgconvert");
+ return names;
+ }
+
+ virtual Data getDataModelVariables();
+ virtual void send(const SendRequest& req);
+ virtual void cancel(const std::string sendId);
+ virtual void invoke(const InvokeRequest& req);
+
+ void reportSuccess(const SendRequest& req);
+ void reportFailure(const SendRequest& req);
+
+ osg::Matrix requestToModelPose(const SendRequest& req);
+ osg::Matrix requestToCamPose(const SendRequest& req);
+
+ static void dumpMatrix(const osg::Matrix& m);
+ static osg::Matrix eulerToMatrix(double pitch, double roll, double yaw);
+ static void matrixToEuler(const osg::Matrix& m, double& pitch, double& roll, double& yaw);
+
+protected:
+ class NameRespectingWriteToFile : public osgViewer::ScreenCaptureHandler::WriteToFile {
+ public:
+ NameRespectingWriteToFile(const std::string& filename,
+ const std::string& extension,
+ SavePolicy savePolicy,
+ const SendRequest& req,
+ OSGConverter* converter) : osgViewer::ScreenCaptureHandler::WriteToFile(filename, extension, savePolicy),
+ _req(req), _converter(converter) {
+ }
+
+ virtual void operator()(const osg::Image& image, const unsigned int context_id);
+ SendRequest _req;
+ OSGConverter* _converter;
+ };
+
+ uscxml::concurrency::BlockingQueue<SendRequest> _workQueue;
+ osg::ref_ptr<osg::Node> setupGraph(const std::string filename, bool autoRotate = false);
+ osg::ref_ptr<osg::Node> getOrigin();
+
+ std::map<std::string, std::pair<long, osg::ref_ptr<osg::Node> > > _models;
+ tthread::recursive_mutex _cacheMutex;
+
+ std::set<tthread::thread*> _threads;
+
+ static void run(void*);
+ void process(const SendRequest& req);
+
+ bool _isRunning;
+};
+
+#ifdef BUILD_AS_PLUGINS
+PLUMA_INHERIT_PROVIDER(OSGConverter, InvokerImpl);
+#endif
+
+}
+
+
+#endif /* end of include guard: OSGCONVERTER_H_W09J90F0 */