]> Creatis software - cpPlugins.git/blob - appli/PipelineEditor/PipelineEditor.cxx
Windows compilation is broken.
[cpPlugins.git] / appli / PipelineEditor / PipelineEditor.cxx
1 #include "PipelineEditor.h"
2 #include "ui_PipelineEditor.h"
3
4 #include <QMessageBox>
5
6 #include <cpPipelineEditor/Editor.h>
7 #include <cpExtensions/QT/PropertyWidget.h>
8
9 #include <vtkImageData.h>
10 #include <vtkPolyData.h>
11 #include <vtkRenderWindowInteractor.h>
12
13 // -------------------------------------------------------------------------
14 PipelineEditor::
15 PipelineEditor( int argc, char* argv[], QApplication* app, QWidget* parent )
16   : Superclass( argc, argv, app, parent ),
17     m_UI( new Ui::PipelineEditor )
18 {
19   // Basic configuration
20   this->m_UI->setupUi( this );
21   this->_Configure(
22     this->m_UI->LoadedPlugins,
23     this->m_UI->Viewer,
24     this->m_UI->Canvas->editor( )
25     );
26
27   // Connect actions to slots
28   this->connect(
29     this->m_UI->ButtonLoadPluginsFile, SIGNAL( clicked( ) ),
30     this, SLOT( _InteractiveLoadPlugins( ) )
31     );
32   this->connect(
33     this->m_UI->ButtonLoadPluginsPath, SIGNAL( clicked( ) ),
34     this, SLOT( _InteractiveLoadPluginsFromPath( ) )
35     );
36   this->connect(
37     this->m_UI->ActionOpenWorkspace, SIGNAL( triggered( ) ),
38     this, SLOT( _InteractiveLoadWorkspace( ) )
39     );
40   this->connect(
41     this->m_UI->ActionSaveWorkspace, SIGNAL( triggered( ) ),
42     this, SLOT( _InteractiveSaveWorkspace( ) )
43     );
44   this->connect(
45     this->m_UI->Canvas->editor( ),
46     SIGNAL( execFilter( const std::string& ) ),
47     this,
48     SLOT( _ExecFilter( const std::string& ) )
49     );
50   this->connect(
51     this->m_UI->Canvas->editor( ),
52     SIGNAL( showFilterOutput( const std::string&, const std::string& ) ),
53     this,
54     SLOT( _ShowFilterOutput( const std::string&, const std::string& ) )
55     );
56   this->connect(
57     this->m_UI->Canvas->editor( ),
58     SIGNAL( hideFilterOutput( const std::string&, const std::string& ) ),
59     this,
60     SLOT( _HideFilterOutput( const std::string&, const std::string& ) )
61     );
62   this->connect(
63     this->m_UI->Canvas->editor( ),
64     SIGNAL( visualPropertiesFilterOutput( const std::string&, const std::string& ) ),
65     this,
66     SLOT( _PropertiesFilterOutput( const std::string&, const std::string& ) )
67     );
68 }
69
70 // -------------------------------------------------------------------------
71 PipelineEditor::
72 ~PipelineEditor( )
73 {
74   delete this->m_UI;
75 }
76
77 // -------------------------------------------------------------------------
78 void PipelineEditor::
79 _ShowFilterOutput(
80   const std::string& filter_name, const std::string& output_name
81   )
82 {
83   // Update filter, if needed
84   this->_ExecFilter( filter_name );
85
86   // Get output
87   auto filter = this->m_Workspace.GetFilter( filter_name );
88   if( filter != NULL )
89   {
90     auto out = filter->GetOutput( output_name );
91     if( out != NULL )
92     {
93       auto id = out->GetVTK< vtkImageData >( );
94       auto md = out->GetVTK< vtkPolyData >( );
95       if( id != NULL )
96       {
97         this->_Block( );
98         this->m_UI->Viewer->Clear( );
99         this->m_UI->Viewer->SetMainImage( id );
100         auto actors = this->m_UI->Viewer->GetMainImageActors( );
101         out->ClearVTKActors( );
102         for( auto aIt = actors.begin( ); aIt != actors.end( ); ++aIt )
103           out->AddVTKActor( aIt->first, aIt->second );
104         this->_UnBlock( );
105       }
106       else if( md != NULL )
107       {
108         this->_Block( );
109         this->m_UI->Viewer->AddMesh( md );
110         out->AddVTKActor(
111           this->m_UI->Viewer->GetActor( md ),
112           this->m_UI->Viewer->GetRenderer( 3 )
113           );
114         this->_UnBlock( );
115       }
116       else
117         QMessageBox::critical(
118           this,
119           QMessageBox::tr( "Error showing data" ),
120           QMessageBox::tr( "No known VTK conversion!" )
121           );
122     }
123     else
124       QMessageBox::critical(
125         this,
126         QMessageBox::tr( "Error showing data" ),
127         QMessageBox::tr( "Unknown port name." )
128         );
129   }
130   else
131     QMessageBox::critical(
132       this,
133       QMessageBox::tr( "Error showing data" ),
134       QMessageBox::tr( "Unknown filter." )
135       );
136 }
137
138 // -------------------------------------------------------------------------
139 void PipelineEditor::
140 _HideFilterOutput(
141   const std::string& filter_name, const std::string& output_name
142   )
143 {
144   // Get output
145   /* TODO
146      auto filter = this->m_Workspace.GetFilter( filter_name );
147      if( filter != NULL )
148      {
149      auto output = filter->GetOutputData( output_name );
150      if( output != NULL )
151      {
152      std::string data_name = output_name + "@" + filter_name;
153      this->m_UI->Viewer->HideData( data_name );
154
155      } // fi
156
157      } // fi
158   */
159 }
160
161 // -------------------------------------------------------------------------
162 void PipelineEditor::
163 _PropertiesFilterOutput(
164   const std::string& filter_name, const std::string& output_name
165   )
166 {
167   // Get output
168   auto filter = this->m_Workspace.GetFilter( filter_name );
169   if( filter != NULL )
170   {
171     auto output = filter->GetOutputData< vtkPolyData >( output_name );
172     if( output != NULL )
173     {
174       auto actor = this->m_UI->Viewer->GetActor( output );
175       if( actor != NULL )
176       {
177         cpExtensions::QT::PropertyWidget* wdg =
178           new cpExtensions::QT::PropertyWidget( NULL );
179         wdg->SetProp( actor );
180         wdg->SetRenderWindow(
181           this->m_UI->Viewer->GetInteractor( 3 )->GetRenderWindow( )
182           );
183         wdg->show( );
184
185       } // fi
186     }
187     else
188       QMessageBox::critical(
189         this,
190         QMessageBox::tr( "Error showing data" ),
191         QMessageBox::tr( "No known VTK conversion!" )
192         );
193
194   } // fi
195 }
196
197 // eof - $RCSfile$