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);
 }