Ejemplo n.º 1
0
        private List <string> saveComposition(string filename)
        {
            List <string> files = new List <string>();

            for (int i = 0; i < ProjectManager.Instance.CurrentProject.projectSettings.PrinterSettings.Extruders.Count; i++)
            {
                List <PrintModel> models = ProjectManager.Instance.CurrentProject.ListObjects().Where(x => x.ExtruderNumber == i).ToList();

                if (models.Count > 0)
                {
                    TopoModel model = new TopoModel();
                    foreach (PrintModel stl in models)
                    {
                        stl.UpdateMatrix();
                        model.Merge(stl.ActiveModel, stl.trans);
                    }

                    model.exportSTL(filename + "composition" + i + ".stl", writeSTLBinary);
                    files.Add(filename + "composition" + i + ".stl");
                }
                else
                {
                    files.Add("-");
                }
            }

            return(files);
        }
Ejemplo n.º 2
0
        //---

        public TopoTriangle(TopoModel model, TopoVertex v1, TopoVertex v2, TopoVertex v3, double nx, double ny, double nz)
        {
            vertices[0] = v1;
            vertices[1] = v2;
            vertices[2] = v3;
            normal      = new RHVector3(nx, ny, nz);
        }
Ejemplo n.º 3
0
 public TopoTriangle(TopoModel model, TopoVertex v1, TopoVertex v2, TopoVertex v3)
 {
     vertices[0] = v1;
     vertices[1] = v2;
     vertices[2] = v3;
     RecomputeNormal();
 }
Ejemplo n.º 4
0
        public TopoTriangle(TopoModel model, TopoVertex v1, TopoVertex v2, TopoVertex v3, double nx, double ny, double nz)
        {
            vertices[0] = v1;
            vertices[1] = v2;
            vertices[2] = v3;
            RHVector3 normalTest = new RHVector3(nx, ny, nz);

            //normal.NormalizeSafe();
            edges[0] = model.getOrCreateEdgeBetween(v1, v2);
            edges[1] = model.getOrCreateEdgeBetween(v2, v3);
            edges[2] = model.getOrCreateEdgeBetween(v3, v1);
            edges[0].connectFace(this);
            edges[1].connectFace(this);
            edges[2].connectFace(this);
            v1.connectFace(this);
            v2.connectFace(this);
            v3.connectFace(this);
            boundingBox.Add(v1.pos);
            boundingBox.Add(v2.pos);
            boundingBox.Add(v3.pos);
            RecomputeNormal();
            if (normalTest.ScalarProduct(normal) < 0)
            {
                FlipDirection();
            }

            /* double d1 = edges[0].EdgeLength;
             * double d2 = edges[1].EdgeLength;
             * double d3 = edges[2].EdgeLength;
             * if (d1 < epsilonZero || d2 < epsilonZero || d3 < epsilonZero)
             *   Console.WriteLine("Df:" + this);*/
        }
Ejemplo n.º 5
0
 public void DeepAnalysis(InfoProgressPanel ipp)
 {
     originalModel.ipp = ipp;
     originalModel.Analyse();
     if (ipp.IsKilled)
     {
         return;
     }
     originalModel.updateBad();
     if (originalModel.intersectingTriangles.Count > 0 || originalModel.badTriangles > 0 || originalModel.manifold == false || originalModel.manyShardEdges != 0 || originalModel.loopEdges != 0 || originalModel.normalsOriented == false)
     {
         if (repairedModel == null)
         {
             repairedModel = originalModel.Copy();
         }
         repairedModel.ipp = ipp;
         repairedModel.RepairUnobtrusive();
         repairedModel.Analyse();
         originalModel.Analyse();
         if (ipp.IsKilled)
         {
             originalModel.clear();
             repairedModel.clear();
             return;
         }
         repairedModel.updateBad();
         ShowRepaired(true);
         repairedModel.ipp = null;
     }
     originalModel.ipp = null;
 }
