]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
WIP
authorAnthony Geay <anthony.geay@edf.fr>
Wed, 5 Apr 2023 15:46:53 +0000 (17:46 +0200)
committerAnthony Geay <anthony.geay@edf.fr>
Wed, 5 Apr 2023 15:46:53 +0000 (17:46 +0200)
src/SPV3D/SPV3D_Prs.cxx
src/SPV3D/SPV3D_Prs.h
src/SPV3D/SPV3D_ViewModel.cxx
src/SPV3D/SPV3D_ViewModel.h
src/SPV3D/SPV3D_ViewWindow.cxx
src/SPV3D/SPV3D_ViewWindow.h

index 8c03e33cc3779d5afe558947df53d63dcaec79ed..cc520896c9e9d9216a63e50cc6aa38f6fe559ad2 100644 (file)
@@ -27,6 +27,8 @@
 
 #include <vtkActorCollection.h>
 
+#include <pqDataRepresentation.h>
+
 //---------------------------------------------------------
 #define USE_DEBUG
 #define MBCLASSNAME "SPV3D_Prs"
 /*!
   Default constructor
 */
-SPV3D_Prs::SPV3D_Prs( const char* entry ) : SALOME_PV3DPrs(entry), myObjects( 0 )
+SPV3D_Prs::SPV3D_Prs( const char* entry ) : SALOME_PV3DPrs(entry)
 {
   DBG_FUN();
   ARG(entry);
 }
