2using System.Collections;
3using System.Collections.Generic;
8using BasicLoader.Interface;
16 private CADLoader.CADLoader _loader;
17 private Transform parent;
25 _loader =
new CADLoader.CADLoader(
new List<IParser> {STPLoader.ParserFactory.Create(), STLLoader.ParserFactory.Create(), ThreeDXMLLoader.ParserFactory.Create() });
37 var dataLoader = LoaderFactory.CreateStreamLoader(
new MemoryStream(bytearray));
38 var type = CADTypeUtils.FromFileExtension(filename);
39 var model = _loader.Load(type, dataLoader);
44 Debug.Log(
"model.Triangles.Count: " + model.Triangles.Count);
45 triangles = model.Triangles.Count;
46 Debug.Log(
"model.Vertices.Count: " + model.Vertices.Count);
47 vertices = model.Vertices.Count;
48 Debug.Log(
"model.Parts.Count: " + model.Parts.Count);
49 Debug.Log(
"model.Facets.Count: " + model.Facets.Count);
55 if (model.Parts !=
null && model.Parts.Count > 0)
57 var ParentObject =
new GameObject(
"UploadedModel");
58 ParentObject.transform.parent = parent;
59 foreach (var modelPart
in model.Parts)
61 var modelObject =
Create(
"ModelPart");
63 modelObject.transform.parent = ParentObject.transform;
65 SetupGameObject(ParentObject);
69 if (triangles == 0 || vertices == 0)
71 PopupManager.
instance.ShowPopup(
"Invalid model",
"The model was empty, or not recognizable. Try to save models as ASCII.");
76 var modelObject =
Create(
"UploadedModel");
78 modelObject.transform.parent = parent;
79 SetupGameObject(modelObject);
91 private void SetupGameObject(GameObject go)
96 if (go.transform.childCount > 0)
97 for (
int i = 0; i < go.transform.childCount; i++)
99 if (go.transform.GetChild(i).childCount > 0)
101 SetupGameObject(go.transform.GetChild(i).gameObject);
103 go.transform.GetChild(i).gameObject.AddComponent<
AutoStageItem>();
104 go.transform.GetChild(i).gameObject.AddComponent<
Positioner>();
105 go.transform.GetChild(i).gameObject.AddComponent<
JSONPositioner>();
112 var modelObject =
new GameObject(name);
115 modelObject.transform.GetComponent<MeshFilter>();
117 if (!modelObject.transform.GetComponent<MeshFilter>() || !modelObject.transform.GetComponent<MeshRenderer>())
119 modelObject.transform.gameObject.AddComponent<MeshFilter>();
120 modelObject.transform.gameObject.AddComponent<MeshRenderer>();
123 modelObject.transform.GetComponent<MeshRenderer>().material =
useMaterial;
125 var mesh =
new Mesh();
126 modelObject.transform.GetComponent<MeshFilter>().mesh = mesh;
131 public static void UpdateMesh(GameObject gameObject, IModel model)
133 var mesh = gameObject.transform.GetComponent<MeshFilter>().mesh;
135 mesh.vertices = model.Vertices.Select<AForge.Math.Vector3, Vector3>(ToUnity).ToArray();
136 mesh.triangles = model.Triangles.ToArray();
138 mesh.RecalculateNormals();
140 gameObject.GetComponent<MeshFilter>().mesh = mesh;
143 public static void UpdateMesh(GameObject gameObject, IPart model)
145 var mesh = gameObject.transform.GetComponent<MeshFilter>().mesh;
147 mesh.vertices = model.Vertices.Select<AForge.Math.Vector3, Vector3>(ToUnity).ToArray();
148 mesh.triangles = model.Triangles.ToArray();
150 mesh.RecalculateNormals();
152 gameObject.GetComponent<MeshFilter>().mesh = mesh;
153 gameObject.transform.position = ToUnity(model.Position);
155 model.Rotation.ExtractYawPitchRoll(out y, out x, out z);
159 gameObject.transform.rotation = Quaternion.Euler(
new Vector3(x, y, z));
162 private static Vector3 ToUnity(AForge.Math.Vector3 v3)
164 return new Vector3(v3.X, v3.Z, v3.Y);
static void UpdateMesh(GameObject gameObject, IModel model)
void LoadUploadedModel(byte[] bytearray, string filename)
static void UpdateMesh(GameObject gameObject, IPart model)
GameObject Create(string name)