Ejemplo n.º 6
0
        public void LaplaceRelaxation(TopoModel model)
        {
            double    n      = 2;
            RHVector3 newPos = new RHVector3(pos);

            newPos.AddInternal(pos);
            foreach (TopoTriangle t in connectedFacesList)
            {
                int idx = t.VertexIndexFor(this);
                n += 2;
                newPos.AddInternal(t.vertices[(idx + 1) % 3].pos);
                newPos.AddInternal(t.vertices[(idx + 2) % 3].pos);
            }
            newPos.Scale(1.0 / n);
            // validate newPos does not create intersecting triangles or bad shapes
            foreach (TopoTriangle t in connectedFacesList)
            {
                int       idx    = t.VertexIndexFor(this);
                RHVector3 d1     = t.vertices[(idx + 1) % 3].pos.Subtract(newPos);
                RHVector3 d2     = t.vertices[(idx + 2) % 3].pos.Subtract(t.vertices[(idx + 1) % 3].pos);
                RHVector3 normal = d1.CrossProduct(d2);
                if (normal.ScalarProduct(t.normal) < 0)
                {
                    return;
                }
                double angle = t.AngleEdgePoint((idx + 1) % 3, newPos);
                if (angle < 0.088 || angle > 2.96)
                {
                    return; // Angle gets to small
                }
            }
            model.vertices.ChangeCoordinates(this, newPos);
        }
Ejemplo n.º 7
0
        public TopoTriangle(TopoModel model, TopoVertex v1, TopoVertex v2, TopoVertex v3)
        {
            vertices[0] = v1;
            vertices[1] = v2;
            vertices[2] = v3;
            RecomputeNormal();
            edges[0] = model.getOrCreateEdgeBetween(v1, v2);
            edges[1] = model.getOrCreateEdgeBetween(v2, v3);
            edges[2] = model.getOrCreateEdgeBetween(v3, v1);
            edges[0].connectFace(this);
            edges[1].connectFace(this);
            edges[2].connectFace(this);
            v1.connectFace(this);
            v2.connectFace(this);
            v3.connectFace(this);
            boundingBox.Add(v1.pos);
            boundingBox.Add(v2.pos);
            boundingBox.Add(v3.pos);

            /*double d1 = edges[0].EdgeLength;
            *  double d2 = edges[1].EdgeLength;
            *  double d3 = edges[2].EdgeLength;
            *  if (d1 < epsilonZero || d2 < epsilonZero || d3 < epsilonZero)
            *   Console.WriteLine("Df:" + this);*/
        }
Ejemplo n.º 8
0
        //QFont font;
        //float arrow_length;

        internal Coordinate()
        {
            submesh = new Submesh[3];
            model   = new TopoModel[3];

            //arrow_length = Convert.ToSingle(Math.Abs(model.boundingBox.zMax - model.boundingBox.zMin));

            // override mesh color
            for (int i = 0; i < 3; i++)
            {
                // import mesh from STL.
                model[i] = new TopoModel();
                model[i].importSTL(Application.StartupPath + Path.DirectorySeparatorChar + names[i], 1);
                submesh[i] = new Submesh();
                model[i].FillMeshTrianglesOnly(submesh[i], 0);
                submesh[i].Compress(true, coordinate_colors[i]);
                submesh[i].vertices.Clear();
            }
            model = null; // release memory
            // config font

            /*font = new QFont("data/HappySans.ttf",
            *   label_font_size, new QFontBuilderConfiguration(true));
            *  font.Options.DropShadowActive = false;*/
        }
Ejemplo n.º 9
0
        //QFont font;
        //float arrow_length;

        internal Coordinate(ThreeDControl ctrl)
        {
            submesh   = new Submesh[3];
            model     = new TopoModel[3];
            this.ctrl = ctrl;
            //arrow_length = Convert.ToSingle(Math.Abs(model.boundingBox.zMax - model.boundingBox.zMin));

            // override mesh color
            for (int i = 0; i < 3; i++)
            {
                // import mesh from STL.
                model[i] = new TopoModel();
                string file = System.AppDomain.CurrentDomain.BaseDirectory + Path.DirectorySeparatorChar + names[i];
                model[i].importSTL(File.ReadAllBytes(file), file, 1);
                submesh[i] = new Submesh();
                model[i].FillMeshTrianglesOnly(submesh[i], 0);
                submesh[i].Compress(true, coordinate_colors[i]);
                submesh[i].vertices.Clear();
            }
            model = null; // release memory
            // config font

            /*font = new QFont("data/HappySans.ttf",
            *   label_font_size, new QFontBuilderConfiguration(true));
            *  font.Options.DropShadowActive = false;*/
        }
Ejemplo n.º 10
0
 public void disconnectFace(TopoTriangle face, TopoModel model)
 {
     faces.Remove(face);
     if (faces.Count == 0)
     {
         model.edges.Remove(this);
     }
 }
