+ //=======================================================================
+ /*!
+ * \brief Returns already computed EDGEs
+ */
+ void getPrecomputedEdges( SMESH_MesherHelper& theHelper,
+ const TopoDS_Shape& theShape,
+ vector< TopoDS_Edge >& theEdges)
+ {
+ theEdges.clear();
+
+ SMESHDS_Mesh* meshDS = theHelper.GetMeshDS();
+ SMESHDS_SubMesh* sm;
+
+ TopTools_IndexedMapOfShape edges;
+ TopExp::MapShapes( theShape, TopAbs_EDGE, edges );
+ for ( int iE = 1; iE <= edges.Extent(); ++iE )
+ {
+ const TopoDS_Shape edge = edges( iE );
+ if (( ! ( sm = meshDS->MeshElements( edge ))) ||
+ ( sm->NbElements() == 0 ))
+ continue;
+
+ // there must not be FACEs meshed with triangles and sharing a computed EDGE
+ // as the precomputed EDGEs are used for propagation other to 'vertical' EDGEs
+ bool faceFound = false;
+ PShapeIteratorPtr faceIt =
+ theHelper.GetAncestors( edge, *theHelper.GetMesh(), TopAbs_FACE );
+ while ( const TopoDS_Shape* face = faceIt->next() )
+
+ if (( sm = meshDS->MeshElements( *face )) &&
+ ( sm->NbElements() > 0 ) &&
+ ( !theHelper.IsSameElemGeometry( sm, SMDSGeom_QUADRANGLE ) ))
+ {
+ faceFound;
+ break;
+ }
+ if ( !faceFound )
+ theEdges.push_back( TopoDS::Edge( edge ));
+ }
+ }