Example #1
0
    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);
    }
Example #2
0
    /*************** 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();
    }
Example #3
0
    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);
    }
Example #4
0
    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);
    }
Example #5
0
 public void AddModel(Model3d model)
 {
     if (m_modleList.Contains(model))
     {
         return;
     }
     m_modleList.Add(model);
 }
Example #6
0
    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);
        }
Example #8
0
    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);
    }
Example #9
0
    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);
            }
        }
    }
Example #10
0
    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);
        }
Example #12
0
 public void UpdateModel(Model3d model)
 {
 }
Example #13
0
 public void RemoveModel(Model3d model)
 {
     m_modleList.Remove(model);
 }
Example #14
0
 public static void Update(OctreeNode node, Model3d model)
 {
     Remove(node, model);
     Insert(node, model);
 }