Ejemplo n.º 11
0
 public void Unlink(TopoModel model)
 {
     edges[0].disconnectFace(this, model);
     edges[1].disconnectFace(this, model);
     edges[2].disconnectFace(this, model);
     vertices[0].disconnectFace(this);
     vertices[1].disconnectFace(this);
     vertices[2].disconnectFace(this);
 }
Ejemplo n.º 12
0
        public void Load(string file, InfoProgressPanel ipp)
        {
            filename = file;
            DateTime lastModified2 = File.GetLastWriteTime(filename);

            lastModified      = lastModified2.Ticks;
            originalModel.ipp = ipp;
            string lname = filename.ToLower();

            if (lname.EndsWith(".stl"))
            {
                originalModel.importSTL(filename);
            }
            else if (lname.EndsWith(".obj"))
            {
                originalModel.importObj(filename);
            }
            FileInfo info = new FileInfo(file);

            name = info.Name;
            originalModel.Analyse();
            if (ipp.IsKilled)
            {
                originalModel.clear();
                return;
            }
            originalModel.Analyse();
            if (ipp.IsKilled)
            {
                originalModel.clear();
                return;
            }
            originalModel.updateBad();
            if (originalModel.intersectingTriangles.Count > 0 || originalModel.badTriangles > 0 || originalModel.manifold == false || originalModel.manyShardEdges != 0 || originalModel.loopEdges != 0 || originalModel.normalsOriented == false)
            {
                if (repairedModel == null)
                {
                    repairedModel = originalModel.Copy();
                }
                repairedModel.ipp = ipp;
                repairedModel.RepairUnobtrusive();
                repairedModel.Analyse();
                originalModel.Analyse();
                if (ipp.IsKilled)
                {
                    originalModel.clear();
                    repairedModel.clear();
                    return;
                }
                repairedModel.updateBad();
                ShowRepaired(true);
                repairedModel.ipp = null;
            }
            originalModel.ipp = null;
        }
Ejemplo n.º 13
0
 public void FixNormals()
 {
     if (repairedModel == null)
     {
         repairedModel = originalModel.Copy();
     }
     repairedModel.UpdateNormals();
     repairedModel.AnalyseFast();
     //repairedModel.updateBad();
     ShowRepaired(true);
 }
Ejemplo n.º 14
0
 void TestInplane3D_1()
 {
     TopoModel    model = new TopoModel();
     TopoVertex   v1    = model.addVertex(new RHVector3(3.67848944664001, -2.6547646522522, 1.38814495312454E-14));
     TopoVertex   v2    = model.addVertex(new RHVector3(1.62981510162354, -1.05116808414459, 1.83297828141877E-14));
     TopoVertex   v3    = model.addVertex(new RHVector3(2.29873323440552, -0.79055267572403, 2.11497486191092E-14));
     TopoVertex   v4    = model.addVertex(new RHVector3(1.63205575942993, -1.05116808414459, 2.78849697113037));
     TopoVertex   v5    = model.addVertex(new RHVector3(0.916237592697144, -1.1297744512558, 1.83297828141877E-14));
     TopoVertex   v6    = model.addVertex(new RHVector3(1.38571500778198, -1.07829427719116, 2.67316389083862));
     TopoTriangle t1    = model.AddTriangle(new TopoTriangle(model, v1, v2, v3));
     TopoTriangle t2    = model.AddTriangle(new TopoTriangle(model, v4, v5, v6));
 }
Ejemplo n.º 15
0
 void TestInplaneSameVertex()
 {
     TopoModel    model = new TopoModel();
     TopoVertex   v1    = model.addVertex(new RHVector3(0, 0, 0));
     TopoVertex   v2    = model.addVertex(new RHVector3(10, 0, 0));
     TopoVertex   v3    = model.addVertex(new RHVector3(10, 10, 0));
     TopoVertex   v4    = model.addVertex(new RHVector3(10, -1, 0));
     TopoVertex   v5    = model.addVertex(new RHVector3(7, 1, 0));
     TopoVertex   v6    = model.addVertex(new RHVector3(1, -7, 0));
     TopoTriangle t1    = model.AddTriangle(new TopoTriangle(model, v1, v2, v3));
     TopoTriangle t2    = model.AddTriangle(new TopoTriangle(model, v1, v4, v6));
 }
