Beispiel #1
0
    private void HideSpatialMappingMeshes()
    {
        var meshFilters = m_spatialMappingManager.GetMeshFilters();

        foreach (MeshFilter meshFilter in meshFilters)
        {
            meshFilter.gameObject.SetActive(false);
        }
    }
Beispiel #2
0
            /// <summary>
            /// Scan the room and return the scaned room as a RoomMesh (serialized as a byte array)
            /// This method can ONLY be used by HoloLens
            /// </summary>
            /// <returns>Serialized Room Mesh</returns>
            public byte[] LoadMesh()
            {
                SpatialMappingManager mappingManager = GetComponent <SpatialMappingManager>();
                List <MeshFilter>     meshFilters    = mappingManager.GetMeshFilters();
                List <Mesh>           meshes         = new List <Mesh>();

                foreach (var meshFilter in meshFilters)
                {
                    Mesh           mesh  = meshFilter.sharedMesh;
                    Mesh           clone = new Mesh();
                    List <Vector3> verts = new List <Vector3>();
                    verts.AddRange(mesh.vertices);

                    for (int i = 0; i < verts.Count; i++)
                    {
                        verts[i] = meshFilter.transform.TransformPoint(verts[i]);
                    }

                    clone.SetVertices(verts);
                    clone.SetTriangles(mesh.triangles, 0);
                    meshes.Add(clone);
                }

                return(SimpleMeshSerializer.Serialize(meshes));
            }
Beispiel #3
0
    public static void LoadMesh()
    {
        // Master client will load mesh from disk
        if (Type == DeviceType.MasterClient)
        {
            _mesh = SimpleMeshSerializer.Serialize(MeshSaver.Load("RoomMesh"));
        }
        // HoloLens will scan the room and creates mesh
        else if (Type == DeviceType.HoloLens)
        {
            // The following code is copying from UWB-ARSandbox/Assets/Scripts/netWorkManager.cs:sendMeshToUnity()
            List <MeshFilter> meshFilters = MappingManager.GetMeshFilters();
            List <Mesh>       meshes      = new List <Mesh>();

            foreach (var meshFilter in meshFilters)
            {
                Mesh           mesh  = meshFilter.sharedMesh;
                Mesh           clone = new Mesh();
                List <Vector3> verts = new List <Vector3>();
                verts.AddRange(mesh.vertices);

                for (int i = 0; i < verts.Count; i++)
                {
                    verts[i] = meshFilter.transform.TransformPoint(verts[i]);
                }

                clone.SetVertices(verts);
                clone.SetTriangles(mesh.triangles, 0);
                meshes.Add(clone);
            }

            _mesh = SimpleMeshSerializer.Serialize(meshes);
        }
    }
Beispiel #4
0
    public void Collect()
    {
        vertices.Clear();
        normals.Clear();

        List <MeshFilter> meshes = manager.GetMeshFilters();

        foreach (MeshFilter meshFilter in meshes)
        {
            var mesh      = meshFilter.sharedMesh;
            var transform = meshFilter.transform;
            mesh.RecalculateNormals();
            foreach (Vector3 vertex in mesh.vertices)
            {
                vertices.Add(transform.TransformPoint(vertex));
            }
            foreach (Vector3 normal in mesh.normals)
            {
                normals.Add(transform.TransformDirection(normal).normalized);
            }
        }


        //Traverse(spatialMappingParent);

        string toLog = string.Empty;

        if (OnVerticesCollected != null)
        {
            OnVerticesCollected.Invoke(string.Format("Number of vertices: {0}\nNumber of normals: {1}", vertices.Count, normals.Count));
        }
    }
Beispiel #5
0
    public void TryPublishing(TimeSpan currentTime, double elapsedTimeInSeconds)
    {
        if (elapsedTimeInSeconds >= nextPublishTime)
        {
            // make meshes ready to be combined by the thread
            List <MeshFilter> meshFilters = spatialMappingManager.GetMeshFilters();
            if (meshFilters != null && meshFilters.Count != 0)
            {
                nextPublishTime = nextPublishTime + publishPeriod;

                List <Matrix4x4> transforms = new List <Matrix4x4>();
                List <Vector3[]> vertices   = new List <Vector3[]>();
                for (int i = 0; i < meshFilters.Count; i++)
                {
                    vertices.Add(meshFilters[i].sharedMesh.vertices);
                    transforms.Add(meshFilters[i].transform.localToWorldMatrix);
                }

#if NETFX_CORE
                ThreadPool.RunAsync((PointCloudSendWork) => { SendPointCloud(currentTime.Add(Timer.GetOffsetUTC()), transforms, vertices); });
#endif
            }
            else
            {
                System.Diagnostics.Debug.WriteLine("COULD NOT FIND ANY MESH");
            }
        }
    }
Beispiel #6
0
    private void HideSpatialMesh()
    {
        if (m_spatialMappingManager.IsObserverRunning())
        {
            m_spatialMappingManager.StopObserver();
        }
        var meshFilters = m_spatialMappingManager.GetMeshFilters();

        foreach (MeshFilter meshFilter in meshFilters)
        {
            meshFilter.gameObject.SetActive(false);
        }
    }
Beispiel #7
0
    private void OnPlanesComplete(object source, System.EventArgs args)
    {
        SpatialMappingManager mapper = SpatialMappingManager.Instance;

        if (!visualizeSpatialMeshes)
        {
            mapper.SetSurfaceMaterial(spatialMeshOcclusionMaterial);
        }
        SurfacePlaneDeformationManager.Instance.SetSpatialMeshFilters(mapper.GetMeshFilters());
        if (visualizeSurfacePlanes)
        {
            SetPlanesVisible(true);
        }
    }