medAbstractJob::medJobExitStatus medItkErodeImageProcess::_run() { typedef itk::Image<inputType, 3> ImageType; typename ImageType::Pointer in = dynamic_cast<ImageType *>((itk::Object*)(this->input()->data())); if(in.IsNotNull()) { typedef itk::BinaryBallStructuringElement<inputType, 3> KernelType; typedef itk::GrayscaleErodeImageFilter<ImageType, ImageType, KernelType> FilterType; typename FilterType::Pointer filter = FilterType::New(); m_filter = filter; KernelType kernel; kernel.SetRadius(this->kernelRadius()->value()); kernel.CreateStructuringElement(); filter->SetKernel(kernel); filter->SetInput(in); itk::CStyleCommand::Pointer callback = itk::CStyleCommand::New(); callback->SetClientData((void*)this); callback->SetCallback(medItkErodeImageProcess::eventCallback); filter->AddObserver(itk::ProgressEvent(), callback); try { filter->Update(); } catch(itk::ProcessAborted &e) { return medAbstractJob::MED_JOB_EXIT_CANCELLED; } medAbstractImageData *out= dynamic_cast<medAbstractImageData *>(medAbstractDataFactory::instance()->create(this->input()->identifier())); out->setData(filter->GetOutput()); this->setOutput(out); return medAbstractJob::MED_JOB_EXIT_SUCCESS; } return medAbstractJob::MED_JOB_EXIT_FAILURE; }