Browse Source

Full pipeline emf implementation

Johannes Kreutz 2 years ago
parent
commit
b13586b8d9

+ 0 - 1
trackpoint-app/include/PickHandler.hpp

@@ -22,7 +22,6 @@ private:
   bool _addNewPoints = true;
   bool _clickStartedOnElement = false;
   OSGWidget* _osgWidget;
-  double _optiTrackSteamVRLength;
   int _selectedPoint = -1;
   void moveTo(osg::Vec3f position);
   void rotateToNormalVector(osg::Vec3f normal);

+ 1 - 0
trackpoint-app/include/PointShape.hpp

@@ -24,6 +24,7 @@ public:
   void setVisibility(bool mode);
   void setColor(osg::Vec4 color);
   void setupOptiTrack(OptiTrackSettings optiTrackSettings);
+  void setupEMFTrack(EMFTrackSettings emfTrackSettings);
   void setupSteamVRTrack(SteamVRTrackSettings steamVrTrackSettings);
   void setupActionPoints();
   osg::ref_ptr<osg::Geode> getMesh();

+ 3 - 0
trackpoint-app/include/TrackPointRenderer.hpp

@@ -4,6 +4,7 @@
 #include "enums.hpp"
 #include "OSGWidget.hpp"
 #include "PointShape.hpp"
+#include "TrackPoint.hpp"
 
 // Include dependencies
 #include <osg/Group>
@@ -17,6 +18,8 @@ public:
   void clear();
 
 private:
+  PointShape* addPointShape(TrackPoint* point, ActiveTrackingSystem activeTrackingSystem);
+  void commonSetupPointShape(PointShape* shape, TrackPoint* point, int id);
   OSGWidget* _osgWidget;
   osg::ref_ptr<osg::Group> _renderRoot;
   std::vector<PointShape*> _shapes;

+ 3 - 2
trackpoint-app/src/PickHandler.cpp

