Пример #1
0
        public void Test()
        {
            CadFigure baseFig = GetTargetFigure();

            if (baseFig == null)
            {
                return;
            }

            if (baseFig.Type != CadFigure.Types.POLY_LINES)
            {
                return;
            }

            (Vector3d p1, Vector3d p2) = InputLine();

            Vector3d org  = p1;
            Vector3d axis = (p2 - p1).Normalized();

            CadMesh cm = MeshMaker.CreateRotatingBody(32, org, axis, baseFig.PointList, false, false, MeshMaker.FaceType.QUADRANGLE);

            CadFigure fig = MesthToFig(cm);

            CadOpe ope = new CadOpeAddFigure(Controller.CurrentLayer.ID, fig.ID);

            Session.AddOpe(ope);
            Controller.CurrentLayer.AddFigure(fig);

            Session.PostRemakeObjectTree();
        }
Пример #2
0
        public void DumpMesh(uint id)
        {
            CadFigureMesh fig = GetCadFigureMesh(id);

            if (fig == null)
            {
                ItConsole.println("dumpMesh(id) error: invalid ID");
                return;
            }

            CadMesh cm = HeModelConverter.ToCadMesh(fig.mHeModel);

            for (int i = 0; i < cm.VertexStore.Count; i++)
            {
                CadVertex v = cm.VertexStore[i];
                ItConsole.printf("{0}:{1},{2},{3}\n", i, v.X, v.Y, v.Z);
            }

            for (int i = 0; i < cm.FaceStore.Count; i++)
            {
                CadFace f = cm.FaceStore[i];

                string s = "";

                for (int j = 0; j < f.VList.Count; j++)
                {
                    s += f.VList[j].ToString() + ",";
                }

                ItConsole.println(s);
            }
        }
Пример #3
0
        public static HeModel ToHeModel(CadMesh src)
        {
            HeModel m = new HeModel();

            m.VertexStore = src.VertexStore;

            Dictionary <uint, HalfEdge> map = new Dictionary <uint, HalfEdge>();

            for (int fi = 0; fi < src.FaceStore.Count; fi++)
            {
                CadFace f = src.FaceStore[fi];

                int      vi         = f.VList[0];
                HalfEdge head       = m.CreateHalfEdge(vi);
                HalfEdge current_he = head;

                HeFace face      = m.CreateFace(head);
                int    faceIndex = m.FaceStore.Add(face);

                current_he.Face = faceIndex;

                HalfEdge next_he;

                for (int pi = 1; pi < f.VList.Count; pi++)
                {
                    vi      = f.VList[pi];
                    next_he = m.CreateHalfEdge(vi);

                    current_he.Next = next_he;
                    next_he.Prev    = current_he;

                    next_he.Face = faceIndex;

                    current_he = next_he;
                }

                head.Prev       = current_he;
                current_he.Next = head;


                HalfEdge c = head;

                for (; ;)
                {
                    HeConnector.SetHalfEdgePair(c, map);

                    map[HeConnector.GetHeKey(c)] = c;

                    c = c.Next;
                    if (c == head)
                    {
                        break;
                    }
                }
            }

            m.RecreateNormals();

            return(m);
        }
Пример #4
0
        public void Intersection(uint idA, uint idB)
        {
            CadFigureMesh figA = GetCadFigureMesh(idA);
            CadFigureMesh figB = GetCadFigureMesh(idB);

            if (figA == null || figB == null)
            {
                ItConsole.println("invalid ID");
                return;
            }
            HeModel he_a = figA.mHeModel;
            HeModel he_b = figB.mHeModel;

            CadMesh a = HeModelConverter.ToCadMesh(he_a);
            CadMesh b = HeModelConverter.ToCadMesh(he_b);

            CadMesh c = CarveW.Intersection(a, b);

            MeshUtil.SplitAllFace(c);


            HeModel hem = HeModelConverter.ToHeModel(c);

            CadFigureMesh fig = (CadFigureMesh)Controller.DB.NewFigure(CadFigure.Types.MESH);

            fig.SetMesh(hem);

            CadOpe ope = new CadOpeAddFigure(Controller.CurrentLayer.ID, fig.ID);

            Session.AddOpe(ope);

            Controller.CurrentLayer.AddFigure(fig);

            Session.PostRemakeObjectTree();
        }
