private void DrawTriangle(PaintEventArgs e, GeoTriangle aTriangle, Color aColor) { Pen aPen = new Pen(aColor); PointF[] sPoints = new PointF[4]; sPoints[0] = new PointF((float)aTriangle.vertex(0).x(), (float)aTriangle.vertex(0).y()); sPoints[1] = new PointF((float)aTriangle.vertex(1).x(), (float)aTriangle.vertex(1).y()); sPoints[2] = new PointF((float)aTriangle.vertex(2).x(), (float)aTriangle.vertex(2).y()); sPoints[3] = new PointF((float)aTriangle.vertex(0).x(), (float)aTriangle.vertex(0).y()); e.Graphics.DrawLines(aPen, sPoints); }
private void DrawMesh(PaintEventArgs e) { var aNode1 = new MshNode(10, 10, 0); var aNode2 = new MshNode(400, 10, 0); var aNode3 = new MshNode(400, 400, 0); var aNode4 = new MshNode(10, 400, 0); var anEdgeMesh = new MshMesh(); anEdgeMesh.addNode(1, aNode1); anEdgeMesh.addNode(2, aNode2); anEdgeMesh.addNode(3, aNode3); anEdgeMesh.addNode(4, aNode4); var anElement1 = new MshElement(eElementType.ET_BEAM); anElement1.addNodeId(1); anElement1.addNodeId(2); var anElement2 = new MshElement(eElementType.ET_BEAM); anElement2.addNodeId(2); anElement2.addNodeId(3); var anElement3 = new MshElement(eElementType.ET_BEAM); anElement3.addNodeId(3); anElement3.addNodeId(4); var anElement4 = new MshElement(eElementType.ET_BEAM); anElement4.addNodeId(4); anElement4.addNodeId(1); anEdgeMesh.addElement(1, anElement1); anEdgeMesh.addElement(2, anElement2); anEdgeMesh.addElement(3, anElement3); anEdgeMesh.addElement(4, anElement4); var aMesher = new MshTriangleMesher(); //var aMesher = new MshQuadrilateralMesher(); var aMeshSize = (100 - trackBar1.Value) + 15.0; anEdgeMesh.generateFaces(1E-3); aMesher.remesh(anEdgeMesh, aMeshSize); aMesher.generate(anEdgeMesh, 99999, aMeshSize, 0.1); for (int i = 0; i < 3; i++) { aMesher.relaxNodes(1E-5); aMesher.flipEdges(1E-5); } for (int i = 0; i < aMesher.mesh().nbElements(); i++) { var anElementId = aMesher.mesh().elementId(i); var anElement = aMesher.mesh().element(anElementId); if (anElement.elementType() != eElementType.ET_TRIANGLE) { continue; } var aTriangle = new GeoTriangle(); aTriangle.addVertex(aMesher.mesh().node(anElement.nodeId(0))); aTriangle.addVertex(aMesher.mesh().node(anElement.nodeId(1))); aTriangle.addVertex(aMesher.mesh().node(anElement.nodeId(2))); DrawTriangle(e, aTriangle, Color.FromArgb(255, 0, 0, 255)); /* * if (anElement.elementType() != eElementType.ET_QUADRILATERAL) * continue; * * var aQuadrilateral = new GeoQuadrilateral(); * * aQuadrilateral.addVertex(aMesher.mesh().node(anElement.nodeId(0))); * aQuadrilateral.addVertex(aMesher.mesh().node(anElement.nodeId(1))); * aQuadrilateral.addVertex(aMesher.mesh().node(anElement.nodeId(2))); * aQuadrilateral.addVertex(aMesher.mesh().node(anElement.nodeId(3))); * * DrawQuadrilateral(e, aQuadrilateral, Color.FromArgb(255, 0, 0, 255)); */ } }
public void AddGeoTri(GeoTriangle geoTri) { GeoTri = geoTri; }