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); }
public Mesh GetMesh() { if (data == null || data.Length < 1) { return(null); } return(MeshSerializer.DeserializeMesh(data)); }
/// <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"); } }
/// <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 }
/// <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"); } }
public Mesh Instantiate() { var mesh = MeshSerializer.DeserializeMesh(data); return(mesh); }