#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
-#include <TColStd_ListIteratorOfListOfInteger.hxx>
-
#ifdef _DEBUG_
#include <gp_Pnt.hxx>
#include <BRep_Tool.hxx>
#include <TopoDS.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
#endif
//=============================================================================
*/
//=============================================================================
+static void removeSubMesh( SMESHDS_Mesh * meshDS, const TopoDS_Shape& subShape)
+{
+ SMESHDS_SubMesh * subMeshDS = meshDS->MeshElements(subShape);
+ if (subMeshDS!=NULL)
+ {
+ SMDS_ElemIteratorPtr ite=subMeshDS->GetElements();
+ while(ite->more())
+ {
+ const SMDS_MeshElement * elt = ite->next();
+ //MESSAGE( " RM elt: "<<elt->GetID()<<" ( "<<elt->NbNodes()<<" )" );
+ meshDS->RemoveElement(elt);
+ }
+
+ SMDS_NodeIteratorPtr itn=subMeshDS->GetNodes();
+ while(itn->more())
+ {
+ const SMDS_MeshNode * node = itn->next();
+ //MESSAGE( " RM node: "<<node->GetID());
+ meshDS->RemoveNode(node);
+ }
+ }
+}
+
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+
bool SMESH_subMesh::ComputeStateEngine(int event)
{
//MESSAGE("SMESH_subMesh::ComputeStateEngine");
_computeState = FAILED_TO_COMPUTE;
break;
}
- RemoveSubMeshElementsAndNodes();
// compute
+ removeSubMesh( _meshDS, _subShape );
if (!algo->NeedDescretBoundary() && !algo->OnlyUnaryInput())
ret = ApplyToCollection( algo, GetCollection( gen, algo ) );
else
#ifdef _DEBUG_
// Show vertices location of a failed shape
- TopExp_Explorer exp( _subShape, TopAbs_VERTEX);
- for ( ; exp.More(); exp.Next() ) {
- gp_Pnt P( BRep_Tool::Pnt( TopoDS::Vertex( exp.Current() )));
+ TopTools_IndexedMapOfShape vMap;
+ TopExp::MapShapes( _subShape, TopAbs_VERTEX, vMap );
+ for ( int iv = 1; iv <= vMap.Extent(); ++iv ) {
+ gp_Pnt P( BRep_Tool::Pnt( TopoDS::Vertex( vMap( iv ) )));
cout << P.X() << " " << P.Y() << " " << P.Z() << " " << endl;
}
#endif
*/
//=============================================================================
-static void removeSubMesh( SMESHDS_Mesh * meshDS, const TopoDS_Shape& subShape)
-{
- SMESHDS_SubMesh * subMeshDS = meshDS->MeshElements(subShape);
- if (subMeshDS!=NULL)
- {
- SMDS_ElemIteratorPtr ite=subMeshDS->GetElements();
- while(ite->more())
- {
- const SMDS_MeshElement * elt = ite->next();
- //MESSAGE( " RM elt: "<<elt->GetID()<<" ( "<<elt->NbNodes()<<" )" );
- meshDS->RemoveElement(elt);
- }
-
- SMDS_NodeIteratorPtr itn=subMeshDS->GetNodes();
- while(itn->more())
- {
- const SMDS_MeshNode * node = itn->next();
- //MESSAGE( " RM node: "<<node->GetID());
- meshDS->RemoveNode(node);
- }
- }
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-
void SMESH_subMesh::RemoveSubMeshElementsAndNodes()
{
//SCRUTE(_subShape.ShapeType());