-/*!
-  Standard constructor
-*/
-SPV3D_Prs::SPV3D_Prs( const char* entry, const vtkActor* obj ) : SALOME_PV3DPrs(entry)
-{ 
-  DBG_FUN();
-  ARG(entry);
-  AddObject( obj ); 
-}
 
 /*!
   Destructor
@@ -58,7 +50,6 @@ SPV3D_Prs::SPV3D_Prs( const char* entry, const vtkActor* obj ) : SALOME_PV3DPrs(
 SPV3D_Prs:: ~SPV3D_Prs() 
 { 
   DBG_FUN();
-  if ( myObjects ) myObjects->Delete(); 
 }
 
 void SPV3D_Prs::DisplayIn( SALOME_View* v ) const
@@ -66,29 +57,20 @@ void SPV3D_Prs::DisplayIn( SALOME_View* v ) const
   SALOME_PV3DPrs::DisplayIn(v);
 }
 
-/*!
-  \return actors list
-*/
-vtkActorCollection* SPV3D_Prs::GetObjects() const 
-{ 
-  return myObjects; 
+bool SPV3D_Prs::IsNull() const
+{
+  return !_sourceProducer && !_repr;
 }
 
-/*!
-  Add actor
-*/
-void SPV3D_Prs::AddObject( const vtkActor* obj ) 
-{ 
-  DBG_FUN();
-  if ( !myObjects) 
-    myObjects = vtkActorCollection::New(); 
-  myObjects->AddItem( (vtkActor*)obj ); 
+bool SPV3D_Prs::isVisible() const
+{
+  if( IsNull() )
+    return false;
+  return _repr->isVisible();
 }
-  
-/*!
-  \return 0 if list of the actors is empty [ Reimplemented from SALOME_Prs ]
-*/
-bool SPV3D_Prs::IsNull() const 
-{ 
-  return !myObjects || myObjects->GetNumberOfItems() <= 0; 
+
+void SPV3D_Prs::hide() const
+{
+  if( _repr )
+    _repr->setVisible(0);
 }
index 4aefaec32da77f535522278b12253c39cea61366..36318017e5a48a1fb30ca17f8e2eaf1c50262271 100644 (file)
@@ -1,7 +1,4 @@
-// Copyright (C) 2007-2022  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+// Copyright (C) 2023  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SALOME PV3DViewer : build PV3D viewer into Salome desktop
-//  File   : SPV3D_Prs.h
-
-#ifndef SPV3D_Prs_H
-#define SPV3D_Prs_H
+#pragma once
 
 #include "SPV3D.h"
 #include "SALOME_Prs.h"
@@ -38,7 +31,6 @@ class SPV3D_EXPORT SPV3D_Prs : public SALOME_PV3DPrs
 {
 public:
   explicit SPV3D_Prs( const char* entry );
-  SPV3D_Prs( const char* entry, const vtkActor* obj );
   ~SPV3D_Prs();
   
   void DisplayIn( SALOME_View* v ) const override;
@@ -47,19 +39,15 @@ public:
   pqPipelineSource *GetSourceProducer() const { return _sourceProducer; }
   
   void SetRepresentation(pqDataRepresentation *repr) const { _repr = repr; }
+  pqDataRepresentation *GetRepresentation() const { return _repr; }
 
-  vtkActorCollection* GetObjects() const;
-  // Get actors list
-  void AddObject( const vtkActor* obj );
-  // Add actor
-  
-  bool IsNull() const;
-  // Reimplemented from SALOME_Prs
+  bool IsNull() const override;
+
+public:
+  void hide() const;
+  bool isVisible() const;
 
 private:
-  vtkActorCollection* myObjects;    // list of actors
   pqPipelineSource *_sourceProducer = nullptr;
   mutable pqDataRepresentation *_repr = nullptr;
 };
-
-#endif
index ccd03eadd6f56185007c396fc7d168e0d18af47e..952f5a6206d08d69d60804f5b5f3b965a2e2b7f2 100644 (file)
@@ -95,6 +95,11 @@ void SPV3D_ViewModel::initialize()
   DBG_FUN();
 }
 
+void SPV3D_ViewModel::render() const
+{
+  if( _view )
+    _view->render();
+}
 
 /*!Create new instance of view window on desktop \a theDesktop.
  *\retval SUIT_ViewWindow* - created view window pointer.
@@ -215,7 +220,6 @@ void SPV3D_ViewModel::enableSelection(bool isEnabled)
 pqView *SPV3D_ViewModel::getView() const
 {
   return _view;
-  //return pqActiveObjects::instance().activeView();
 }
 
 /*!
@@ -225,29 +229,26 @@ pqView *SPV3D_ViewModel::getView() const
 void SPV3D_ViewModel::Display( const SALOME_PV3DPrs* prs )
 {
   DBG_FUN();
-  // try do downcast object
-  if(const SPV3D_Prs* aPrs = dynamic_cast<const SPV3D_Prs*>( prs )){
-  pqObjectBuilder *builder(pqApplicationCore::instance()->getObjectBuilder());
-  pqActiveObjects::instance().setActiveView(getView());
-  pqPipelineSource *mySourceProducer = aPrs->GetSourceProducer();
-  pqDataRepresentation* myRepr(builder->createDataRepresentation(mySourceProducer->getOutputPort(0),getView(),"GeometryRepresentation"));
-  vtkSMViewProxy::RepresentationVisibilityChanged(myRepr->getViewProxy(), myRepr->getProxy(), true);
-  myRepr->setVisible(1);
-  aPrs->SetRepresentation(myRepr);
-  vtkSMPVRepresentationProxy* proxy(dynamic_cast<vtkSMPVRepresentationProxy*>(myRepr->getProxy()));
-  vtkSMPropertyHelper inputHelper(proxy, "Input");
-  vtkSMSourceProxy* input = vtkSMSourceProxy::SafeDownCast(inputHelper.GetAsProxy());
-  input->UpdatePipeline();
-  getView()->resetDisplay();
-  getView()->render();
-#if 0
-    if(vtkActorCollection* anActorCollection = aPrs->GetObjects()){
-      anActorCollection->InitTraversal();
-      while(vtkActor* anActor = anActorCollection->GetNextActor()){
-        // NYI
-      }
+
+  if(const SPV3D_Prs* aPrs = dynamic_cast<const SPV3D_Prs*>( prs ))
+  {
+    if( !aPrs->GetRepresentation() )
+    {
+      pqObjectBuilder *builder(pqApplicationCore::instance()->getObjectBuilder());
+      pqActiveObjects::instance().setActiveView(getView());
+      pqPipelineSource *mySourceProducer = aPrs->GetSourceProducer();
+      pqDataRepresentation* myRepr(builder->createDataRepresentation(mySourceProducer->getOutputPort(0),getView(),"GeometryRepresentation"));
+      vtkSMViewProxy::RepresentationVisibilityChanged(myRepr->getViewProxy(), myRepr->getProxy(), true);
+      aPrs->SetRepresentation(myRepr);
     }
-#endif
+    pqDataRepresentation* myRepr = aPrs->GetRepresentation();
+    myRepr->setVisible(1);
+    vtkSMPVRepresentationProxy* proxy(dynamic_cast<vtkSMPVRepresentationProxy*>(myRepr->getProxy()));
+    vtkSMPropertyHelper inputHelper(proxy, "Input");
+    vtkSMSourceProxy* input = vtkSMSourceProxy::SafeDownCast(inputHelper.GetAsProxy());
+    input->UpdatePipeline();
+    getView()->resetDisplay();
+    getView()->render();
   }
 }
 
@@ -264,11 +265,11 @@ void SPV3D_ViewModel::Erase( const SALOME_PV3DPrs* prs, const bool forced )
   if(const SPV3D_Prs* aPrs = dynamic_cast<const SPV3D_Prs*>( prs )){
     if(aPrs->IsNull())
       return;
-    
-    pqObjectBuilder* builder = pqApplicationCore::instance()->getObjectBuilder();
-    pqServer* activeServer = pqActiveObjects::instance().activeServer();
-
-    builder->destroySources(activeServer);
+    aPrs->GetRepresentation()->setVisible(0);
+    getView()->render();
+    //pqObjectBuilder* builder = pqApplicationCore::instance()->getObjectBuilder();
+    //pqServer* activeServer = pqActiveObjects::instance().activeServer();
+    //builder->destroySources(activeServer);
   }
 }
 
@@ -281,7 +282,8 @@ void SPV3D_ViewModel::EraseAll( SALOME_Displayer* d, const bool forced )
   DBG_FUN();
 
   SALOME_View::EraseAll( d, forced );
-
+  if(SPV3D_ViewWindow* aViewWindow = dynamic_cast<SPV3D_ViewWindow*>(getViewManager()->getActiveView()))
+    aViewWindow->EraseAll();
   Repaint();
 }
 
@@ -295,10 +297,9 @@ SALOME_Prs* SPV3D_ViewModel::CreatePrs( const char* entry )
   ARG(entry);
   SPV3D_Prs* prs = new SPV3D_Prs( entry );
   if ( entry ) {
-    if(SPV3D_ViewWindow* aViewWindow = dynamic_cast<SPV3D_ViewWindow*>(getViewManager()->getActiveView())) {
-      // if(SPV3D_View* aView = aViewWindow->getView()){
-      //   // NYI
-      // }
+    if(SPV3D_ViewWindow* aViewWindow = dynamic_cast<SPV3D_ViewWindow*>(getViewManager()->getActiveView()))
+    {
+      aViewWindow->appendPrs( prs );
     }
   }
   return prs;
@@ -310,7 +311,8 @@ SALOME_Prs* SPV3D_ViewModel::CreatePrs( const char* entry )
 */
 bool SPV3D_ViewModel::isVisible( const Handle(SALOME_InteractiveObject)& io )
 {
-  // NYI
+  if(SPV3D_ViewWindow* aViewWindow = dynamic_cast<SPV3D_ViewWindow*>(getViewManager()->getActiveView()))
+    return aViewWindow->isVisible( io );
   return false;
 }
 
index 21da9fe7ae0b3ab359a032ad7d8d0227d7b14bf9..1c9c9469bc598aa437fa30365ffa75c4fb649a69 100644 (file)
@@ -53,7 +53,7 @@ class SPV3D_EXPORT SPV3D_ViewModel : public PV3DViewer_ViewModel, public SALOME_
 public:
   void setView(pqView *view) { _view = view; }
   pqView *getView() const;
-
+  void render() const;
 public:
   //! Define string representation of the viewer type
   static QString           Type() { return "ParaView3D"; }
index bb97d3da757286b161d95fb5e10992c7918dd17d..d8daba0e3d52f5c199d4dadea77b0fcbb26d7465 100644 (file)
@@ -51,6 +51,7 @@
 #include "QtxActionGroup.h"
 
 #include "SALOME_ListIO.hxx"
+#include "SPV3D_Prs.h"
 
 //---------------------------------------------------------
 #define USE_DEBUG
@@ -79,6 +80,11 @@ void SPV3D_ViewWindow::init()
   setCentralWidget( myModel->getView()->widget() );
 }
 
+void SPV3D_ViewWindow::appendPrs( SPV3D_Prs* prs )
+{
+  myPrs.push_back(prs);
+}
+
 /*!
   Destructor
 */
@@ -87,6 +93,17 @@ SPV3D_ViewWindow::~SPV3D_ViewWindow()
   DBG_FUN();
 }
 
