private static SpatialUnderstandingDll.MeshData CreateMeshData(SpatialMappingSource.SurfaceObject surface, int meshUpdateID) { MeshFilter meshFilter = surface.Filter; SpatialUnderstandingDll.MeshData meshData = new SpatialUnderstandingDll.MeshData(); if ((meshFilter != null) && (meshFilter.mesh != null) && (meshFilter.mesh.triangles.Length > 0)) { // Fix surface mesh normals so we can get correct plane orientation. meshFilter.mesh.RecalculateNormals(); // Convert meshData.CopyFrom(meshFilter, surface.ID, meshUpdateID); } else { // No filter yet, add as an empty mesh (will be updated later in the update loop) meshData.CopyFrom(null, surface.ID, meshUpdateID); } return(meshData); }
/// <summary> /// Updates an element of the behavior's mesh list from an element of the the spatial mapping's surface object list. /// Element will be either added or updated to match up to the surfaceObject list. /// </summary> /// <param name="surfaceId">The unique ID for the mesh (matches the id provided by spatial mapping)</param> /// <param name="surfaceObjectIndex">Index in the surfaceObjects list</param> /// <param name="surfaceObjects">The list of surfaceObjects</param> /// <param name="meshDataIndex">Index into the locally stored mesh data list</param> private void AddOrUpdateMeshInList( SurfaceData bakedData) { SurfaceId surfaceId = bakedData.id; MeshFilter meshFilter = bakedData.outputMesh; int meshDataIndex = FindMeshIndexInInputMeshList(surfaceId.handle); SpatialUnderstandingDll.MeshData meshData = new SpatialUnderstandingDll.MeshData(); int meshUpdateID = (meshDataIndex >= 0) ? (inputMeshList[meshDataIndex].LastUpdateID + 1) : 1; if ((meshFilter != null) && (meshFilter.mesh != null) && (meshFilter.mesh.triangles.Length > 0)) { // Fix surface mesh normals so we can get correct plane orientation. meshFilter.mesh.RecalculateNormals(); // Convert meshData.CopyFrom(meshFilter, surfaceId.handle, meshUpdateID); } else { // No filter yet, add as an empty mesh (will be updated later in the update loop) meshData.CopyFrom(null, surfaceId.handle, meshUpdateID); } // And add it (unless an index of an update item is specified) if (meshDataIndex < 0) { inputMeshList.Add(meshData); } else { inputMeshList[meshDataIndex] = meshData; } }