X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshersGUI%2FStdMeshersGUI_PropagationHelperWdg.cxx;h=617f5cbfa910903c57939c6150d2a6d9ff74e56c;hp=9f9dbd002d8ec5253f03b614835fd8527fcfb245;hb=5482b99d07dd144fd5be299e722f39a81de3b5be;hpb=b0a962d83d6318f800df0cf9a21fdda9baed80ad diff --git a/src/StdMeshersGUI/StdMeshersGUI_PropagationHelperWdg.cxx b/src/StdMeshersGUI/StdMeshersGUI_PropagationHelperWdg.cxx index 9f9dbd002..617f5cbfa 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_PropagationHelperWdg.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_PropagationHelperWdg.cxx @@ -174,15 +174,11 @@ void StdMeshersGUI_PropagationHelperWdg::onShowGeometry(bool toShow) BRep_Builder aBuilder; aBuilder.MakeCompound( aCompound ); - SMESH_PreviewActorsCollection* previewActor = mySubSelectWdg->GetActorCollection(); - if ( !previewActor ) return; - const QList& egdeIDs = previewActor->GetIndices(); - for ( QList::const_iterator ieIt = egdeIDs.begin(); ieIt != egdeIDs.end(); ++ieIt ) - { - TopoDS_Shape E = previewActor->GetShapeByIndex( *ieIt ); - if ( !E.IsNull() && E.ShapeType() == TopAbs_EDGE ) - aBuilder.Add( aCompound, E ); - } + TopTools_MapOfShape edgesMap; + TopExp_Explorer edge( mainShape, TopAbs_EDGE ); + for ( ; edge.More(); edge.Next() ) + if ( edgesMap.Add( edge.Current() )) + aBuilder.Add( aCompound, edge.Current() ); myModelActor = GEOM_Actor::New(); myModelActor->SetShape( aCompound, 0, 0 ); @@ -233,12 +229,16 @@ bool StdMeshersGUI_PropagationHelperWdg::buildChains() typedef std::vector< TEdgeInWire > TWiresOfEdge;// WIREs including an EDGE std::vector< TWire > quadWires; - quadWires.reserve( egdeIDs.count() ); - NCollection_DataMap< TGeomID, TWiresOfEdge > wiresOfEdge( egdeIDs.count() ); + quadWires.reserve( previewActor->NbShapesOfType( TopAbs_FACE )); + NCollection_DataMap< TGeomID, TWiresOfEdge > + wiresOfEdge( previewActor->NbShapesOfType( TopAbs_EDGE )); TopExp_Explorer wire; - for ( TopExp_Explorer face( shape, TopAbs_FACE ); face.More(); face.Next() ) + TopTools_MapOfShape faceMap; + for ( TopExp_Explorer face( mainShape, TopAbs_FACE ); face.More(); face.Next() ) { + if ( !faceMap.Add( face.Current() )) continue; + wire.Init( face.Current(), TopAbs_WIRE ); TopoDS_Shape W = wire.Current().Oriented( TopAbs_FORWARD ); @@ -275,6 +275,11 @@ bool StdMeshersGUI_PropagationHelperWdg::buildChains() TColStd_IndexedMapOfInteger chain, chainedEdges; + TColStd_MapOfInteger shapeEdges; + if ( !shape.IsSame( mainShape )) + for ( QList::const_iterator ieIt = egdeIDs.begin(); ieIt != egdeIDs.end(); ++ieIt ) + shapeEdges.Add( *ieIt ); + // loop on all EDGEs in mainShape for ( QList::const_iterator ieIt = egdeIDs.begin(); ieIt != egdeIDs.end(); ++ieIt ) { @@ -316,9 +321,16 @@ bool StdMeshersGUI_PropagationHelperWdg::buildChains() myChains.push_back( std::vector< TGeomID >() ); std::vector< TGeomID > & ch = myChains.back(); for ( int iC = 1; iC <= chain.Extent(); ++iC ) - ch.push_back( chain( iC ) ); + { + TGeomID iE = chain( iC ); + if ( shapeEdges.IsEmpty() || shapeEdges.Contains( Abs( iE ))) + ch.push_back( iE ); + } + if ( ch.size() < 2 ) + myChains.pop_back(); } - } + } // loop on egdeIDs + return !myChains.empty(); } @@ -367,7 +379,7 @@ std::vector< int > * StdMeshersGUI_PropagationHelperWdg::getSelectedChain() std::vector< int > * chain = 0; if ( QListWidgetItem * item = myListWidget->currentItem() ) { - int i = item->data( Qt::UserRole ).toInt(); + size_t i = (size_t) item->data( Qt::UserRole ).toInt(); if ( 0 <= i && i < myChains.size() ) chain = & myChains[i]; }