Ejemplo n.º 16
0
 void TestInplaneInsideSameEdgeIntersects()
 {
     TopoModel    model = new TopoModel();
     TopoVertex   v1    = model.addVertex(new RHVector3(0, 0, 0));
     TopoVertex   v2    = model.addVertex(new RHVector3(10, 0, 0));
     TopoVertex   v3    = model.addVertex(new RHVector3(10, 10, 0));
     TopoVertex   v4    = model.addVertex(new RHVector3(1, 1, 0));
     TopoVertex   v5    = model.addVertex(new RHVector3(7, 1, 0));
     TopoVertex   v6    = model.addVertex(new RHVector3(5, 3, 0));
     TopoTriangle t1    = model.AddTriangle(new TopoTriangle(model, v1, v2, v3));
     TopoTriangle t2    = model.AddTriangle(new TopoTriangle(model, v1, v2, v6));
 }
Ejemplo n.º 17
0
        public void Analyse(PrintModel model)
        {
            TopoModel m = null;

            if (model != null)
            {
                m = new TopoModel();
                m.Merge(model.Model, model.trans);
            }

            ProjectManager.Instance.CurrentProject.projectSettings.PrintStatistic.UpadateModelInfo(m, model);
        }
Ejemplo n.º 18
0
 void TestInplaneOutside()
 {
     TopoModel    model = new TopoModel();
     TopoVertex   v1    = model.addVertex(new RHVector3(0, 0, 0));
     TopoVertex   v2    = model.addVertex(new RHVector3(10, 0, 0));
     TopoVertex   v3    = model.addVertex(new RHVector3(10, 10, 0));
     TopoVertex   v4    = model.addVertex(new RHVector3(11, 1, 0));
     TopoVertex   v5    = model.addVertex(new RHVector3(17, 1, 0));
     TopoVertex   v6    = model.addVertex(new RHVector3(11, 7, 0));
     TopoTriangle t1    = model.AddTriangle(new TopoTriangle(model, v1, v2, v3));
     TopoTriangle t2    = model.AddTriangle(new TopoTriangle(model, v4, v5, v6));
 }
Ejemplo n.º 19
0
 void TestRightAngle()
 {
     TopoModel    model = new TopoModel();
     TopoVertex   v1    = model.addVertex(new RHVector3(0, 0, 0));
     TopoVertex   v2    = model.addVertex(new RHVector3(10, 0, 0));
     TopoVertex   v3    = model.addVertex(new RHVector3(5, 5, 0));
     TopoVertex   v4    = model.addVertex(new RHVector3(0, 0, -5));
     TopoVertex   v5    = model.addVertex(new RHVector3(10, 0, -5));
     TopoVertex   v6    = model.addVertex(new RHVector3(5, 0, 5));
     TopoTriangle t1    = model.AddTriangle(new TopoTriangle(model, v1, v2, v3));
     TopoTriangle t2    = model.AddTriangle(new TopoTriangle(model, v4, v5, v6));
 }
Ejemplo n.º 20
0
        public override void Paint()
        {
            TopoModel model = ActiveModel;

            if (Visible)
            {
                if (false) //**Main.main.objectPlacement.checkCutFaces.Checked)
                {
                    // int cutpos = Main.main.objectPlacement.cutPositionSlider.Value;
                    if (ForceRefresh || ctrl.updateCuts || lastRendered != 1 || activeModel != activeSubmesh ||
                        lastShowEdges != SettingsProvider.Instance.ThreeDSettings.ShowEdges || lastSelected != Selected)
                    {
                        RHVector3 normpoint = ctrl.cutPos.Add(ctrl.cutDirection);
                        RHVector3 point     = new RHVector3(0, 0, 0);
                        ReverseTransformPoint(ctrl.cutPos, point);
                        ReverseTransformPoint(normpoint, normpoint);
                        RHVector3 normal = normpoint.Subtract(point);

                        submesh.Clear();
                        model.CutMesh(submesh, normal, point,
                                      outside ? Submesh.MESHCOLOR_OUTSIDE : Submesh.MESHCOLOR_FRONTBACK);
                        submesh.selected = Selected;
                        submesh.Compress();
                        lastShowEdges = SettingsProvider.Instance.ThreeDSettings.ShowEdges;
                        lastSelected  = Selected;
                        activeSubmesh = activeModel;
                        lastRendered  = 1;
                    }
                }
                else
                {
                    if (ForceRefresh || ctrl.updateCuts || lastRendered != 0 || activeModel != activeSubmesh ||
                        lastShowEdges != SettingsProvider.Instance.ThreeDSettings.ShowEdges)
                    {
                        submesh.Clear();
                        submesh.defaultColor =
                            ProjectManager.Instance.CurrentProject.projectSettings.PrinterSettings.Extruders[ExtruderNumber].ExtruderColor;
                        model.FillMesh(submesh, outside ? Submesh.MESHCOLOR_OUTSIDE : Submesh.MESHCOLOR_FRONTBACK);
                        submesh.selected = Selected;
                        submesh.Compress();
                        lastShowEdges = SettingsProvider.Instance.ThreeDSettings.ShowEdges;
                        lastSelected  = Selected;
                        activeSubmesh = activeModel;
                        lastRendered  = 0;
                    }
                }
//            submesh.Draw(SettingsProvider.Instance.ThreeDSettings.drawMethod,ctrl.cam.EdgeTranslation());
                submesh.Draw(2, ctrl.cam.EdgeTranslation());
            }
            ForceRefresh = false;
        }
