/// <summary> /// Handles singular vertex. /// </summary> private void HandleSingular() { SingularVertices.Add(CurrentVertex); // This means that all the affected faces must be on the hull and that all their "vertices beyond" are singular. for (var fIndex = 0; fIndex < AffectedFaceBuffer.Count; fIndex++) { var face = FacePool[AffectedFaceBuffer[fIndex]]; var vb = face.VerticesBeyond; for (var i = 0; i < vb.Count; i++) { SingularVertices.Add(vb[i]); } ConvexFaces.Add(face.Index); UnprocessedFaces.Remove(face); ObjectManager.DepositVertexBuffer(face.VerticesBeyond); face.VerticesBeyond = EmptyBuffer; } }
/// <summary> /// Рукоятки исключительных вершин /// </summary> void HandleSingular() { RollbackCenter(); SingularVertices.Add(CurrentVertex); // Это означает, что все затронутые грани должны находиться на корпусе и что все "вершины за пределами" единичны for (int fIndex = 0; fIndex < AffectedFaceBuffer.Count; fIndex++) { var face = FacePool[AffectedFaceBuffer[fIndex]]; var vb = face.VerticesBeyond; for (int i = 0; i < vb.Count; i++) { SingularVertices.Add(vb[i]); } ConvexFaces.Add(face.Index); UnprocessedFaces.Remove(face); ObjectManager.DepositVertexBuffer(face.VerticesBeyond); face.VerticesBeyond = EmptyBuffer; } }