public Model3d Raycast(Ray3d ray) { if (m_octree != null) { // :: lets the compiler know to look outside class scope return(Octree3d.Raycast(m_octree, ray)); } Model3d result = null; FloatL result_t = -1; for (int i = 0, size = m_modleList.Count; i < size; ++i) { FloatL t = IntersectionTest3D.Ray3dWithModel3d(ray, m_modleList[i]); if (result == null && t >= 0) { result = m_modleList[i]; result_t = t; } else if (result != null && t < result_t) { result = m_modleList[i]; result_t = t; } } return(result); }
/*************** 3.parse model thread ***************/ public void StartSubThread_parseModel(string path) { _infoStruct.isParsing = true; _infoStruct.parseProgress = 0; _infoStruct.modelPath = path; _infoStruct.printable = false; if (_model3d != null) { UnityEngine.Object.Destroy(_model3d.renderedModel.shellCube); } _model3d = null; _curOperateBean = null; _scaleRange = Vector2.zero; _triggerEnterObjectCount = 0; _redoStack.Clear(); _undoStack.Clear(); _mt_current = null; Thread _readThread = new Thread(doParse); _readThread.Start(); }
public static Model3d Raycast(OctreeNode node, Ray3d ray) { IntersectionTest3D.RaycastResult raycast = new IntersectionTest3D.RaycastResult(); IntersectionTest3D.Ray3dWithAABB3d(node.m_bounds, ray, ref raycast); FloatL t = raycast.m_t; if (t >= 0) { if (node.m_children == null) { return(FindClosest(node.m_models, ray)); } else { /*std::vector<Model*> results;*/ List <Model3d> results = new List <Model3d>(); for (int i = 0; i < 8; ++i) { Model3d result = Raycast(node.m_children[i], ray); if (result != null) { results.Add(result); } } return(FindClosest(results, ray)); } } return(null); }
public static Model3d FindClosest(List <Model3d> set, Ray3d ray) { if (set.Count == 0) { return(null); } Model3d closest = null; FloatL closest_t = -1; for (int i = 0, size = set.Count; i < size; ++i) { FloatL this_t = IntersectionTest3D.Ray3dWithModel3d(ray, set[i]); if (this_t < 0) { continue; } if (closest_t < 0 || this_t < closest_t) { closest_t = this_t; closest = set[i]; } } return(closest); }
public void AddModel(Model3d model) { if (m_modleList.Contains(model)) { return; } m_modleList.Add(model); }
public List <Model3d> FindChildren(Model3d model) { List <Model3d> ret = new List <Model3d>(); foreach (var iter in m_modleList) { if (iter.m_parent == model) { ret.Add(iter); } } return(ret); }
public bool ExportInFile(Model3d model, ExportParameters parameters) { var exporter = new FileExporter(); switch (parameters.ModelFormat) { case ModelFormat.OBJ: return(exporter.ObjExport(model, parameters)); case ModelFormat.STL: return(exporter.StlExport(model, parameters)); } return(false); }
private void renderModel(object obj) { DataModel dataModel = (DataModel)obj; Loom.QueueOnMainThread((param) => { _model3d = new Model3d(dataModel); foreach (Listener listener in _listenerList) { listener.OnModelManager_RenderModelSucceed(); } _infoStruct.isParsing = false; }, null); }
public static void Remove(OctreeNode node, Model3d model) { if (node.m_children == null) { // std::vector<Model*>::iterator it = std::find(node->models.begin(), node->models.end(), model); // if (it != node->models.end()) // { // node->models.erase(it); // } node.m_models.Remove(model); } else { for (int i = 0; i < 8; ++i) { Remove(node.m_children[i], model); } } }
public static void Insert(OctreeNode node, Model3d model) { OBB3d bounds = model.GetOBB(); if (IntersectionTest3D.AABB3dWithOBB3d(node.m_bounds, bounds)) { if (node.m_children == null) { node.m_models.Add(model); } else { for (int i = 0; i < 8; ++i) { Insert(node.m_children[i], model); } } } }
public bool ExportInStream(Model3d model, ExportParameters parameters, out Stream exportedModel) { var exporter = new MemoryExporter(); exportedModel = null; switch (parameters.ModelFormat) { case ModelFormat.OBJ: if (!exporter.ObjExport(model, parameters)) { return(false); } break; case ModelFormat.STL: if (!exporter.StlExport(model, parameters)) { return(false); } break; } exportedModel = exporter.LatestExportedModel; return(false); }
public void UpdateModel(Model3d model) { }
public void RemoveModel(Model3d model) { m_modleList.Remove(model); }
public static void Update(OctreeNode node, Model3d model) { Remove(node, model); Insert(node, model); }