From b3525a9b9778bc3adbd84298bc17d9b95ed6f459 Mon Sep 17 00:00:00 2001 From: Anthony Geay Date: Fri, 7 Apr 2023 10:17:56 +0200 Subject: [PATCH] First rendering of Mesh into PV3D viewer --- src/SMESHGUI/SMESHGUI_Displayer.cxx | 49 ++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/src/SMESHGUI/SMESHGUI_Displayer.cxx b/src/SMESHGUI/SMESHGUI_Displayer.cxx index ca1161e91..a20af5bee 100644 --- a/src/SMESHGUI/SMESHGUI_Displayer.cxx +++ b/src/SMESHGUI/SMESHGUI_Displayer.cxx @@ -36,7 +36,21 @@ #include #include #include +#include +#include +#include +//For PV3D +#include "SMESH_Actor.h" +#include "vtkDataSet.h" +#include "vtkMapper.h" +#include "pqServer.h" +#include "pqApplicationCore.h" +#include "pqServerManagerModel.h" +#include "pqObjectBuilder.h" +#include "pqPipelineSource.h" +#include "vtkSMSourceProxy.h" +#include "vtkPVTrivialProducer.h" // IDL includes #include @@ -57,7 +71,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 +95,39 @@ 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 ) + { + anActor->GetMapper()->Update(); + vtkDataObject *ds = anActor->GetMapper()->GetInput(); + vtkDataSet *ds2 = vtkDataSet::SafeDownCast(ds); + pqServer *serv(pqApplicationCore::instance()->getServerManagerModel()->findServer(pqServerResource("builtin:"))); + pqObjectBuilder *builder(pqApplicationCore::instance()->getObjectBuilder()); + pqPipelineSource *mySourceProducer(builder->createSource("sources","PVTrivialProducer",serv)); + vtkSMProxy *producerBase = mySourceProducer->getProxy(); + vtkSMSourceProxy *producer(vtkSMSourceProxy::SafeDownCast(producerBase)); + vtkObjectBase *clientSideObject(producer->GetClientSideObject()); + vtkPVTrivialProducer *clientSideObjectCast = vtkPVTrivialProducer::SafeDownCast(clientSideObject); + clientSideObjectCast->SetOutput(ds2); + mySourceProducer->updatePipeline(); + pv3dPrs->SetSourceProducer( mySourceProducer ); + } + } + } + } } return prs; -- 2.39.2