Ejemplo n.º 21
0
 public void RunTest()
 {
     if (repairedModel == null)
     {
         repairedModel = originalModel.Copy();
         repairedModel.RepairUnobtrusive();
     }
     repairedModel.RetestIntersectingTriangles();
     //repairedModel.JoinTouchedOpenEdges(0.1);
     //repairedModel.UpdateNormals();
     repairedModel.Analyse();
     repairedModel.updateBad();
     ShowRepaired(true);
 }
Ejemplo n.º 22
0
        void TestInplaneOutside()
        {
            TopoModel    model = new TopoModel();
            TopoVertex   v1    = model.addVertex(new RHVector3(0, 0, 0));
            TopoVertex   v2    = model.addVertex(new RHVector3(10, 0, 0));
            TopoVertex   v3    = model.addVertex(new RHVector3(10, 10, 0));
            TopoVertex   v4    = model.addVertex(new RHVector3(11, 1, 0));
            TopoVertex   v5    = model.addVertex(new RHVector3(17, 1, 0));
            TopoVertex   v6    = model.addVertex(new RHVector3(11, 7, 0));
            TopoTriangle t1    = model.AddTriangle(new TopoTriangle(model, v1, v2, v3));
            TopoTriangle t2    = model.AddTriangle(new TopoTriangle(model, v4, v5, v6));

            if (t1.Intersects(t2))
            {
                faildTests++;
                Console.WriteLine("Failed test:TestInplaneOutside");
            }
        }
Ejemplo n.º 23
0
        void TestInplaneInsideSameEdgeIntersects()
        {
            TopoModel    model = new TopoModel();
            TopoVertex   v1    = model.addVertex(new RHVector3(0, 0, 0));
            TopoVertex   v2    = model.addVertex(new RHVector3(10, 0, 0));
            TopoVertex   v3    = model.addVertex(new RHVector3(10, 10, 0));
            TopoVertex   v4    = model.addVertex(new RHVector3(1, 1, 0));
            TopoVertex   v5    = model.addVertex(new RHVector3(7, 1, 0));
            TopoVertex   v6    = model.addVertex(new RHVector3(5, 3, 0));
            TopoTriangle t1    = model.AddTriangle(new TopoTriangle(model, v1, v2, v3));
            TopoTriangle t2    = model.AddTriangle(new TopoTriangle(model, v1, v2, v6));

            if (!t1.Intersects(t2))
            {
                faildTests++;
                Console.WriteLine("Failed test:TestInplaneInsideSameEdgeIntersects");
            }
        }
Ejemplo n.º 24
0
        void TestSharedPointIntersect()
        {
            TopoModel    model = new TopoModel();
            TopoVertex   v1    = model.addVertex(new RHVector3(0, 0, 0));
            TopoVertex   v2    = model.addVertex(new RHVector3(10, 0, 0));
            TopoVertex   v3    = model.addVertex(new RHVector3(5, 5, 0));
            TopoVertex   v4    = model.addVertex(new RHVector3(0, 0, -5));
            TopoVertex   v5    = model.addVertex(new RHVector3(10, 0, -5));
            TopoVertex   v6    = model.addVertex(new RHVector3(5, 0, 5));
            TopoTriangle t1    = model.AddTriangle(new TopoTriangle(model, v1, v2, v3));
            TopoTriangle t2    = model.AddTriangle(new TopoTriangle(model, v1, v5, v6));

            if (!t1.Intersects(t2))
            {
                faildTests++;
                Console.WriteLine("Failed test:TestSharedPointIntersect");
            }
        }