Пример #5
0
        public static bool IsPointInTriangle(Vector3d p, CadFace triangle, CadMesh mesh)
        {
            if (triangle.VList.Count < 3)
            {
                return(false);
            }

            Vector3d p0 = mesh.VertexStore[triangle.VList[0]].vector;
            Vector3d p1 = mesh.VertexStore[triangle.VList[1]].vector;
            Vector3d p2 = mesh.VertexStore[triangle.VList[2]].vector;

            Vector3d c1 = CadMath.CrossProduct(p, p0, p1);
            Vector3d c2 = CadMath.CrossProduct(p, p1, p2);
            Vector3d c3 = CadMath.CrossProduct(p, p2, p0);

            double ip12 = CadMath.InnerProduct(c1, c2);
            double ip13 = CadMath.InnerProduct(c1, c3);


            // When all corossProduct result's sign are same, Point is in triangle
            if (ip12 > 0 && ip13 > 0)
            {
                return(true);
            }

            return(false);
        }
Пример #6
0
        public static CadMesh CreateSphere(Vector3d pos, double r, int slices1, int slices2)
        {
            VertexList vl = new VertexList(slices2);

            double d = Math.PI / slices2;


            for (int i = 0; i < slices2; i++)
            {
                double a = i * d;

                double x = Math.Sin(a) * r;
                double y = Math.Cos(a) * r;

                vl.Add(CadVertex.Create(x, y, 0));
            }

            vl.Add(CadVertex.Create(0, -r, 0));


            CadMesh mesh = CreateRotatingBody(
                slices1, Vector3d.Zero, Vector3d.UnitY, vl, false, false, FaceType.TRIANGLE);

            for (int i = 0; i < mesh.VertexStore.Count; i++)
            {
                mesh.VertexStore.Ref(i).vector += pos;
            }

            return(mesh);
        }
Пример #7
0
        public static CadMesh CreateFrom(VertexList vl)
        {
            if (vl.Count < 2)
            {
                return(null);
            }

            CadMesh m = new CadMesh(vl.Count, 1);

            m.VertexStore.AddRange(vl);

            int i;

            FlexArray <int> nl = new FlexArray <int>(vl.Count);

            for (i = 0; i < vl.Count; i++)
            {
                nl.Add(i);
            }

            CadFace face = new CadFace(nl);

            m.FaceStore.Add(face);

            return(m);
        }
Пример #8
0
        // 単位正八面体作成
        public static CadMesh CreateUnitOctahedron()
        {
            CadMesh cm = new CadMesh(8, 12);

            var v0 = new CadVertex(-0.70710678, -0.70710678, 0.00000000);
            var v1 = new CadVertex(-0.70710678, 0.70710678, 0.00000000);
            var v2 = new CadVertex(0.70710678, 0.70710678, 0.00000000);
            var v3 = new CadVertex(0.70710678, -0.70710678, 0.00000000);
            var v4 = new CadVertex(0.00000000, 0.00000000, -1.00000000);
            var v5 = new CadVertex(0.00000000, 0.00000000, 1.00000000);

            cm.VertexStore.Add(v0);
            cm.VertexStore.Add(v1);
            cm.VertexStore.Add(v2);
            cm.VertexStore.Add(v3);
            cm.VertexStore.Add(v4);
            cm.VertexStore.Add(v5);

            cm.FaceStore.Add(new CadFace(0, 1, 4));
            cm.FaceStore.Add(new CadFace(0, 4, 3));
            cm.FaceStore.Add(new CadFace(0, 3, 5));
            cm.FaceStore.Add(new CadFace(0, 5, 1));

            cm.FaceStore.Add(new CadFace(1, 2, 4));
            cm.FaceStore.Add(new CadFace(1, 5, 2));
            cm.FaceStore.Add(new CadFace(2, 3, 4));
            cm.FaceStore.Add(new CadFace(2, 5, 3));

            return(cm);
        }
Пример #9
0
        public void MakeRotatingBody(uint baseFigID, Vector3d org, Vector3d axis, bool topCap, bool btmCap)
        {
            CadFigure baseFig = GetFigure(baseFigID);

            if (baseFig == null)
            {
                return;
            }

            if (baseFig.Type != CadFigure.Types.POLY_LINES)
            {
                return;
            }

            CadMesh cm = MeshMaker.CreateRotatingBody(32, org, axis, baseFig.PointList, topCap, btmCap, MeshMaker.FaceType.TRIANGLE);

            CadFigure fig = MesthToFig(cm);

            CadOpe ope = new CadOpeAddFigure(Controller.CurrentLayer.ID, fig.ID);

            Session.AddOpe(ope);
            Controller.CurrentLayer.AddFigure(fig);

            ope = new CadOpeRemoveFigure(Controller.CurrentLayer, baseFig.ID);
            Session.AddOpe(ope);
            Controller.CurrentLayer.RemoveFigureByID(baseFig.ID);

            Session.PostRemakeObjectTree();
        }
