Browse Source

Better json export, export normals, respect steamvr thread

Johannes Kreutz 2 years ago
parent
commit
2fd222e17e

+ 5 - 0
trackpoint-app/include/ProjectStore.hpp

@@ -13,6 +13,11 @@
 #include <string>
 #include <nlohmann/json.hpp>
 
+struct steamVrTrackPointJson {
+  float point[3];
+  float normal[3];
+};
+
 using json = nlohmann::json;
 
 class ProjectStore {

+ 4 - 0
trackpoint-app/include/defaults.hpp

@@ -7,5 +7,9 @@
 
 #define STEAMVR_DEFAULT_LENGTH 10.0
 #define STEAMVR_CONSTANT_RADIUS 3.5
+// The length of the thread used to attach the steamvr tracker
+#define STEAMVR_THREAD_LENGTH 10.0
+// The distance between the origin of the steamvr tracker and the end of its nut
+#define STEAMVR_ORIGIN_OFFSET 9.0
 
 #define ACTIONPOINT_DEFAULT_IDENFIFIER "point0"

+ 21 - 28
trackpoint-app/src/ProjectStore.cpp

@@ -115,16 +115,17 @@ bool ProjectStore::exportProject(std::string path, ExportSettings settings) {
     renderedMesh->GetVertices(verticesBuffer);
     renderedMesh->GetTriangleIndices(triangleBuffer);
     exportMesh->SetGeometry(verticesBuffer, triangleBuffer);
-    std::vector<std::vector<float>> pointsList;
+    json trackpointData = json::array();
     for (OptiTrackPoint* point: _optiTrackPoints) {
-      std::vector<float> pointData;
       osg::Vec3 trackPoint = point->getTrackPoint();
-      pointData.push_back(trackPoint.x());
-      pointData.push_back(trackPoint.y());
-      pointData.push_back(trackPoint.z());
-      pointsList.push_back(pointData);
+      osg::Vec3 trackNormal = point->getNormal();
+      json pointData = {
+        {"point", {trackPoint.x(), trackPoint.y(), trackPoint.z()}},
+        {"normal", {trackNormal.x(), trackNormal.y(), trackNormal.z()}}
+      };
+      trackpointData.push_back(pointData);
     }
-    json trackpointData = pointsList;
+
     Lib3MF::PMetaDataGroup optiMetaData = exportMesh->GetMetaDataGroup();
     optiMetaData->AddMetaData(META_NAMESPACE, "trackpoints-optitrack", trackpointData.dump(), "string", true);
     exportModel->AddBuildItem(exportMesh.get(), _wrapper->GetIdentityTransform());
@@ -150,40 +151,32 @@ bool ProjectStore::exportProject(std::string path, ExportSettings settings) {
     renderedMesh->GetVertices(verticesBuffer);
     renderedMesh->GetTriangleIndices(triangleBuffer);
     exportMesh->SetGeometry(verticesBuffer, triangleBuffer);
-    std::vector<std::vector<float>> pointsList;
+    json trackpointData = json::array();
     for (SteamVRTrackPoint* point: _steamVrTrackPoints) {
-      std::vector<float> pointData;
       osg::Vec3 trackPoint = point->getTrackPoint();
-      pointData.push_back(trackPoint.x());
-      pointData.push_back(trackPoint.y());
-      pointData.push_back(trackPoint.z());
-      pointsList.push_back(pointData);
+      osg::Vec3 trackNormal = point->getNormal();
+      json pointData = {
+        {"point", {trackPoint.x(), trackPoint.y(), trackPoint.z()}},
+        {"normal", {trackNormal.x(), trackNormal.y(), trackNormal.z()}}
+      };
+      trackpointData.push_back(pointData);
     }
-    json trackpointData = pointsList;
+
     Lib3MF::PMetaDataGroup steamVrMetaData = exportMesh->GetMetaDataGroup();
     steamVrMetaData->AddMetaData(META_NAMESPACE, "trackpoints-steamvrtrack", trackpointData.dump(), "string", true);
     exportModel->AddBuildItem(exportMesh.get(), _wrapper->GetIdentityTransform());
   }
   delete renderer;
   // Export action point metadata
-  std::unordered_map<std::string, std::vector<std::vector<float>>> actionPointsList;
+  json actionPointData;
   for (ActionPoint* point: _actionPoints) {
-    std::vector<float> pointData;
-    std::vector<float> normalData;
-    std::vector<std::vector<float>> combinatrion;
     osg::Vec3 translation = point->getTranslation();
     osg::Vec3 normal = point->getNormal();
-    pointData.push_back(translation.x());
-    pointData.push_back(translation.y());
-    pointData.push_back(translation.z());
-    normalData.push_back(normal.x());
-    normalData.push_back(normal.y());
-    normalData.push_back(normal.z());
-    combinatrion.push_back(pointData);
-    combinatrion.push_back(normalData);
-    actionPointsList.insert({point->getIdentifier(), combinatrion});
+    actionPointData[point->getIdentifier()] = {
+      {"point", {translation.x(), translation.y(), translation.z()}},
+      {"normal", {normal.x(), normal.y(), normal.z()}}
+    };
   }
-  json actionPointData = actionPointsList;
   metaData->AddMetaData(META_NAMESPACE, "trackpoints-actionpoints", actionPointData.dump(), "string", true);
   Lib3MF::PWriter exportWriter = exportModel->QueryWriter("3mf");
   exportWriter->WriteToFile(path);

+ 1 - 1
trackpoint-app/src/SteamVRTrackPoint.cpp

@@ -20,6 +20,6 @@ void SteamVRTrackPoint::updateSteamVRTrackSettings(SteamVRTrackSettings settings
 }
 
 void SteamVRTrackPoint::updateShift() {
-  osg::Vec3 shift = _normal.operator*(_length);
+  osg::Vec3 shift = _normal.operator*(_length + STEAMVR_THREAD_LENGTH + STEAMVR_ORIGIN_OFFSET);
   _trackOrigin = shift.operator+(_origin);
 }