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,
|
const char* theName,
|
||||||
int theIsClear)
|
int theIsClear)
|
||||||
{
|
{
|
||||||
SMESH_ActorDef* anActor = SMESH_ActorDef::New();
|
SMESH_ActorDef* anActor = NULL;
|
||||||
if(!anActor->Init(theVisualObj,theEntry,theName,theIsClear)){
|
if(theVisualObj->GetNbEntities(SMDSAbs_Node) > 0 ) {
|
||||||
anActor->Delete();
|
anActor = SMESH_ActorDef::New();
|
||||||
anActor = NULL;
|
if(!anActor->Init(theVisualObj,theEntry,theName,theIsClear)){
|
||||||
|
anActor->Delete();
|
||||||
|
anActor = NULL;
|
||||||
|
}
|
||||||
|
if( anActor )
|
||||||
|
anActor->UpdateScalarBar();
|
||||||
}
|
}
|
||||||
if( anActor )
|
|
||||||
anActor->UpdateScalarBar();
|
|
||||||
return anActor;
|
return anActor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2869,7 +2869,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
|||||||
SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IOS);
|
SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IOS);
|
||||||
if ( aMesh->_is_nil()) continue;
|
if ( aMesh->_is_nil()) continue;
|
||||||
try {
|
try {
|
||||||
SMESH::UpdateView(SMESH::eErase, IOS->getEntry());
|
SMESH::RemoveVisualObjectWithActors(IOS->getEntry(), true);
|
||||||
aMesh->Clear();
|
aMesh->Clear();
|
||||||
_PTR(SObject) aMeshSObj = SMESH::FindSObject(aMesh);
|
_PTR(SObject) aMeshSObj = SMESH::FindSObject(aMesh);
|
||||||
SMESH::ModifiedMesh( aMeshSObj, false, true);
|
SMESH::ModifiedMesh( aMeshSObj, false, true);
|
||||||
@ -2879,7 +2879,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
|||||||
for ( anIter->InitEx(true); anIter->More(); anIter->Next() )
|
for ( anIter->InitEx(true); anIter->More(); anIter->Next() )
|
||||||
{
|
{
|
||||||
_PTR(SObject) so = anIter->Value();
|
_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){
|
catch (const SALOME::SALOME_Exception& S_ex){
|
||||||
|
@ -25,9 +25,10 @@
|
|||||||
// Author : Alexander SOLOVYOV, Open CASCADE S.A.S.
|
// Author : Alexander SOLOVYOV, Open CASCADE S.A.S.
|
||||||
// SMESH includes
|
// SMESH includes
|
||||||
//
|
//
|
||||||
#include "SMESHGUI_Displayer.h"
|
|
||||||
|
|
||||||
|
#include "SMESHGUI_Displayer.h"
|
||||||
#include "SMESHGUI_VTKUtils.h"
|
#include "SMESHGUI_VTKUtils.h"
|
||||||
|
#include "SMESHGUI_Utils.h"
|
||||||
|
|
||||||
// SALOME GUI includes
|
// SALOME GUI includes
|
||||||
#include <SalomeApp_Study.h>
|
#include <SalomeApp_Study.h>
|
||||||
@ -36,6 +37,13 @@
|
|||||||
#include <SVTK_ViewModel.h>
|
#include <SVTK_ViewModel.h>
|
||||||
#include <SVTK_ViewWindow.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 )
|
SMESHGUI_Displayer::SMESHGUI_Displayer( SalomeApp_Application* app )
|
||||||
: LightApp_Displayer(),
|
: LightApp_Displayer(),
|
||||||
myApp( app )
|
myApp( app )
|
||||||
@ -81,7 +89,38 @@ SalomeApp_Study* SMESHGUI_Displayer::study() const
|
|||||||
return dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
|
return dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SMESHGUI_Displayer::canBeDisplayed( const QString& /*entry*/, const QString& viewer_type ) const
|
bool SMESHGUI_Displayer::canBeDisplayed( const QString& entry, const QString& viewer_type ) const {
|
||||||
{
|
bool res = false;
|
||||||
return viewer_type==SVTK_Viewer::Type();
|
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*>
|
SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>(SUIT_Session::session()->activeApplication());
|
||||||
( SUIT_Session::session()->activeApplication() );
|
if(!app)
|
||||||
SUIT_ViewManager* aViewManager =
|
return;
|
||||||
app ? app->getViewManager(SVTK_Viewer::Type(), true) : 0;
|
SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
|
||||||
if ( aViewManager ) {
|
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();
|
QVector<SUIT_ViewWindow*> views = aViewManager->getViews();
|
||||||
for ( int iV = 0; iV < views.count(); ++iV ) {
|
for ( int iV = 0; iV < views.count(); ++iV ) {
|
||||||
if ( SMESH_Actor* actor = FindActorByEntry( views[iV], theEntry)) {
|
if ( SMESH_Actor* actor = FindActorByEntry( views[iV], theEntry)) {
|
||||||
if(SVTK_ViewWindow* vtkWnd = GetVtkViewWindow(views[iV]))
|
if(SVTK_ViewWindow* vtkWnd = GetVtkViewWindow(views[iV])) {
|
||||||
vtkWnd->RemoveActor(actor);
|
vtkWnd->RemoveActor(actor);
|
||||||
actor->Delete();
|
actorRemoved = true;
|
||||||
}
|
}
|
||||||
|
actor->Delete();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aViewManager ) {
|
||||||
int aStudyId = aViewManager->study()->id();
|
int aStudyId = aViewManager->study()->id();
|
||||||
TVisualObjCont::key_type aKey(aStudyId,theEntry);
|
TVisualObjCont::key_type aKey(aStudyId,theEntry);
|
||||||
TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.find(aKey);
|
TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.find(aKey);
|
||||||
if(anIter != VISUAL_OBJ_CONT.end()) {
|
if(anIter != VISUAL_OBJ_CONT.end()) {
|
||||||
// for unknown reason, object destructor is not called, so clear object manually
|
// for unknown reason, object destructor is not called, so clear object manually
|
||||||
anIter->second->GetUnstructuredGrid()->SetCells(0,0,0,0,0);
|
anIter->second->GetUnstructuredGrid()->SetCells(0,0,0,0,0);
|
||||||
anIter->second->GetUnstructuredGrid()->SetPoints(0);
|
anIter->second->GetUnstructuredGrid()->SetPoints(0);
|
||||||
}
|
}
|
||||||
VISUAL_OBJ_CONT.erase(aKey);
|
VISUAL_OBJ_CONT.erase(aKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(actorRemoved)
|
||||||
|
aStudy->setVisibilityState(theEntry, Qtx::HiddenState);
|
||||||
}
|
}
|
||||||
//================================================================================
|
//================================================================================
|
||||||
/*!
|
/*!
|
||||||
@ -686,6 +709,15 @@ namespace SMESH
|
|||||||
if (!aViewWnd)
|
if (!aViewWnd)
|
||||||
return OK;
|
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;
|
OK = true;
|
||||||
vtkRenderer *aRenderer = aViewWnd->getRenderer();
|
vtkRenderer *aRenderer = aViewWnd->getRenderer();
|
||||||
@ -699,6 +731,13 @@ namespace SMESH
|
|||||||
if (SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)) {
|
if (SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)) {
|
||||||
MESSAGE("--- display " << anActor);
|
MESSAGE("--- display " << anActor);
|
||||||
anActor->SetVisibility(true);
|
anActor->SetVisibility(true);
|
||||||
|
|
||||||
|
if(anActor->hasIO()){
|
||||||
|
Handle(SALOME_InteractiveObject) anIO = anActor->getIO();
|
||||||
|
if(anIO->hasEntry()){
|
||||||
|
aStudy->setVisibilityState(anIO->getEntry(), Qtx::ShownState);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -712,6 +751,7 @@ namespace SMESH
|
|||||||
anActor->SetVisibility(false);
|
anActor->SetVisibility(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
aStudy->setVisibilityStateForAll(Qtx::HiddenState);
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
if (SMESH_Actor *anActor = FindActorByEntry(theWnd,theEntry)) {
|
if (SMESH_Actor *anActor = FindActorByEntry(theWnd,theEntry)) {
|
||||||
@ -722,10 +762,12 @@ namespace SMESH
|
|||||||
anActor->Update();
|
anActor->Update();
|
||||||
anActor->SetVisibility(true);
|
anActor->SetVisibility(true);
|
||||||
if (theAction == eDisplayOnly) aRenderer->ResetCameraClippingRange();
|
if (theAction == eDisplayOnly) aRenderer->ResetCameraClippingRange();
|
||||||
|
aStudy->setVisibilityState(theEntry, Qtx::ShownState);
|
||||||
break;
|
break;
|
||||||
case eErase:
|
case eErase:
|
||||||
//MESSAGE("--- erase " << anActor);
|
//MESSAGE("--- erase " << anActor);
|
||||||
anActor->SetVisibility(false);
|
anActor->SetVisibility(false);
|
||||||
|
aStudy->setVisibilityState(theEntry, Qtx::HiddenState);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -744,6 +786,7 @@ namespace SMESH
|
|||||||
if ((anActor = CreateActor(aDocument,theEntry,true))) {
|
if ((anActor = CreateActor(aDocument,theEntry,true))) {
|
||||||
bool needFitAll = noSmeshActors(theWnd); // fit for the first object only
|
bool needFitAll = noSmeshActors(theWnd); // fit for the first object only
|
||||||
DisplayActor(theWnd,anActor);
|
DisplayActor(theWnd,anActor);
|
||||||
|
aStudy->setVisibilityState(theEntry, Qtx::ShownState);
|
||||||
// FitAll(); - PAL16770(Display of a group performs an automatic fit all)
|
// FitAll(); - PAL16770(Display of a group performs an automatic fit all)
|
||||||
if (needFitAll) FitAll();
|
if (needFitAll) FitAll();
|
||||||
} else {
|
} else {
|
||||||
|
@ -203,6 +203,8 @@ SMESHGUI_EXPORT
|
|||||||
vtkFloatingPointType theDist,
|
vtkFloatingPointType theDist,
|
||||||
vtkFloatingPointType theBounds[6],
|
vtkFloatingPointType theBounds[6],
|
||||||
vtkFloatingPointType theOrigin[3] );
|
vtkFloatingPointType theOrigin[3] );
|
||||||
|
SMESHGUI_EXPORT
|
||||||
|
void RemoveVisualObjectWithActors( const char* theEntry, bool fromAllViews = false );
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SMESHGUI_VTKUTILS_H
|
#endif // SMESHGUI_VTKUTILS_H
|
||||||
|
Loading…
Reference in New Issue
Block a user