]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/BaseObjects/ProcessObject.hxx
bfe4d4e1cbfbe9cbd94683352f0f033f2a3bd1fc
[cpPlugins.git] / lib / cpPlugins / BaseObjects / ProcessObject.hxx
1 #ifndef __cpPlugins__BaseObjects__ProcessObject__hxx__
2 #define __cpPlugins__BaseObjects__ProcessObject__hxx__
3
4 // -------------------------------------------------------------------------
5 template< class _TType >
6 _TType* cpPlugins::BaseObjects::ProcessObject::
7 GetInput( const std::string& n, unsigned int i )
8 {
9   auto it = this->m_Inputs.find( n );
10   if( it != this->m_Inputs.end( ) )
11     return( dynamic_cast< _TType* >( it->second->Get( i ) ) );
12   else
13     return( NULL );
14 }
15
16 // -------------------------------------------------------------------------
17 template< class _TType >
18 const _TType* cpPlugins::BaseObjects::ProcessObject::
19 GetInput( const std::string& n, unsigned int i ) const
20 {
21   auto it = this->m_Inputs.find( n );
22   if( it != this->m_Inputs.end( ) )
23     return( dynamic_cast< const _TType* >( it->second->Get( i ) ) );
24   else
25     return( NULL );
26 }
27
28 // -------------------------------------------------------------------------
29 template< class _TType >
30 _TType* cpPlugins::BaseObjects::ProcessObject::
31 GetInputData( const std::string& n, unsigned int i )
32 {
33   auto d = this->GetInput( n, i );
34   if( d != NULL )
35   {
36     auto oi = d->m_ITK.GetPointer( );
37     auto ov = d->m_VTK.GetPointer( );
38     if( oi != NULL && ov != NULL )
39     {
40       auto di = dynamic_cast< _TType* >( oi );
41       auto dv = dynamic_cast< _TType* >( ov );
42       if     ( di != NULL ) return( di );
43       else if( dv != NULL ) return( dv );
44       else                  return( NULL );
45     }
46     else if( oi != NULL && ov == NULL )
47     {
48       auto di = dynamic_cast< _TType* >( oi );
49       if( di == NULL )
50         return( d->GetVTK< _TType >( ) );
51       else
52         return( di );
53     }
54     else if( oi == NULL && ov != NULL )
55     {
56       auto dv = dynamic_cast< _TType* >( ov );
57       if( dv == NULL )
58         return( d->GetITK< _TType >( ) );
59       else
60         return( dv );
61     }
62     else
63       return( NULL );
64   }
65   else
66     return( NULL );
67 }
68
69 // -------------------------------------------------------------------------
70 template< class _TType >
71 const _TType* cpPlugins::BaseObjects::ProcessObject::
72 GetInputData( const std::string& n, unsigned int i ) const
73 {
74   auto d = this->GetInput( n, i );
75   if( d != NULL )
76   {
77     auto oi = d->m_ITK.GetPointer( );
78     auto ov = d->m_VTK.GetPointer( );
79     if( oi != NULL && ov != NULL )
80     {
81       auto di = dynamic_cast< const _TType* >( oi );
82       auto dv = dynamic_cast< const _TType* >( ov );
83       if     ( di != NULL ) return( di );
84       else if( dv != NULL ) return( dv );
85       else                  return( NULL );
86     }
87     else if( oi != NULL && ov == NULL )
88     {
89       auto di = dynamic_cast< const _TType* >( oi );
90       if( di == NULL )
91         return( d->GetVTK< _TType >( ) );
92       else
93         return( di );
94     }
95     else if( oi == NULL && ov != NULL )
96     {
97       auto dv = dynamic_cast< const _TType* >( ov );
98       if( dv == NULL )
99         return( d->GetITK< _TType >( ) );
100       else
101         return( dv );
102     }
103     else
104       return( NULL );
105   }
106   else
107     return( NULL );
108 }
109
110 // -------------------------------------------------------------------------
111 template< class _TType >
112 _TType* cpPlugins::BaseObjects::ProcessObject::
113 GetOutput( const std::string& n )
114 {
115   auto it = this->m_Outputs.find( n );
116   if( it != this->m_Outputs.end( ) )
117     return( dynamic_cast< _TType* >( it->second->Get( ) ) );
118   else
119     return( NULL );
120 }
121
122 // -------------------------------------------------------------------------
123 template< class _TType >
124 const _TType* cpPlugins::BaseObjects::ProcessObject::
125 GetOutput( const std::string& n ) const
126 {
127   auto it = this->m_Outputs.find( n );
128   if( it != this->m_Outputs.end( ) )
129     return( dynamic_cast< const _TType* >( it->second->Get( ) ) );
130   else
131     return( NULL );
132 }
133
134 // -------------------------------------------------------------------------
135 template< class _TType >
136 _TType* cpPlugins::BaseObjects::ProcessObject::
137 GetOutputData( const std::string& n )
138 {
139   auto d = this->GetOutput( n );
140   if( d != NULL )
141   {
142     auto oi = d->m_ITK.GetPointer( );
143     auto ov = d->m_VTK.GetPointer( );
144     if( oi != NULL && ov != NULL )
145     {
146       auto di = dynamic_cast< _TType* >( oi );
147       auto dv = dynamic_cast< _TType* >( ov );
148       if     ( di != NULL ) return( di );
149       else if( dv != NULL ) return( dv );
150       else                  return( NULL );
151     }
152     else if( oi != NULL && ov == NULL )
153     {
154       auto di = dynamic_cast< _TType* >( oi );
155       if( di == NULL )
156         return( d->GetVTK< _TType >( ) );
157       else
158         return( di );
159     }
160     else if( oi == NULL && ov != NULL )
161     {
162       auto dv = dynamic_cast< _TType* >( ov );
163       if( dv == NULL )
164         return( d->GetITK< _TType >( ) );
165       else
166         return( dv );
167     }
168     else
169       return( NULL );
170   }
171   else
172     return( NULL );
173 }
174
175 // -------------------------------------------------------------------------
176 template< class _TType >
177 const _TType* cpPlugins::BaseObjects::ProcessObject::
178 GetOutputData( const std::string& n ) const
179 {
180   auto d = this->GetOutput( n );
181   if( d != NULL )
182   {
183     auto oi = d->m_ITK.GetPointer( );
184     auto ov = d->m_VTK.GetPointer( );
185     if( oi != NULL && ov != NULL )
186     {
187       auto di = dynamic_cast< const _TType* >( oi );
188       auto dv = dynamic_cast< const _TType* >( ov );
189       if     ( di != NULL ) return( di );
190       else if( dv != NULL ) return( dv );
191       else                  return( NULL );
192     }
193     else if( oi != NULL && ov == NULL )
194     {
195       auto di = dynamic_cast< const _TType* >( oi );
196       if( di == NULL )
197         return( d->GetVTK< _TType >( ) );
198       else
199         return( di );
200     }
201     else if( oi == NULL && ov != NULL )
202     {
203       auto dv = dynamic_cast< const _TType* >( ov );
204       if( dv == NULL )
205         return( d->GetITK< _TType >( ) );
206       else
207         return( dv );
208     }
209     else
210       return( NULL );
211   }
212   else
213     return( NULL );
214 }
215
216 // -------------------------------------------------------------------------
217 template< class _TType >
218 void cpPlugins::BaseObjects::ProcessObject::
219 _ConfigureInput( const std::string& name, bool required, bool multiple )
220 {
221   auto it = this->m_Inputs.find( name );
222   if( it == this->m_Inputs.end( ) )
223   {
224     Port* port;
225     if( multiple ) port = new MultipleInputsPort( required );
226     else           port = new InputPort( required );
227     port->Configure< _TType >( );
228     this->m_Inputs[ name ] = port;
229     this->Modified( );
230
231   } // fi
232 }
233
234 // -------------------------------------------------------------------------
235 template< class _TType >
236 void cpPlugins::BaseObjects::ProcessObject::
237 _ConfigureOutput( const std::string& name )
238 {
239   auto it = this->m_Outputs.find( name );
240   if( it == this->m_Outputs.end( ) )
241   {
242     Port* port = new OutputPort( true );
243     port->Configure< _TType >( );
244     port->Add( _TType::New( ) );
245     port->Get( )->SetSource( this );
246     this->m_Outputs[ name ] = port;
247     this->Modified( );
248
249   } // fi
250 }
251
252 // -------------------------------------------------------------------------
253 template< class _TFilter >
254 _TFilter* cpPlugins::BaseObjects::ProcessObject::
255 _CreateITK( )
256 {
257   /* TODO
258      _TFilter* filter = this->GetITK< _TFilter >( );
259      why this lead to synch issues???
260   */
261   _TFilter* filter = NULL;
262   if( filter == NULL )
263   {
264     typename _TFilter::Pointer filter_ptr = _TFilter::New( );
265     this->m_ITK = filter_ptr;
266     this->m_VTK = NULL;
267     filter = filter_ptr.GetPointer( );
268     this->Modified( );
269
270   } // fi
271   return( filter );
272 }
273
274 // -------------------------------------------------------------------------
275 template< class _TFilter >
276 _TFilter* cpPlugins::BaseObjects::ProcessObject::
277 _CreateVTK( )
278 {
279   /* TODO
280      _TFilter* filter = this->GetVTK< _TFilter >( );
281      why this lead to synch issues???
282   */
283   _TFilter* filter = NULL;
284   if( filter == NULL )
285   {
286     vtkSmartPointer< _TFilter > filter_ptr =
287       vtkSmartPointer< _TFilter >::New( );
288     this->m_ITK = NULL;
289     this->m_VTK = filter_ptr;
290     filter = filter_ptr.GetPointer( );
291     this->Modified( );
292
293   } // fi
294   return( filter );
295 }
296
297 #endif // __cpPlugins__BaseObjects__ProcessObject__hxx__
298
299 // eof - $RCSfile$