X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshersGUI%2FStdMeshersGUI_PropagationHelperWdg.cxx;h=9f872342df0cd85deee91f18e8a0ef8b6dff727f;hb=7a713be33b27d6a8c77f983460f0e97e52c6ff7c;hp=3369aaa95f133114d16b939ba94e5aa9cda6e2b5;hpb=5c372c165941502d85392e1502980931d0109c8f;p=modules%2Fsmesh.git diff --git a/src/StdMeshersGUI/StdMeshersGUI_PropagationHelperWdg.cxx b/src/StdMeshersGUI/StdMeshersGUI_PropagationHelperWdg.cxx index 3369aaa95..9f872342d 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_PropagationHelperWdg.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_PropagationHelperWdg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -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,13 @@ 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; TopTools_MapOfShape faceMap; - for ( TopExp_Explorer face( shape, TopAbs_FACE ); face.More(); face.Next() ) + for ( TopExp_Explorer face( mainShape, TopAbs_FACE ); face.More(); face.Next() ) { if ( !faceMap.Add( face.Current() )) continue; @@ -278,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 ) { @@ -319,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(); } @@ -370,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]; }