Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
                 */
            }
        }
Beispiel #3
0
 public void AddGeoTri(GeoTriangle geoTri)
 {
     GeoTri = geoTri;
 }