コード例 #1
0
        /// <summary>
        /// See CGALCSharp.Test/Meshes/HalfEdgeBased/Cross.png
        /// </summary>
        /// <returns></returns>
        public static HBMesh <HBVertex, HBEdge, HBFace> CreateCross()
        {
            var mesh = new HBMesh <HBVertex, HBEdge, HBFace>();

            mesh.Fill(5, 8, 0);

            var E = mesh.Edges;
            var V = mesh.Vertices;

            V[0].Edge = E[1];
            V[1].Edge = E[3];
            V[2].Edge = E[5];
            V[3].Edge = E[7];
            V[4].Edge = E[0];

            E[0].Set(V[4], null, null, E[7], E[1]);
            E[1].Set(V[0], null, E[2], null, E[0]);
            E[2].Set(V[4], null, null, E[1], E[3]);
            E[3].Set(V[1], null, E[4], null, E[2]);
            E[4].Set(V[4], null, null, E[3], E[5]);
            E[5].Set(V[2], null, E[6], null, E[4]);
            E[6].Set(V[4], null, null, E[5], E[7]);
            E[7].Set(V[3], null, E[0], null, E[6]);

            return(mesh);
        }
コード例 #2
0
        public static HBMesh <HBVertex2f, HBEdge, HBFace> CreateTriangle(Vector2f A, Vector2f B, Vector2f C)
        {
            var mesh = new HBMesh <HBVertex2f, HBEdge, HBFace>();

            mesh.Fill(3, 3, 1);

            var E = mesh.Edges;
            var V = mesh.Vertices;
            var F = mesh.Faces;

            F[0].Edge = E[0];

            V[0].Edge = E[0];
            V[1].Edge = E[1];
            V[2].Edge = E[2];

            V[0].Position = A;
            V[1].Position = B;
            V[2].Position = C;

            E[0].Set(V[0], F[0], E[2], E[1], null);
            E[1].Set(V[1], F[0], E[0], E[2], null);
            E[2].Set(V[2], F[0], E[1], E[0], null);

            return(mesh);
        }
コード例 #3
0
ファイル: HBWeldVerticesTest.cs プロジェクト: andybak/CGAL
        public void WeldVerticesNoEdges()
        {
            var mesh = new HBMesh <HBVertex2f, HBEdge, HBFace>();

            HBVertex2f[] verts = new HBVertex2f[]
            {
                new HBVertex2f(new Vector2f(-1, 1)),
                new HBVertex2f(new Vector2f(1, 1)),
                new HBVertex2f(new Vector2f(1, -1)),
                new HBVertex2f(new Vector2f(-1, -1)),
                new HBVertex2f(new Vector2f(0, 0.1f)),
                new HBVertex2f(new Vector2f(0, -0.1f))
            };

            mesh.Vertices.AddRange(verts);

            HBWeldVertices.WeldVertices(mesh, 0.21f);

            Assert.AreEqual(5, mesh.Vertices.Count);
            Assert.IsTrue(mesh.Vertices.Contains(verts[0]));
            Assert.IsTrue(mesh.Vertices.Contains(verts[1]));
            Assert.IsTrue(mesh.Vertices.Contains(verts[2]));
            Assert.IsTrue(mesh.Vertices.Contains(verts[3]));
            Assert.IsTrue(mesh.Vertices.Contains(verts[4]) || mesh.Vertices.Contains(verts[5]));
        }
コード例 #4
0
        /// <summary>
        /// Create the lines to show the connections between faces
        /// for a half edge based mesh.
        /// </summary>
        void CreateConnectionLines(HBMesh <HBVertex2f, HBEdge, HBFace> mesh)
        {
            linePositions = new List <Vector2f>();
            lineIndices   = new List <int>();

            foreach (var face in mesh.Faces)
            {
                Vector2f center = Vector2f.Zero;
                foreach (HBVertex2f v in face.Edge.EnumerateVertices())
                {
                    center += v.Position;
                }

                center /= 3.0f;

                foreach (var edge in face.Edge.EnumerateEdges())
                {
                    if (edge.Opposite == null)
                    {
                        continue;
                    }

                    var neighbor = edge.Opposite.Face;

                    Vector2f c = Vector2f.Zero;
                    foreach (HBVertex2f v in neighbor.Edge.EnumerateVertices())
                    {
                        c += v.Position;
                    }

                    c /= 3.0f;

                    int count = linePositions.Count;
                    linePositions.Add(center);
                    linePositions.Add(c);

                    lineIndices.Add(count);
                    lineIndices.Add(count + 1);
                }
            }
        }
コード例 #5
0
        public static HBMesh <HBVertex, HBEdge, HBFace> CreateTriangle()
        {
            var mesh = new HBMesh <HBVertex, HBEdge, HBFace>();

            mesh.Fill(3, 3, 1);

            var E = mesh.Edges;
            var V = mesh.Vertices;
            var F = mesh.Faces;

            F[0].Edge = E[0];

            V[0].Edge = E[0];
            V[1].Edge = E[1];
            V[2].Edge = E[2];

            E[0].Set(V[0], F[0], E[2], E[1], null);
            E[1].Set(V[1], F[0], E[0], E[2], null);
            E[2].Set(V[2], F[0], E[1], E[0], null);

            return(mesh);
        }
コード例 #6
0
        /// <summary>
        /// See CGALCSharp.Test/Meshes/HalfEdgeBased/SquareWithCenter.png
        /// </summary>
        /// <returns></returns>
        public static HBMesh <HBVertex, HBEdge, HBFace> CreateSquareWithCenter()
        {
            var mesh = new HBMesh <HBVertex, HBEdge, HBFace>();

            mesh.Fill(5, 12, 4);

            var E = mesh.Edges;
            var V = mesh.Vertices;
            var F = mesh.Faces;

            V[0].Edge = E[1];
            V[1].Edge = E[3];
            V[2].Edge = E[5];
            V[3].Edge = E[7];
            V[4].Edge = E[0];

            F[0].Edge = E[8];
            F[1].Edge = E[9];
            F[2].Edge = E[10];
            F[3].Edge = E[11];

            E[0].Set(V[4], F[3], E[11], E[7], E[1]);
            E[1].Set(V[0], F[0], E[2], E[8], E[0]);
            E[2].Set(V[4], F[0], E[8], E[1], E[3]);
            E[3].Set(V[1], F[1], E[4], E[9], E[2]);
            E[4].Set(V[4], F[1], E[9], E[3], E[5]);
            E[5].Set(V[2], F[2], E[6], E[10], E[4]);
            E[6].Set(V[4], F[2], E[10], E[5], E[7]);
            E[7].Set(V[3], F[3], E[0], E[11], E[6]);

            E[8].Set(V[1], F[0], E[1], E[2], null);
            E[9].Set(V[2], F[1], E[3], E[4], null);
            E[10].Set(V[3], F[2], E[5], E[6], null);
            E[11].Set(V[0], F[3], E[7], E[0], null);

            return(mesh);
        }