X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkExtrudeGenericFilter.txx;h=30eafeaea932801aaeea1b0c8b5c2b71f9635107;hb=22aac696ea46e2e4f989d8893bcb978f63715aef;hp=96c7dc1278a2dfcd268ecdb676095fd683b02f0b;hpb=786489951ba13c4daaf7f8541dce5ac369fd3a7b;p=clitk.git diff --git a/tools/clitkExtrudeGenericFilter.txx b/tools/clitkExtrudeGenericFilter.txx index 96c7dc1..30eafea 100644 --- a/tools/clitkExtrudeGenericFilter.txx +++ b/tools/clitkExtrudeGenericFilter.txx @@ -19,6 +19,7 @@ #define clitkExtrudeGenericFilter_txx // itk include +#include #include namespace clitk @@ -89,14 +90,46 @@ ExtrudeGenericFilter::UpdateWithInputImageType() start.Fill(0); + //Check if like is given and not size, origin and spacing int extrusionSize(1); - if (mArgsInfo.size_given) { - if (mArgsInfo.size_arg > 0) - extrusionSize = mArgsInfo.size_arg; - else { - std::cerr << "The size has to be > 0" << std::endl; + double extrusionOrigin(0.0), extrusionSpacing(1.0); + + if (mArgsInfo.like_given) { + if (mArgsInfo.size_given || mArgsInfo.spacing_given || mArgsInfo.origin_given) { + std::cerr << "You cannot set --like and --size, --origin or --spacing at the same time" << std::endl; return; } + + // Read the input like image + typedef itk::ImageFileReader LikeReaderType; + typename LikeReaderType::Pointer reader = LikeReaderType::New(); + reader->SetFileName(mArgsInfo.like_arg); + reader->Update(); + typename OutputImageType::Pointer likeImage = reader->GetOutput(); + + extrusionSize = likeImage->GetLargestPossibleRegion().GetSize()[Dim]; + extrusionSpacing = likeImage->GetSpacing()[Dim]; + extrusionOrigin = likeImage->GetOrigin()[Dim]; + } else { + if (mArgsInfo.size_given) { + if (mArgsInfo.size_arg > 0) + extrusionSize = mArgsInfo.size_arg; + else { + std::cerr << "The size has to be > 0" << std::endl; + return; + } + } + if (mArgsInfo.origin_given) { + extrusionOrigin = mArgsInfo.origin_arg; + } + if (mArgsInfo.spacing_given) { + if (mArgsInfo.spacing_arg > 0) + extrusionSpacing = mArgsInfo.spacing_arg; + else { + std::cerr << "The spacing has to be > 0" << std::endl; + return; + } + } } for (unsigned int i=0; i