]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/BaseObjects/ProcessObject.hxx
c128c5e64751c617fa6284bb289261cd0d8cb399
[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 di = d->GetITK< _TType >( );
37     auto dv = d->GetVTK< _TType >( );
38     if     ( di != NULL ) return( di );
39     else if( dv != NULL ) return( dv );
40     else                  return( NULL );
41   }
42   else
43     return( NULL );
44 }
45
46 // -------------------------------------------------------------------------
47 template< class _TType >
48 const _TType* cpPlugins::BaseObjects::ProcessObject::
49 GetInputData( const std::string& n, unsigned int i ) const
50 {
51   auto d = this->GetInput( n, i );
52   if( d != NULL )
53   {
54     auto di = d->GetITK< _TType >( );
55     auto dv = d->GetVTK< _TType >( );
56     if     ( di != NULL ) return( di );
57     else if( dv != NULL ) return( dv );
58     else                  return( NULL );
59   }
60   else
61     return( NULL );
62 }
63
64 // -------------------------------------------------------------------------
65 template< class _TType >
66 _TType* cpPlugins::BaseObjects::ProcessObject::
67 GetOutput( const std::string& n )
68 {
69   auto it = this->m_Outputs.find( n );
70   if( it != this->m_Outputs.end( ) )
71     return( dynamic_cast< _TType* >( it->second->Get( ) ) );
72   else
73     return( NULL );
74 }
75
76 // -------------------------------------------------------------------------
77 template< class _TType >
78 const _TType* cpPlugins::BaseObjects::ProcessObject::
79 GetOutput( const std::string& n ) const
80 {
81   auto it = this->m_Outputs.find( n );
82   if( it != this->m_Outputs.end( ) )
83     return( dynamic_cast< const _TType* >( it->second->Get( ) ) );
84   else
85     return( NULL );
86 }
87
88 // -------------------------------------------------------------------------
89 template< class _TType >
90 _TType* cpPlugins::BaseObjects::ProcessObject::
91 GetOutputData( const std::string& n )
92 {
93   auto d = this->GetOutput( n );
94   if( d != NULL )
95   {
96     auto di = d->GetITK< _TType >( );
97     auto dv = d->GetVTK< _TType >( );
98     if     ( di != NULL ) return( di );
99     else if( dv != NULL ) return( dv );
100     else                  return( NULL );
101   }
102   else
103     return( NULL );
104 }
105
106 // -------------------------------------------------------------------------
107 template< class _TType >
108 const _TType* cpPlugins::BaseObjects::ProcessObject::
109 GetOutputData( const std::string& n ) const
110 {
111   auto d = this->GetOutput( n );
112   if( d != NULL )
113   {
114     auto di = d->GetITK< _TType >( );
115     auto dv = d->GetVTK< _TType >( );
116     if     ( di != NULL ) return( di );
117     else if( dv != NULL ) return( dv );
118     else                  return( NULL );
119   }
120   else
121     return( NULL );
122 }
123
124 // -------------------------------------------------------------------------
125 template< class _TType >
126 void cpPlugins::BaseObjects::ProcessObject::
127 _ConfigureInput( const std::string& name, bool required, bool multiple )
128 {
129   auto it = this->m_Inputs.find( name );
130   if( it == this->m_Inputs.end( ) )
131   {
132     Port* port;
133     if( multiple ) port = new MultipleInputsPort( required );
134     else           port = new InputPort( required );
135     port->Configure< _TType >( );
136     this->m_Inputs[ name ] = port;
137
138   } // fi
139 }
140
141 // -------------------------------------------------------------------------
142 template< class _TType >
143 void cpPlugins::BaseObjects::ProcessObject::
144 _ConfigureOutput( const std::string& name )
145 {
146   auto it = this->m_Outputs.find( name );
147   if( it == this->m_Outputs.end( ) )
148   {
149     Port* port = new OutputPort( true );
150     port->Configure< _TType >( );
151     port->Add( _TType::New( ) );
152     port->Get( )->SetSource( this );
153     this->m_Outputs[ name ] = port;
154
155   } // fi
156 }
157
158 // -------------------------------------------------------------------------
159 template< class _TFilter >
160 _TFilter* cpPlugins::BaseObjects::ProcessObject::
161 _CreateITK( )
162 {
163   _TFilter* filter = this->GetITK< _TFilter >( );
164   if( filter == NULL )
165   {
166     typename _TFilter::Pointer filter_ptr = _TFilter::New( );
167     this->m_ITK = filter_ptr;
168     this->m_VTK = NULL;
169     filter = filter_ptr.GetPointer( );
170     this->Modified( );
171
172   } // fi
173   return( filter );
174 }
175
176 // -------------------------------------------------------------------------
177 template< class _TFilter >
178 _TFilter* cpPlugins::BaseObjects::ProcessObject::
179 _CreateVTK( )
180 {
181   _TFilter* filter = this->GetVTK< _TFilter >( );
182   if( filter == NULL )
183   {
184     vtkSmartPointer< _TFilter > filter_ptr =
185       vtkSmartPointer< _TFilter >::New( );
186     this->m_ITK = NULL;
187     this->m_VTK = filter_ptr;
188     filter = filter_ptr.GetPointer( );
189     this->Modified( );
190
191   } // fi
192   return( filter );
193 }
194
195 #endif // __cpPlugins__BaseObjects__ProcessObject__hxx__
196
197 // eof - $RCSfile$