Browse Source

Implement store support for emf track

Johannes Kreutz 2 years ago
parent
commit
697ffe421c
2 changed files with 59 additions and 8 deletions
  1. 10 6
      trackpoint-app/include/ProjectStore.hpp
  2. 49 2
      trackpoint-app/src/ProjectStore.cpp

+ 10 - 6
trackpoint-app/include/ProjectStore.hpp

@@ -3,6 +3,7 @@
 // Include modules
 #include "lib3mf_implicit.hpp"
 #include "OptiTrackPoint.hpp"
+#include "EMFTrackPoint.hpp"
 #include "SteamVRTrackPoint.hpp"
 #include "ActionPoint.hpp"
 #include "TrackSystemSettingsStructs.hpp"
@@ -13,11 +14,6 @@
 #include <string>
 #include <nlohmann/json.hpp>
 
-struct steamVrTrackPointJson {
-  float point[3];
-  float normal[3];
-};
-
 using json = nlohmann::json;
 
 class ProjectStore {
@@ -65,6 +61,13 @@ public:
   void updateOptiTrackSettings(OptiTrackSettings optiTrackSettings);
   // Return OptiTrack settings
   OptiTrackSettings getOptiTrackSettings();
+  // EMF TRACK
+  // Get all EMFTrack points
+  std::vector<EMFTrackPoint*> getEMFTrackPoints();
+  // Update actual EMFTrack settings
+  void updateEMFTrackSettings(EMFTrackSettings emfTrackSettings);
+  // Return EMFTrack settings
+  EMFTrackSettings getEMFTrackSettings();
   // STEAM VR TRACK
   // Get all SteamVRTrack points
   std::vector<SteamVRTrackPoint*> getSteamVRTrackPoints();
@@ -89,10 +92,11 @@ private:
   Lib3MF::PModel _project;
   std::string _projectFile;
   std::vector<OptiTrackPoint*> _optiTrackPoints;
+  std::vector<EMFTrackPoint*> _emfTrackPoints;
   std::vector<SteamVRTrackPoint*> _steamVrTrackPoints;
   std::vector<ActionPoint*> _actionPoints;
   OptiTrackSettings _optiTrackSettings = OptiTrackSettings {OPTITRACK_DEFAULT_LENGTH, OPTITRACK_DEFAULT_RADIUS};
-  EMFTrackSettings _emfTrackSettings;
+  EMFTrackSettings _emfTrackSettings = EMFTrackSettings {EMFTRACK_DEFAULT_WIDTH, EMFTRACK_DEFAULT_HEIGHT, EMFTRACK_DEFAULT_DEPTH};
   SteamVRTrackSettings _steamVrTrackSettings = SteamVRTrackSettings {STEAMVR_DEFAULT_LENGTH};
   ActionPointSettings _actionPointSettings = ActionPointSettings {ACTIONPOINT_DEFAULT_IDENFIFIER};
   osg::Vec3 _normalModifier = osg::Vec3(0.0f, 0.0f, 0.0f);

+ 49 - 2
trackpoint-app/src/ProjectStore.cpp

@@ -209,7 +209,7 @@ TrackPoint* ProjectStore::getTrackPointById(int id, ActiveTrackingSystem activeT
       return _optiTrackPoints[id];
     };
     case EMFTrack: {
-      break;
+      return _emfTrackPoints[id];
     };
     case SteamVRTrack: {
       return _steamVrTrackPoints[id];
@@ -228,6 +228,8 @@ void ProjectStore::addTrackPoint(osg::Vec3 point, osg::Vec3 normal, ActiveTracki
       break;
     }
     case EMFTrack: {
+      EMFTrackPoint* emfTrackPoint = new EMFTrackPoint(point, normal, _normalModifier, _emfTrackSettings.width, _emfTrackSettings.height, _emfTrackSettings.depth);
+      _emfTrackPoints.push_back(emfTrackPoint);
       break;
     }
     case SteamVRTrack: {
@@ -251,7 +253,7 @@ int ProjectStore::getCount(ActiveTrackingSystem activeTrackingSystem) {
       return _optiTrackPoints.size();
     };
     case EMFTrack: {
-      break;
+      return _emfTrackPoints.size();
     };
     case SteamVRTrack: {
       return _steamVrTrackPoints.size();
@@ -269,6 +271,7 @@ void ProjectStore::removeTrackPoint(int id, ActiveTrackingSystem activeTrackingS
       break;
     }
     case EMFTrack: {
+      _emfTrackPoints.erase(_emfTrackPoints.begin() + id);
       break;
     }
     case SteamVRTrack: {
@@ -304,6 +307,18 @@ OptiTrackSettings ProjectStore::getOptiTrackSettings() {
   return _optiTrackSettings;
 }
 
+std::vector<EMFTrackPoint*> ProjectStore::getEMFTrackPoints() {
+  return _emfTrackPoints;
+}
+
+void ProjectStore::updateEMFTrackSettings(EMFTrackSettings emfTrackSettings) {
+  _emfTrackSettings = emfTrackSettings;
+}
+
+EMFTrackSettings ProjectStore::getEMFTrackSettings() {
+  return _emfTrackSettings;
+}
+
 std::vector<SteamVRTrackPoint*> ProjectStore::getSteamVRTrackPoints() {
   return _steamVrTrackPoints;
 }
@@ -407,6 +422,23 @@ void ProjectStore::updateMetaData() {
   } catch (Lib3MF::ELib3MFException &e) {
     metaData->AddMetaData(META_NAMESPACE, "optitrack", optiTrackData.dump(), "string", true);
   }
+  json emfTrackData = json::array();
+  for (EMFTrackPoint* emfTrackPoint: _emfTrackPoints) {
+    emfTrackData.push_back({
+      {"point", osgVecToStdVec(emfTrackPoint->getTranslation())},
+      {"normal", osgVecToStdVec(emfTrackPoint->getNormal())},
+      {"normalModifier", osgVecToStdVec(emfTrackPoint->getNormalModifier())},
+      {"width", emfTrackPoint->getWidth()},
+      {"height", emfTrackPoint->getHeight()},
+      {"depth", emfTrackPoint->getDepth()}
+    });
+  }
+  try {
+    Lib3MF::PMetaData emfTrackPoints = metaData->GetMetaDataByKey(META_NAMESPACE, "emftrack");
+    emfTrackPoints->SetValue(emfTrackData.dump());
+  } catch (Lib3MF::ELib3MFException &e) {
+    metaData->AddMetaData(META_NAMESPACE, "emftrack", emfTrackData.dump(), "string", true);
+  }
   json steamVrTrackData = json::array();
   for (SteamVRTrackPoint* steamVrTrackPoint: _steamVrTrackPoints) {
     steamVrTrackData.push_back({
@@ -462,6 +494,21 @@ void ProjectStore::loadMetaData() {
   } catch (Lib3MF::ELib3MFException &e) {
     // TODO: Something is wrong with the file
   }
+  Lib3MF::PMetaData emfTrackString;
+  try {
+    emfTrackString = metaData->GetMetaDataByKey(META_NAMESPACE, "emftrack");
+    auto emfTrackData = json::parse(emfTrackString->GetValue());
+    _emfTrackPoints.clear();
+    for (const auto pointData: emfTrackData) {
+      osg::Vec3f point = osg::Vec3f(pointData["point"][0], pointData["point"][1], pointData["point"][2]);
+      osg::Vec3f normal = osg::Vec3f(pointData["normal"][0], pointData["normal"][1], pointData["normal"][2]);
+      osg::Vec3f normalModifier = osg::Vec3f(pointData["normalModifier"][0], pointData["normalModifier"][1], pointData["normalModifier"][2]);
+      EMFTrackPoint* emfTrackPoint = new EMFTrackPoint(point, normal, normalModifier, static_cast<double>(pointData["width"]), static_cast<double>(pointData["height"]), static_cast<double>(pointData["depth"]));
+      _emfTrackPoints.push_back(emfTrackPoint);
+    }
+  } catch (Lib3MF::ELib3MFException &e) {
+    // TODO: Something is wrong with the file
+  }
   Lib3MF::PMetaData steamVrTrackString;
   try {
     steamVrTrackString = metaData->GetMetaDataByKey(META_NAMESPACE, "steamvrtrack");