X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMGUI%2FGEOMGUI_OCCSelector.cxx;h=e2008bfa88b8beae8828fba4b73a45e8a681bcab;hb=08a90cb03f6d2befe6f0b923bd690182ded48378;hp=0cd04c86fea0af0cec87e27e5838f835d8ca786b;hpb=239f8109c64fa0c5a2e1d87a420bad5529b57f48;p=modules%2Fgeom.git diff --git a/src/GEOMGUI/GEOMGUI_OCCSelector.cxx b/src/GEOMGUI/GEOMGUI_OCCSelector.cxx index 0cd04c86f..e2008bfa8 100644 --- a/src/GEOMGUI/GEOMGUI_OCCSelector.cxx +++ b/src/GEOMGUI/GEOMGUI_OCCSelector.cxx @@ -1,23 +1,28 @@ -// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either +// License as published by the Free Software Foundation; either // version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// File : GEOMGUI_OCCSelector.cxx +// Author : Alexander SOLOVYOV, Open CASCADE S.A.S. (alexander.solovyov@opencascade.com) +// #include "GEOMGUI_OCCSelector.h" #include @@ -46,7 +51,7 @@ //================================================================ // Function : GEOMGUI_OCCSelector -// Purpose : +// Purpose : //================================================================ GEOMGUI_OCCSelector::GEOMGUI_OCCSelector( OCCViewer_Viewer* viewer, SUIT_SelectionMgr* mgr ) : LightApp_OCCSelector( viewer, mgr ) @@ -55,7 +60,7 @@ GEOMGUI_OCCSelector::GEOMGUI_OCCSelector( OCCViewer_Viewer* viewer, SUIT_Selecti //================================================================ // Function : ~GEOMGUI_OCCSelector -// Purpose : +// Purpose : //================================================================ GEOMGUI_OCCSelector::~GEOMGUI_OCCSelector() { @@ -63,7 +68,7 @@ GEOMGUI_OCCSelector::~GEOMGUI_OCCSelector() //================================================================ // Function : getSelection -// Purpose : +// Purpose : //================================================================ void GEOMGUI_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const { @@ -100,6 +105,7 @@ void GEOMGUI_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const if (!bigShape.IsEqual(curBigShape)) { curBigShape = bigShape; + subShapes.Clear(); TopExp::MapShapes(bigShape, subShapes); } index = subShapes.FindIndex(subShape); @@ -108,11 +114,12 @@ void GEOMGUI_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const if (!entryStr.isEmpty()) { + Handle(SALOME_InteractiveObject) anIO = Handle(SALOME_InteractiveObject)::DownCast(io->GetOwner()); LightApp_DataOwner* owner; if (index > -1) // Local Selection owner = new LightApp_DataSubOwner (entryStr, index); - else // Global Selection - owner = new LightApp_DataOwner (entryStr); + else if ( !anIO.IsNull() ) // Global Selection + owner = new LightApp_DataOwner( anIO ); aList.append(SUIT_DataOwnerPtr(owner)); } @@ -128,8 +135,11 @@ void GEOMGUI_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const if ( !entryStr.isEmpty() ) { - LightApp_DataOwner* owner = new LightApp_DataOwner( entryStr ); - aList.append( SUIT_DataOwnerPtr( owner ) ); + Handle(SALOME_InteractiveObject) anIO = Handle(SALOME_InteractiveObject)::DownCast(io->GetOwner()); + if ( !anIO.IsNull() ) { + LightApp_DataOwner* owner = new LightApp_DataOwner( anIO ); + aList.append( SUIT_DataOwnerPtr( owner ) ); + } } } } @@ -144,11 +154,11 @@ void GEOMGUI_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const //================================================================ // Function : getEntityOwners -// Purpose : +// Purpose : //================================================================ static void getEntityOwners( const Handle(AIS_InteractiveObject)& theObj, - const Handle(AIS_InteractiveContext)& theIC, - SelectMgr_IndexedMapOfOwner& theMap ) + const Handle(AIS_InteractiveContext)& theIC, + SelectMgr_IndexedMapOfOwner& theMap ) { if ( theObj.IsNull() || theIC.IsNull() ) return; @@ -167,19 +177,19 @@ static void getEntityOwners( const Handle(AIS_InteractiveObject)& theObj, for ( sel->Init(); sel->More(); sel->Next() ) { Handle(SelectBasics_SensitiveEntity) entity = sel->Sensitive(); if ( entity.IsNull() ) - continue; + continue; Handle(SelectMgr_EntityOwner) owner = - Handle(SelectMgr_EntityOwner)::DownCast(entity->OwnerId()); + Handle(SelectMgr_EntityOwner)::DownCast(entity->OwnerId()); if ( !owner.IsNull() ) - theMap.Add( owner ); + theMap.Add( owner ); } } } //================================================================ // Function : setSelection -// Purpose : +// Purpose : //================================================================ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) { @@ -190,11 +200,7 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) Handle(AIS_InteractiveContext) ic = vw->getAISContext(); // "entry - list_of_int" map for LOCAL selection -#ifndef WNT NCollection_DataMap indexesMap; -#else - NCollection_DataMap indexesMap; -#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 @@ -210,21 +216,17 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) if ( subOwner ) { QString entry = subOwner->entry(); -#ifndef WNT - if ( indexesMap.IsBound( TCollection_AsciiString((char*)entry.latin1()))) -#else - if ( indexesMap.IsBound( (char*)entry.latin1())) -#endif + if ( indexesMap.IsBound( TCollection_AsciiString(entry.toLatin1().data()))) { - TColStd_IndexedMapOfInteger& subIndexes = indexesMap.ChangeFind((char*)entry.latin1()); - subIndexes.Add( subOwner->index() ); - //indexesMap.replace( entry, subIndexes ); + TColStd_IndexedMapOfInteger& subIndexes = indexesMap.ChangeFind(entry.toLatin1().data()); + subIndexes.Add( subOwner->index() ); + //indexesMap.replace( entry, subIndexes ); } else { - TColStd_IndexedMapOfInteger subIndexes; - subIndexes.Add( subOwner->index() ); - indexesMap.Bind((char*)entry.latin1(), subIndexes); + TColStd_IndexedMapOfInteger subIndexes; + subIndexes.Add( subOwner->index() ); + indexesMap.Bind(entry.toLatin1().data(), subIndexes); } } else // the owner is NOT a sub owner, maybe it is a DataOwner == GLOBAL selection @@ -232,11 +234,11 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) const LightApp_DataOwner* owner = dynamic_cast( (*itr).operator->() ); if ( owner ) { - SalomeApp_Study* appStudy = + SalomeApp_Study* appStudy = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); - QString anEntry = appStudy->referencedToEntry( owner->entry() ); + QString anEntry = appStudy->referencedToEntry( owner->entry() ); - globalSelMap[anEntry] = 1; + globalSelMap[anEntry] = 1; } } } @@ -268,10 +270,11 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) { // has a local selection 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())) { isLocal = true; TopoDS_Shape shape = aisShape->Shape(); + aMapOfShapes.Clear(); TopExp::MapShapes(shape, aMapOfShapes); } } @@ -298,7 +301,7 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) if (isLocal) { const TColStd_IndexedMapOfInteger& subIndexes = - indexesMap.ChangeFind((char*)entryStr.latin1()); + indexesMap.ChangeFind(entryStr.toLatin1().data()); const TopoDS_Shape& aSubShape = anOwner->Shape(); int aSubShapeId = aMapOfShapes.FindIndex( aSubShape ); @@ -349,10 +352,10 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) const LightApp_DataOwner* owner = dynamic_cast( (*itr2).operator->() ); if ( owner ) { - SalomeApp_Study* appStudy = + SalomeApp_Study* appStudy = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); - QString anEntry = appStudy->referencedToEntry( owner->entry() ); - if (globalSelMap[anEntry] == 1) mySelectedExternals.append(*itr2); + QString anEntry = appStudy->referencedToEntry( owner->entry() ); + if (globalSelMap[anEntry] == 1) mySelectedExternals.append(*itr2); } } }