Ejemplo n.º 25
0
        public override void Paint()
        {
            TopoModel model = ActiveModel;

            if (Main.main.objectPlacement.checkCutFaces.Checked)
            {
                int cutpos = Main.main.objectPlacement.cutPositionSlider.Value;
                if (ForceRefresh || Main.main.threedview.updateCuts || lastRendered != 1 || activeModel != activeSubmesh || lastShowEdges != Main.threeDSettings.ShowEdges || lastSelected != Selected)
                {
                    RHVector3 normpoint = Main.main.threedview.cutPos.Add(Main.main.threedview.cutDirection);
                    RHVector3 point     = new RHVector3(0, 0, 0);
                    ReverseTransformPoint(Main.main.threedview.cutPos, point);
                    ReverseTransformPoint(normpoint, normpoint);
                    RHVector3 normal = normpoint.Subtract(point);

                    submesh.Clear();
                    model.CutMesh(submesh, normal, point, outside ? Submesh.MESHCOLOR_OUTSIDE : Submesh.MESHCOLOR_FRONTBACK);
                    submesh.selected = Selected;
                    submesh.Compress();
                    lastShowEdges = Main.threeDSettings.ShowEdges;
                    lastSelected  = Selected;
                    activeSubmesh = activeModel;
                    lastRendered  = 1;
                }
            }
            else
            {
                if (ForceRefresh || Main.main.threedview.updateCuts || lastRendered != 0 || activeModel != activeSubmesh || lastShowEdges != Main.threeDSettings.ShowEdges)
                {
                    submesh.Clear();
                    model.FillMesh(submesh, outside ? Submesh.MESHCOLOR_OUTSIDE : Submesh.MESHCOLOR_FRONTBACK);
                    submesh.selected = Selected;
                    submesh.Compress();
                    lastShowEdges = Main.threeDSettings.ShowEdges;
                    lastSelected  = Selected;
                    activeSubmesh = activeModel;
                    lastRendered  = 0;
                }
            }
            submesh.Draw(Main.threeDSettings.drawMethod, Main.main.threedview.cam.EdgeTranslation());
            ForceRefresh = false;
        }
Ejemplo n.º 26
0
        private void saveComposition(string filename)
        {
            TopoModel model = new TopoModel();

            foreach (PrintModel stl in ListObjects(false))
            {
                stl.UpdateMatrix();
                model.Merge(stl.ActiveModel, stl.trans);
            }
            if (filename.EndsWith(".obj") || filename.EndsWith(".OBJ"))
            {
                model.exportObj(filename, true);
            }
            else
            {
                model.exportSTL(filename, writeSTLBinary);
            }
            Slicer.lastBox.Clear();
            Slicer.lastBox.Add(model.boundingBox);
        }
Ejemplo n.º 27
0
        public bool SmoothAspectRatio(TopoModel model, double maxRatio)
        {
            double maxLen, minLen;
            int    maxIdx, minIdx;

            LongestShortestEdgeLength(out maxIdx, out maxLen, out minIdx, out minLen);
            if (minLen == 0)
            {
                return(false);
            }
            if (maxLen > 1 && maxLen / minLen > maxRatio)
            {
                RHVector3 center = edges[maxIdx].v1.pos.Add(edges[maxIdx].v2.pos);
                center.Scale(0.5);
                TopoVertex newVertex = new TopoVertex(0, center);
                model.addVertex(newVertex);
                edges[maxIdx].InsertVertex(model, newVertex);
                return(true);
            }
            return(false);
        }