Пример #10
0
        private void testTriangulate()
        {
            CadFigure tfig = GetTargetFigure();

            if (tfig == null || tfig.Type != CadFigure.Types.POLY_LINES)
            {
                return;
            }

            if (tfig.PointCount < 3)
            {
                return;
            }

            VertexList vl = tfig.GetPoints(12);

            CadMesh m = IglW.Triangulate(vl, "a1000q");

            HeModel hem = HeModelConverter.ToHeModel(m);

            CadFigureMesh fig = (CadFigureMesh)Controller.DB.NewFigure(CadFigure.Types.MESH);

            fig.SetMesh(hem);

            Controller.CurrentLayer.AddFigure(fig);
        }
Пример #11
0
        // 全てのFaceを3角形に分割する
        public static void SplitAllFace(CadMesh mesh)
        {
            FlexArray <CadFace> faceStore = new FlexArray <CadFace>();

            for (int i = 0; i < mesh.FaceStore.Count; i++)
            {
                CadFace face = mesh.FaceStore[i];
                if (face.VList.Count < 3)
                {
                    continue;
                }

                if (face.VList.Count == 3)
                {
                    faceStore.Add(face);
                    continue;
                }

                List <CadFace> flist = Split(face, mesh);

                faceStore.AddRange(flist);
            }

            mesh.FaceStore = faceStore;
        }
Пример #12
0
        public static int FindMaxDistantPointIndex(CadVertex p0, CadFace f, CadMesh mesh)
        {
            int ret = -1;
            int i;

            CadVertex t;

            double maxd = 0;

            for (i = 0; i < f.VList.Count; i++)
            {
                CadVertex fp = mesh.VertexStore[f.VList[i]];

                t = fp - p0;
                double d = t.Norm();

                if (d > maxd)
                {
                    maxd = d;
                    ret  = i;
                }
            }

            return(ret);
        }
Пример #13
0
        public static CadMesh ScaleMesh(CadMesh cm, double scale)
        {
            for (int i = 0; i < cm.VertexStore.Count; i++)
            {
                cm.VertexStore.Ref(i) *= scale;
            }

            return(cm);
        }
Пример #14
0
        public static CadMesh MoveMesh(CadMesh cm, Vector3d mv)
        {
            for (int i = 0; i < cm.VertexStore.Count; i++)
            {
                cm.VertexStore.Ref(i) += mv;
            }

            return(cm);
        }
Пример #15
0
        public static CadMesh CreateUnitCube(Vector3d wv, Vector3d hv, FaceType faceType = FaceType.TRIANGLE)
        {
            Vector3d tv = CadMath.Normal(wv, hv);

            Vector3d wv2 = wv / 2;
            Vector3d hv2 = hv / 2;
            Vector3d tv2 = tv / 2;

            CadMesh cm = new CadMesh(8, 12);

            cm.VertexStore.Add(CadVertex.Create(wv2 + hv2 + tv2));
            cm.VertexStore.Add(CadVertex.Create(-wv2 + hv2 + tv2));
            cm.VertexStore.Add(CadVertex.Create(-wv2 - hv2 + tv2));
            cm.VertexStore.Add(CadVertex.Create(wv2 - hv2 + tv2));

            cm.VertexStore.Add(CadVertex.Create(wv2 + hv2 - tv2));
            cm.VertexStore.Add(CadVertex.Create(-wv2 + hv2 - tv2));
            cm.VertexStore.Add(CadVertex.Create(-wv2 - hv2 - tv2));
            cm.VertexStore.Add(CadVertex.Create(wv2 - hv2 - tv2));

            if (faceType == FaceType.QUADRANGLE)
            {
                cm.FaceStore.Add(new CadFace(0, 1, 2, 3));

                cm.FaceStore.Add(new CadFace(7, 6, 5, 4));

                cm.FaceStore.Add(new CadFace(0, 4, 5, 1));

                cm.FaceStore.Add(new CadFace(1, 5, 6, 2));

                cm.FaceStore.Add(new CadFace(2, 6, 7, 3));

                cm.FaceStore.Add(new CadFace(3, 7, 4, 0));
            }
            else
            {
                cm.FaceStore.Add(new CadFace(0, 1, 2));
                cm.FaceStore.Add(new CadFace(2, 3, 0));

                cm.FaceStore.Add(new CadFace(7, 6, 5));
                cm.FaceStore.Add(new CadFace(5, 4, 7));

                cm.FaceStore.Add(new CadFace(0, 4, 5));
                cm.FaceStore.Add(new CadFace(5, 1, 0));

                cm.FaceStore.Add(new CadFace(1, 5, 6));
                cm.FaceStore.Add(new CadFace(6, 2, 1));

                cm.FaceStore.Add(new CadFace(2, 6, 7));
                cm.FaceStore.Add(new CadFace(7, 3, 2));

                cm.FaceStore.Add(new CadFace(3, 7, 4));
                cm.FaceStore.Add(new CadFace(4, 0, 3));
            }

            return(cm);
        }
