Поиск открытых ребер
/ Просмотров: 2233
В Rhino открытые ребра также называют «голыми» (naked). Наличие таких ребер характерно для поверхностного моделирования (край оболочки), но иногда они возникают и при твердотельном моделировании в качестве аномалии.
Следующий код позволяет отыскать все открытые ребра для данной CAD-модели средствами OpenCascade:
// Build map of edges to extract open ("naked") ones. TopTools_IndexedDataMapOfShapeListOfShape edgesFaces; TopExp::MapShapesAndAncestors(partShape, TopAbs_EDGE, TopAbs_FACE, edgesFaces); // Find open edges. Handle(TopTools_HSequenceOfShape) openEdgesSeq = new TopTools_HSequenceOfShape; // for ( int k = 1; k <= edgesFaces.Extent(); ++k ) { const TopTools_ListOfShape& faces = edgesFaces(k); // if ( faces.Extent() == 1 ) { const TopoDS_Edge& E = TopoDS::Edge( edgesFaces.FindKey(k) ); // if ( BRep_Tool::Degenerated(E) ) continue; openEdgesSeq->Append(E); } } // Compose border wires from the naked edges. Handle(TopTools_HSequenceOfShape) borderWires; ShapeAnalysis_FreeBounds::ConnectEdgesToWires(openEdgesSeq, 1e-3, false, borderWires);
Открытое ребро распознается по признаку количества содержащих его граней. Код завершается вызовом метода ShapeAnalysis_FreeBounds::ConnectEdgesToWires(), который группирует разрозненные ребра в контуры.