コード例 #1
0
    public IEnumerator LoadObjectFromDiskCR(string path, MeshLoader loader, GCodeHandler mc)
    {
        int layernum = 0;

        //create object to put all mesh types in
        var objectName = loader.GetObjectNameFromPath(path);

        var rootFolderOfObject = loader.dataPath + "/" + objectName;

        mc.RootForObject.transform.localPosition = Vector3.zero;
        mc.RootForObject.transform.localScale    = Vector3.one;
        mc.RootForObject.transform.localRotation = Quaternion.identity;

        SortedDictionary <int, List <string> > sortedLayers = new SortedDictionary <int, List <string> >();

        foreach (var folder in Directory.GetDirectories(rootFolderOfObject))
        {
            var files = Directory.GetFiles(folder);
            foreach (var file in Directory.GetFiles(folder))
            {
                var l = Convert.ToInt32(file.Substring(file.LastIndexOf(@" ") + 1, file.LastIndexOf(".") - file.LastIndexOf(@" ") - 1));
                if (!sortedLayers.ContainsKey(l))
                {
                    sortedLayers.Add(l, new List <string>());
                    sortedLayers[l].Add(file);
                }
                else
                {
                    sortedLayers[l].Add(file);
                }
            }
        }


        foreach (var layers in sortedLayers)
        {
            foreach (var file in layers.Value)
            {
                var typeString = file.Substring(file.LastIndexOf(@"\") + 1, file.LastIndexOf(' ') - file.LastIndexOf(@"\") - 1);
                mc.CreateTypeObject(typeString);


                var layername = file.Substring(file.LastIndexOf(@"\") + 1, file.LastIndexOf(".") - file.LastIndexOf(@"\") - 1);

                //get mesh from file
                var mesh = MeshSerializer.DeserializeMesh(File.ReadAllBytes(file));


                //get the biggest layer number
                var l = mc.createLayerObject(layername, typeString, mesh);
                if (l > layernum)
                {
                    layernum = l;
                }
            }
            yield return(null);
        }

        mc.endloading(layernum);
    }
コード例 #2
0
 public Mesh GetMesh()
 {
     if (data == null || data.Length < 1)
     {
         return(null);
     }
     return(MeshSerializer.DeserializeMesh(data));
 }
コード例 #3
0
    /// <summary>
    /// Load the mesh given a byte array
    /// </summary>
    /// <param name="meshByte"></param>
    public void LoadMeshByte(byte[] meshByte)
    {
        if (meshByte != null)
        {
            // ATT !!!  LoadedMap E' il CloudDataManager non dovrebbe essere questo subito provare ad usare parallelSceneRoot

            LoadedMap.AddComponent <MeshFilter>();

            LoadedMap.AddComponent <MeshRenderer>();


            material.SetColor("_Color", Color.red);
            LoadedMap.transform.GetComponent <MeshRenderer>().material = material;
            Debug.Log("Add mesh render ");
            // add downloded mesh
            LoadedMap.transform.GetComponent <MeshFilter>().mesh = MeshSerializer.DeserializeMesh(meshByte);
            Debug.Log("add mesh filter");
            // reduce size
            float   scale       = 0.5f;
            Vector3 mapLocalPos = LoadedMap.transform.localPosition;
            LoadedMap.transform.localPosition = new Vector3(mapLocalPos.x * scale, mapLocalPos.y * scale, mapLocalPos.z * scale);

            LoadedMap.transform.localScale = new Vector3(scale, scale, scale);



            //LoadedMap.transform.rotation = Quaternion.Euler(0, 0, 0);
            //LoadedMap.AddComponent<MeshCollider>();
            //LoadedMap.AddComponent<ObjectManipulator>();
            //LoadedMap.AddComponent<NearInteractionGrabbable>();

            Debug.Log("Downloaded Mesh Placed");
        }
        else
        {
            Debug.LogError("Error placing downloaded mesh");
        }
    }
コード例 #4
0
    /// <summary>
    /// To load a map saved as binary file on the device
    /// </summary>
    public void LoadMesh()
    {
        //string path = Path.Combine(Application.persistentDataPath, url);

#if WINDOWS_UWP
        var    folder = WindowsStorage.ApplicationData.Current.LocalFolder;
        string path   = folder.Path + "/meshMap.bin";
        if (File.Exists(path) == true)
        {
            //textObj.text ="File found";
            byte[] bytes = File.ReadAllBytes(path);
            //textObj.text = "Bytes loaded";
            if (bytes == null)
            {
                //textObj.text = "Bytes are null";
            }
            LoadedMap.AddComponent <MeshFilter>();
            LoadedMap.AddComponent <MeshRenderer>();

            material.SetColor("_Color", Color.red);
            LoadedMap.transform.GetComponent <MeshRenderer>().material = material;

            //textObj.text = "Add material correctly";
            LoadedMap.transform.GetComponent <MeshFilter>().mesh = MeshSerializer.DeserializeMesh(bytes);
            LoadedMap.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
            //LoadedMap.transform.position = new Vector3(1,0,3);
            LoadedMap.transform.rotation = Quaternion.Euler(0, 0, 0);
            //textObj.text = "hologram componets added";
            //LoadedMap.AddComponent<MeshCollider>();
            //LoadedMap.AddComponent<ObjectManipulator>();
            //LoadedMap.AddComponent<NearInteractionGrabbable>();
            //textObj.text = "Mesh Map Loaded correctly";
        }
#else
        Debug.Log("Load on Device is only supported in Universal Windows Applications");
#endif
    }
コード例 #5
0
    /// <summary>
    /// Render the map and all ARmarkers relative to the passed anchor
    /// </summary>
    /// <param name="ARDataByte"> AR data downloaded from the BLOB container </param>
    /// <param name="meshByte"> downloaded binary map mesh </param>
    /// <param name="anchor"> refernce anchor  </param>
    public void LocateSubMap(byte[] ARDataByte, byte[] meshByte, GameObject anchor)
    {
        Debug.Log("Start joining map ");
        if (ARDataByte != null && meshByte != null)
        {
            LoadedMap = new GameObject("LoadedMap");
            if (LoadedMap.GetComponent <MeshFilter>() == false)
            {
                LoadedMap.AddComponent <MeshFilter>();
                Debug.Log("MeshFilter added");
            }
            if (LoadedMap.GetComponent <MeshRenderer>() == false)
            {
                LoadedMap.AddComponent <MeshRenderer>();
                Debug.Log("MeshRender added");
            }

            material.SetColor("_Color", Color.red);
            LoadedMap.transform.GetComponent <MeshRenderer>().material = material;
            LoadedMap.transform.GetComponent <MeshFilter>().mesh       = MeshSerializer.DeserializeMesh(meshByte);
            LoadedMap.transform.parent        = anchor.transform;
            LoadedMap.transform.localPosition = Vector3.zero;
            LoadedMap.transform.localRotation = Quaternion.identity;
            ARmarkersContainer ARData = (ARmarkersContainer)ARmanager.ARDataBinaryDeserialize(ARDataByte);
            Debug.Log("ARData deserialized properly");
            LoadedMap.transform.localPosition = ARData.GetMapPosition();
            LoadedMap.transform.localRotation = ARData.GetMapOrientation();

            Debug.Log("Start AR markers placing ");
            locateARmarkers(ARData);
        }
        else
        {
            Debug.LogError("Error joining submaps");
        }
    }
コード例 #6
0
        public Mesh Instantiate()
        {
            var mesh = MeshSerializer.DeserializeMesh(data);

            return(mesh);
        }