mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-28 18:30:35 +05:00
Activate or create a new VTK viewer for Mesh automatic update after computation. Following curtomer remarks.
This commit is contained in:
parent
6907542f95
commit
1a264e7061
@ -1299,14 +1299,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
||||
|
||||
case 701: // COMPUTE MESH
|
||||
{
|
||||
if(checkLock(aStudy)) break;
|
||||
if (checkLock(aStudy)) break;
|
||||
|
||||
LightApp_SelectionMgr *Sel = selectionMgr();
|
||||
SALOME_ListIO selected; Sel->selectedObjects( selected );
|
||||
|
||||
if ( vtkwnd ) {
|
||||
int nbSel = selected.Extent();
|
||||
if (nbSel != 1){
|
||||
if (nbSel != 1) {
|
||||
SUIT_MessageBox::warn1(desktop(),
|
||||
tr("SMESH_WRN_WARNING"),
|
||||
tr("SMESH_WRN_NO_AVAILABLE_DATA"),
|
||||
@ -1324,20 +1323,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
||||
// imported mesh
|
||||
break;
|
||||
}
|
||||
if( aMeshSObj ) {
|
||||
if ( aMeshSObj ) {
|
||||
aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>(aMeshSObj);
|
||||
aSubMesh = SMESH::SObjectToInterface<SMESH::SMESH_subMesh>(aMeshSObj);
|
||||
if ( !aSubMesh->_is_nil() )
|
||||
aMesh = aSubMesh->GetFather();
|
||||
|
||||
if (!aMesh->_is_nil()) {
|
||||
// if(!GetSMESHGen()->IsReadyToCompute(aMesh,aShapeObject)) {
|
||||
// SUIT_MessageBox::warn1(desktop(),
|
||||
// tr("SMESH_WRN_WARNING"),
|
||||
// tr("SMESH_WRN_MISSING_PARAMETERS"),
|
||||
// tr("SMESH_BUT_OK"));
|
||||
// break;
|
||||
// }
|
||||
SMESH::algo_error_array_var errors = GetSMESHGen()->GetAlgoState(aMesh,aShapeObject);
|
||||
if ( errors->length() > 0 ) {
|
||||
SUIT_MessageBox::warn1(desktop(),
|
||||
@ -1346,9 +1338,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
||||
tr("SMESH_BUT_OK"));
|
||||
break;
|
||||
}
|
||||
try{
|
||||
if (GetSMESHGen()->Compute(aMesh,aShapeObject))
|
||||
SMESH::ModifiedMesh(aMeshSObj,true);
|
||||
|
||||
try {
|
||||
if (GetSMESHGen()->Compute(aMesh, aShapeObject))
|
||||
SMESH::ModifiedMesh(aMeshSObj, true);
|
||||
else
|
||||
SUIT_MessageBox::warn1(desktop(),
|
||||
tr("SMESH_WRN_WARNING"),
|
||||
@ -1358,34 +1351,34 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
||||
catch(const SALOME::SALOME_Exception & S_ex){
|
||||
SalomeApp_Tools::QtCatchCorbaException(S_ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
updateObjBrowser();
|
||||
|
||||
if (automaticUpdate()) {
|
||||
SVTK_ViewWindow* aVTKView = SMESH::GetViewWindow(this, /*create*/true);
|
||||
if (aVTKView) {
|
||||
CORBA::Long anId = aStudy->StudyId();
|
||||
TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,IObject->getEntry());
|
||||
if ( automaticUpdate() && aVisualObj){
|
||||
TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId, IObject->getEntry());
|
||||
if (aVisualObj) {
|
||||
aVisualObj->Update();
|
||||
SMESH_Actor* anActor = SMESH::FindActorByEntry(IObject->getEntry());
|
||||
if(!anActor){
|
||||
anActor = SMESH::CreateActor(aStudy,IObject->getEntry());
|
||||
if(anActor){
|
||||
SMESH::DisplayActor(view,anActor); //apo
|
||||
if (!anActor) {
|
||||
anActor = SMESH::CreateActor(aStudy, IObject->getEntry());
|
||||
if (anActor) {
|
||||
SMESH::DisplayActor(aVTKView, anActor); //apo
|
||||
SMESH::FitAll();
|
||||
}
|
||||
}
|
||||
SMESH::RepaintCurrentView();
|
||||
}
|
||||
}
|
||||
else{
|
||||
SUIT_MessageBox::warn1(desktop(),
|
||||
tr("SMESH_WRN_WARNING"),
|
||||
tr("SMESH_WRN_VIEWER_VTK"),
|
||||
tr("SMESH_BUT_OK"));
|
||||
}
|
||||
updateObjBrowser();
|
||||
Sel->setSelectedObjects( selected );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 702: // Create mesh
|
||||
startOperation( 702 );
|
||||
|
@ -22,47 +22,49 @@
|
||||
#include "SMESHGUI_Utils.h"
|
||||
#include "SMESHGUI_Filter.h"
|
||||
|
||||
#include <vtkRenderer.h>
|
||||
#include <vtkActorCollection.h>
|
||||
|
||||
#include <TColStd_IndexedMapOfInteger.hxx>
|
||||
#include "SMESHGUI.h"
|
||||
#include "SMESH_Actor.h"
|
||||
#include "SMESH_ObjectDef.h"
|
||||
|
||||
#include <SUIT_Desktop.h>
|
||||
#include <SUIT_Session.h>
|
||||
#include <SUIT_Study.h>
|
||||
|
||||
#include "LightApp_SelectionMgr.h"
|
||||
#include <SALOME_ListIO.hxx>
|
||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
||||
|
||||
#include "SVTK_Selector.h"
|
||||
#include "SVTK_ViewModel.h"
|
||||
#include "SVTK_ViewWindow.h"
|
||||
#include <SVTK_Selector.h>
|
||||
#include <SVTK_ViewModel.h>
|
||||
#include <SVTK_ViewWindow.h>
|
||||
|
||||
#include "utilities.h"
|
||||
#include <LightApp_SelectionMgr.h>
|
||||
#include <SalomeApp_Application.h>
|
||||
#include <SalomeApp_Study.h>
|
||||
|
||||
#include "SALOMEconfig.h"
|
||||
#include <utilities.h>
|
||||
|
||||
#include <SALOMEconfig.h>
|
||||
#include CORBA_CLIENT_HEADER(SMESH_Gen)
|
||||
#include CORBA_CLIENT_HEADER(SMESH_Mesh)
|
||||
#include CORBA_CLIENT_HEADER(SMESH_Group)
|
||||
#include CORBA_CLIENT_HEADER(SMESH_Hypothesis)
|
||||
|
||||
#include "SMESHGUI.h"
|
||||
#include "SMESH_Actor.h"
|
||||
#include "SMESH_ObjectDef.h"
|
||||
|
||||
#include <SalomeApp_Application.h>
|
||||
#include <LightApp_SelectionMgr.h>
|
||||
#include <SalomeApp_Study.h>
|
||||
|
||||
#include <SALOMEDSClient_Study.hxx>
|
||||
#include <SALOMEDSClient_SObject.hxx>
|
||||
|
||||
#include <SALOME_ListIO.hxx>
|
||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
||||
// VTK
|
||||
#include <vtkRenderer.h>
|
||||
#include <vtkActorCollection.h>
|
||||
|
||||
// OCCT
|
||||
#include <TColStd_IndexedMapOfInteger.hxx>
|
||||
|
||||
// STL
|
||||
#include <set>
|
||||
using namespace std;
|
||||
|
||||
namespace SMESH{
|
||||
|
||||
namespace SMESH {
|
||||
|
||||
typedef map<TKeyOfVisualObj,TVisualObjPtr> TVisualObjCont;
|
||||
static TVisualObjCont VISUAL_OBJ_CONT;
|
||||
@ -75,7 +77,8 @@ namespace SMESH{
|
||||
if(anIter != VISUAL_OBJ_CONT.end()){
|
||||
aVisualObj = anIter->second;
|
||||
}else{
|
||||
SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SMESHGUI::activeStudy()->application() );
|
||||
SalomeApp_Application* app =
|
||||
dynamic_cast<SalomeApp_Application*>( SMESHGUI::activeStudy()->application() );
|
||||
_PTR(Study) aStudy = SMESHGUI::activeStudy()->studyDS();
|
||||
_PTR(SObject) aSObj = aStudy->FindObjectID(theEntry);
|
||||
if(aSObj){
|
||||
@ -139,16 +142,41 @@ namespace SMESH{
|
||||
}
|
||||
|
||||
|
||||
SVTK_ViewWindow*
|
||||
GetViewWindow(const SalomeApp_Module* theModule)
|
||||
/*! Return active view window, if it instantiates SVTK_ViewWindow class,
|
||||
* overwise find or create corresponding view window, make it active and return it.
|
||||
* \note Active VVTK_ViewWindow can be returned, because it inherits SVTK_ViewWindow.
|
||||
*/
|
||||
SVTK_ViewWindow* GetViewWindow (const SalomeApp_Module* theModule,
|
||||
bool createIfNotFound)
|
||||
{
|
||||
if (SalomeApp_Application* anApp = theModule->getApp())
|
||||
return dynamic_cast<SVTK_ViewWindow*>(anApp->desktop()->activeWindow());
|
||||
SalomeApp_Application* anApp;
|
||||
if (theModule)
|
||||
anApp = theModule->getApp();
|
||||
else
|
||||
anApp = dynamic_cast<SalomeApp_Application*>
|
||||
(SUIT_Session::session()->activeApplication());
|
||||
|
||||
if (anApp) {
|
||||
if (SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(anApp->desktop()->activeWindow()))
|
||||
return aView;
|
||||
|
||||
SUIT_ViewManager* aViewManager =
|
||||
anApp->getViewManager(SVTK_Viewer::Type(), createIfNotFound);
|
||||
if (aViewManager) {
|
||||
if (SUIT_ViewWindow* aViewWindow = aViewManager->getActiveView()) {
|
||||
if (SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow)) {
|
||||
aViewWindow->raise();
|
||||
aViewWindow->setFocus();
|
||||
return aView;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SVTK_ViewWindow* FindVtkViewWindow( SUIT_ViewManager* theMgr,
|
||||
SUIT_ViewWindow* theWindow )
|
||||
SVTK_ViewWindow* FindVtkViewWindow (SUIT_ViewManager* theMgr,
|
||||
SUIT_ViewWindow * theWindow)
|
||||
{
|
||||
if( !theMgr )
|
||||
return NULL;
|
||||
@ -160,12 +188,10 @@ namespace SMESH{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
SVTK_ViewWindow* GetVtkViewWindow(SUIT_ViewWindow* theWindow){
|
||||
return dynamic_cast<SVTK_ViewWindow*>(theWindow);
|
||||
}
|
||||
|
||||
|
||||
/* SUIT_ViewWindow* GetActiveWindow()
|
||||
{
|
||||
SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
|
||||
@ -182,8 +208,19 @@ namespace SMESH{
|
||||
return GetVtkViewWindow( GetActiveWindow() );
|
||||
}
|
||||
|
||||
|
||||
void RepaintCurrentView()
|
||||
{
|
||||
if (SVTK_ViewWindow* wnd = GetCurrentVtkView())
|
||||
{
|
||||
wnd->getRenderer()->Render();
|
||||
wnd->Repaint(false);
|
||||
}
|
||||
}
|
||||
|
||||
void RepaintViewWindow(SVTK_ViewWindow* theWindow)
|
||||
{
|
||||
theWindow->getRenderer()->Render();
|
||||
theWindow->Repaint();
|
||||
}
|
||||
|
||||
@ -193,6 +230,14 @@ namespace SMESH{
|
||||
theWindow->Repaint();
|
||||
}
|
||||
|
||||
void FitAll(){
|
||||
if(SVTK_ViewWindow* wnd = GetCurrentVtkView() ){
|
||||
wnd->onFitAll();
|
||||
wnd->Repaint();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SMESH_Actor* FindActorByEntry(SUIT_ViewWindow *theWindow,
|
||||
const char* theEntry)
|
||||
{
|
||||
@ -286,27 +331,6 @@ namespace SMESH{
|
||||
}
|
||||
|
||||
|
||||
void FitAll(){
|
||||
if(SVTK_ViewWindow* wnd = GetCurrentVtkView() ){
|
||||
wnd->onFitAll();
|
||||
wnd->Repaint();
|
||||
}
|
||||
}
|
||||
|
||||
vtkRenderer* GetCurrentRenderer(){
|
||||
if(SVTK_ViewWindow* wnd = GetCurrentVtkView() )
|
||||
return wnd->getRenderer();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void RepaintCurrentView(){
|
||||
if(SVTK_ViewWindow* wnd = GetCurrentVtkView() )
|
||||
{
|
||||
wnd->getRenderer()->Render();
|
||||
wnd->Repaint(false);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateView(SUIT_ViewWindow *theWnd, EDisplaing theAction, const char* theEntry)
|
||||
{
|
||||
if(SVTK_ViewWindow* aViewWnd = GetVtkViewWindow(theWnd)){
|
||||
|
@ -20,14 +20,24 @@
|
||||
#ifndef SMESHGUI_VTKUtils_HeaderFile
|
||||
#define SMESHGUI_VTKUtils_HeaderFile
|
||||
|
||||
class QString;
|
||||
class vtkRenderer;
|
||||
class TColStd_IndexedMapOfInteger;
|
||||
|
||||
#include "SALOMEDSClient_definitions.hxx"
|
||||
#include "SALOME_InteractiveObject.hxx"
|
||||
#include "VTKViewer_Filter.h"
|
||||
|
||||
#include "SMESH_Object.h"
|
||||
#include "SMESHGUI_Utils.h"
|
||||
|
||||
#include <CORBA.h>
|
||||
|
||||
#include "SALOMEconfig.h"
|
||||
#include CORBA_CLIENT_HEADER(SALOMEDS)
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
|
||||
class QString;
|
||||
|
||||
class TColStd_IndexedMapOfInteger;
|
||||
|
||||
class SALOMEDSClient_Study;
|
||||
|
||||
class SUIT_Study;
|
||||
@ -38,22 +48,13 @@ class SVTK_ViewWindow;
|
||||
class SVTK_Selector;
|
||||
|
||||
class LightApp_SelectionMgr;
|
||||
class SMESHGUI;
|
||||
|
||||
#include <CORBA.h>
|
||||
|
||||
#include "SALOMEconfig.h"
|
||||
#include CORBA_CLIENT_HEADER(SALOMEDS)
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include "SMESH_Object.h"
|
||||
|
||||
class SMESH_Actor;
|
||||
class SALOME_Actor;
|
||||
class SVTK_ViewWindow;
|
||||
class SalomeApp_Module;
|
||||
|
||||
namespace SMESH{
|
||||
class SMESHGUI;
|
||||
class SMESH_Actor;
|
||||
class SALOME_Actor;
|
||||
|
||||
namespace SMESH {
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
typedef pair<int,string> TKeyOfVisualObj;
|
||||
@ -62,20 +63,22 @@ namespace SMESH{
|
||||
const char* theEntry);
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
SVTK_ViewWindow* GetViewWindow(const SalomeApp_Module* theModule);
|
||||
SVTK_ViewWindow* GetViewWindow(const SalomeApp_Module* theModule = NULL,
|
||||
bool createIfNotFound = false);
|
||||
|
||||
SUIT_ViewWindow* GetActiveWindow();
|
||||
SVTK_ViewWindow* FindVtkViewWindow(SUIT_ViewManager*, SUIT_ViewWindow*);
|
||||
|
||||
SVTK_ViewWindow* FindVtkViewWindow( SUIT_ViewManager*,
|
||||
SUIT_ViewWindow* );
|
||||
|
||||
SVTK_ViewWindow* GetVtkViewWindow( SUIT_ViewWindow* );
|
||||
SVTK_ViewWindow* GetVtkViewWindow(SUIT_ViewWindow*);
|
||||
|
||||
SVTK_ViewWindow* GetCurrentVtkView();
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void RepaintCurrentView();
|
||||
void RepaintViewWindow(SVTK_ViewWindow*);
|
||||
void RenderViewWindow(SVTK_ViewWindow*);
|
||||
|
||||
void FitAll();
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
SMESH_Actor* FindActorByEntry (SUIT_ViewWindow*, const char* theEntry);
|
||||
SMESH_Actor* FindActorByEntry (const char* theEntry);
|
||||
@ -101,14 +104,6 @@ namespace SMESH{
|
||||
bool theDisplay);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void FitAll();
|
||||
|
||||
void RepaintCurrentView();
|
||||
|
||||
vtkRenderer* GetCurrentRenderer();
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void SetPointRepresentation(bool theIsVisible);
|
||||
|
||||
@ -118,20 +113,16 @@ namespace SMESH{
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
SVTK_Selector*
|
||||
GetSelector(SUIT_ViewWindow* = GetActiveWindow());
|
||||
SVTK_Selector* GetSelector (SUIT_ViewWindow* = GetActiveWindow());
|
||||
|
||||
void SetFilter (const Handle(VTKViewer_Filter)& theFilter,
|
||||
SVTK_Selector* theSelector = GetSelector());
|
||||
|
||||
Handle(VTKViewer_Filter)
|
||||
GetFilter (int theId, SVTK_Selector* theSelector = GetSelector());
|
||||
Handle(VTKViewer_Filter) GetFilter (int theId, SVTK_Selector* theSelector = GetSelector());
|
||||
|
||||
bool IsFilterPresent (int theId,
|
||||
SVTK_Selector* theSelector = GetSelector());
|
||||
bool IsFilterPresent (int theId, SVTK_Selector* theSelector = GetSelector());
|
||||
|
||||
void RemoveFilter (int theId,
|
||||
SVTK_Selector* theSelector = GetSelector());
|
||||
void RemoveFilter (int theId, SVTK_Selector* theSelector = GetSelector());
|
||||
|
||||
void RemoveFilters (SVTK_Selector* theSelector = GetSelector());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user