0020501: EDF 1098 SMESH: Display only groups, edit a group: can't select face from other group

This commit is contained in:
dmv 2009-10-07 12:27:27 +00:00
parent f6c3a1e96c
commit d8333f0d47
2 changed files with 39 additions and 10 deletions

View File

@ -1298,20 +1298,32 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
} }
if (myActorsList.count() == 0) { if (myActorsList.count() == 0) {
if (!myGroup->_is_nil()) if (!myGroup->_is_nil()) {
myActorsList.append( SMESH::FindActorByObject(myGroup) ); SMESH_Actor* anActor = SMESH::FindActorByObject(myGroup);
else if(!myGroupOnGeom->_is_nil()) if ( anActor )
myActorsList.append( SMESH::FindActorByObject(myGroupOnGeom) ); myActorsList.append( anActor );
else }
myActorsList.append( SMESH::FindActorByObject(myMesh) ); 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, // somehow, if we display the mesh, while selecting from another actor,
// the mesh becomes pickable, and there is no way to select any element // the mesh becomes pickable, and there is no way to select any element
if (myActorsList.count() > 0) { if (myActorsList.count() > 0) {
QListIterator<SMESH_Actor*> it( myActorsList ); QListIterator<SMESH_Actor*> it( myActorsList );
while ( it.hasNext() ) while ( it.hasNext() ) {
it.next()->SetPickable(true); SMESH_Actor* anActor = it.next();
if ( IsActorVisible(anActor) )
anActor->SetPickable(true);
}
} }
myIsBusy = false; myIsBusy = false;
@ -2257,8 +2269,11 @@ bool SMESHGUI_GroupDlg::SetAppropriateActor()
if (myActorsList.count() > 0) { if (myActorsList.count() > 0) {
QListIterator<SMESH_Actor*> it( myActorsList ); QListIterator<SMESH_Actor*> it( myActorsList );
while ( it.hasNext() ) while ( it.hasNext() ) {
it.next()->SetPickable(true); SMESH_Actor* anActor = it.next();
if ( IsActorVisible(anActor) )
anActor->SetPickable(true);
}
} }
return ( isActor || (myActorsList.count() > 0) ); return ( isActor || (myActorsList.count() > 0) );
@ -2297,3 +2312,15 @@ void SMESHGUI_GroupDlg::restoreShowEntityMode()
} }
myStoredShownEntity = 0; 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;
}

View File

@ -128,6 +128,8 @@ private:
void setShowEntityMode(); void setShowEntityMode();
void restoreShowEntityMode(); void restoreShowEntityMode();
bool IsActorVisible( SMESH_Actor* );
void setGroupColor( const SALOMEDS::Color& ); void setGroupColor( const SALOMEDS::Color& );
SALOMEDS::Color getGroupColor() const; SALOMEDS::Color getGroupColor() const;