From 542718ee9d9cc1ea1e301232e0c455bab70fb6db Mon Sep 17 00:00:00 2001 From: Anthony Geay Date: Mon, 27 Mar 2023 08:52:33 +0100 Subject: [PATCH] First integration of a new PV3D viewer. --- src/SMESHGUI/SMESHGUI_Displayer.cxx | 52 +++++++++++++++++++++++++++-- src/SMESHGUI/SMESHGUI_Displayer.h | 1 + 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/SMESHGUI/SMESHGUI_Displayer.cxx b/src/SMESHGUI/SMESHGUI_Displayer.cxx index 7c76db556..6fcea65a5 100644 --- a/src/SMESHGUI/SMESHGUI_Displayer.cxx +++ b/src/SMESHGUI/SMESHGUI_Displayer.cxx @@ -36,13 +36,39 @@ #include #include #include +#include +#include +#include +//For PV3D +#include "SMESH_Actor.h" // IDL includes #include #include CORBA_SERVER_HEADER(SMESH_Group) #include CORBA_SERVER_HEADER(SMESH_Mesh) +std::string SMESHGUI_Displayer::getName( const QString& entry ) +{ + Handle( SALOME_InteractiveObject ) theIO = new SALOME_InteractiveObject(); + theIO->setEntry( entry.toUtf8().constData() ); + if ( !theIO.IsNull() ) + { + // Find SOBject (because shape should be published previously) + if ( study() ) + { + _PTR(SObject) aSObj ( study()->studyDS()->FindObjectID( theIO->getEntry() ) ); + _PTR(GenericAttribute) anAttr; + + if ( aSObj && aSObj->FindAttribute( anAttr, "AttributeName") ) + { + _PTR(AttributeName) aNameAttr( anAttr ); + return aNameAttr->Value(); + } + } + } + return ""; +} SMESHGUI_Displayer::SMESHGUI_Displayer( SalomeApp_Application* app ) : LightApp_Displayer(), @@ -57,7 +83,7 @@ SMESHGUI_Displayer::~SMESHGUI_Displayer() SALOME_Prs* SMESHGUI_Displayer::buildPresentation( const QString& entry, SALOME_View* theViewFrame ) { - SALOME_Prs* prs = 0; + SALOME_Prs *prs = nullptr; SALOME_View* aViewFrame = theViewFrame ? theViewFrame : GetActiveView(); @@ -81,6 +107,28 @@ SALOME_Prs* SMESHGUI_Displayer::buildPresentation( const QString& entry, SALOME_ else if( anActor ) SMESH::RemoveActor( vtk_viewer->getViewManager()->getActiveView(), anActor ); } + + SPV3D_ViewModel *pv3d_viewer = dynamic_cast( aViewFrame ); + if(pv3d_viewer) + { + SUIT_ViewWindow* wnd = pv3d_viewer->getViewManager()->getActiveView(); + SMESH_Actor* anActor = SMESH::FindActorByEntry( wnd, entry.toUtf8().data() ); + if( !anActor ) + anActor = SMESH::CreateActor( entry.toUtf8().data(), true ); + if( anActor ) + { + prs = LightApp_Displayer::buildPresentation( entry.toUtf8().data(), aViewFrame ); + if( prs ) + { + SPV3D_Prs *pv3dPrs = dynamic_cast( prs ); + if( pv3dPrs ) + { + pv3dPrs->SetName( getName( entry ) ); + pv3dPrs->FillUsingActor( anActor ); + } + } + } + } } return prs; @@ -94,7 +142,7 @@ SalomeApp_Study* SMESHGUI_Displayer::study() const bool SMESHGUI_Displayer::canBeDisplayed( const QString& entry, const QString& viewer_type ) const { bool res = false; - if(viewer_type != SVTK_Viewer::Type()) + if(viewer_type != SVTK_Viewer::Type() && viewer_type != SPV3D_ViewModel::Type()) return res; _PTR(SObject) obj = SMESH::getStudy()->FindObjectID( (const char*)entry.toUtf8() ); diff --git a/src/SMESHGUI/SMESHGUI_Displayer.h b/src/SMESHGUI/SMESHGUI_Displayer.h index 1bde5b45d..f78acc8dd 100644 --- a/src/SMESHGUI/SMESHGUI_Displayer.h +++ b/src/SMESHGUI/SMESHGUI_Displayer.h @@ -48,6 +48,7 @@ public: protected: SalomeApp_Study* study() const; + std::string getName( const QString& entry ); private: SalomeApp_Application* myApp;