예제 #1
0
 public void CutMesh(Submesh mesh, RHVector3 normal, RHVector3 point,int defaultFaceColor)
 {
     TopoPlane plane = new TopoPlane(normal, point);
     bool drawEdges = Main.threeDSettings.ShowEdges;
     foreach (TopoEdge e in edges)
         e.algHelper = 0; // Mark drawn edges, so we insert them only once
     foreach (TopoTriangle t in triangles)
     {
         int side = plane.testTriangleSideFast(t);
         if (side == -1)
         {
             mesh.AddTriangle(t.vertices[0].pos, t.vertices[1].pos, t.vertices[2].pos, (t.bad ? Submesh.MESHCOLOR_ERRORFACE : defaultFaceColor));
             if (drawEdges)
             {
                 if (t.edges[0].algHelper == 0)
                 {
                     mesh.AddEdge(t.vertices[0].pos, t.vertices[1].pos, t.edges[0].connectedFaces == 2 ? Submesh.MESHCOLOR_EDGE : Submesh.MESHCOLOR_ERROREDGE);
                     t.edges[0].algHelper = 1;
                 }
                 if (t.edges[1].algHelper == 0)
                 {
                     mesh.AddEdge(t.vertices[1].pos, t.vertices[2].pos, t.edges[1].connectedFaces == 2 ? Submesh.MESHCOLOR_EDGE : Submesh.MESHCOLOR_ERROREDGE);
                     t.edges[1].algHelper = 1;
                 }
                 if (t.edges[2].algHelper == 0)
                 {
                     mesh.AddEdge(t.vertices[2].pos, t.vertices[0].pos, t.edges[2].connectedFaces == 2 ? Submesh.MESHCOLOR_EDGE : Submesh.MESHCOLOR_ERROREDGE);
                     t.edges[2].algHelper = 1;
                 }
             }
             else
             {
                 if (t.edges[0].algHelper == 0 && t.edges[0].connectedFaces != 2)
                 {
                     mesh.AddEdge(t.vertices[0].pos, t.vertices[1].pos, Submesh.MESHCOLOR_ERROREDGE);
                     t.edges[0].algHelper = 1;
                 }
                 if (t.edges[1].algHelper == 0 && t.edges[1].connectedFaces != 2)
                 {
                     mesh.AddEdge(t.vertices[1].pos, t.vertices[2].pos, Submesh.MESHCOLOR_ERROREDGE);
                     t.edges[1].algHelper = 1;
                 }
                 if (t.edges[2].algHelper == 0 && t.edges[2].connectedFaces != 2)
                 {
                     mesh.AddEdge(t.vertices[2].pos, t.vertices[0].pos, Submesh.MESHCOLOR_ERROREDGE);
                     t.edges[2].algHelper = 1;
                 }
             }
         }
         else if (side == 0)
         {
             plane.addIntersectionToSubmesh(mesh, t, drawEdges, (t.bad ? Submesh.MESHCOLOR_ERRORFACE : defaultFaceColor));
         }
     }
 }