00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
#ifndef _itkProgressReporter_h
00018
#define _itkProgressReporter_h
00019
00020
#include "itkProcessObject.h"
00021
00022
namespace itk
00023 {
00024
00058 class ITKCommon_EXPORT ProgressReporter
00059 {
00060
public:
00062 ProgressReporter(
ProcessObject* filter,
int threadId,
00063
unsigned long numberOfPixels,
00064
unsigned long numberOfUpdates = 100,
00065
float initialProgress = 0.0f,
00066
float progressWeight = 1.0f );
00067
00069 ~ProgressReporter();
00070
00072 void CompletedPixel()
00073 {
00074
00075
00076
00077
00078
if(--m_PixelsBeforeUpdate == 0)
00079 {
00080 m_PixelsBeforeUpdate = m_PixelsPerUpdate;
00081 m_CurrentPixel += m_PixelsPerUpdate;
00082 m_Filter->UpdateProgress(
00083 m_CurrentPixel * m_InverseNumberOfPixels * m_ProgressWeight + m_InitialProgress);
00084
if( m_Filter->GetAbortGenerateData() )
00085 {
00086
throw ProcessAborted();
00087 }
00088 }
00089 }
00090
00091
protected:
00092
ProcessObject* m_Filter;
00093 int m_ThreadId;
00094 float m_InverseNumberOfPixels;
00095 unsigned long m_CurrentPixel;
00096 unsigned long m_PixelsPerUpdate;
00097 unsigned long m_PixelsBeforeUpdate;
00098 float m_InitialProgress;
00099 float m_ProgressWeight;
00100
00101
private:
00102 ProgressReporter();
00103
00104 };
00105
00106 }
00107
00108
#endif