+bool SPV3D_ViewWindow::isVisible(const Handle(SALOME_InteractiveObject)& theIObject)
+{
+  std::string ior( theIObject->getEntry() );
+  for(auto prs : myPrs)
+  {
+    if(ior == prs->GetEntry() )
+      return prs->isVisible();
+  }
+  return false;
+}
+
 /*!
   Display object
   \param theIO - object
@@ -109,8 +126,6 @@ void SPV3D_ViewWindow::Erase(const Handle(SALOME_InteractiveObject)& theIO,
                             bool theImmediatly) 
 {
   DBG_FUN();
-
-  // NYI
 }
 
 /*!
@@ -139,7 +154,12 @@ void SPV3D_ViewWindow::DisplayAll()
 void SPV3D_ViewWindow::EraseAll() 
 {
   DBG_FUN();
-  // NYI
+  for(auto prs : myPrs)
+  {
+    prs->hide();
+  }
+  if(myModel)
+    myModel->render();
 }
 
 /*!
@@ -148,6 +168,8 @@ void SPV3D_ViewWindow::EraseAll()
 void SPV3D_ViewWindow::Repaint(bool )//(bool theUpdateTrihedron)
 {
   // NYI
+  if(myModel)
+    myModel->render();
 }
 
 /*!
index eeada3ec31a7c5b31dd51c31b677784e6afde7e6..d68b4a9297ea5cd548f74434c2a07f751444b95a 100644 (file)
@@ -37,6 +37,8 @@
 #include <QImage>
 #include <vtkSmartPointer.h>
 
+#include <list>
+
 class SUIT_Desktop;
 class SUIT_ResourceMgr;
 
@@ -65,6 +67,7 @@ class SPV3D_InteractorStyle;
 class SPV3D_KeyFreeInteractorStyle;
 class SPV3D_ViewParameterDlg;
 class SPV3D_Recorder;
+class SPV3D_Prs;
 
 namespace salomevtk
 {
@@ -84,9 +87,13 @@ class SPV3D_EXPORT SPV3D_ViewWindow : public PV3DViewer_ViewWindow //SUIT_ViewWi
   //! To construct #SPV3D_ViewWindow instance
   SPV3D_ViewWindow(SUIT_Desktop* theDesktop, SPV3D_ViewModel* theModel);
 
+  void appendPrs( SPV3D_Prs* prs );
+
   void init();
 
   virtual ~SPV3D_ViewWindow();
+  
+  bool isVisible(const Handle(SALOME_InteractiveObject)& theIObject);
 
   /* display */         
   //----------------------------------------------------------------------------
@@ -131,6 +138,7 @@ protected slots:
 
 protected:
   SPV3D_ViewModel* myModel;
+  std::list< SPV3D_Prs* > myPrs;
 };
 
 #ifdef WIN32