X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMGUI%2FGEOMGUI_OCCSelector.cxx;h=27d2340fdfd5276d254b3fcd800114ec4a2da1df;hb=8b645f521e38dedf374122e23f28450e05399405;hp=3db11fd4ec7e8ee488025f62845cf8bcdaaf1043;hpb=654e26d8595fdd7690c309922933978d2ff3d6b9;p=modules%2Fgeom.git diff --git a/src/GEOMGUI/GEOMGUI_OCCSelector.cxx b/src/GEOMGUI/GEOMGUI_OCCSelector.cxx index 3db11fd4e..27d2340fd 100644 --- a/src/GEOMGUI/GEOMGUI_OCCSelector.cxx +++ b/src/GEOMGUI/GEOMGUI_OCCSelector.cxx @@ -23,8 +23,6 @@ #include -#include - #include #include #include @@ -35,8 +33,8 @@ #include #include #include +#include #include -#include #include #include @@ -76,7 +74,7 @@ void GEOMGUI_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const { for ( ic->InitSelected(); ic->MoreSelected(); ic->NextSelected() ) { - Handle(SelectMgr_EntityOwner) anOwner = ic->SelectedOwner(); + Handle(StdSelect_BRepOwner) anOwner = Handle(StdSelect_BRepOwner)::DownCast(ic->SelectedOwner()); if ( anOwner.IsNull() ) continue; @@ -126,6 +124,12 @@ void GEOMGUI_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const } } } + // add externally selected objects + SUIT_DataOwnerPtrList::const_iterator anExtIter; + for(anExtIter = mySelectedExternals.begin(); anExtIter != mySelectedExternals.end(); anExtIter++) { + aList.append(*anExtIter); + } + } //================================================================ @@ -175,11 +179,7 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) Handle(AIS_InteractiveContext) ic = vw->getAISContext(); -#ifndef WNT NCollection_DataMap indexesMap; // "entry - list_of_int" map for LOCAL selection -#else - NCollection_DataMap indexesMap; // "entry - list_of_int" map for LOCAL selection -#endif QMap globalSelMap; // only Key=entry from this map is used. value(int) is NOT used at all. SelectMgr_IndexedMapOfOwner ownersmap; // map of owners to be selected @@ -195,12 +195,12 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) { QString entry = subOwner->entry(); #ifndef WNT - if ( indexesMap.IsBound( TCollection_AsciiString((char*)entry.latin1()))) + if ( indexesMap.IsBound( TCollection_AsciiString(entry.toLatin1().data()))) #else - if ( indexesMap.IsBound( (char*)entry.latin1())) + if ( indexesMap.IsBound( (char*)entry.toLatin1())) #endif { - TColStd_IndexedMapOfInteger& subIndexes = indexesMap.ChangeFind((char*)entry.latin1()); + TColStd_IndexedMapOfInteger& subIndexes = indexesMap.ChangeFind(entry.toLatin1().data()); subIndexes.Add( subOwner->index() ); //indexesMap.replace( entry, subIndexes ); } @@ -208,7 +208,7 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) { TColStd_IndexedMapOfInteger subIndexes; subIndexes.Add( subOwner->index() ); - indexesMap.Bind((char*)entry.latin1(), subIndexes); + indexesMap.Bind(entry.toLatin1().data(), subIndexes); } } else // the owner is NOT a sub owner, maybe it is a DataOwner == GLOBAL selection @@ -237,7 +237,9 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) for ( int i = 1, n = owners.Extent(); i <= n; i++ ) { - Handle(SelectMgr_EntityOwner) anOwner = owners( i ); + + Handle(StdSelect_BRepOwner) anOwner = Handle(StdSelect_BRepOwner)::DownCast(owners( i )); + if ( anOwner.IsNull() || !anOwner->HasShape() ) continue; @@ -245,18 +247,19 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) if ( !anOwner->ComesFromDecomposition() && globalSelMap.contains( entryStr ) ) { ownersmap.Add( anOwner ); + globalSelMap[entryStr]++; } // LOCAL selection else { Handle(AIS_Shape) aisShape = Handle(AIS_Shape)::DownCast( io ); - if ( !aisShape.IsNull() && indexesMap.IsBound( (char*)entryStr.latin1() ) ) + if ( !aisShape.IsNull() && indexesMap.IsBound( entryStr.toLatin1().data() ) ) { TopoDS_Shape shape = aisShape->Shape(); TopTools_IndexedMapOfShape aMapOfShapes; TopExp::MapShapes( shape, aMapOfShapes ); - const TColStd_IndexedMapOfInteger& subIndexes = indexesMap.ChangeFind((char*)entryStr.latin1()); + const TColStd_IndexedMapOfInteger& subIndexes = indexesMap.ChangeFind(entryStr.toLatin1().data()); const TopoDS_Shape& aSubShape = anOwner->Shape(); int aSubShapeId = aMapOfShapes.FindIndex( aSubShape ); @@ -289,4 +292,20 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) } vw->update(); + + // fill extra selected + mySelectedExternals.clear(); + for ( SUIT_DataOwnerPtrList::const_iterator itr2 = aList.begin(); itr2 != aList.end(); ++itr2 ) { + const LightApp_DataSubOwner* subOwner = dynamic_cast( (*itr2).operator->() ); + if ( !subOwner ) + { + const LightApp_DataOwner* owner = dynamic_cast( (*itr2).operator->() ); + if ( owner ) + { + SalomeApp_Study* appStudy = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); + QString anEntry = appStudy->referencedToEntry( owner->entry() ); + if (globalSelMap[anEntry] == 1) mySelectedExternals.append(*itr2); + } + } + } }