13 #ifndef MITK_NON_BLOCKING_ALGORITHM_H_INCLUDED_DFARdfWN1tr 14 #define MITK_NON_BLOCKING_ALGORITHM_H_INCLUDED_DFARdfWN1tr 17 #include <itkFastMutexLock.h> 20 #include <itkMultiThreader.h> 21 #include <itkObjectFactory.h> 39 #define mitkAlgorithmNewMacro(classname) \ 44 classname *rawPtr = new classname(); \ 45 Pointer smartPtr = rawPtr; \ 46 rawPtr->UnRegister(); \ 47 rawPtr->Initialize(); \ 52 virtual::itk::LightObject::Pointer \ 53 CreateAnother(void) const override \ 56 Pointer smartPtr = classname::New(); \ 57 ::itk::LightObject::Pointer lightPtr = smartPtr.GetPointer(); \ 58 smartPtr->Initialize(this); \ 107 template <
typename T>
112 m_ParameterListMutex->Lock();
114 m_ParameterListMutex->Unlock();
122 void SetPointerParameter(
const char *parameter,
BaseData *value);
125 template <
typename TPixel,
unsigned int VImageDimension>
133 SetPointerParameter(parameter, mitkImage);
137 template <
typename TPixel,
unsigned int VImageDimension>
146 SetPointerParameter(parameter, mitkImage);
151 template <
typename T>
166 std::string error(
"There is no parameter \"");
169 throw std::invalid_argument(error);
172 template <
typename T>
192 std::string error(
"There is no parameter \"");
195 throw std::invalid_argument(error);
200 virtual void Reset();
202 void StartAlgorithm();
204 void StartBlockingAlgorithm();
205 void StopAlgorithm();
207 void TriggerParameterModified(
const itk::EventObject &);
209 void ThreadedUpdateSuccessful(
const itk::EventObject &);
210 void ThreadedUpdateFailed(
const itk::EventObject &);
216 void DefineTriggerParameter(
const char *);
217 void UnDefineTriggerParameter(
const char *);
220 virtual bool ReadyToRun();
222 virtual bool ThreadedUpdateFunction();
223 virtual void ThreadedUpdateSuccessful();
224 virtual void ThreadedUpdateFailed();
231 static ITK_THREAD_RETURN_TYPE StaticNonBlockingAlgorithmThread(
void *param);
233 typedef std::map<std::string, unsigned long> MapTypeStringUInt;
235 MapTypeStringUInt m_TriggerPropertyConnections;
237 itk::FastMutexLock::Pointer m_ParameterListMutex;
240 int m_UpdateRequests;
242 itk::MultiThreader::Pointer m_MultiThreader;
void SetItkImageAsMITKImagePointerParameter(const char *parameter, const itk::SmartPointer< itk::Image< TPixel, VImageDimension >> &itkImage)
For any kind of ITK images (smartpointers)
itk::SmartPointer< NonBlockingAlgorithm > m_Algorithm
Data management class that handles 'was created by' relations.
Base of all data objects.
void SetItkImageAsMITKImagePointerParameter(const char *parameter, itk::Image< TPixel, VImageDimension > *itkImage)
For any kind of ITK images (C pointers)
DataCollection - Class to facilitate loading/accessing structured data.
void SetParameter(const char *parameter, const T &value)
For any kind of normal types.
itk::Object::Pointer GetSmartPointer() const
WeakPointer< DataStorage > m_DataStorage
Property containing a smart-pointer.
Image::Pointer ImportItkImage(const itk::SmartPointer< ItkOutputImageType > &itkimage, const BaseGeometry *geometry=nullptr, bool update=true)
Imports an itk::Image (with a specific type) as an mitk::Image.Instantiates instance of ITKImageImpor...
#define MITKALGORITHMSEXT_EXPORT
void GetParameter(const char *parameter, T &value) const
virtual T GetValue() const
Abstract base class for properties.
#define mitkClassMacroItkParent(className, SuperClassName)
PropertyList::Pointer m_Parameters
void GetPointerParameter(const char *parameter, itk::SmartPointer< T > &value) const
void SetPointerParameter(const char *parameter, const itk::SmartPointer< T > &value)
For any kind of smart pointers.