Пример #16
0
        public CadFigure MesthToFig(CadMesh cm)
        {
            HeModel hem = HeModelConverter.ToHeModel(cm);

            CadFigureMesh fig = (CadFigureMesh)Controller.DB.NewFigure(CadFigure.Types.MESH);

            fig.SetMesh(hem);

            return(fig);
        }
Пример #17
0
        public static CadMesh CreateCylinder(Vector3d pos, int circleDiv, int slices, double r, double len)
        {
            CadMesh mesh = CreateCylinder(circleDiv, slices, r, len);

            for (int i = 0; i < mesh.VertexStore.Count; i++)
            {
                mesh.VertexStore.Ref(i) += pos;
            }

            return(mesh);
        }
Пример #18
0
        public static CadMesh CreateBox(Vector3d pos, Vector3d sizeV, FaceType faceType = FaceType.TRIANGLE)
        {
            CadMesh cm = CreateUnitCube(faceType);

            for (int i = 0; i < cm.VertexStore.Count; i++)
            {
                cm.VertexStore.Ref(i) *= sizeV;
                cm.VertexStore.Ref(i) += pos;
            }

            return(cm);
        }
Пример #19
0
        public static CadMesh CreateOctahedron(Vector3d pos, Vector3d sizeV)
        {
            CadMesh cm = CreateUnitOctahedron();

            for (int i = 0; i < cm.VertexStore.Count; i++)
            {
                cm.VertexStore.Ref(i) *= sizeV;
                cm.VertexStore.Ref(i) += pos;
            }

            return(cm);
        }
Пример #20
0
        public void CutMesh(uint id)
        {
            CadFigureMesh tfig = GetCadFigureMesh(id);

            if (tfig == null)
            {
                ItConsole.println("invalid ID");
                return;
            }

            (Vector3d p0, Vector3d p1) = InputLine();

            if (p0.IsInvalid() || p1.IsInvalid())
            {
                return;
            }


            HeModel he  = tfig.mHeModel;
            CadMesh src = HeModelConverter.ToCadMesh(he);

            Vector3d normal = CadMath.Normal(
                p1 - p0, (Controller.DC.ViewDir));

            (CadMesh m1, CadMesh m2) = MeshUtil.CutMeshWithVector(src, p0, p1, normal);


            CadFigureMesh fig1 = (CadFigureMesh)Controller.DB.NewFigure(CadFigure.Types.MESH);

            fig1.SetMesh(HeModelConverter.ToHeModel(m1));

            CadFigureMesh fig2 = (CadFigureMesh)Controller.DB.NewFigure(CadFigure.Types.MESH);

            fig2.SetMesh(HeModelConverter.ToHeModel(m2));

            CadOpe ope;

            ope = new CadOpeAddFigure(Controller.CurrentLayer.ID, fig1.ID);
            Session.AddOpe(ope);
            Controller.CurrentLayer.AddFigure(fig1);

            ope = new CadOpeAddFigure(Controller.CurrentLayer.ID, fig2.ID);
            Session.AddOpe(ope);
            Controller.CurrentLayer.AddFigure(fig2);

            ope = new CadOpeRemoveFigure(Controller.CurrentLayer, tfig.ID);
            Session.AddOpe(ope);
            Controller.CurrentLayer.RemoveFigureByID(tfig.ID);

            Controller.ClearSelection();

            Session.PostRemakeObjectTree();
        }