@@ -157,17 +157,18 @@ void PickHandler::updateRenderer() {
   switch(activeTrackingSystem) {
     case OptiTrack: {
       OptiTrackSettings settings = MainWindow::getInstance()->getStore()->getOptiTrackSettings();
-      _optiTrackSteamVRLength = settings.length;
       _shape = new PointShape(_selectionSwitch, activeTrackingSystem, osg::Vec3(0.0f, 0.0f, 0.0f), osg::Vec3(0.0f, 0.0f, 0.0f), osg::Vec3(0.0f, 0.0f, 0.0f));
       _shape->setupOptiTrack(settings);
       break;
     }
     case EMFTrack: {
+      EMFTrackSettings settings = MainWindow::getInstance()->getStore()->getEMFTrackSettings();
+      _shape = new PointShape(_selectionSwitch, activeTrackingSystem, osg::Vec3(0.0f, 0.0f, 0.0f), osg::Vec3(0.0f, 0.0f, 0.0f), osg::Vec3(0.0f, 0.0f, 0.0f));
+      _shape->setupEMFTrack(settings);
       break;
     }
     case SteamVRTrack: {
       SteamVRTrackSettings settings = MainWindow::getInstance()->getStore()->getSteamVRTrackSettings();
-      _optiTrackSteamVRLength = settings.length;
       _shape = new PointShape(_selectionSwitch, activeTrackingSystem, osg::Vec3(0.0f, 0.0f, 0.0f), osg::Vec3(0.0f, 0.0f, 0.0f), osg::Vec3(0.0f, 0.0f, 0.0f));
       _shape->setupSteamVRTrack(settings);
       break;

+ 17 - 3
trackpoint-app/src/PointShape.cpp

@@ -50,7 +50,9 @@ void PointShape::setNormalModifier(osg::Vec3f normalModifier) {
 void PointShape::rotateToNormalVector(osg::Vec3f normal) {
   osg::Matrix modifierRotation = osg::Matrix::rotate(_normalModifier.x() * M_PI / 180, osg::Vec3(1.0f, 0.0f, 0.0f), _normalModifier.y() * M_PI / 180, osg::Vec3(0.0f, 1.0f, 0.0f), _normalModifier.z() * M_PI / 180, osg::Vec3(0.0f, 0.0f, 1.0f));
   normal = modifierRotation.preMult(normal);
-
+  if (_activeTrackingSystem == EMFTrack) {
+    normal = normal.operator*(-1.0f);
+  }
   normal.normalize();
   _selectionRotateGroup->setMatrix(osg::Matrix::rotate(osg::Vec3f(0.0f, 0.0f, 1.0f), normal));
   if (_activeTrackingSystem == OptiTrack || _activeTrackingSystem == SteamVRTrack) {
@@ -78,7 +80,7 @@ void PointShape::setupOptiTrack(OptiTrackSettings optiTrackSettings) {
   if (_activeTrackingSystem == OptiTrack) {
     _optiTrackSteamVRLength = optiTrackSettings.length;
     _geode = new osg::Geode;
-    _shape = new osg::ShapeDrawable();
+    _shape = new osg::ShapeDrawable;
     _shape->setShape(new osg::Cylinder(osg::Vec3(0.0f, 0.0f, 0.0f), optiTrackSettings.radius, optiTrackSettings.length));
     _shape->setColor(osg::Vec4(1.0f, 1.0f, 1.0f, 0.2f));
     _geode->addDrawable(_shape.get());
@@ -87,11 +89,23 @@ void PointShape::setupOptiTrack(OptiTrackSettings optiTrackSettings) {
   }
 }
 
+void PointShape::setupEMFTrack(EMFTrackSettings emfTrackSettings) {
+  if (_activeTrackingSystem == EMFTrack) {
+    _geode = new osg::Geode;
+    _shape = new osg::ShapeDrawable;
+    _shape->setShape(new osg::Box(osg::Vec3(0.0f, 0.0f, static_cast<float>(emfTrackSettings.depth) / 2), static_cast<float>(emfTrackSettings.width), static_cast<float>(emfTrackSettings.height), static_cast<float>(emfTrackSettings.depth)));
+    _shape->setColor(osg::Vec4(1.0f, 1.0f, 1.0f, 0.2f));
+    _geode->addDrawable(_shape.get());
+    OSGWidget::fixMaterialState(_geode);
+    _selectionRotateGroup->addChild(_geode.get());
+  }
+}
+
 void PointShape::setupSteamVRTrack(SteamVRTrackSettings steamVrTrackSettings) {
   if (_activeTrackingSystem == SteamVRTrack) {
     _optiTrackSteamVRLength = steamVrTrackSettings.length;
     _geode = new osg::Geode;
-    _shape = new osg::ShapeDrawable();
+    _shape = new osg::ShapeDrawable;
     _shape->setShape(new osg::Cylinder(osg::Vec3(0.0f, 0.0f, 0.0f), STEAMVR_CONSTANT_RADIUS, steamVrTrackSettings.length));
     _shape->setColor(osg::Vec4(1.0f, 1.0f, 1.0f, 0.2f));
     _geode->addDrawable(_shape.get());

+ 29 - 27
trackpoint-app/src/TrackPointRenderer.cpp

@@ -2,11 +2,8 @@
 #include "TrackPointRenderer.hpp"
 
 // Include modules
-#include "OptiTrackPoint.hpp"
 #include "MainWindow.hpp"
 
-// Include dependencies
-
 
 TrackPointRenderer::TrackPointRenderer(OSGWidget* osgWidget, osg::ref_ptr<osg::Group> renderRoot) {
   _osgWidget = osgWidget;
@@ -23,35 +20,31 @@ void TrackPointRenderer::render(ActiveTrackingSystem activeTrackingSystem) {
       std::vector<OptiTrackPoint*> points = MainWindow::getInstance()->getStore()->getOptiTrackPoints();
       int id = 0;
       for (OptiTrackPoint* point: points) {
-        PointShape* newShape = new PointShape(_renderRoot, activeTrackingSystem, point->getTranslation(), point->getNormal(), point->getNormalModifier());
+        PointShape* newShape = addPointShape(static_cast<TrackPoint*>(point), activeTrackingSystem);
         newShape->setupOptiTrack(point->getOptiTrackSettings());
-        if (id == MainWindow::getInstance()->getEditWiget()->getSelectedPoint()) {
-          newShape->setColor(osg::Vec4(0.0f, 0.0f, 1.0f, 0.2f));
-        } else {
-          newShape->setColor(osg::Vec4(0.0f, 1.0f, 0.0f, 0.2f));
-        }
-        newShape->rotateToNormalVector(point->getNormal());
-        _shapes.push_back(newShape);
+        commonSetupPointShape(newShape, static_cast<TrackPoint*>(point), id);
         id++;
       }
       break;
     }
     case EMFTrack: {
+      std::vector<EMFTrackPoint*> points = MainWindow::getInstance()->getStore()->getEMFTrackPoints();
+      int id = 0;
+      for (EMFTrackPoint* point: points) {
+        PointShape* newShape = addPointShape(static_cast<TrackPoint*>(point), activeTrackingSystem);
+        newShape->setupEMFTrack(point->getEMFTrackSettings());
+        commonSetupPointShape(newShape, static_cast<TrackPoint*>(point), id);
+        id++;
+      }
       break;
     }
     case SteamVRTrack: {
       std::vector<SteamVRTrackPoint*> points = MainWindow::getInstance()->getStore()->getSteamVRTrackPoints();
       int id = 0;
       for (SteamVRTrackPoint* point: points) {
-        PointShape* newShape = new PointShape(_renderRoot, activeTrackingSystem, point->getTranslation(), point->getNormal(), point->getNormalModifier());
+        PointShape* newShape = addPointShape(static_cast<TrackPoint*>(point), activeTrackingSystem);
         newShape->setupSteamVRTrack(point->getSteamVRTrackSettings());
-        if (id == MainWindow::getInstance()->getEditWiget()->getSelectedPoint()) {
-          newShape->setColor(osg::Vec4(0.0f, 0.0f, 1.0f, 0.2f));
-        } else {
-          newShape->setColor(osg::Vec4(0.0f, 1.0f, 0.0f, 0.2f));
-        }
-        newShape->rotateToNormalVector(point->getNormal());
-        _shapes.push_back(newShape);
+        commonSetupPointShape(newShape, static_cast<TrackPoint*>(point), id);
         id++;
       }
       break;
@@ -60,15 +53,9 @@ void TrackPointRenderer::render(ActiveTrackingSystem activeTrackingSystem) {
       std::vector<ActionPoint*> points = MainWindow::getInstance()->getStore()->getActionPoints();
       int id = 0;
       for (ActionPoint* point: points) {
-        PointShape* newShape = new PointShape(_renderRoot, activeTrackingSystem, point->getTranslation(), point->getNormal(), point->getNormalModifier());
+        PointShape* newShape = addPointShape(static_cast<TrackPoint*>(point), activeTrackingSystem);
         newShape->setupActionPoints();
-        if (id == MainWindow::getInstance()->getEditWiget()->getSelectedPoint()) {
-          newShape->setColor(osg::Vec4(0.0f, 0.0f, 1.0f, 0.2f));
-        } else {
-          newShape->setColor(osg::Vec4(0.0f, 1.0f, 0.0f, 0.2f));
-        }
-        newShape->rotateToNormalVector(point->getNormal());
-        _shapes.push_back(newShape);
+        commonSetupPointShape(newShape, static_cast<TrackPoint*>(point), id);
         id++;
       }
       break;
@@ -87,3 +74,18 @@ void TrackPointRenderer::clear() {
   }
   _shapes.clear();
 }
+
+PointShape* TrackPointRenderer::addPointShape(TrackPoint* point, ActiveTrackingSystem activeTrackingSystem) {
+  PointShape* newShape = new PointShape(_renderRoot, activeTrackingSystem, point->getTranslation(), point->getNormal(), point->getNormalModifier());
+  return newShape;
+}
+
+void TrackPointRenderer::commonSetupPointShape(PointShape* shape, TrackPoint* point, int id) {
+  if (id == MainWindow::getInstance()->getEditWiget()->getSelectedPoint()) {
+    shape->setColor(osg::Vec4(0.0f, 0.0f, 1.0f, 0.2f));
+  } else {
+    shape->setColor(osg::Vec4(0.0f, 1.0f, 0.0f, 0.2f));
+  }
+  shape->rotateToNormalVector(point->getNormal());
+  _shapes.push_back(shape);
+}