From d8333f0d47ee2f8d80eddaed5eb022d996e3859a Mon Sep 17 00:00:00 2001 From: dmv Date: Wed, 7 Oct 2009 12:27:27 +0000 Subject: [PATCH] 0020501: EDF 1098 SMESH: Display only groups, edit a group: can't select face from other group --- src/SMESHGUI/SMESHGUI_GroupDlg.cxx | 47 +++++++++++++++++++++++------- src/SMESHGUI/SMESHGUI_GroupDlg.h | 2 ++ 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/SMESHGUI/SMESHGUI_GroupDlg.cxx b/src/SMESHGUI/SMESHGUI_GroupDlg.cxx index 9d76c2fee..114a7fd97 100644 --- a/src/SMESHGUI/SMESHGUI_GroupDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_GroupDlg.cxx @@ -1298,20 +1298,32 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged() } if (myActorsList.count() == 0) { - if (!myGroup->_is_nil()) - myActorsList.append( SMESH::FindActorByObject(myGroup) ); - else if(!myGroupOnGeom->_is_nil()) - myActorsList.append( SMESH::FindActorByObject(myGroupOnGeom) ); - else - myActorsList.append( SMESH::FindActorByObject(myMesh) ); + if (!myGroup->_is_nil()) { + SMESH_Actor* anActor = SMESH::FindActorByObject(myGroup); + if ( anActor ) + myActorsList.append( anActor ); + } + else if(!myGroupOnGeom->_is_nil()) { + SMESH_Actor* anActor = SMESH::FindActorByObject(myGroupOnGeom); + if ( anActor ) + myActorsList.append( anActor ); + } + else { + SMESH_Actor* anActor = SMESH::FindActorByObject( myMesh ); + if ( anActor ) + myActorsList.append( anActor ); + } } // somehow, if we display the mesh, while selecting from another actor, // the mesh becomes pickable, and there is no way to select any element if (myActorsList.count() > 0) { QListIterator it( myActorsList ); - while ( it.hasNext() ) - it.next()->SetPickable(true); + while ( it.hasNext() ) { + SMESH_Actor* anActor = it.next(); + if ( IsActorVisible(anActor) ) + anActor->SetPickable(true); + } } myIsBusy = false; @@ -2257,8 +2269,11 @@ bool SMESHGUI_GroupDlg::SetAppropriateActor() if (myActorsList.count() > 0) { QListIterator it( myActorsList ); - while ( it.hasNext() ) - it.next()->SetPickable(true); + while ( it.hasNext() ) { + SMESH_Actor* anActor = it.next(); + if ( IsActorVisible(anActor) ) + anActor->SetPickable(true); + } } return ( isActor || (myActorsList.count() > 0) ); @@ -2297,3 +2312,15 @@ void SMESHGUI_GroupDlg::restoreShowEntityMode() } myStoredShownEntity = 0; } + +//======================================================================= +//function : IsActorVisible +//purpose : return visibility of the actor +//======================================================================= +bool SMESHGUI_GroupDlg::IsActorVisible( SMESH_Actor* theActor ) +{ + SVTK_ViewWindow* aViewWindow = SMESH::GetCurrentVtkView(); + if (theActor && aViewWindow) + return aViewWindow->isVisible(theActor->getIO()); + return false; +} diff --git a/src/SMESHGUI/SMESHGUI_GroupDlg.h b/src/SMESHGUI/SMESHGUI_GroupDlg.h index 4c5ebbe38..2a01d48af 100644 --- a/src/SMESHGUI/SMESHGUI_GroupDlg.h +++ b/src/SMESHGUI/SMESHGUI_GroupDlg.h @@ -127,6 +127,8 @@ private: bool SetAppropriateActor(); void setShowEntityMode(); void restoreShowEntityMode(); + + bool IsActorVisible( SMESH_Actor* ); void setGroupColor( const SALOMEDS::Color& ); SALOMEDS::Color getGroupColor() const;