Ejemplo n.º 28
0
        public TopoTriangle BuildTriangle(TopoModel model)
        {
            TopoVertex sharedPoint = null;
            TopoVertex p1 = null, p2 = null;

            if (edgeA.v1 == edgeB.v1)
            {
                sharedPoint = edgeA.v1;
                p1          = edgeA.v2;
                p2          = edgeB.v2;
            }
            else if (edgeA.v1 == edgeB.v2)
            {
                sharedPoint = edgeA.v1;
                p1          = edgeA.v2;
                p2          = edgeB.v1;
            }
            else if (edgeA.v2 == edgeB.v1)
            {
                sharedPoint = edgeA.v1;
                p1          = edgeA.v1;
                p2          = edgeB.v2;
            }
            else if (edgeA.v2 == edgeB.v2)
            {
                sharedPoint = edgeA.v2;
                p1          = edgeA.v1;
                p2          = edgeB.v1;
            }
            TopoTriangle faceA       = edgeA.faces.First.Value;
            TopoTriangle newTriangle = new TopoTriangle(model, sharedPoint, p1, p2, 0, 0, 1);

            if (newTriangle.SameNormalOrientation(faceA) == false)
            {
                newTriangle.FlipDirection();
            }
            newTriangle.RecomputeNormal();
            model.AddTriangle(newTriangle);
            return(newTriangle);
        }
Ejemplo n.º 29
0
        public void Analyse(PrintModel pm)
        {
            TopoModel m = new TopoModel();

            m.Merge(pm.Model, pm.trans);
            infoVolume.Text  = (0.001 * m.Volume()).ToString("0.0000") + " cm³";
            infoSurface.Text = (0.01 * m.Surface()).ToString("0.0000") + " cm²";
            infoShells.Text  = pm.Model.shells.ToString();
            infoPoints.Text  = pm.Model.vertices.Count.ToString();
            infoEdges.Text   = pm.Model.edges.Count.ToString();
            infoFaces.Text   = pm.Model.triangles.Count.ToString();
            infoMinX.Text    = m.boundingBox.minPoint.x.ToString("0.00") + " mm";
            infoMaxX.Text    = m.boundingBox.maxPoint.x.ToString("0.00") + " mm";
            infoSizeX.Text   = m.boundingBox.Size.x.ToString("0.00") + " mm";
            infoMinY.Text    = m.boundingBox.minPoint.y.ToString("0.00") + " mm";
            infoMaxY.Text    = m.boundingBox.maxPoint.y.ToString("0.00") + " mm";
            infoSizeY.Text   = m.boundingBox.Size.y.ToString("0.00") + " mm";
            infoMinZ.Text    = m.boundingBox.minPoint.z.ToString("0.00") + " mm";
            infoMaxZ.Text    = m.boundingBox.maxPoint.z.ToString("0.00") + " mm";
            infoSizeZ.Text   = m.boundingBox.Size.z.ToString("0.00") + " mm";
            groupBox1.Text   = pm.name;
        }
Ejemplo n.º 30
0
        public void UpadateModelInfo(TopoModel m, PrintModel pm)
        {
            if (pm != null)
            {
                Volume  = (0.001 * m.Volume()).ToString("0.00") + " cm³";
                Surface = (0.01 * m.Surface()).ToString("0.00") + " cm²";
//            infoShells.Text = pm.Model.shells.ToString();
                Points = pm.Model.vertices.Count.ToString();
                Edges  = pm.Model.edges.Count.ToString();
                Faces  = pm.Model.triangles.Count.ToString();

                SizeX = m.boundingBox.Size.x.ToString("0.00") + " mm";
                SizeY = m.boundingBox.Size.y.ToString("0.00") + " mm";
                SizeZ = m.boundingBox.Size.z.ToString("0.00") + " mm";

/*
 *                          infoMinX.Text = m.boundingBox.minPoint.x.ToString("0.00") + " mm";
 *                          infoMaxX.Text = m.boundingBox.maxPoint.x.ToString("0.00") + " mm";
 *                          infoMinY.Text = m.boundingBox.minPoint.y.ToString("0.00") + " mm";
 *                          infoMaxY.Text = m.boundingBox.maxPoint.y.ToString("0.00") + " mm";
 *                          infoMinZ.Text = m.boundingBox.minPoint.z.ToString("0.00") + " mm";
 *                          infoMaxZ.Text = m.boundingBox.maxPoint.z.ToString("0.00") + " mm";
 *                          groupBox1.Text = pm.name;
 */
            }
            else
            {
                Volume  = "";
                Surface = "";
                //            infoShells.Text = pm.Model.shells.ToString();
                Points = "";
                Edges  = "";
                Faces  = "";
                SizeX  = "";
                SizeY  = "";
                SizeZ  = "";
            }
        }