Пример #21
0
        // 単位立方体作成
        public static CadMesh CreateUnitCube(FaceType faceType = FaceType.TRIANGLE)
        {
            CadMesh cm = new CadMesh(8, 12);

            cm.VertexStore.Add(CadVertex.Create(+0.5, +0.5, +0.5));
            cm.VertexStore.Add(CadVertex.Create(-0.5, +0.5, +0.5));
            cm.VertexStore.Add(CadVertex.Create(-0.5, -0.5, +0.5));
            cm.VertexStore.Add(CadVertex.Create(+0.5, -0.5, +0.5));

            cm.VertexStore.Add(CadVertex.Create(+0.5, +0.5, -0.5));
            cm.VertexStore.Add(CadVertex.Create(-0.5, +0.5, -0.5));
            cm.VertexStore.Add(CadVertex.Create(-0.5, -0.5, -0.5));
            cm.VertexStore.Add(CadVertex.Create(+0.5, -0.5, -0.5));

            if (faceType == FaceType.QUADRANGLE)
            {
                cm.FaceStore.Add(new CadFace(0, 1, 2, 3));

                cm.FaceStore.Add(new CadFace(7, 6, 5, 4));

                cm.FaceStore.Add(new CadFace(0, 4, 5, 1));

                cm.FaceStore.Add(new CadFace(1, 5, 6, 2));

                cm.FaceStore.Add(new CadFace(2, 6, 7, 3));

                cm.FaceStore.Add(new CadFace(3, 7, 4, 0));
            }
            else
            {
                cm.FaceStore.Add(new CadFace(0, 1, 2));
                cm.FaceStore.Add(new CadFace(2, 3, 0));

                cm.FaceStore.Add(new CadFace(7, 6, 5));
                cm.FaceStore.Add(new CadFace(5, 4, 7));

                cm.FaceStore.Add(new CadFace(0, 4, 5));
                cm.FaceStore.Add(new CadFace(5, 1, 0));

                cm.FaceStore.Add(new CadFace(1, 5, 6));
                cm.FaceStore.Add(new CadFace(6, 2, 1));

                cm.FaceStore.Add(new CadFace(2, 6, 7));
                cm.FaceStore.Add(new CadFace(7, 3, 2));

                cm.FaceStore.Add(new CadFace(3, 7, 4));
                cm.FaceStore.Add(new CadFace(4, 0, 3));
            }

            return(cm);
        }
Пример #22
0
        public CadFigure AddCylinder(Vector3d pos, int circleDiv, int slices, double r, double len)
        {
            CadMesh cm = MeshMaker.CreateCylinder(pos, circleDiv, slices, r, len);

            CadFigure fig = MesthToFig(cm);

            CadOpe ope = new CadOpeAddFigure(Controller.CurrentLayer.ID, fig.ID);

            Session.AddOpe(ope);
            Controller.CurrentLayer.AddFigure(fig);

            Session.PostRemakeObjectTree();

            return(fig);
        }
Пример #23
0
        public CadFigure AddSphere(Vector3d pos, int slices, double r)
        {
            CadMesh cm = MeshMaker.CreateSphere(pos, r, slices, slices);

            CadFigure fig = MesthToFig(cm);

            CadOpe ope = new CadOpeAddFigure(Controller.CurrentLayer.ID, fig.ID);

            Session.AddOpe(ope);
            Controller.CurrentLayer.AddFigure(fig);

            Session.PostRemakeObjectTree();

            return(fig);
        }
Пример #24
0
        private void testAminusB()
        {
            List <CadFigure> figList = Controller.DB.GetSelectedFigList();

            if (figList.Count < 2)
            {
                return;
            }

            if (figList[0].Type != CadFigure.Types.MESH)
            {
                return;
            }

            if (figList[1].Type != CadFigure.Types.MESH)
            {
                return;
            }

            CadFigureMesh fig_a = (CadFigureMesh)figList[0];
            CadFigureMesh fig_b = (CadFigureMesh)figList[1];

            if (fig_a.Current)
            {
                CadFigureMesh t = fig_a;
                fig_a = fig_b;
                fig_b = t;
            }

            ItConsole.println("ID:" + fig_a.ID.ToString() + " - ID:" + fig_b.ID.ToString());

            HeModel he_a = fig_a.mHeModel;
            HeModel he_b = fig_b.mHeModel;

            CadMesh a = HeModelConverter.ToCadMesh(he_a);
            CadMesh b = HeModelConverter.ToCadMesh(he_b);

            CadMesh c = CarveW.AMinusB(a, b);


            HeModel hem = HeModelConverter.ToHeModel(c);

            CadFigureMesh fig = (CadFigureMesh)Controller.DB.NewFigure(CadFigure.Types.MESH);

            fig.SetMesh(hem);

            Controller.CurrentLayer.AddFigure(fig);
        }
