void SoItkSimpleFuzzyConnectednessScalarImageFilter::evaluate() { if( mFuzzyScene ) { mFuzzyScene->unref(); mFuzzyScene = 0; SO_ENGINE_OUTPUT( FuzzyScene, SoItkSFDataImage, setValue( 0 ) ); } if( mOutput ) { mOutput->unref(); mOutput = 0; SO_ENGINE_OUTPUT( Output, SoItkSFDataImage, setValue( 0 ) ); } if( !Input0.getValue() ) return ; if( !checkInput() ) { SoDebugError::post( __FILE__, "Invalid Input Types" ); return ; } try { switch( Input0.getValue()->getType() ) { case SoItkDataImage::FLOAT: { switch( Input0.getValue()->getNumDimension() ) { case 2: { typedef itk::Image< float, 2 > InputImageType; typedef itk::Image< float, 2 > OutputImageType; typedef itk::SimpleFuzzyConnectednessScalarImageFilter< InputImageType, OutputImageType > FilterType; FilterType::Pointer filter = FilterType::New(); // Set the filter's inputs SO_ITK_SET_FIELD_VALUE( filter, Mean ); SO_ITK_SET_FIELD_VALUE( filter, Diff_Variance ); SO_ITK_SET_FIELD_VALUE( filter, Diff_Mean ); SO_ITK_SET_FIELD_VALUE( filter, Variance ); // Inherited from SoItkSimpleFuzzyConnectednessImageFilterBase SO_ITK_SET_FIELD_VALUE( filter, InsideValue ); SO_ITK_SET_FIELD_VALUE( filter, Threshold ); SO_ITK_SET_FIELD_VALUE( filter, OutsideValue ); SO_ITK_SET_FIELD_SEED( filter, ObjectSeed, 2 ); SO_ITK_SET_FIELD_VALUE( filter, Weight ); // Inherited from SoItkImageToImageFilter typedef itk::Image< float, 2 > InputImageType; SO_ITK_SET_FIELD_MDATA( filter, Input, 0, InputImageType ); // Start processing the ouputs filter->Update(); // Retrieve the filter's outputs filter->GetFuzzyScene()->Register(); mFuzzyScene = new SoItkDataImage( SoItkDataImage::FLOAT, 2, Input0.getValue()->getModelMatrix() ); mFuzzyScene->ref(); mFuzzyScene->setPointer( filter->GetFuzzyScene() ); filter->GetOutput()->Register(); mOutput = new SoItkDataImage( SoItkDataImage::FLOAT, 2, Input0.getValue()->getModelMatrix() ); mOutput->ref(); mOutput->setPointer( filter->GetOutput() ); } break ; case 3: { typedef itk::Image< float, 3 > InputImageType; typedef itk::Image< float, 3 > OutputImageType; typedef itk::SimpleFuzzyConnectednessScalarImageFilter< InputImageType, OutputImageType > FilterType; FilterType::Pointer filter = FilterType::New(); // Set the filter's inputs SO_ITK_SET_FIELD_VALUE( filter, Mean ); SO_ITK_SET_FIELD_VALUE( filter, Diff_Variance ); SO_ITK_SET_FIELD_VALUE( filter, Diff_Mean ); SO_ITK_SET_FIELD_VALUE( filter, Variance ); // Inherited from SoItkSimpleFuzzyConnectednessImageFilterBase SO_ITK_SET_FIELD_VALUE( filter, InsideValue ); SO_ITK_SET_FIELD_VALUE( filter, Threshold ); SO_ITK_SET_FIELD_VALUE( filter, OutsideValue ); SO_ITK_SET_FIELD_SEED( filter, ObjectSeed, 3 ); SO_ITK_SET_FIELD_VALUE( filter, Weight ); // Inherited from SoItkImageToImageFilter typedef itk::Image< float, 3 > InputImageType; SO_ITK_SET_FIELD_MDATA( filter, Input, 0, InputImageType ); // Start processing the ouputs filter->Update(); // Retrieve the filter's outputs filter->GetFuzzyScene()->Register(); mFuzzyScene = new SoItkDataImage( SoItkDataImage::FLOAT, 3, Input0.getValue()->getModelMatrix() ); mFuzzyScene->ref(); mFuzzyScene->setPointer( filter->GetFuzzyScene() ); filter->GetOutput()->Register(); mOutput = new SoItkDataImage( SoItkDataImage::FLOAT, 3, Input0.getValue()->getModelMatrix() ); mOutput->ref(); mOutput->setPointer( filter->GetOutput() ); } break ; } } break ; case SoItkDataImage::UNSIGNED_SHORT: { switch( Input0.getValue()->getNumDimension() ) { case 2: { typedef itk::Image< unsigned short, 2 > InputImageType; typedef itk::Image< unsigned short, 2 > OutputImageType; typedef itk::SimpleFuzzyConnectednessScalarImageFilter< InputImageType, OutputImageType > FilterType; FilterType::Pointer filter = FilterType::New(); // Set the filter's inputs SO_ITK_SET_FIELD_VALUE( filter, Mean ); SO_ITK_SET_FIELD_VALUE( filter, Diff_Variance ); SO_ITK_SET_FIELD_VALUE( filter, Diff_Mean ); SO_ITK_SET_FIELD_VALUE( filter, Variance ); // Inherited from SoItkSimpleFuzzyConnectednessImageFilterBase SO_ITK_SET_FIELD_VALUE( filter, InsideValue ); SO_ITK_SET_FIELD_VALUE( filter, Threshold ); SO_ITK_SET_FIELD_VALUE( filter, OutsideValue ); SO_ITK_SET_FIELD_SEED( filter, ObjectSeed, 2 ); SO_ITK_SET_FIELD_VALUE( filter, Weight ); // Inherited from SoItkImageToImageFilter typedef itk::Image< unsigned short, 2 > InputImageType; SO_ITK_SET_FIELD_MDATA( filter, Input, 0, InputImageType ); // Start processing the ouputs filter->Update(); // Retrieve the filter's outputs filter->GetFuzzyScene()->Register(); mFuzzyScene = new SoItkDataImage( SoItkDataImage::UNSIGNED_SHORT, 2, Input0.getValue()->getModelMatrix() ); mFuzzyScene->ref(); mFuzzyScene->setPointer( filter->GetFuzzyScene() ); filter->GetOutput()->Register(); mOutput = new SoItkDataImage( SoItkDataImage::UNSIGNED_SHORT, 2, Input0.getValue()->getModelMatrix() ); mOutput->ref(); mOutput->setPointer( filter->GetOutput() ); } break ; case 3: { typedef itk::Image< unsigned short, 3 > InputImageType; typedef itk::Image< unsigned short, 3 > OutputImageType; typedef itk::SimpleFuzzyConnectednessScalarImageFilter< InputImageType, OutputImageType > FilterType; FilterType::Pointer filter = FilterType::New(); // Set the filter's inputs SO_ITK_SET_FIELD_VALUE( filter, Mean ); SO_ITK_SET_FIELD_VALUE( filter, Diff_Variance ); SO_ITK_SET_FIELD_VALUE( filter, Diff_Mean ); SO_ITK_SET_FIELD_VALUE( filter, Variance ); // Inherited from SoItkSimpleFuzzyConnectednessImageFilterBase SO_ITK_SET_FIELD_VALUE( filter, InsideValue ); SO_ITK_SET_FIELD_VALUE( filter, Threshold ); SO_ITK_SET_FIELD_VALUE( filter, OutsideValue ); SO_ITK_SET_FIELD_SEED( filter, ObjectSeed, 3 ); SO_ITK_SET_FIELD_VALUE( filter, Weight ); // Inherited from SoItkImageToImageFilter typedef itk::Image< unsigned short, 3 > InputImageType; SO_ITK_SET_FIELD_MDATA( filter, Input, 0, InputImageType ); // Start processing the ouputs filter->Update(); // Retrieve the filter's outputs filter->GetFuzzyScene()->Register(); mFuzzyScene = new SoItkDataImage( SoItkDataImage::UNSIGNED_SHORT, 3, Input0.getValue()->getModelMatrix() ); mFuzzyScene->ref(); mFuzzyScene->setPointer( filter->GetFuzzyScene() ); filter->GetOutput()->Register(); mOutput = new SoItkDataImage( SoItkDataImage::UNSIGNED_SHORT, 3, Input0.getValue()->getModelMatrix() ); mOutput->ref(); mOutput->setPointer( filter->GetOutput() ); } break ; } } break ; } } catch( itk::ExceptionObject& e ) { SoDebugError::post( e.GetFile(), "line %d: %s", e.GetLine(), e.GetDescription() ); return ; } catch(...) { SoDebugError::post( __FILE__, "Unknown Exception" ); return ; } SO_ENGINE_OUTPUT( FuzzyScene, SoItkSFDataImage, setValue( mFuzzyScene ) ); SO_ENGINE_OUTPUT( Output, SoItkSFDataImage, setValue( mOutput ) ); }