public void Copy(GClipPlane src) { visible = src.visible; edge_pos1 = src.edge_pos1; edge_pos2 = src.edge_pos2; normal = src.normal; whole = src.whole; }
public GMesh ClipGeometryToPlane(GClipPlane gcp) { GMesh clip_gm = new GMesh(); // Add the textures first for (int i = 0; i < m_tex_name.Count; i++) { #if OVERLOAD_LEVEL_EDITOR clip_gm.AddTexture(m_tex_gl_id[i], m_tex_name[i]); #else clip_gm.m_tex_name.Add(m_tex_name[i]); #endif } // Copy the clip planes for (int i = 0; i < (int)EdgeOrder.NUM; i++) { clip_gm.m_clip_plane[i] = new GClipPlane(m_clip_plane[i]); } ClipPlane cp = ClipPlane.CreateFrom3Points(gcp.edge_pos1, gcp.edge_pos2, gcp.edge_pos2 + gcp.normal); for (int i = 0; i < m_triangle.Count; i++) { CTriangle ct = new CTriangle(m_triangle[i], m_vertex[m_triangle[i].vert[0]], m_vertex[m_triangle[i].vert[1]], m_vertex[m_triangle[i].vert[2]]); ct.ClipFacePlane(cp); if (ct.clipped_verts.Length < 3) { continue; } int num_triangles = ct.clipped_verts.Length - 2; for (int clipped_tri_idx = 0; clipped_tri_idx < num_triangles; ++clipped_tri_idx) { CTriangle extracted_ct = ct.ExtractClippedTriangle(clipped_tri_idx); if (extracted_ct.HasDegenerateTriangles(false)) { continue; } clip_gm.AddFaceFromCTriangle(extracted_ct); } } return(clip_gm); }
public GClipPlane(GClipPlane src) { Copy(src); }