Manifold Geometry // Многообразная Геометрия

Поиск открытых ребер

/ Просмотров: 2365

В 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(), который группирует разрозненные ребра в контуры.