void ExtremalQuery3BSP<Real>::CreateSphericalArcs (BasicMesh& mesh, std::multiset<SphericalArc>& arcs) { int numEdges = mesh.GetNumEdges(); const BasicMesh::Edge* edges = mesh.GetEdges(); const BasicMesh::Triangle* triangles = mesh.GetTriangles(); const int prev[3] = { 2, 0, 1 }; const int next[3] = { 1, 2, 0 }; for (int i = 0; i < numEdges; ++i) { const BasicMesh::Edge& edge = edges[i]; SphericalArc arc; arc.NIndex[0] = edge.T[0]; arc.NIndex[1] = edge.T[1]; arc.Separation = 1; arc.Normal = mFaceNormals[arc.NIndex[0]].Cross( mFaceNormals[arc.NIndex[1]]); const BasicMesh::Triangle& adj = triangles[edge.T[0]]; int j; for (j = 0; j < 3; ++j) { if (adj.V[j] != edge.V[0] && adj.V[j] != edge.V[1]) { arc.PosVertex = adj.V[prev[j]]; arc.NegVertex = adj.V[next[j]]; break; } } assertion(j < 3, "Unexpected condition\n"); arcs.insert(arc); } CreateSphericalBisectors(mesh, arcs); }