Пример #25
0
        public CadMesh CreateCadMesh(List <CadVertex> plist, List <CadFace> flist)
        {
            CadMesh cm = new CadMesh(plist.Count, flist.Count);

            foreach (CadVertex p in plist)
            {
                cm.VertexStore.Add(p);
            }

            foreach (CadFace f in flist)
            {
                cm.FaceStore.Add(f);
            }

            return(cm);
        }
Пример #26
0
        public CadFigure AddOctahedron(Vector3d pos, double x, double y, double z)
        {
            CadMesh cm =
                MeshMaker.CreateOctahedron(pos, new Vector3d(x, y, z));

            CadFigure fig = MesthToFig(cm);

            CadOpe ope = new CadOpeAddFigure(Controller.CurrentLayer.ID, fig.ID);

            Session.AddOpe(ope);
            Controller.CurrentLayer.AddFigure(fig);

            Session.PostRemakeObjectTree();

            return(fig);
        }
Пример #27
0
        private void test002()
        {
            CadMesh cm = MeshMaker.CreateSphere(new Vector3d(0, 0, 0), 20, 16, 16);

            HeModel hem = HeModelConverter.ToHeModel(cm);

            CadFigureMesh fig = (CadFigureMesh)Controller.DB.NewFigure(CadFigure.Types.MESH);

            fig.SetMesh(hem);

            CadOpe ope = new CadOpeAddFigure(Controller.CurrentLayer.ID, fig.ID);

            Controller.HistoryMan.foward(ope);
            Controller.CurrentLayer.AddFigure(fig);
            Controller.UpdateObjectTree(true);
        }
Пример #28
0
        public static (CadMesh m1, CadMesh m2) CutMeshWithVector(
            CadMesh src, Vector3d p0, Vector3d p1, Vector3d normal)
        {
            Vector3d wv = (p1 - p0).UnitVector();
            Vector3d hv = normal;

            CadMesh cubeA = MeshMaker.CreateUnitCube(wv, hv, MeshMaker.FaceType.QUADRANGLE);

            MoveMesh(cubeA, -hv / 2);
            ScaleMesh(cubeA, 10000);
            MoveMesh(cubeA, (p1 - p0) / 2 + p0);

            CadMesh cubeB = MeshMaker.CreateUnitCube(wv, hv, MeshMaker.FaceType.QUADRANGLE);

            MoveMesh(cubeB, hv / 2);
            ScaleMesh(cubeB, 10000);
            MoveMesh(cubeB, (p1 - p0) / 2 + p0);


            CadMesh m1;

            try
            {
                m1 = CarveW.AMinusB(src, cubeA);
            }
            catch (Exception e)
            {
                return(null, null);
            }

            MeshUtil.SplitAllFace(m1);

            CadMesh m2;

            try
            {
                m2 = CarveW.AMinusB(src, cubeB);
            }
            catch (Exception e)
            {
                return(null, null);
            }

            MeshUtil.SplitAllFace(m2);

            return(m1, m2);
        }
Пример #29
0
        public static CadMesh ToCadMesh(HeModel hem)
        {
            CadMesh cm = new CadMesh();

            cm.VertexStore = new VertexList(hem.VertexStore);
            cm.FaceStore   = new FlexArray <CadFace>();

            for (int i = 0; i < hem.FaceStore.Count; i++)
            {
                CadFace cf = ToCadFace(hem.FaceStore[i]);
                if (cf != null)
                {
                    cm.FaceStore.Add(cf);
                }
            }

            return(cm);
        }
Пример #30
0
        private void AddFace(CadMesh mesh, VertexList plist)
        {
            if (plist.Count == 0)
            {
                return;
            }

            int pidx;

            CadFace f = new CadFace();

            for (int i = 0; i < plist.Count; i++)
            {
                pidx = mesh.VertexStore.Add(plist[i]);
                f.VList.Add(pidx);
            }

            mesh.FaceStore.Add(f);
        }