mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-11-15 01:58:35 +05:00
Implementation of the "20830: EDF 1357 GUI : Hide/Show Icon"
(at the moment implemeted only in GEOM and SMESH modules).
This commit is contained in:
parent
bd6b92b1da
commit
fbd01b197c
@ -103,13 +103,16 @@ SMESH_Actor* SMESH_Actor::New(TVisualObjPtr theVisualObj,
|
||||
const char* theName,
|
||||
int theIsClear)
|
||||
{
|
||||
SMESH_ActorDef* anActor = SMESH_ActorDef::New();
|
||||
if(!anActor->Init(theVisualObj,theEntry,theName,theIsClear)){
|
||||
anActor->Delete();
|
||||
anActor = NULL;
|
||||
SMESH_ActorDef* anActor = NULL;
|
||||
if(theVisualObj->GetNbEntities(SMDSAbs_Node) > 0 ) {
|
||||
anActor = SMESH_ActorDef::New();
|
||||
if(!anActor->Init(theVisualObj,theEntry,theName,theIsClear)){
|
||||
anActor->Delete();
|
||||
anActor = NULL;
|
||||
}
|
||||
if( anActor )
|
||||
anActor->UpdateScalarBar();
|
||||
}
|
||||
if( anActor )
|
||||
anActor->UpdateScalarBar();
|
||||
return anActor;
|
||||
}
|
||||
|
||||
|
@ -2869,7 +2869,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
||||
SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IOS);
|
||||
if ( aMesh->_is_nil()) continue;
|
||||
try {
|
||||
SMESH::UpdateView(SMESH::eErase, IOS->getEntry());
|
||||
SMESH::RemoveVisualObjectWithActors(IOS->getEntry(), true);
|
||||
aMesh->Clear();
|
||||
_PTR(SObject) aMeshSObj = SMESH::FindSObject(aMesh);
|
||||
SMESH::ModifiedMesh( aMeshSObj, false, true);
|
||||
@ -2879,7 +2879,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
||||
for ( anIter->InitEx(true); anIter->More(); anIter->Next() )
|
||||
{
|
||||
_PTR(SObject) so = anIter->Value();
|
||||
SMESH::UpdateView(SMESH::eErase, so->GetID().c_str());
|
||||
SMESH::RemoveVisualObjectWithActors(so->GetID().c_str(), true);
|
||||
}
|
||||
}
|
||||
catch (const SALOME::SALOME_Exception& S_ex){
|
||||
|
@ -25,9 +25,10 @@
|
||||
// Author : Alexander SOLOVYOV, Open CASCADE S.A.S.
|
||||
// SMESH includes
|
||||
//
|
||||
#include "SMESHGUI_Displayer.h"
|
||||
|
||||
#include "SMESHGUI_Displayer.h"
|
||||
#include "SMESHGUI_VTKUtils.h"
|
||||
#include "SMESHGUI_Utils.h"
|
||||
|
||||
// SALOME GUI includes
|
||||
#include <SalomeApp_Study.h>
|
||||
@ -36,6 +37,13 @@
|
||||
#include <SVTK_ViewModel.h>
|
||||
#include <SVTK_ViewWindow.h>
|
||||
|
||||
|
||||
// IDL includes
|
||||
#include <SALOMEconfig.h>
|
||||
#include CORBA_SERVER_HEADER(SMESH_Group)
|
||||
#include CORBA_SERVER_HEADER(SMESH_Mesh)
|
||||
|
||||
|
||||
SMESHGUI_Displayer::SMESHGUI_Displayer( SalomeApp_Application* app )
|
||||
: LightApp_Displayer(),
|
||||
myApp( app )
|
||||
@ -81,7 +89,38 @@ SalomeApp_Study* SMESHGUI_Displayer::study() const
|
||||
return dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
|
||||
}
|
||||
|
||||
bool SMESHGUI_Displayer::canBeDisplayed( const QString& /*entry*/, const QString& viewer_type ) const
|
||||
{
|
||||
return viewer_type==SVTK_Viewer::Type();
|
||||
bool SMESHGUI_Displayer::canBeDisplayed( const QString& entry, const QString& viewer_type ) const {
|
||||
bool res = false;
|
||||
if(viewer_type != SVTK_Viewer::Type())
|
||||
return res;
|
||||
|
||||
SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
|
||||
if( !study )
|
||||
return res;
|
||||
|
||||
|
||||
_PTR(SObject) obj = study->studyDS()->FindObjectID( (const char*)entry.toLatin1() );
|
||||
CORBA::Object_var anObj = SMESH::SObjectToObject( obj );
|
||||
|
||||
/*
|
||||
if( !CORBA::is_nil( anObj ) ) {
|
||||
SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( anObj );
|
||||
if ( ! mesh->_is_nil() )
|
||||
res = (mesh->NbNodes() > 0);
|
||||
|
||||
SMESH::SMESH_subMesh_var aSubMeshObj = SMESH::SMESH_subMesh::_narrow( anObj );
|
||||
if ( !aSubMeshObj->_is_nil() )
|
||||
res = (aSubMeshObj->GetNumberOfNodes(true) > 0);
|
||||
|
||||
SMESH::SMESH_GroupBase_var aGroupObj = SMESH::SMESH_GroupBase::_narrow( anObj );
|
||||
if ( !aGroupObj->_is_nil() )
|
||||
res = !aGroupObj->IsEmpty();
|
||||
}*/
|
||||
if( !CORBA::is_nil( anObj ) ) {
|
||||
if(!SMESH::SMESH_Mesh::_narrow( anObj )->_is_nil() ||
|
||||
!SMESH::SMESH_subMesh::_narrow( anObj )->_is_nil() ||
|
||||
!SMESH::SMESH_GroupBase::_narrow( anObj )->_is_nil())
|
||||
res = true;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
@ -103,31 +103,54 @@ namespace SMESH
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
void RemoveVisualObjectWithActors( const char* theEntry )
|
||||
void RemoveVisualObjectWithActors( const char* theEntry, bool fromAllViews )
|
||||
{
|
||||
SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>
|
||||
( SUIT_Session::session()->activeApplication() );
|
||||
SUIT_ViewManager* aViewManager =
|
||||
app ? app->getViewManager(SVTK_Viewer::Type(), true) : 0;
|
||||
if ( aViewManager ) {
|
||||
SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>(SUIT_Session::session()->activeApplication());
|
||||
if(!app)
|
||||
return;
|
||||
SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
|
||||
if(!aStudy)
|
||||
return;
|
||||
ViewManagerList aList;
|
||||
|
||||
if(fromAllViews) {
|
||||
app->viewManagers(SVTK_Viewer::Type() , aList);
|
||||
} else {
|
||||
SUIT_ViewManager* aVM = app->getViewManager(SVTK_Viewer::Type(), true);
|
||||
if(aVM)
|
||||
aList.append(aVM);
|
||||
}
|
||||
bool actorRemoved = false;
|
||||
ViewManagerList::ConstIterator it = aList.begin();
|
||||
SUIT_ViewManager* aViewManager = 0;
|
||||
for( ; it!=aList.end();it++) {
|
||||
aViewManager = *it;
|
||||
QVector<SUIT_ViewWindow*> views = aViewManager->getViews();
|
||||
for ( int iV = 0; iV < views.count(); ++iV ) {
|
||||
if ( SMESH_Actor* actor = FindActorByEntry( views[iV], theEntry)) {
|
||||
if(SVTK_ViewWindow* vtkWnd = GetVtkViewWindow(views[iV]))
|
||||
vtkWnd->RemoveActor(actor);
|
||||
actor->Delete();
|
||||
}
|
||||
if ( SMESH_Actor* actor = FindActorByEntry( views[iV], theEntry)) {
|
||||
if(SVTK_ViewWindow* vtkWnd = GetVtkViewWindow(views[iV])) {
|
||||
vtkWnd->RemoveActor(actor);
|
||||
actorRemoved = true;
|
||||
}
|
||||
actor->Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (aViewManager ) {
|
||||
int aStudyId = aViewManager->study()->id();
|
||||
TVisualObjCont::key_type aKey(aStudyId,theEntry);
|
||||
TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.find(aKey);
|
||||
if(anIter != VISUAL_OBJ_CONT.end()) {
|
||||
// for unknown reason, object destructor is not called, so clear object manually
|
||||
anIter->second->GetUnstructuredGrid()->SetCells(0,0,0,0,0);
|
||||
anIter->second->GetUnstructuredGrid()->SetPoints(0);
|
||||
// for unknown reason, object destructor is not called, so clear object manually
|
||||
anIter->second->GetUnstructuredGrid()->SetCells(0,0,0,0,0);
|
||||
anIter->second->GetUnstructuredGrid()->SetPoints(0);
|
||||
}
|
||||
VISUAL_OBJ_CONT.erase(aKey);
|
||||
}
|
||||
|
||||
if(actorRemoved)
|
||||
aStudy->setVisibilityState(theEntry, Qtx::HiddenState);
|
||||
}
|
||||
//================================================================================
|
||||
/*!
|
||||
@ -686,6 +709,15 @@ namespace SMESH
|
||||
if (!aViewWnd)
|
||||
return OK;
|
||||
|
||||
SVTK_ViewWindow* vtkWnd = GetVtkViewWindow(theWnd);
|
||||
if (!vtkWnd)
|
||||
return OK;
|
||||
|
||||
SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( vtkWnd->getViewManager()->study() );
|
||||
|
||||
if (!aStudy)
|
||||
return OK;
|
||||
|
||||
{
|
||||
OK = true;
|
||||
vtkRenderer *aRenderer = aViewWnd->getRenderer();
|
||||
@ -699,6 +731,13 @@ namespace SMESH
|
||||
if (SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)) {
|
||||
MESSAGE("--- display " << anActor);
|
||||
anActor->SetVisibility(true);
|
||||
|
||||
if(anActor->hasIO()){
|
||||
Handle(SALOME_InteractiveObject) anIO = anActor->getIO();
|
||||
if(anIO->hasEntry()){
|
||||
aStudy->setVisibilityState(anIO->getEntry(), Qtx::ShownState);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -712,6 +751,7 @@ namespace SMESH
|
||||
anActor->SetVisibility(false);
|
||||
}
|
||||
}
|
||||
aStudy->setVisibilityStateForAll(Qtx::HiddenState);
|
||||
}
|
||||
default: {
|
||||
if (SMESH_Actor *anActor = FindActorByEntry(theWnd,theEntry)) {
|
||||
@ -722,10 +762,12 @@ namespace SMESH
|
||||
anActor->Update();
|
||||
anActor->SetVisibility(true);
|
||||
if (theAction == eDisplayOnly) aRenderer->ResetCameraClippingRange();
|
||||
aStudy->setVisibilityState(theEntry, Qtx::ShownState);
|
||||
break;
|
||||
case eErase:
|
||||
//MESSAGE("--- erase " << anActor);
|
||||
anActor->SetVisibility(false);
|
||||
aStudy->setVisibilityState(theEntry, Qtx::HiddenState);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
@ -744,6 +786,7 @@ namespace SMESH
|
||||
if ((anActor = CreateActor(aDocument,theEntry,true))) {
|
||||
bool needFitAll = noSmeshActors(theWnd); // fit for the first object only
|
||||
DisplayActor(theWnd,anActor);
|
||||
aStudy->setVisibilityState(theEntry, Qtx::ShownState);
|
||||
// FitAll(); - PAL16770(Display of a group performs an automatic fit all)
|
||||
if (needFitAll) FitAll();
|
||||
} else {
|
||||
|
@ -203,6 +203,8 @@ SMESHGUI_EXPORT
|
||||
vtkFloatingPointType theDist,
|
||||
vtkFloatingPointType theBounds[6],
|
||||
vtkFloatingPointType theOrigin[3] );
|
||||
SMESHGUI_EXPORT
|
||||
void RemoveVisualObjectWithActors( const char* theEntry, bool fromAllViews = false );
|
||||
};
|
||||
|
||||
#endif // SMESHGUI_VTKUTILS_H
|
||||
|
Loading…
Reference in New Issue
Block a user