示例#1
0
        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]));
        }
示例#2
0
        public void InsertEdgeByAngle()
        {
            Vector2f offset = new Vector2f(-4, 6);

            HBVertex2f v0 = new HBVertex2f(offset + new Vector2f(0, 0));
            HBVertex2f v1 = new HBVertex2f(offset + new Vector2f(0, -1));
            HBVertex2f v2 = new HBVertex2f(offset + new Vector2f(0, 1));
            HBVertex2f v3 = new HBVertex2f(offset + new Vector2f(1, 0));
            HBVertex2f v4 = new HBVertex2f(offset + new Vector2f(-1, 0));

            HBEdge e0 = new HBEdge();
            HBEdge e1 = new HBEdge();
            HBEdge e2 = new HBEdge();
            HBEdge e3 = new HBEdge();
            HBEdge e4 = new HBEdge();
            HBEdge e5 = new HBEdge();
            HBEdge e6 = new HBEdge();
            HBEdge e7 = new HBEdge();

            e0.Opposite = e1;
            e1.Opposite = e0;
            e2.Opposite = e3;
            e3.Opposite = e2;
            e4.Opposite = e5;
            e5.Opposite = e4;
            e6.Opposite = e7;
            e7.Opposite = e6;

            v0.InsertEdgeByAngle(e0);
            v1.InsertEdgeByAngle(e1);
            v2.InsertEdgeByAngle(e3);
            v3.InsertEdgeByAngle(e5);
            v4.InsertEdgeByAngle(e7);

            Assert.AreEqual(v0.Edge, e0);
            Assert.AreEqual(e0.Vertex, v0);
            Assert.AreEqual(e0.Opposite, e1);
            Assert.AreEqual(e0.Next, null);
            Assert.AreEqual(e0.Previous, null);

            v0.InsertEdgeByAngle(e2);
            Assert.AreEqual(e0.Next, e3);
            Assert.AreEqual(e1.Previous, e2);

            Assert.AreEqual(e2.Next, e1);
            Assert.AreEqual(e3.Previous, e0);

            v0.InsertEdgeByAngle(e4);
            Assert.AreEqual(e0.Next, e5);
            Assert.AreEqual(e1.Previous, e2);

            Assert.AreEqual(e4.Next, e3);
            Assert.AreEqual(e5.Previous, e0);

            Assert.AreEqual(e2.Next, e1);
            Assert.AreEqual(e3.Previous, e4);

            v0.InsertEdgeByAngle(e6);
            Assert.AreEqual(e0.Next, e5);
            Assert.AreEqual(e1.Previous, e6);

            Assert.AreEqual(e2.Next, e7);
            Assert.AreEqual(e3.Previous, e4);

            Assert.AreEqual(e6.Next, e1);
            Assert.AreEqual(e7.Previous, e2);
        }