ConvexClipper<Real>::ConvexClipper (const ConvexPolyhedron<Real>& polyhedron, Real epsilon) : mEpsilon(epsilon) { const std::vector<Vector3<Real> >& points = polyhedron.GetPoints(); int numVertices = polyhedron.GetNumVertices(); mVertices.resize(numVertices); for (int v = 0; v < numVertices; ++v) { mVertices[v].Point = points[v]; } int numEdges = polyhedron.GetNumEdges(); mEdges.resize(numEdges); for (int e = 0; e < numEdges; ++e) { const MTEdge& edge = polyhedron.GetEdge(e); for (int i = 0; i < 2; ++i) { mEdges[e].Vertex[i] = polyhedron.GetVLabel(edge.GetVertex(i)); mEdges[e].Face[i] = edge.GetTriangle(i); } } int numTriangles = polyhedron.GetNumTriangles(); mFaces.resize(numTriangles); for (int t = 0; t < numTriangles; ++t) { mFaces[t].Plane = polyhedron.GetPlane(t); const MTTriangle& triangle = polyhedron.GetTriangle(t); for (int i = 0; i < 3; ++i) { mFaces[t].Edges.insert(triangle.GetEdge(i)); } } }