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); }
//--- 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); }
public TopoTriangle(TopoModel model, TopoVertex v1, TopoVertex v2, TopoVertex v3) { vertices[0] = v1; vertices[1] = v2; vertices[2] = v3; RecomputeNormal(); }
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);*/ }
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; }
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); }
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);*/ }
//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;*/ }
//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;*/ }
public void disconnectFace(TopoTriangle face, TopoModel model) { faces.Remove(face); if (faces.Count == 0) { model.edges.Remove(this); } }
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); }
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; }
public void FixNormals() { if (repairedModel == null) { repairedModel = originalModel.Copy(); } repairedModel.UpdateNormals(); repairedModel.AnalyseFast(); //repairedModel.updateBad(); ShowRepaired(true); }
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)); }
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)); }
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)); }
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); }
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)); }
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)); }
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; }
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); }
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"); } }
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"); } }
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"); } }
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; }
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); }
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); }
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); }
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; }
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 = ""; } }