void TestInplaneOutside() { TopoModel model = new TopoModel(); TopoVertex v1 = model.addVertex(new RHVector3(0, 0, 0)); TopoVertex v2 = model.addVertex(new RHVector3(10, 0, 0)); TopoVertex v3 = model.addVertex(new RHVector3(10, 10, 0)); TopoVertex v4 = model.addVertex(new RHVector3(11, 1, 0)); TopoVertex v5 = model.addVertex(new RHVector3(17, 1, 0)); TopoVertex v6 = model.addVertex(new RHVector3(11, 7, 0)); TopoTriangle t1 = model.AddTriangle(new TopoTriangle(model, v1, v2, v3)); TopoTriangle t2 = model.AddTriangle(new TopoTriangle(model, v4, v5, v6)); if (t1.Intersects(t2)) { faildTests++; Console.WriteLine("Failed test:TestInplaneOutside"); } }
void TestSharedPointIntersect() { TopoModel model = new TopoModel(); TopoVertex v1 = model.addVertex(new RHVector3(0, 0, 0)); TopoVertex v2 = model.addVertex(new RHVector3(10, 0, 0)); TopoVertex v3 = model.addVertex(new RHVector3(5, 5, 0)); TopoVertex v4 = model.addVertex(new RHVector3(0, 0, -5)); TopoVertex v5 = model.addVertex(new RHVector3(10, 0, -5)); TopoVertex v6 = model.addVertex(new RHVector3(5, 0, 5)); TopoTriangle t1 = model.AddTriangle(new TopoTriangle(model, v1, v2, v3)); TopoTriangle t2 = model.AddTriangle(new TopoTriangle(model, v1, v5, v6)); if (!t1.Intersects(t2)) { faildTests++; Console.WriteLine("Failed test:TestSharedPointIntersect"); } }
void TestInplaneInsideSameEdgeIntersects() { TopoModel model = new TopoModel(); TopoVertex v1 = model.addVertex(new RHVector3(0, 0, 0)); TopoVertex v2 = model.addVertex(new RHVector3(10, 0, 0)); TopoVertex v3 = model.addVertex(new RHVector3(10, 10, 0)); TopoVertex v4 = model.addVertex(new RHVector3(1, 1, 0)); TopoVertex v5 = model.addVertex(new RHVector3(7, 1, 0)); TopoVertex v6 = model.addVertex(new RHVector3(5, 3, 0)); TopoTriangle t1 = model.AddTriangle(new TopoTriangle(model, v1, v2, v3)); TopoTriangle t2 = model.AddTriangle(new TopoTriangle(model, v1, v2, v6)); if (!t1.Intersects(t2)) { faildTests++; Console.WriteLine("Failed test:TestInplaneInsideSameEdgeIntersects"); } }
void TestInplane3D_1() { TopoModel model = new TopoModel(); TopoVertex v1 = model.addVertex(new RHVector3(3.67848944664001,-2.6547646522522,1.38814495312454E-14)); TopoVertex v2 = model.addVertex(new RHVector3(1.62981510162354,-1.05116808414459,1.83297828141877E-14)); TopoVertex v3 = model.addVertex(new RHVector3(2.29873323440552,-0.79055267572403,2.11497486191092E-14)); TopoVertex v4 = model.addVertex(new RHVector3(1.63205575942993,-1.05116808414459,2.78849697113037)); TopoVertex v5 = model.addVertex(new RHVector3(0.916237592697144,-1.1297744512558,1.83297828141877E-14)); TopoVertex v6 = model.addVertex(new RHVector3(1.38571500778198,-1.07829427719116,2.67316389083862)); TopoTriangle t1 = model.AddTriangle(new TopoTriangle(model, v1, v2, v3)); TopoTriangle t2 = model.AddTriangle(new TopoTriangle(model, v4, v5, v6)); if (t1.Intersects(t2)) { faildTests++; Console.WriteLine("Failed test:TestInplane3D_1"); } }
public TopoModel Copy() { TopoModel newModel = new TopoModel(); int nOld = vertices.Count; int i = 0; List<TopoVertex> vcopy = new List<TopoVertex>(vertices.Count); foreach (TopoVertex v in vertices) { v.id = i++; TopoVertex newVert = new TopoVertex(v.id, v.pos); newModel.addVertex(newVert); vcopy.Add(newVert); } foreach (TopoTriangle t in triangles) { TopoTriangle triangle = new TopoTriangle(newModel, vcopy[t.vertices[0].id], vcopy[t.vertices[1].id], vcopy[t.vertices[2].id], t.normal.x, t.normal.y, t.normal.z); newModel.triangles.Add(triangle); } UpdateVertexNumbers(); newModel.UpdateVertexNumbers(); newModel.badEdges = 0; newModel.badTriangles = badTriangles; newModel.shells = shells; newModel.updatedNormals = updatedNormals; newModel.loopEdges = loopEdges; newModel.manyShardEdges = 0; newModel.manifold = manifold; newModel.normalsOriented = normalsOriented; return newModel; }