Browse Source

Fix crash if no action points are set

Johannes Kreutz 2 years ago
parent
commit
dc9dcc8b73

+ 1 - 1
track-client/TrackClient/Assets/Scenes/SampleScene.unity

@@ -153,7 +153,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   filePath: ..\..\testdata\glasExport.3mf
-  rotationCorrection: 225
+  rotationCorrection: 90
 --- !u!4 &222388454
 Transform:
   m_ObjectHideFlags: 0

+ 1 - 1
track-client/TrackClient/Assets/TrackpointApp/Configuration.cs

@@ -2,6 +2,6 @@
 {
     public class Configuration
     {
-        public const int divisor = 100;
+        public const int divisor = 1000;
     }
 }

+ 20 - 13
track-client/TrackClient/Assets/TrackpointApp/SteamVRTrack.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 using UnityEngine;
 using Valve.VR;
 using JsonConvert = Valve.Newtonsoft.Json.JsonConvert;
@@ -57,20 +58,26 @@ public class SteamVRTrack : MonoBehaviour
     void setupActionPoints()
     {
         string metadata = trackpointMesh.getActionPointMetaData();
-        Dictionary<String, trackpoints> metaObject = JsonConvert.DeserializeObject<Dictionary<String, trackpoints>>(metadata);
-        foreach (KeyValuePair<String, trackpoints> actionPoint in metaObject)
+        if (metadata != "")
         {
-            GameObject anchor = new GameObject();
-            anchor.name = "ActionPoint " + actionPoint.Key;
-            anchor.transform.parent = trackpointMesh.transform;
-            float[] point = actionPoint.Value.point;
-            float[] normal = actionPoint.Value.normal;
-            anchor.transform.localPosition = new Vector3(point[0] / divisor, point[1] / divisor, point[2] / divisor);
-            Vector3 unityNormal = new Vector3(normal[0], normal[1], normal[2]);
-            anchor.transform.localRotation = Quaternion.FromToRotation(Vector3.up, unityNormal);
-            ActionPoint actionPointObject = anchor.AddComponent<ActionPoint>();
-            actionPointObject.setup();
-            actionPoints.Add(actionPointObject);
+            Dictionary<String, trackpoints> metaObject =
+                JsonConvert.DeserializeObject<Dictionary<String, trackpoints>>(metadata);
+            if (metaObject.Count() <= 0) return;
+            foreach (KeyValuePair<String, trackpoints> actionPoint in metaObject)
+            {
+                GameObject anchor = new GameObject();
+                anchor.name = "ActionPoint " + actionPoint.Key;
+                anchor.transform.parent = trackpointMesh.transform;
+                float[] point = actionPoint.Value.point;
+                float[] normal = actionPoint.Value.normal;
+                anchor.transform.localPosition =
+                    new Vector3(point[0] / divisor, point[1] / divisor, point[2] / divisor);
+                Vector3 unityNormal = new Vector3(normal[0], normal[1], normal[2]);
+                anchor.transform.localRotation = Quaternion.FromToRotation(Vector3.up, unityNormal);
+                ActionPoint actionPointObject = anchor.AddComponent<ActionPoint>();
+                actionPointObject.setup();
+                actionPoints.Add(actionPointObject);
+            }
         }
     }
 }

+ 8 - 1
track-client/TrackClient/Assets/TrackpointApp/TrackpointMesh.cs

@@ -110,7 +110,14 @@ public class TrackpointMesh : MonoBehaviour
     {
         CMetaDataGroup metaDataGroup = model.GetMetaDataGroup();
         CMetaData metaData = metaDataGroup.GetMetaDataByKey(META_NAMESPACE, "trackpoints-actionpoints");
-        return metaData.GetValue();
+        if (metaData.GetValue() == "null")
+        {
+            return "";
+        }
+        else
+        {
+            return metaData.GetValue();
+        }
     }
     
     CMeshObject getMesh(CMeshObjectIterator iterator, TrackingSystem trackingSystem)