static public void GenerateMesh(CMshBasicMesherDouble aMesher, vtkRenderer aRenderer) { var aVertex1 = new CGeoCoordinateDouble(+0.00, +0.00, -0.02); var aVertex2 = new CGeoCoordinateDouble(+1.00, +0.00, -0.02); var aVertex3 = new CGeoCoordinateDouble(+1.00, +0.10, -0.02); var aVertex4 = new CGeoCoordinateDouble(+0.00, +0.10, -0.02); var aVertex5 = new CGeoCoordinateDouble(+0.00, +0.00, +0.02); var aVertex6 = new CGeoCoordinateDouble(+1.00, +0.00, +0.02); var aVertex7 = new CGeoCoordinateDouble(+1.00, +0.10, +0.02); var aVertex8 = new CGeoCoordinateDouble(+0.00, +0.10, +0.02); var aHexahedron = new CGeoHexahedronDouble(); aHexahedron.addVertex(aVertex1); aHexahedron.addVertex(aVertex2); aHexahedron.addVertex(aVertex3); aHexahedron.addVertex(aVertex4); aHexahedron.addVertex(aVertex5); aHexahedron.addVertex(aVertex6); aHexahedron.addVertex(aVertex7); aHexahedron.addVertex(aVertex8); aMesher.generate(aHexahedron, 100, 10, 1, false); aMesher.mesh().generateFaces(1E-3); }
static public void GenerateMesh(CMshTetrahedronMesherDouble aMesher, vtkRenderer aRenderer) { var aVertex1 = new CGeoCoordinateDouble(0.0, 0.0, 0.0); var aVertex2 = new CGeoCoordinateDouble(1.0, 0.0, 0.0); var aVertex3 = new CGeoCoordinateDouble(1.0, 1.0, 0.0); var aVertex4 = new CGeoCoordinateDouble(0.0, 1.0, 0.0); var aVertex5 = new CGeoCoordinateDouble(0.0, 0.0, 1.0); var aVertex6 = new CGeoCoordinateDouble(1.0, 0.0, 1.0); var aVertex7 = new CGeoCoordinateDouble(1.0, 1.0, 1.0); var aVertex8 = new CGeoCoordinateDouble(0.0, 1.0, 1.0); var aHexahedron = new CGeoHexahedronDouble(); aHexahedron.addVertex(aVertex1); aHexahedron.addVertex(aVertex2); aHexahedron.addVertex(aVertex3); aHexahedron.addVertex(aVertex4); aHexahedron.addVertex(aVertex5); aHexahedron.addVertex(aVertex6); aHexahedron.addVertex(aVertex7); aHexahedron.addVertex(aVertex8); var aBasicMesher = new CMshBasicMesherDouble(); aBasicMesher.generate(aHexahedron, 10, 10, 10, true); CMshMeshDouble aBoundaryMesh = aBasicMesher.mesh().extractBoundary(1E-6); aBoundaryMesh.generateFaces(1E-4); var aMeshSize = 0.1; aMesher.generate(aBoundaryMesh, 99999, aMeshSize, 0.1, 1E-4); aMesher.mesh().renumber(); }
static public void DrawPolygon(vtkRenderer aRenderer) { var aVertex1 = new CGeoCoordinateDouble(+0.00, +0.00, -0.5); var aVertex2 = new CGeoCoordinateDouble(+1.00, +0.00, -0.5); var aVertex3 = new CGeoCoordinateDouble(+1.00, +1.00, -0.5); var aVertex4 = new CGeoCoordinateDouble(+0.00, +1.00, -0.5); var aVertex5 = new CGeoCoordinateDouble(+0.00, +0.00, +0.5); var aVertex6 = new CGeoCoordinateDouble(+1.00, +0.00, +0.5); var aVertex7 = new CGeoCoordinateDouble(+1.00, +1.00, +0.5); var aVertex8 = new CGeoCoordinateDouble(+0.00, +1.00, +0.5); var aHexahedron = new CGeoHexahedronDouble(); aHexahedron.addVertex(aVertex1); aHexahedron.addVertex(aVertex2); aHexahedron.addVertex(aVertex3); aHexahedron.addVertex(aVertex4); aHexahedron.addVertex(aVertex5); aHexahedron.addVertex(aVertex6); aHexahedron.addVertex(aVertex7); aHexahedron.addVertex(aVertex8); var aPolyhedron = new CGeoPolyhedronDouble(aHexahedron); double aFracAct; int aNewPolygonId = 999; var aNewPolygon = new CGeoPolygonDouble(); var aNewNormal = new CGeoNormalDouble(0.45, 0.45, 0.1); aNewNormal.normalize(); var aNewPlane = new CGeoPlaneDouble(); double d; int nIter; aPolyhedron = aPolyhedron.clip(aNewPolygon, aNewPolygonId, aNewNormal, out d, 0.6, out aFracAct, out nIter, 100, 1E-5); var sPoints = vtkPoints.New(); var sPolygons = vtkCellArray.New(); var sColors = vtkUnsignedCharArray.New(); sColors.SetNumberOfComponents(3); sColors.SetName("Colors"); int np = 0; for (int i = 0; i < aPolyhedron.nbPolygons(); ++i) { var aPolygon = vtkPolygon.New(); int aPolygonId = aPolyhedron.polygonId(i); aPolygon.GetPointIds().SetNumberOfIds(aPolyhedron.polygon(aPolygonId).polyline().nbVertices() - 1); for (int j = 0; j < aPolyhedron.polygon(aPolygonId).polyline().nbVertices() - 1; ++j) { var aVertex = aPolyhedron.polygon(aPolygonId).polyline().vertex(j); aPolygon.GetPointIds().SetId(j, np); sPoints.InsertNextPoint(aVertex.x(), aVertex.y(), aVertex.z()); if (aPolygonId == aNewPolygonId) { sColors.InsertNextTuple3(255, 255, 0); } else { sColors.InsertNextTuple3(0, 255, 255); } np++; } // Add the polygon to a list of polygons sPolygons.InsertNextCell(aPolygon); } var aPolygonPolyData = vtkPolyData.New(); aPolygonPolyData.SetPoints(sPoints); aPolygonPolyData.SetPolys(sPolygons); aPolygonPolyData.GetPointData().SetScalars(sColors); // add actor to the renderer var anActor = vtkActor.New(); aRenderer.AddActor(anActor); var aMapper = vtkPolyDataMapper.New(); aMapper.SetInput(aPolygonPolyData); anActor.SetMapper(aMapper); anActor.SetMapper(aMapper); }
static public void Show(RenderWindowControl aRenderControl) { // get a reference to the renderwindow of our renderWindowControl1 var aRenderWindow = aRenderControl.RenderWindow; // get a reference to the renderer var aRenderer = aRenderWindow.GetRenderers().GetFirstRenderer(); aRenderer.Clear(); aRenderer.RemoveAllViewProps(); // set background color aRenderer.SetBackground(0.2, 0.3, 0.4); var aCenter = new CGeoCoordinateDouble(0, 0, 0); var aRadius = new CGeoVectorDouble(1.0); var a = CCsgCubeDouble.create(aCenter, aRadius); var b = CCsgSphereDouble.create(aCenter, 1.35, 16, 12); var aVertex_x1 = new CGeoCoordinateDouble(-2, 0, 0); var aVertex_x2 = new CGeoCoordinateDouble(+2, 0, 0); var c = CCsgCylinderDouble.create(aVertex_x1, aVertex_x2, 0.7, 16); var aVertex_y1 = new CGeoCoordinateDouble(0, -2, 0); var aVertex_y2 = new CGeoCoordinateDouble(0, +2, 0); var d = CCsgCylinderDouble.create(aVertex_y1, aVertex_y2, 0.7, 16); var aVertex_z1 = new CGeoCoordinateDouble(0, 0, -2); var aVertex_z2 = new CGeoCoordinateDouble(0, 0, +2); var e = CCsgCylinderDouble.create(aVertex_z1, aVertex_z2, 0.7, 16); a.setTolerance(1E-6); b.setTolerance(1E-6); c.setTolerance(1E-6); d.setTolerance(1E-6); e.setTolerance(1E-6); var f = a.intersect(b).subtract(c.add(d).add(e)); var aFileName = "demo.stl"; f.toStl().save(aFileName); var aReader = vtkSTLReader.New(); aReader.SetFileName(aFileName); aReader.Update(); var aMapper = vtkPolyDataMapper.New(); aMapper.SetInputConnection(aReader.GetOutputPort()); var anActor = vtkActor.New(); anActor.SetMapper(aMapper); aRenderer.AddActor(anActor); aRenderer.ResetCamera(); aRenderControl.Refresh(); }