- BSD See included LICENSE.txt file
- CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-===========================================================================*/
-
+==========================================================================*/
ADD_LIBRARY(clitkMedianImageFilterLib clitkMedianImageGenericFilter.cxx ${clitkMedianImageFilter_GGO_C})
IF (CLITK_BUILD_TOOLS)
- WRAP_GGO(clitkDicomInfo_GGO_C clitkDicomInfo.ggo)
- ADD_EXECUTABLE(clitkDicomInfo clitkDicomInfo.cxx ${clitkDicomInfo_GGO_C})
- TARGET_LINK_LIBRARIES(clitkDicomInfo clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkDicomInfo_GGO_C clitkDicomInfo.ggo)
+ ADD_EXECUTABLE(clitkDicomInfo clitkDicomInfo.cxx ${clitkDicomInfo_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkDicomInfo clitkCommon ${ITK_LIBRARIES})
- WRAP_GGO(clitkDicom2Image_GGO_C clitkDicom2Image.ggo)
- ADD_EXECUTABLE(clitkDicom2Image clitkDicom2Image.cxx ${clitkDicom2Image_GGO_C})
- TARGET_LINK_LIBRARIES(clitkDicom2Image clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkDicom2Image_GGO_C clitkDicom2Image.ggo)
+ ADD_EXECUTABLE(clitkDicom2Image clitkDicom2Image.cxx ${clitkDicom2Image_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkDicom2Image clitkCommon ${ITK_LIBRARIES})
- WRAP_GGO(clitkImageInfo_GGO_C clitkImageInfo.ggo)
- ADD_EXECUTABLE(clitkImageInfo clitkImageInfo.cxx ${clitkImageInfo_GGO_C})
- TARGET_LINK_LIBRARIES(clitkImageInfo clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkImageInfo_GGO_C clitkImageInfo.ggo)
+ ADD_EXECUTABLE(clitkImageInfo clitkImageInfo.cxx ${clitkImageInfo_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkImageInfo clitkCommon ${ITK_LIBRARIES})
- ADD_EXECUTABLE(clitkImageConvert clitkImageConvert.cxx)
- TARGET_LINK_LIBRARIES(clitkImageConvert clitkImageConvertLib clitkCommon ${ITK_LIBRARIES})
+ ADD_EXECUTABLE(clitkImageConvert clitkImageConvert.cxx)
+ TARGET_LINK_LIBRARIES(clitkImageConvert clitkImageConvertLib clitkCommon ${ITK_LIBRARIES})
- ADD_EXECUTABLE(clitkBinarizeImage clitkBinarizeImage.cxx)
- TARGET_LINK_LIBRARIES(clitkBinarizeImage clitkBinarizeImageLib clitkCommon ${ITK_LIBRARIES})
+ ADD_EXECUTABLE(clitkBinarizeImage clitkBinarizeImage.cxx)
+ TARGET_LINK_LIBRARIES(clitkBinarizeImage clitkBinarizeImageLib clitkCommon ${ITK_LIBRARIES})
- WRAP_GGO(clitkVFResample_GGO_C clitkVFResample.ggo)
- ADD_EXECUTABLE(clitkVFResample clitkVFResample.cxx clitkVFResampleGenericFilter.cxx ${clitkVFResample_GGO_C})
- TARGET_LINK_LIBRARIES(clitkVFResample clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkVFResample_GGO_C clitkVFResample.ggo)
+ ADD_EXECUTABLE(clitkVFResample clitkVFResample.cxx clitkVFResampleGenericFilter.cxx ${clitkVFResample_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkVFResample clitkCommon ${ITK_LIBRARIES})
- WRAP_GGO(clitkImageCreate_GGO_C clitkImageCreate.ggo)
- ADD_EXECUTABLE(clitkImageCreate clitkImageCreate.cxx ${clitkImageCreate_GGO_C})
- TARGET_LINK_LIBRARIES(clitkImageCreate clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkImageCreate_GGO_C clitkImageCreate.ggo)
+ ADD_EXECUTABLE(clitkImageCreate clitkImageCreate.cxx ${clitkImageCreate_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkImageCreate clitkCommon ${ITK_LIBRARIES})
- WRAP_GGO(clitkZeroVF_GGO_C clitkZeroVF.ggo)
- ADD_EXECUTABLE(clitkZeroVF clitkZeroVF.cxx ${clitkZeroVF_GGO_C} clitkZeroVFGenericFilter.cxx)
- TARGET_LINK_LIBRARIES(clitkZeroVF clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkZeroVF_GGO_C clitkZeroVF.ggo)
+ ADD_EXECUTABLE(clitkZeroVF clitkZeroVF.cxx ${clitkZeroVF_GGO_C} clitkZeroVFGenericFilter.cxx)
+ TARGET_LINK_LIBRARIES(clitkZeroVF clitkCommon ${ITK_LIBRARIES})
- WRAP_GGO(clitkImageExtractLine_GGO_C clitkImageExtractLine.ggo)
- ADD_EXECUTABLE(clitkImageExtractLine clitkImageExtractLine.cxx ${clitkImageExtractLine_GGO_C})
- TARGET_LINK_LIBRARIES(clitkImageExtractLine clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkImageExtractLine_GGO_C clitkImageExtractLine.ggo)
+ ADD_EXECUTABLE(clitkImageExtractLine clitkImageExtractLine.cxx ${clitkImageExtractLine_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkImageExtractLine clitkCommon ${ITK_LIBRARIES})
- WRAP_GGO(clitkSplitImage_GGO_C clitkSplitImage.ggo)
- ADD_EXECUTABLE(clitkSplitImage clitkSplitImage.cxx clitkSplitImageGenericFilter.cxx ${clitkSplitImage_GGO_C})
- TARGET_LINK_LIBRARIES(clitkSplitImage clitkCommon ${ITK_LIBRARIES} )
+ WRAP_GGO(clitkSplitImage_GGO_C clitkSplitImage.ggo)
+ ADD_EXECUTABLE(clitkSplitImage clitkSplitImage.cxx clitkSplitImageGenericFilter.cxx ${clitkSplitImage_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkSplitImage clitkCommon ${ITK_LIBRARIES} )
- WRAP_GGO(clitkVFMerge_GGO_C clitkVFMerge.ggo)
- ADD_EXECUTABLE(clitkVFMerge clitkVFMerge.cxx ${clitkVFMerge_GGO_C})
- TARGET_LINK_LIBRARIES(clitkVFMerge clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkVFMerge_GGO_C clitkVFMerge.ggo)
+ ADD_EXECUTABLE(clitkVFMerge clitkVFMerge.cxx ${clitkVFMerge_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkVFMerge clitkCommon ${ITK_LIBRARIES})
- WRAP_GGO(clitkWriteDicomSeries_GGO_C clitkWriteDicomSeries.ggo)
- ADD_EXECUTABLE(clitkWriteDicomSeries clitkWriteDicomSeries.cxx ${clitkWriteDicomSeries_GGO_C})
- TARGET_LINK_LIBRARIES(clitkWriteDicomSeries clitkCommon ${ITK_LIBRARIES} )
+ WRAP_GGO(clitkWriteDicomSeries_GGO_C clitkWriteDicomSeries.ggo)
+ ADD_EXECUTABLE(clitkWriteDicomSeries clitkWriteDicomSeries.cxx ${clitkWriteDicomSeries_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkWriteDicomSeries clitkCommon ${ITK_LIBRARIES} )
- WRAP_GGO(clitkAverageTemporalDimension_GGO_C clitkAverageTemporalDimension.ggo)
- ADD_EXECUTABLE(clitkAverageTemporalDimension clitkAverageTemporalDimension.cxx ${clitkAverageTemporalDimension_GGO_C})
- TARGET_LINK_LIBRARIES(clitkAverageTemporalDimension clitkCommon ${ITK_LIBRARIES} )
+ WRAP_GGO(clitkAverageTemporalDimension_GGO_C clitkAverageTemporalDimension.ggo)
+ ADD_EXECUTABLE(clitkAverageTemporalDimension clitkAverageTemporalDimension.cxx ${clitkAverageTemporalDimension_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkAverageTemporalDimension clitkCommon ${ITK_LIBRARIES} )
- WRAP_GGO(clitkMedianTemporalDimension_GGO_C clitkMedianTemporalDimension.ggo)
- ADD_EXECUTABLE(clitkMedianTemporalDimension clitkMedianTemporalDimension.cxx
- ${clitkMedianTemporalDimension_GGO_C})
- TARGET_LINK_LIBRARIES(clitkMedianTemporalDimension clitkCommon ${ITK_LIBRARIES} )
+ WRAP_GGO(clitkMedianTemporalDimension_GGO_C clitkMedianTemporalDimension.ggo)
+ ADD_EXECUTABLE(clitkMedianTemporalDimension clitkMedianTemporalDimension.cxx
+ ${clitkMedianTemporalDimension_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkMedianTemporalDimension clitkCommon ${ITK_LIBRARIES} )
- WRAP_GGO(clitkWarpImage_GGO_C clitkWarpImage.ggo)
- ADD_EXECUTABLE(clitkWarpImage clitkWarpImage.cxx ${clitkWarpImage_GGO_C} clitkWarpImageGenericFilter.cxx)
- TARGET_LINK_LIBRARIES(clitkWarpImage clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkWarpImage_GGO_C clitkWarpImage.ggo)
+ ADD_EXECUTABLE(clitkWarpImage clitkWarpImage.cxx ${clitkWarpImage_GGO_C} clitkWarpImageGenericFilter.cxx)
+ TARGET_LINK_LIBRARIES(clitkWarpImage clitkCommon ${ITK_LIBRARIES})
- WRAP_GGO(clitkInvertVF_GGO_C clitkInvertVF.ggo)
- ADD_EXECUTABLE(clitkInvertVF clitkInvertVF.cxx ${clitkInvertVF_GGO_C})
- TARGET_LINK_LIBRARIES(clitkInvertVF clitkCommon ${ITK_LIBRARIES} )
+ WRAP_GGO(clitkInvertVF_GGO_C clitkInvertVF.ggo)
+ ADD_EXECUTABLE(clitkInvertVF clitkInvertVF.cxx ${clitkInvertVF_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkInvertVF clitkCommon ${ITK_LIBRARIES} )
- WRAP_GGO(clitkAffineTransform_GGO_C clitkAffineTransform.ggo)
- ADD_EXECUTABLE(clitkAffineTransform clitkAffineTransform.cxx ${clitkAffineTransform_GGO_C})
- TARGET_LINK_LIBRARIES(clitkAffineTransform clitkCommon ${ITK_LIBRARIES} )
+ WRAP_GGO(clitkAffineTransform_GGO_C clitkAffineTransform.ggo)
+ ADD_EXECUTABLE(clitkAffineTransform clitkAffineTransform.cxx ${clitkAffineTransform_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkAffineTransform clitkCommon ${ITK_LIBRARIES} )
- WRAP_GGO(clitkSetBackground_GGO_C clitkSetBackground.ggo)
- ADD_EXECUTABLE(clitkSetBackground clitkSetBackground.cxx clitkSetBackgroundGenericFilter.cxx ${clitkSetBackground_GGO_C})
- TARGET_LINK_LIBRARIES(clitkSetBackground clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkSetBackground_GGO_C clitkSetBackground.ggo)
+ ADD_EXECUTABLE(clitkSetBackground clitkSetBackground.cxx clitkSetBackgroundGenericFilter.cxx ${clitkSetBackground_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkSetBackground clitkCommon ${ITK_LIBRARIES})
- WRAP_GGO(clitkGuerreroVentilation_GGO_C clitkGuerreroVentilation.ggo)
- ADD_EXECUTABLE(clitkGuerreroVentilation clitkGuerreroVentilation.cxx clitkGuerreroVentilationGenericFilter.cxx ${clitkGuerreroVentilation_GGO_C})
- TARGET_LINK_LIBRARIES(clitkGuerreroVentilation clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkGuerreroVentilation_GGO_C clitkGuerreroVentilation.ggo)
+ ADD_EXECUTABLE(clitkGuerreroVentilation clitkGuerreroVentilation.cxx clitkGuerreroVentilationGenericFilter.cxx ${clitkGuerreroVentilation_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkGuerreroVentilation clitkCommon ${ITK_LIBRARIES})
- WRAP_GGO(clitkGammaIndex_GGO_C clitkGammaIndex.ggo)
- ADD_EXECUTABLE(clitkGammaIndex clitkGammaIndex.cxx ${clitkGammaIndex_GGO_C})
- TARGET_LINK_LIBRARIES(clitkGammaIndex vtkCommon vtkFiltering vtkGraphics vtkIO vtkImaging)
+ WRAP_GGO(clitkGammaIndex_GGO_C clitkGammaIndex.ggo)
+ ADD_EXECUTABLE(clitkGammaIndex clitkGammaIndex.cxx ${clitkGammaIndex_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkGammaIndex vtkCommon vtkFiltering vtkGraphics vtkIO vtkImaging)
- ADD_EXECUTABLE(clitkImageArithm clitkImageArithm.cxx)
- TARGET_LINK_LIBRARIES(clitkImageArithm clitkImageArithmImageLib clitkCommon ${ITK_LIBRARIES} )
+ ADD_EXECUTABLE(clitkImageArithm clitkImageArithm.cxx)
+ TARGET_LINK_LIBRARIES(clitkImageArithm clitkImageArithmImageLib clitkCommon ${ITK_LIBRARIES} )
- WRAP_GGO(clitkUnsharpMask_GGO_C clitkUnsharpMask.ggo)
- ADD_EXECUTABLE(clitkUnsharpMask clitkUnsharpMask.cxx ${clitkUnsharpMask_GGO_C})
- TARGET_LINK_LIBRARIES(clitkUnsharpMask clitkCommon ${ITK_LIBRARIES} )
+ WRAP_GGO(clitkUnsharpMask_GGO_C clitkUnsharpMask.ggo)
+ ADD_EXECUTABLE(clitkUnsharpMask clitkUnsharpMask.cxx ${clitkUnsharpMask_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkUnsharpMask clitkCommon ${ITK_LIBRARIES} )
- WRAP_GGO(clitkFooImage_GGO_C clitkFooImage.ggo)
- ADD_EXECUTABLE(clitkFooImage clitkFooImage.cxx ${clitkFooImage_GGO_C})
- TARGET_LINK_LIBRARIES(clitkFooImage clitkCommon ${ITK_LIBRARIES} )
+ WRAP_GGO(clitkFooImage_GGO_C clitkFooImage.ggo)
+ ADD_EXECUTABLE(clitkFooImage clitkFooImage.cxx ${clitkFooImage_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkFooImage clitkCommon ${ITK_LIBRARIES} )
- WRAP_GGO(clitkMedianImageFilter_GGO_C clitkMedianImageFilter.ggo)
- ADD_EXECUTABLE(clitkMedianImageFilter clitkMedianImageFilter.cxx ${clitkMedianImageFilter_GGO_C})
- TARGET_LINK_LIBRARIES(clitkMedianImageFilter clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkMedianImageFilter_GGO_C clitkMedianImageFilter.ggo)
+ ADD_EXECUTABLE(clitkMedianImageFilter clitkMedianImageFilter.cxx ${clitkMedianImageFilter_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkMedianImageFilter clitkCommon ${ITK_LIBRARIES})
- ADD_EXECUTABLE(clitkResampleImage clitkResampleImage.cxx)
- TARGET_LINK_LIBRARIES(clitkResampleImage clitkResampleImageLib clitkCommon ${ITK_LIBRARIES})
+ ADD_EXECUTABLE(clitkResampleImage clitkResampleImage.cxx)
+ TARGET_LINK_LIBRARIES(clitkResampleImage clitkResampleImageLib clitkCommon ${ITK_LIBRARIES})
- WRAP_GGO(clitkMinMaxMask_GGO_C clitkMinMaxMask.ggo)
- ADD_EXECUTABLE(clitkMinMaxMask clitkMinMaxMask.cxx ${clitkMinMaxMask_GGO_C})
- TARGET_LINK_LIBRARIES(clitkMinMaxMask clitkCommon ${ITK_LIBRARIES} )
+ WRAP_GGO(clitkMinMaxMask_GGO_C clitkMinMaxMask.ggo)
+ ADD_EXECUTABLE(clitkMinMaxMask clitkMinMaxMask.cxx ${clitkMinMaxMask_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkMinMaxMask clitkCommon ${ITK_LIBRARIES} )
- # WRAP_GGO(clitkAutoCrop_GGO_C clitkAutoCrop.ggo)
- # ADD_EXECUTABLE(clitkAutoCrop clitkAutoCrop.cxx ${clitkAutoCrop_GGO_C})
- # TARGET_LINK_LIBRARIES(clitkAutoCrop clitkCommon ${ITK_LIBRARIES} )
+ # WRAP_GGO(clitkAutoCrop_GGO_C clitkAutoCrop.ggo)
+ # ADD_EXECUTABLE(clitkAutoCrop clitkAutoCrop.cxx ${clitkAutoCrop_GGO_C})
+ # TARGET_LINK_LIBRARIES(clitkAutoCrop clitkCommon ${ITK_LIBRARIES} )
- WRAP_GGO(clitkDicomRTStruct2BinaryImage_GGO_C clitkDicomRTStruct2BinaryImage.ggo)
- ADD_EXECUTABLE(clitkDicomRTStruct2BinaryImage clitkDicomRTStruct2BinaryImage.cxx ${clitkDicomRTStruct2BinaryImage_GGO_C})
- TARGET_LINK_LIBRARIES(clitkDicomRTStruct2BinaryImage clitkDicomRTStruct clitkCommon ${ITK_LIBRARIES} )
+ WRAP_GGO(clitkDicomRTStruct2BinaryImage_GGO_C clitkDicomRTStruct2BinaryImage.ggo)
+ ADD_EXECUTABLE(clitkDicomRTStruct2BinaryImage clitkDicomRTStruct2BinaryImage.cxx ${clitkDicomRTStruct2BinaryImage_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkDicomRTStruct2BinaryImage clitkDicomRTStruct clitkCommon ${ITK_LIBRARIES} )
- WRAP_GGO(clitkImageLog_GGO_C clitkImageLog.ggo)
- ADD_EXECUTABLE(clitkImageLog clitkImageLog.cxx ${clitkImageLog_GGO_C})
- TARGET_LINK_LIBRARIES(clitkImageLog ${ITK_LIBRARIES} clitkCommon)
+ WRAP_GGO(clitkImageLog_GGO_C clitkImageLog.ggo)
+ ADD_EXECUTABLE(clitkImageLog clitkImageLog.cxx ${clitkImageLog_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkImageLog ${ITK_LIBRARIES} clitkCommon)
- WRAP_GGO(clitkFilter_GGO_C clitkFilter.ggo)
- ADD_EXECUTABLE(clitkFilter clitkFilter.cxx clitkFilterGenericFilter.cxx ${clitkFilter_GGO_C})
- TARGET_LINK_LIBRARIES(clitkFilter ${ITK_LIBRARIES} clitkCommon)
+ WRAP_GGO(clitkFilter_GGO_C clitkFilter.ggo)
+ ADD_EXECUTABLE(clitkFilter clitkFilter.cxx clitkFilterGenericFilter.cxx ${clitkFilter_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkFilter ${ITK_LIBRARIES} clitkCommon)
- WRAP_GGO(clitkConeBeamProjectImage_GGO_C clitkConeBeamProjectImage.ggo)
- ADD_EXECUTABLE(clitkConeBeamProjectImage clitkConeBeamProjectImage.cxx clitkConeBeamProjectImageGenericFilter.cxx ${clitkConeBeamProjectImage_GGO_C})
- TARGET_LINK_LIBRARIES(clitkConeBeamProjectImage ${ITK_LIBRARIES} clitkCommon )
+ WRAP_GGO(clitkConeBeamProjectImage_GGO_C clitkConeBeamProjectImage.ggo)
+ ADD_EXECUTABLE(clitkConeBeamProjectImage clitkConeBeamProjectImage.cxx clitkConeBeamProjectImageGenericFilter.cxx ${clitkConeBeamProjectImage_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkConeBeamProjectImage ${ITK_LIBRARIES} clitkCommon )
- WRAP_GGO(clitkComposeVF_GGO_C clitkComposeVF.ggo)
- ADD_EXECUTABLE(clitkComposeVF clitkComposeVFGenericFilter.cxx clitkComposeVF.cxx ${clitkComposeVF_GGO_C})
- TARGET_LINK_LIBRARIES(clitkComposeVF ${ITK_LIBRARIES} clitkCommon)
+ WRAP_GGO(clitkComposeVF_GGO_C clitkComposeVF.ggo)
+ ADD_EXECUTABLE(clitkComposeVF clitkComposeVFGenericFilter.cxx clitkComposeVF.cxx ${clitkComposeVF_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkComposeVF ${ITK_LIBRARIES} clitkCommon)
- WRAP_GGO(clitkMergeSequence_GGO_C clitkMergeSequence.ggo)
- ADD_EXECUTABLE(clitkMergeSequence clitkMergeSequence.cxx clitkMergeSequenceGenericFilter.cxx ${clitkMergeSequence_GGO_C})
- TARGET_LINK_LIBRARIES(clitkMergeSequence ${ITK_LIBRARIES} clitkCommon)
+ WRAP_GGO(clitkMergeSequence_GGO_C clitkMergeSequence.ggo)
+ ADD_EXECUTABLE(clitkMergeSequence clitkMergeSequence.cxx clitkMergeSequenceGenericFilter.cxx ${clitkMergeSequence_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkMergeSequence ${ITK_LIBRARIES} clitkCommon)
- WRAP_GGO(clitkBackProjectImage_GGO_C clitkBackProjectImage.ggo)
- ADD_EXECUTABLE(clitkBackProjectImage clitkBackProjectImage.cxx clitkBackProjectImageGenericFilter.cxx ${clitkBackProjectImage_GGO_C})
- TARGET_LINK_LIBRARIES(clitkBackProjectImage ${ITK_LIBRARIES} clitkCommon )
+ WRAP_GGO(clitkBackProjectImage_GGO_C clitkBackProjectImage.ggo)
+ ADD_EXECUTABLE(clitkBackProjectImage clitkBackProjectImage.cxx clitkBackProjectImageGenericFilter.cxx ${clitkBackProjectImage_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkBackProjectImage ${ITK_LIBRARIES} clitkCommon )
- ADD_EXECUTABLE(clitkCropImage clitkCropImage.cxx ${clitkCropImage_GGO_C})
- TARGET_LINK_LIBRARIES(clitkCropImage clitkCropImageLib clitkCommon ${ITK_LIBRARIES})
+ ADD_EXECUTABLE(clitkCropImage clitkCropImage.cxx ${clitkCropImage_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkCropImage clitkCropImageLib clitkCommon ${ITK_LIBRARIES})
+
+ # WRAP_GGO(clitkExtractSlice_GGO_C clitkExtractSlice.ggo)
+ # ADD_EXECUTABLE(clitkExtractSlice clitkExtractSlice.cxx clitkExtractSliceGenericFilter.cxx ${clitkExtractSlice_GGO_C})
+ # TARGET_LINK_LIBRARIES(clitkExtractSlice clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkFlipImage_GGO_C clitkFlipImage.ggo)
+ ADD_EXECUTABLE(clitkFlipImage clitkFlipImage.cxx clitkFlipImageGenericFilter.cxx ${clitkFlipImage_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkFlipImage clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkMirrorPadImage_GGO_C clitkMirrorPadImage.ggo)
+ ADD_EXECUTABLE(clitkMirrorPadImage clitkMirrorPadImage.cxx clitkMirrorPadImageGenericFilter.cxx ${clitkMirrorPadImage_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkMirrorPadImage clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkImageMoment_GGO_C clitkImageMoment.ggo)
+ ADD_EXECUTABLE(clitkImageMoment clitkImageMoment.cxx clitkImageMomentGenericFilter.cxx ${clitkImageMoment_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkImageMoment clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkImageStatistics_GGO_C clitkImageStatistics.ggo)
+ ADD_EXECUTABLE(clitkImageStatistics clitkImageStatistics.cxx clitkImageStatisticsGenericFilter.cxx ${clitkImageStatistics_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkImageStatistics clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkSetOrigin_GGO_C clitkSetOrigin.ggo)
+ ADD_EXECUTABLE(clitkSetOrigin clitkSetOrigin.cxx clitkSetOriginGenericFilter.cxx ${clitkSetOrigin_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkSetOrigin clitkCommon ${ITK_LIBRARIES} )
+
+ WRAP_GGO(clitkGetOrigin_GGO_C clitkGetOrigin.ggo)
+ ADD_EXECUTABLE(clitkGetOrigin clitkGetOrigin.cxx clitkGetOriginGenericFilter.cxx ${clitkGetOrigin_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkGetOrigin clitkCommon ${ITK_LIBRARIES} )
+
+ WRAP_GGO(clitkGetDirection_GGO_C clitkGetDirection.ggo)
+ ADD_EXECUTABLE(clitkGetDirection clitkGetDirection.cxx clitkGetDirectionGenericFilter.cxx ${clitkGetDirection_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkGetDirection clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkSetDirection_GGO_C clitkSetDirection.ggo)
+ ADD_EXECUTABLE(clitkSetDirection clitkSetDirection.cxx clitkSetDirectionGenericFilter.cxx ${clitkSetDirection_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkSetDirection clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkGetSize_GGO_C clitkGetSize.ggo)
+ ADD_EXECUTABLE(clitkGetSize clitkGetSize.cxx clitkGetSizeGenericFilter.cxx ${clitkGetSize_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkGetSize clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkGetSpacing_GGO_C clitkGetSpacing.ggo)
+ ADD_EXECUTABLE(clitkGetSpacing clitkGetSpacing.cxx clitkGetSpacingGenericFilter.cxx ${clitkGetSpacing_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkGetSpacing clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkSetSpacing_GGO_C clitkSetSpacing.ggo)
+ ADD_EXECUTABLE(clitkSetSpacing clitkSetSpacing.cxx clitkSetSpacingGenericFilter.cxx ${clitkSetSpacing_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkSetSpacing clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkCombineImage_GGO_C clitkCombineImage.ggo)
+ ADD_EXECUTABLE(clitkCombineImage clitkCombineImage.cxx clitkCombineImageGenericFilter.cxx ${clitkCombineImage_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkCombineImage clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkPermuteAxes_GGO_C clitkPermuteAxes.ggo)
+ ADD_EXECUTABLE(clitkPermuteAxes clitkPermuteAxes.cxx clitkPermuteAxesGenericFilter.cxx ${clitkPermuteAxes_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkPermuteAxes clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkChangeImageOrientation_GGO_C clitkChangeImageOrientation.ggo)
+ ADD_EXECUTABLE(clitkChangeImageOrientation clitkChangeImageOrientation.cxx clitkChangeImageOrientationGenericFilter.cxx ${clitkChangeImageOrientation_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkChangeImageOrientation clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkVFConvert_GGO_C clitkVFConvert.ggo)
+ ADD_EXECUTABLE(clitkVFConvert clitkVFConvert.cxx clitkVFConvertGenericFilter.cxx ${clitkVFConvert_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkVFConvert ${ITK_LIBRARIES} clitkCommon )
+
+ WRAP_GGO(clitkImageToVectorImage_GGO_C clitkImageToVectorImage.ggo)
+ ADD_EXECUTABLE(clitkImageToVectorImage clitkImageToVectorImage.cxx clitkImageToVectorImageGenericFilter.cxx ${clitkImageToVectorImage_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkImageToVectorImage clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkVectorImageToImage_GGO_C clitkVectorImageToImage.ggo)
+ ADD_EXECUTABLE(clitkVectorImageToImage clitkVectorImageToImage.cxx clitkVectorImageToImageGenericFilter.cxx ${clitkVectorImageToImage_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkVectorImageToImage clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkBSplineCoefficientsToValues_GGO_C clitkBSplineCoefficientsToValues.ggo)
+ ADD_EXECUTABLE(clitkBSplineCoefficientsToValues clitkBSplineCoefficientsToValues.cxx clitkBSplineCoefficientsToValuesGenericFilter.cxx ${clitkBSplineCoefficientsToValues_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkBSplineCoefficientsToValues clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkValuesToBSplineCoefficients_GGO_C clitkValuesToBSplineCoefficients.ggo)
+ ADD_EXECUTABLE(clitkValuesToBSplineCoefficients clitkValuesToBSplineCoefficients.cxx clitkValuesToBSplineCoefficientsGenericFilter.cxx ${clitkValuesToBSplineCoefficients_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkValuesToBSplineCoefficients clitkCommon ${ITK_LIBRARIES})
+
+ ADD_EXECUTABLE(clitkMIP clitkMIP.cxx clitkMIPGenericFilter.cxx)
+ TARGET_LINK_LIBRARIES(clitkMIP clitkMIPLib clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkRelativePosition_GGO_C clitkRelativePosition.ggo)
+ ADD_EXECUTABLE(clitkRelativePosition clitkRelativePosition.cxx ${clitkRelativePosition_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkRelativePosition clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkTransformLandmarks_GGO_C clitkTransformLandmarks.ggo)
+ ADD_EXECUTABLE(clitkTransformLandmarks clitkTransformLandmarks.cxx ${clitkTransformLandmarks_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkTransformLandmarks clitkCommon ${ITK_LIBRARIES})
+
+ WRAP_GGO(clitkLineProfile_GGO_C clitkLineProfile.ggo)
+ ADD_EXECUTABLE(clitkLineProfile clitkLineProfile.cxx clitkLineProfileGenericFilter.cxx ${clitkLineProfile_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkLineProfile clitkCommon ${ITK_LIBRARIES})
- # WRAP_GGO(clitkExtractSlice_GGO_C clitkExtractSlice.ggo)
- # ADD_EXECUTABLE(clitkExtractSlice clitkExtractSlice.cxx clitkExtractSliceGenericFilter.cxx ${clitkExtractSlice_GGO_C})
- # TARGET_LINK_LIBRARIES(clitkExtractSlice clitkCommon ${ITK_LIBRARIES})
+ IF(CLITK_EXPERIMENTAL)
- WRAP_GGO(clitkFlipImage_GGO_C clitkFlipImage.ggo)
- ADD_EXECUTABLE(clitkFlipImage clitkFlipImage.cxx clitkFlipImageGenericFilter.cxx ${clitkFlipImage_GGO_C})
- TARGET_LINK_LIBRARIES(clitkFlipImage clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkMirrorPadImage_GGO_C clitkMirrorPadImage.ggo)
- ADD_EXECUTABLE(clitkMirrorPadImage clitkMirrorPadImage.cxx clitkMirrorPadImageGenericFilter.cxx ${clitkMirrorPadImage_GGO_C})
- TARGET_LINK_LIBRARIES(clitkMirrorPadImage clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkImageMoment_GGO_C clitkImageMoment.ggo)
- ADD_EXECUTABLE(clitkImageMoment clitkImageMoment.cxx clitkImageMomentGenericFilter.cxx ${clitkImageMoment_GGO_C})
- TARGET_LINK_LIBRARIES(clitkImageMoment clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkImageStatistics_GGO_C clitkImageStatistics.ggo)
- ADD_EXECUTABLE(clitkImageStatistics clitkImageStatistics.cxx clitkImageStatisticsGenericFilter.cxx ${clitkImageStatistics_GGO_C})
- TARGET_LINK_LIBRARIES(clitkImageStatistics clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkSetOrigin_GGO_C clitkSetOrigin.ggo)
- ADD_EXECUTABLE(clitkSetOrigin clitkSetOrigin.cxx clitkSetOriginGenericFilter.cxx ${clitkSetOrigin_GGO_C})
- TARGET_LINK_LIBRARIES(clitkSetOrigin clitkCommon ${ITK_LIBRARIES} )
-
- WRAP_GGO(clitkGetOrigin_GGO_C clitkGetOrigin.ggo)
- ADD_EXECUTABLE(clitkGetOrigin clitkGetOrigin.cxx clitkGetOriginGenericFilter.cxx ${clitkGetOrigin_GGO_C})
- TARGET_LINK_LIBRARIES(clitkGetOrigin clitkCommon ${ITK_LIBRARIES} )
-
- WRAP_GGO(clitkGetDirection_GGO_C clitkGetDirection.ggo)
- ADD_EXECUTABLE(clitkGetDirection clitkGetDirection.cxx clitkGetDirectionGenericFilter.cxx ${clitkGetDirection_GGO_C})
- TARGET_LINK_LIBRARIES(clitkGetDirection clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkSetDirection_GGO_C clitkSetDirection.ggo)
- ADD_EXECUTABLE(clitkSetDirection clitkSetDirection.cxx clitkSetDirectionGenericFilter.cxx ${clitkSetDirection_GGO_C})
- TARGET_LINK_LIBRARIES(clitkSetDirection clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkGetSize_GGO_C clitkGetSize.ggo)
- ADD_EXECUTABLE(clitkGetSize clitkGetSize.cxx clitkGetSizeGenericFilter.cxx ${clitkGetSize_GGO_C})
- TARGET_LINK_LIBRARIES(clitkGetSize clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkGetSpacing_GGO_C clitkGetSpacing.ggo)
- ADD_EXECUTABLE(clitkGetSpacing clitkGetSpacing.cxx clitkGetSpacingGenericFilter.cxx ${clitkGetSpacing_GGO_C})
- TARGET_LINK_LIBRARIES(clitkGetSpacing clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkSetSpacing_GGO_C clitkSetSpacing.ggo)
- ADD_EXECUTABLE(clitkSetSpacing clitkSetSpacing.cxx clitkSetSpacingGenericFilter.cxx ${clitkSetSpacing_GGO_C})
- TARGET_LINK_LIBRARIES(clitkSetSpacing clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkCombineImage_GGO_C clitkCombineImage.ggo)
- ADD_EXECUTABLE(clitkCombineImage clitkCombineImage.cxx clitkCombineImageGenericFilter.cxx ${clitkCombineImage_GGO_C})
- TARGET_LINK_LIBRARIES(clitkCombineImage clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkPermuteAxes_GGO_C clitkPermuteAxes.ggo)
- ADD_EXECUTABLE(clitkPermuteAxes clitkPermuteAxes.cxx clitkPermuteAxesGenericFilter.cxx ${clitkPermuteAxes_GGO_C})
- TARGET_LINK_LIBRARIES(clitkPermuteAxes clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkChangeImageOrientation_GGO_C clitkChangeImageOrientation.ggo)
- ADD_EXECUTABLE(clitkChangeImageOrientation clitkChangeImageOrientation.cxx clitkChangeImageOrientationGenericFilter.cxx ${clitkChangeImageOrientation_GGO_C})
- TARGET_LINK_LIBRARIES(clitkChangeImageOrientation clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkVFConvert_GGO_C clitkVFConvert.ggo)
- ADD_EXECUTABLE(clitkVFConvert clitkVFConvert.cxx clitkVFConvertGenericFilter.cxx ${clitkVFConvert_GGO_C})
- TARGET_LINK_LIBRARIES(clitkVFConvert ${ITK_LIBRARIES} clitkCommon )
-
- WRAP_GGO(clitkImageToVectorImage_GGO_C clitkImageToVectorImage.ggo)
- ADD_EXECUTABLE(clitkImageToVectorImage clitkImageToVectorImage.cxx clitkImageToVectorImageGenericFilter.cxx ${clitkImageToVectorImage_GGO_C})
- TARGET_LINK_LIBRARIES(clitkImageToVectorImage clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkVectorImageToImage_GGO_C clitkVectorImageToImage.ggo)
- ADD_EXECUTABLE(clitkVectorImageToImage clitkVectorImageToImage.cxx clitkVectorImageToImageGenericFilter.cxx ${clitkVectorImageToImage_GGO_C})
- TARGET_LINK_LIBRARIES(clitkVectorImageToImage clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkBSplineCoefficientsToValues_GGO_C clitkBSplineCoefficientsToValues.ggo)
- ADD_EXECUTABLE(clitkBSplineCoefficientsToValues clitkBSplineCoefficientsToValues.cxx clitkBSplineCoefficientsToValuesGenericFilter.cxx ${clitkBSplineCoefficientsToValues_GGO_C})
- TARGET_LINK_LIBRARIES(clitkBSplineCoefficientsToValues clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkValuesToBSplineCoefficients_GGO_C clitkValuesToBSplineCoefficients.ggo)
- ADD_EXECUTABLE(clitkValuesToBSplineCoefficients clitkValuesToBSplineCoefficients.cxx clitkValuesToBSplineCoefficientsGenericFilter.cxx ${clitkValuesToBSplineCoefficients_GGO_C})
- TARGET_LINK_LIBRARIES(clitkValuesToBSplineCoefficients clitkCommon ${ITK_LIBRARIES})
-
- ADD_EXECUTABLE(clitkMIP clitkMIP.cxx clitkMIPGenericFilter.cxx)
- TARGET_LINK_LIBRARIES(clitkMIP clitkMIPLib clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkRelativePosition_GGO_C clitkRelativePosition.ggo)
- ADD_EXECUTABLE(clitkRelativePosition clitkRelativePosition.cxx ${clitkRelativePosition_GGO_C})
- TARGET_LINK_LIBRARIES(clitkRelativePosition clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkTransformLandmarks_GGO_C clitkTransformLandmarks.ggo)
- ADD_EXECUTABLE(clitkTransformLandmarks clitkTransformLandmarks.cxx ${clitkTransformLandmarks_GGO_C})
- TARGET_LINK_LIBRARIES(clitkTransformLandmarks clitkCommon ${ITK_LIBRARIES})
-
- WRAP_GGO(clitkLineProfile_GGO_C clitkLineProfile.ggo)
- ADD_EXECUTABLE(clitkLineProfile clitkLineProfile.cxx clitkLineProfileGenericFilter.cxx ${clitkLineProfile_GGO_C})
- TARGET_LINK_LIBRARIES(clitkLineProfile clitkCommon ${ITK_LIBRARIES})
+ WRAP_GGO(clitkBinaryImageToMesh_GGO_C clitkBinaryImageToMesh.ggo)
+ ADD_EXECUTABLE(clitkBinaryImageToMesh clitkBinaryImageToMesh.cxx ${clitkBinaryImageToMesh_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkBinaryImageToMesh ${ITK_LIBRARIES} vtkCommon vtkRendering)
+
+ WRAP_GGO(clitkMeshViewer_GGO_C clitkMeshViewer.ggo)
+ ADD_EXECUTABLE(clitkMeshViewer clitkMeshViewer.cxx ${clitkMeshViewer_GGO_C})
+ TARGET_LINK_LIBRARIES(clitkMeshViewer vtkCommon vtkRendering)
+ ENDIF(CLITK_EXPERIMENTAL)
ENDIF(CLITK_BUILD_TOOLS)
--- /dev/null
+/*=========================================================================
+ Program: vv http://www.creatis.insa-lyon.fr/rio/vv
+
+ Authors belong to:
+ - University of LYON http://www.universite-lyon.fr/
+ - Léon Bérard cancer center http://www.centreleonberard.fr
+ - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the copyright notices for more information.
+
+ It is distributed under dual licence
+
+ - BSD See included LICENSE.txt file
+ - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+===========================================================================*/
+#include "clitkBinaryImageToMesh_ggo.h"
+#include "clitkImageToImageGenericFilter.h"
+
+#include "vtkMetaImageReader.h"
+#include "vtkContourFilter.h"
+#include "vtkDecimatePro.h"
+#include "vtkPolyDataMapper.h"
+#include "vtkRenderer.h"
+#include "vtkRenderWindow.h"
+#include "vtkActor.h"
+#include "vtkCamera.h"
+#include "vtkOBJExporter.h"
+#include "vtkRenderWindowInteractor.h"
+#include "vtkSmartPointer.h"
+
+#include "itksys/SystemTools.hxx"
+
+void run(const args_info_clitkBinaryImageToMesh& argsInfo);
+
+int main(int argc, char** argv)
+{
+ GGO(clitkBinaryImageToMesh, args_info);
+
+ run(args_info);
+
+ return EXIT_SUCCESS;
+}
+
+void run(const args_info_clitkBinaryImageToMesh& argsInfo)
+{
+ std::string file = argsInfo.input_arg;
+
+ vtkSmartPointer<vtkMetaImageReader> pbmp_reader = vtkMetaImageReader::New();
+ pbmp_reader->SetFileName(file.c_str());
+ pbmp_reader->Update();
+
+ printf("Filtering...\n");
+ vtkSmartPointer<vtkContourFilter> pcontour = vtkContourFilter::New();
+ pcontour->SetValue(0, 0.5);
+ pcontour->SetInputConnection(pbmp_reader->GetOutputPort());
+
+ vtkSmartPointer<vtkDecimatePro> psurface = vtkDecimatePro::New();
+ psurface->SetInputConnection(pcontour->GetOutputPort());
+
+ vtkSmartPointer<vtkPolyDataMapper> skinMapper = vtkPolyDataMapper::New();
+ skinMapper->SetInputConnection(psurface->GetOutputPort());
+ skinMapper->ScalarVisibilityOff();
+
+ vtkSmartPointer<vtkActor> skin = vtkActor::New();
+ skin->SetMapper(skinMapper);
+
+ vtkSmartPointer<vtkCamera> aCamera = vtkCamera::New();
+ aCamera->SetViewUp (0, 0, -1);
+ aCamera->SetPosition (0, 1, 0);
+ aCamera->SetFocalPoint (0, 0, 0);
+ aCamera->ComputeViewPlaneNormal();
+ aCamera->Dolly(1.5);
+
+ vtkSmartPointer<vtkRenderer> aRenderer = vtkRenderer::New();
+ aRenderer->AddActor(skin);
+ aRenderer->SetActiveCamera(aCamera);
+ aRenderer->ResetCamera ();
+ aRenderer->SetBackground(0,0,0);
+ aRenderer->ResetCameraClippingRange ();
+
+ vtkSmartPointer<vtkRenderWindow> renWin = vtkRenderWindow::New();
+ renWin->AddRenderer(aRenderer);
+ renWin->SetSize(640, 480);
+
+ vtkSmartPointer<vtkOBJExporter> pwriter2 = vtkOBJExporter::New();
+ pwriter2->SetRenderWindow(renWin);
+
+ std::string output;
+ if (argsInfo.output_given) {
+ output = argsInfo.output_arg;
+ if (itksys::SystemTools::FileIsDirectory(output.c_str())) {
+ file = itksys::SystemTools::GetFilenameName(file.c_str());
+ file = itksys::SystemTools::GetFilenameWithoutExtension(file.c_str());
+ file = itksys::SystemTools::CollapseFullPath(file.c_str(), output.c_str());
+ }
+ else {
+ file = output;
+ }
+ }
+ else {
+ file = itksys::SystemTools::GetFilenameWithoutExtension(file);
+ }
+ pwriter2->SetFilePrefix(file.c_str());
+ pwriter2->Write();
+
+ vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkRenderWindowInteractor::New();
+ iren->SetRenderWindow(renWin);
+
+ skinMapper->Update();
+ bool interact = argsInfo.view_flag;
+ if (interact)
+ {
+ iren->Initialize();
+ iren->Start();
+ }
+ else
+ renWin->Render();
+}
+
+
--- /dev/null
+#File clitkBinaryImageToMesh.ggo
+package "clitkBinaryImageToMesh"
+version "1.0"
+purpose "Get the HU profile along the given line. Output to stdout."
+
+option "config" - "Config file" string no
+option "verbose" v "Verbose" flag off
+
+option "input" i "Input image" string yes
+option "output" o "Output mesh file prefix (if empty, use input file's base name as prefix; if a directoy, output to it using input file's base name as prefix; otherwise, use given name as prefix" string no
+option "view" - "View result" flag off
--- /dev/null
+/*=========================================================================
+ Program: vv http://www.creatis.insa-lyon.fr/rio/vv
+
+ Authors belong to:
+ - University of LYON http://www.universite-lyon.fr/
+ - Léon Bérard cancer center http://www.centreleonberard.fr
+ - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the copyright notices for more information.
+
+ It is distributed under dual licence
+
+ - BSD See included LICENSE.txt file
+ - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+===========================================================================*/
+
+#include "vtkOBJReader.h"
+#include "vtkPolyDataMapper.h"
+#include "vtkRenderer.h"
+#include "vtkRenderWindow.h"
+#include "vtkActor.h"
+#include "vtkCamera.h"
+#include "vtkRenderWindowInteractor.h"
+#include "vtkSmartPointer.h"
+#include "vtkCommand.h"
+#include "vtkAnimationCue.h"
+#include "vtkAnimationScene.h"
+#include "vtkProperty.h"
+#include "vtkInteractorStyle.h"
+
+#include "clitkCommon.h"
+#include "clitkMeshViewer_ggo.h"
+
+#include <string>
+#include <iostream>
+#include <vector>
+
+typedef vtkSmartPointer<vtkOBJReader> ObjReaderType;
+typedef vtkSmartPointer<vtkPolyDataMapper> MapperType;
+typedef vtkSmartPointer<vtkActor> ActorType;
+
+
+long run(const args_info_clitkMeshViewer& argsInfo);
+
+// Adapted from vtkAnimationCue example...
+class CueAnimator
+{
+public:
+ CueAnimator(std::vector<ActorType>& rActors) : m_Fps(1), m_CurrentActor(0), m_rActors(rActors) {
+ m_rActors[0]->SetVisibility(1);
+ for (unsigned int i = 1; i < m_rActors.size(); i++) {
+ m_rActors[i]->SetVisibility(0);
+ }
+ }
+
+ ~CueAnimator() {
+ }
+
+ void SetFps(double fps) {
+ m_Fps = fps;
+ }
+
+ void StartCue(vtkAnimationCue::AnimationCueInfo *vtkNotUsed(info),
+ vtkRenderer *ren)
+ {
+ //std::cout << "StartCue" << std::endl;
+ }
+
+ void Tick(vtkAnimationCue::AnimationCueInfo *info,
+ vtkRenderer *ren)
+ {
+ //std::cout << "Tick AT:" << info->AnimationTime << " DT:" << info->DeltaTime << " CT:" << info->ClockTime << std::endl;
+
+ m_rActors[m_CurrentActor]->SetVisibility(0);
+
+ int step = round(m_Fps * info->AnimationTime);
+ int actor = step % m_rActors.size();
+
+ //if (actor != m_CurrentActor) std::cout << "Showing frame: " << m_CurrentActor << std::endl;
+ m_CurrentActor = actor;
+ m_rActors[m_CurrentActor]->SetVisibility(1);
+
+ ren->Render();
+ }
+
+ void EndCue(vtkAnimationCue::AnimationCueInfo *info,
+ vtkRenderer *ren)
+ {
+ //std::cout << "EndCue" << std::endl;
+ }
+
+protected:
+
+ double m_Fps;
+ clock_t m_LastTick;
+ double m_TotalTicks;
+ int m_CurrentActor;
+ std::vector<ActorType>& m_rActors;
+};
+
+class vtkAnimationCueObserver : public vtkCommand
+{
+public:
+ static vtkAnimationCueObserver *New()
+ {
+ return new vtkAnimationCueObserver;
+ }
+
+ virtual void Execute(vtkObject *vtkNotUsed(caller),
+ unsigned long event,
+ void *calldata)
+ {
+ if(this->Animator!=0 && this->Renderer!=0)
+ {
+ vtkAnimationCue::AnimationCueInfo *info=
+ static_cast<vtkAnimationCue::AnimationCueInfo *>(calldata);
+ switch(event)
+ {
+ case vtkCommand::StartAnimationCueEvent:
+ this->Animator->StartCue(info,this->Renderer);
+ break;
+ case vtkCommand::EndAnimationCueEvent:
+ this->Animator->EndCue(info,this->Renderer);
+ break;
+ case vtkCommand::AnimationCueTickEvent:
+ this->Animator->Tick(info,this->Renderer);
+ break;
+ }
+ }
+ if(this->RenWin!=0)
+ {
+ this->RenWin->Render();
+ }
+ }
+
+ vtkRenderer *Renderer;
+ vtkRenderWindow *RenWin;
+ CueAnimator *Animator;
+
+protected:
+ vtkAnimationCueObserver()
+ {
+ this->Renderer=0;
+ this->Animator=0;
+ this->RenWin=0;
+ }
+};
+
+class vtkWindowObserver : public vtkCommand
+{
+public:
+ static vtkWindowObserver *New()
+ {
+ return new vtkWindowObserver;
+ }
+
+ virtual void Execute(vtkObject *caller,
+ unsigned long event,
+ void *calldata)
+ {
+ vtkRenderWindowInteractor *isi = dynamic_cast<vtkRenderWindowInteractor *>(caller);
+ //std::cout << "Execute" << std::endl;
+ switch (event)
+ {
+ case vtkCommand::KeyPressEvent:
+ {
+ std::string key = isi->GetKeySym();
+ //std::cout << key[0] << std::endl;
+ switch (key[0])
+ {
+ case 'P':
+ case 'p':
+ if (this->m_Scene)
+ this->m_Scene->Play();
+ break;
+
+ case 'M':
+ case 'm':
+ if (this->m_Scene)
+ this->m_Scene->Stop();
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ default:
+ break;
+
+ }
+
+ }
+
+ vtkAnimationScene* m_Scene;
+
+ protected:
+
+ vtkWindowObserver() : m_Scene(0) {}
+};
+
+int main(int argc, char** argv)
+{
+ GGO(clitkMeshViewer, args_info);
+
+ return run(args_info);
+}
+
+long run(const args_info_clitkMeshViewer& argsInfo)
+{
+ std::vector<ObjReaderType> objs;
+ std::vector<MapperType> mappers;
+ std::vector<ActorType> actors;
+
+ bool verbose = argsInfo.verbose_flag;
+
+ int nfiles = argsInfo.inputs_num;
+ if (nfiles == 0)
+ {
+ std::cout << "At leas one mesh (.OBJ) file must be given. See clitkMeshViewer -h." << std::endl;
+ return -1;
+ }
+
+ if (verbose)
+ std::cout << nfiles << " file(s) to be loaded..." << std::endl;
+
+ vtkSmartPointer<vtkRenderer> aRenderer = vtkRenderer::New();
+ for (int i = 0; i < nfiles; i++) {
+ std::string file = argsInfo.inputs[i];
+ if (verbose)
+ std::cout << "Reading " << file << std::endl;
+
+ vtkSmartPointer<vtkOBJReader> preader = vtkOBJReader::New();
+ preader->SetFileName(file.c_str());
+ preader->Update();
+ objs.push_back(preader);
+
+ vtkSmartPointer<vtkPolyDataMapper> skinMapper = vtkPolyDataMapper::New();
+ skinMapper->SetInputConnection(preader->GetOutputPort());
+ skinMapper->ScalarVisibilityOff();
+ mappers.push_back(skinMapper);
+
+ vtkSmartPointer<vtkActor> skin = vtkActor::New();
+ skin->SetMapper(skinMapper);
+ actors.push_back(skin);
+
+ aRenderer->AddActor(skin);
+ }
+
+ vtkSmartPointer<vtkCamera> aCamera = vtkCamera::New();
+ aCamera->SetViewUp (0, 0, -1);
+ aCamera->SetPosition (0, 1, 0);
+ aCamera->SetFocalPoint (0, 0, 0);
+ aCamera->ComputeViewPlaneNormal();
+ aCamera->Dolly(1.5);
+
+ aRenderer->SetActiveCamera(aCamera);
+ aRenderer->ResetCamera ();
+ aRenderer->SetBackground(0,0,0);
+ aRenderer->ResetCameraClippingRange ();
+
+ vtkSmartPointer<vtkRenderWindow> renWin = vtkRenderWindow::New();
+ renWin->AddRenderer(aRenderer);
+ renWin->SetSize(640, 480);
+
+ vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkRenderWindowInteractor::New();
+ iren->SetRenderWindow(renWin);
+ iren->Initialize();
+
+ vtkSmartPointer<vtkAnimationScene> scene;
+ vtkSmartPointer<vtkAnimationCue> cue1;
+ vtkSmartPointer<vtkAnimationCueObserver> anim_observer;
+ vtkSmartPointer<vtkWindowObserver> window_observer;
+ CueAnimator animator(actors);
+
+ bool animate = argsInfo.animate_flag;
+ if (animate) {
+ double fps = argsInfo.fps_arg;
+ animator.SetFps(fps);
+
+ // Create an Animation Scene
+ scene=vtkAnimationScene::New();
+ scene->SetModeToRealTime();
+
+ scene->SetLoop(1);
+ scene->SetTimeModeToRelative();
+ scene->SetStartTime(0);
+ scene->SetEndTime(actors.size()/fps);
+
+ // Create an Animation Cue.
+ cue1=vtkAnimationCue::New();
+ cue1->SetTimeModeToRelative();
+ cue1->SetStartTime(0);
+ cue1->SetEndTime(actors.size()/fps);
+ scene->AddCue(cue1);
+
+ // Create Cue anim_observer.
+ anim_observer=vtkAnimationCueObserver::New();
+ anim_observer->Renderer=aRenderer;
+ anim_observer->Animator=&animator;
+ anim_observer->RenWin=renWin;
+ cue1->AddObserver(vtkCommand::StartAnimationCueEvent,anim_observer);
+ cue1->AddObserver(vtkCommand::EndAnimationCueEvent,anim_observer);
+ cue1->AddObserver(vtkCommand::AnimationCueTickEvent,anim_observer);
+
+ window_observer = vtkWindowObserver::New();
+ window_observer->m_Scene = scene;
+ iren->AddObserver(vtkCommand::KeyPressEvent, window_observer);
+
+ }
+
+ iren->Start();
+ return 0;
+}
+
+
--- /dev/null
+#File clitkMeshViewer.ggo
+package "clitkMeshViewer"
+version "1.0"
+purpose "Visualize a set of meshes"
+usage "clitkMeshViewer FILE1 FILE2 ... [OPTIONS]"
+
+option "config" - "Config file" string no
+option "verbose" v "Verbose" flag off
+
+option "animate" - "Enable animation mode (type p/m to start/stop animation)" flag off
+option "fps" - "Set the animation's frame rate (in fps)" double default="4.0" no
vvImage::Pointer imageSelected;
if (DataTree->topLevelItem(index) == DataTree->selectedItems()[0]) {
imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetImage();
- dimension = imageSelected->GetNumberOfDimensions();
- origin.resize(dimension);
- inputSpacing.resize(dimension);
- inputSize.resize(dimension);
- sizeMM.resize(dimension);
- pixelType = mSlicerManagers[index]->GetImage()->GetScalarTypeAsITKString().c_str();
- for (int i = 0; i < dimension; i++) {
- origin[i] = imageSelected->GetOrigin()[i];
- inputSpacing[i] = imageSelected->GetSpacing()[i];
- inputSize[i] = imageSelected->GetSize()[i];
- sizeMM[i] = inputSize[i]*inputSpacing[i];
- NPixel *= inputSize[i];
- }
- inputSizeInBytes = GetSizeInBytes(imageSelected->GetActualMemorySize()*1000);
} else if (DataTree->selectedItems()[0]->data(1,Qt::UserRole).toString() == "vector") {
imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetVF();
- dimension = imageSelected->GetNumberOfDimensions();
- origin.resize(dimension);
- inputSpacing.resize(dimension);
- inputSize.resize(dimension);
- sizeMM.resize(dimension);
- pixelType = mSlicerManagers[index]->GetVF()->GetScalarTypeAsITKString().c_str();
- for (int i = 0; i < dimension; i++) {
- origin[i] = imageSelected->GetOrigin()[i];
- inputSpacing[i] = imageSelected->GetSpacing()[i];
- inputSize[i] = imageSelected->GetSize()[i];
- sizeMM[i] = inputSize[i]*inputSpacing[i];
- NPixel *= inputSize[i];
- }
- inputSizeInBytes = GetSizeInBytes(imageSelected->GetActualMemorySize()*1000);
} else if (DataTree->selectedItems()[0]->data(1,Qt::UserRole).toString() == "overlay") {
imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetOverlay();
- dimension = imageSelected->GetNumberOfDimensions();
- origin.resize(dimension);
- inputSpacing.resize(dimension);
- inputSize.resize(dimension);
- sizeMM.resize(dimension);
- pixelType = mSlicerManagers[index]->GetImage()->GetScalarTypeAsITKString().c_str();
- for (int i = 0; i < dimension; i++) {
- origin[i] = imageSelected->GetOrigin()[i];
- inputSpacing[i] = imageSelected->GetSpacing()[i];
- inputSize[i] = imageSelected->GetSize()[i];
- sizeMM[i] = inputSize[i]*inputSpacing[i];
- NPixel *= inputSize[i];
- }
- inputSizeInBytes = GetSizeInBytes(imageSelected->GetActualMemorySize()*1000);
} else if (DataTree->selectedItems()[0]->data(1,Qt::UserRole).toString() == "fusion") {
imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetFusion();
- dimension = imageSelected->GetNumberOfDimensions();
- origin.resize(dimension);
- inputSpacing.resize(dimension);
- inputSize.resize(dimension);
- sizeMM.resize(dimension);
- pixelType = mSlicerManagers[index]->GetImage()->GetScalarTypeAsITKString().c_str();
- for (int i = 0; i < dimension; i++) {
- origin[i] = imageSelected->GetOrigin()[i];
- inputSpacing[i] = imageSelected->GetSpacing()[i];
- inputSize[i] = imageSelected->GetSize()[i];
- sizeMM[i] = inputSize[i]*inputSpacing[i];
- NPixel *= inputSize[i];
- }
- inputSizeInBytes = GetSizeInBytes(imageSelected->GetActualMemorySize()*1000);
+ }
+ else if (DataTree->selectedItems()[0]->data(1,Qt::UserRole).toString() == "contour") {
+ imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetImage();
+ }
+ else {
+ imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetImage();
}
+ dimension = imageSelected->GetNumberOfDimensions();
+ origin.resize(dimension);
+ inputSpacing.resize(dimension);
+ inputSize.resize(dimension);
+ sizeMM.resize(dimension);
+ pixelType = mSlicerManagers[index]->GetImage()->GetScalarTypeAsITKString().c_str();
+ for (int i = 0; i < dimension; i++) {
+ origin[i] = imageSelected->GetOrigin()[i];
+ inputSpacing[i] = imageSelected->GetSpacing()[i];
+ inputSize[i] = imageSelected->GetSize()[i];
+ sizeMM[i] = inputSize[i]*inputSpacing[i];
+ NPixel *= inputSize[i];
+ }
+ inputSizeInBytes = GetSizeInBytes(imageSelected->GetActualMemorySize()*1000);
+
QString dim = QString::number(dimension) + " (";
dim += pixelType + ")";
int index = GetSlicerIndexFromItem(item);
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
QString role=item->data(1,Qt::UserRole).toString();
- if ( role == "vector")
+ if ( role == "vector"){
mSlicerManagers[index]->ReloadVF();
- else if (role == "overlay")
+ }
+ else if (role == "overlay"){
mSlicerManagers[index]->ReloadOverlay();
- else if (role == "fusion")
+ }
+ else if (role == "fusion"){
mSlicerManagers[index]->ReloadFusion();
- else
+ }
+ else{
mSlicerManagers[index]->Reload();
-
+ }
// Update view and info
ImageInfoChanged();
mSlicerManagers[index]->Render();
{
std::vector<vvMesh::Pointer> result;
#if GDCM_MAJOR_VERSION == 2
+ gdcm::Reader reader;
+ reader.SetFileName(filename.c_str());
+ reader.Read();
+
+ const gdcm::DataSet &ds = reader.GetFile().GetDataSet();
+
+ gdcm::SmartPointer<gdcm::SequenceOfItems> rois = ds.GetDataElement(gdcm::Tag(0x3006,0x39)).GetValueAsSQ();
+ gdcm::SmartPointer<gdcm::SequenceOfItems> roi_info = ds.GetDataElement(gdcm::Tag(0x3006,0x20)).GetValueAsSQ();
+ assert(rois); // TODO error message
+ assert(roi_info); // TODO error message
+ assert(rois->GetNumberOfItems() == roi_info->GetNumberOfItems());
+
+ for (unsigned ridx = 0; ridx < rois->GetNumberOfItems(); ++ridx)
+ {
+ vtkSmartPointer<vtkAppendPolyData> append=vtkSmartPointer<vtkAppendPolyData>::New();
+ const gdcm::DataSet& ds_rois = rois->GetItem( ridx + 1).GetNestedDataSet();
+ const gdcm::DataSet& ds_roi_info = roi_info->GetItem( ridx + 1).GetNestedDataSet();
+
+ gdcm::Attribute<0x3006,0x84> roinumber;
+ roinumber.SetFromDataSet(ds_rois);
+ if (std::find(selected_contours.begin(), selected_contours.end(), roinumber.GetValue()) != selected_contours.end()) //Only read selected ROIs
+ {
+ gdcm::Attribute<0x3006,0x2a> trgb;
+ trgb.SetFromDataSet(ds_rois);
+ vvMesh::Pointer current_roi=vvMesh::New();
+ current_roi->r = trgb[0] / 255;
+ current_roi->g = trgb[1] / 255;
+ current_roi->b = trgb[2] / 255;
+
+ gdcm::Attribute<0x3006,0x26> tstructure_name;
+ tstructure_name.SetFromDataSet(ds_roi_info);
+ current_roi->structure_name = tstructure_name.GetValue();
+
+ gdcm::SmartPointer<gdcm::SequenceOfItems> roi_seq = ds_rois.GetDataElement(gdcm::Tag(0x3006,0x40)).GetValueAsSQ();
+ double z0=-1; //Used to determine spacing between slices, assumed to be constant
+ for (unsigned j = 0; j < roi_seq->GetNumberOfItems(); ++j)
+ {
+ gdcm::Item & item_roi_seq = roi_seq->GetItem(j + 1); // Item starts at 1
+ const gdcm::DataSet& ds_roi_seq = item_roi_seq.GetNestedDataSet();
+ gdcm::Attribute<0x3006,0x42> tcontour_type;
+ tcontour_type.SetFromDataSet(ds_roi_seq);
+ std::string contour_type = tcontour_type.GetValue();
+ if (contour_type=="CLOSED_PLANAR ")
+ {
+ gdcm::Attribute<0x3006,0x46> tpoint_number;
+ tpoint_number.SetFromDataSet(ds_roi_seq);
+ const gdcm::DataElement & points_data = ds_roi_seq.GetDataElement(gdcm::Tag(0x3006,0x50));
+ gdcm::Attribute<0x3006,0x50> tpoints;
+ tpoints.SetFromDataElement(points_data);
+ assert(tpoints.GetNumberOfValues() == static_cast<unsigned int>(tpoint_number.GetValue()) * 3);
+ const double* points = tpoints.GetValues();
+ if (z0 == -1) //First contour
+ z0=points[2];
+ else
+ if (current_roi->GetSpacing()==-1 && points[2] != z0 )
+ current_roi->SetSpacing(points[2]-z0);
+ vtkPolyData * contour=vtkPolyData::New();
+ contour->Allocate(); //for cell structures
+ contour->SetPoints(vtkPoints::New());
+ vtkIdType ids[2];
+ for (unsigned idx = 0; idx < tpoints.GetNumberOfValues(); idx += 3)
+ {
+ contour->GetPoints()->InsertNextPoint(points[idx], points[idx+1], points[idx+2]);
+ ids[0] = idx / 3;
+ ids[1] = (ids[0] + 1) % tpoint_number.GetValue(); //0-1,1-2,...,n-1-0
+ contour->GetLines()->InsertNextCell(2, ids);
+ }
+ append->AddInput(contour);
+ }
+ else
+ if (contour_type == "POINT ")
+ ; // silently ignore POINT type since we don't need them at the moment
+ else
+ std::cerr << "Warning: contour type " << contour_type << " not handled!" << std::endl;
+ }
+ append->Update();
+ current_roi->AddMesh(append->GetOutput());
+ result.push_back(current_roi);
+ }
+ else
+ {
+ //std::cerr << "Warning: ignoring ROI #" << roi_number << std::endl;
+ }
+ }
#else
gdcm::File reader;
reader.SetFileName(filename.c_str());
#include <vtkImageAccumulate.h>
#include <vtkImageReslice.h>
-// template <class T, unsigned int dim>
-// void print_vector(const char* pmsg, T* pvec)
-// {
-// std::cout << pmsg << ": ";
-// for (unsigned int i = 0; i < dim; i++)
-// std::cout << pvec[i] << " ";
-// std::cout << std::endl;
-// }
-
-
vtkCxxRevisionMacro(vvSlicer, "DummyRevision");
vtkStandardNewMacro(vvSlicer);
-
+static void copyExtent(int* in, int* to){
+ for(int i=0; i<6; ++i) to[i]=in[i];
+}
//------------------------------------------------------------------------------
vvSlicer::vvSlicer()
{
this->UnInstallPipeline();
mImage = NULL;
+ mReducedExtent = new int[6];
mCurrentTSlice = 0;
mUseReducedExtent = false;
//------------------------------------------------------------------------------
void vvSlicer::SetReducedExtent(int * ext)
{
- mReducedExtent = ext;
+ copyExtent(ext, mReducedExtent);
}
//------------------------------------------------------------------------------
for (std::vector<vvMeshActor*>::iterator i=mSurfaceCutActors.begin();
i!=mSurfaceCutActors.end(); i++)
delete (*i);
+ delete [] mReducedExtent;
}
//------------------------------------------------------------------------------
// Prevent crash when reload -> change slice if outside extent
if (Slice < extent[SliceOrientation*2] || Slice>=extent[SliceOrientation*2+1]) {
- Slice = (extent[SliceOrientation*2+1]-extent[SliceOrientation*2])/2.0;
+ Slice = (extent[SliceOrientation*2+1]+extent[SliceOrientation*2])/2.0;
}
// Make sure that the required part image has been computed
//------------------------------------------------------------------------------
//----------------------------------------------------------------------------
-int * vvSlicer::GetExtent()
-{
+int * vvSlicer::GetExtent(){
int *w_ext;
if (mUseReducedExtent) {
w_ext = mReducedExtent;
// Local copy of extent
int w_ext[6];
- for(unsigned int i=0; i<6; i++){
- if (mUseReducedExtent)
- w_ext[i] = mReducedExtent[i];
- else
- w_ext[i] = input->GetWholeExtent()[i];
- }
-
+ copyExtent(GetExtent(), w_ext);
// Set slice value
w_ext[ this->SliceOrientation*2 ] = this->Slice;
w_ext[ this->SliceOrientation*2+1 ] = this->Slice;
{
if (mSurfaceCutActors.size() > 0)
for (std::vector<vvMeshActor*>::iterator i=mSurfaceCutActors.begin();
- i!=mSurfaceCutActors.end(); i++)
+ i!=mSurfaceCutActors.end(); i++) {
+
+ (*i)->SetSlicingOrientation(this->SliceOrientation);
(*i)->SetCutSlice((this->Slice)*this->GetImage()->GetSpacing()[this->SliceOrientation]+
this->GetImage()->GetOrigin()[this->SliceOrientation]);
+ }
}
//----------------------------------------------------------------------------
virtual void SetColorWindow(double s);
virtual void SetColorLevel(double s);
-
+ /**
+ * When it is enabled, beware of a call to GetExtent.
+ * we must have setted mReducedExtent otherwhise random values
+ * are returned by GetExtent
+ * */
void EnableReducedExtent(bool b);
void SetReducedExtent(int * ext);
#include <QCursor>
#include <QApplication>
#include <QMessageBox>
+#include <QSignalMapper>
// vtk
#include <vtkImageClip.h>
ADD_TOOL(vvToolCropImage);
//------------------------------------------------------------------------------
-
+//same order of int* returned by VtkImageData::WholeExtent
+enum sliderId {xmin, xmax, ymin, ymax, zmin, zmax, tmin, tmax};
//------------------------------------------------------------------------------
vvToolCropImage::vvToolCropImage(vvMainWindowBase * parent, Qt::WindowFlags f):
vvToolWidgetBase(parent, f),
vvToolBase<vvToolCropImage>(parent),
- Ui::vvToolCropImage()
+ Ui::vvToolCropImage(),mSliders(8)
{
// GUI Initialization
Ui_vvToolCropImage::setupUi(mToolWidget);
- // mTLabel2->setHidden(false);
- // tminSlider->setHidden(false);
- // tmaxSlider->setHidden(false);
- // spin_tmin->setHidden(false);
- // spin_tmax->setHidden(false);
- // mLabelTimeCropping->setHidden(false);
mTLabel1->setHidden(true);
mTLabel2->setHidden(true);
tminSlider->setHidden(true);
// Set how many inputs are needed for this tool
AddInputSelector("Select one image");
+
+ mSliders[xmin]=xminSlider;
+ mSliders[xmax]=xmaxSlider;
+ mSliders[ymin]=yminSlider;
+ mSliders[ymax]=ymaxSlider;
+ mSliders[zmin]=zminSlider;
+ mSliders[zmax]=zmaxSlider;
+ mSliders[tmin]=tminSlider;
+ mSliders[tmax]=tmaxSlider;
+
+ // Record initial extend
+ mReducedExtent = new int[6];
+ mInitialExtent = new int[6];
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
vvToolCropImage::~vvToolCropImage()
{
-
+ delete [] mReducedExtent;
+ delete [] mInitialExtent;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void vvToolCropImage::closeEvent(QCloseEvent *event)
{
- // Reset extends
- for(int i=0; i<mExtentSize; i++) mReducedExtent[i] = mInitialExtent[i];
if(mCurrentSlicerManager){
+// Reset extends
+ for(int i=0; i<mExtentSize; i++){
+ mReducedExtent[i] = mInitialExtent[i];
+ }
UpdateExtent();
}
- event->accept();
+ vvToolWidgetBase::closeEvent(event);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
-void vvToolCropImage::sliderXMinValueChanged(int s)
-{
- xmaxSlider->setMinimum(xminSlider->value());
- mReducedExtent[0] = xminSlider->value();
- UpdateExtent();
-}
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-void vvToolCropImage::sliderXMaxValueChanged(int s)
-{
- xminSlider->setMaximum(xmaxSlider->value());
- mReducedExtent[1] = xmaxSlider->value();
- UpdateExtent();
-}
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-void vvToolCropImage::sliderYMinValueChanged(int s)
-{
- ymaxSlider->setMinimum(yminSlider->value());
- mReducedExtent[2] = yminSlider->value();
- UpdateExtent();
-}
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-void vvToolCropImage::sliderYMaxValueChanged(int s)
-{
- yminSlider->setMaximum(ymaxSlider->value());
- mReducedExtent[3] = ymaxSlider->value();
- UpdateExtent();
-}
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-void vvToolCropImage::sliderZMinValueChanged(int s)
-{
- zmaxSlider->setMinimum(zminSlider->value());
- mReducedExtent[4] = zminSlider->value();
- UpdateExtent();
-}
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-void vvToolCropImage::sliderZMaxValueChanged(int s)
+void vvToolCropImage::sliderValueChanged(int dim)
{
- zminSlider->setMaximum(zmaxSlider->value());
- mReducedExtent[5] = zmaxSlider->value();
- UpdateExtent();
-}
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-void vvToolCropImage::sliderTMinValueChanged(int s) {
- tmaxSlider->setMinimum(tminSlider->value());
- mReducedExtent[6] = tminSlider->value();
- UpdateExtent();
-}
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-void vvToolCropImage::sliderTMaxValueChanged(int s) {
- tminSlider->setMaximum(tmaxSlider->value());
- mReducedExtent[7] = tmaxSlider->value();
+ int dimMin = dim;
+ if(dim%2==0){//case we are minimum
+ mSliders[dim+1]->setMinimum(mSliders[dim]->value());
+ }else {
+ mSliders[--dimMin]->setMaximum(mSliders[dim]->value());
+ }
+ mReducedExtent[dim] = mSliders[dim]->value() + mInitialExtent[dimMin];
UpdateExtent();
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void vvToolCropImage::InputIsSelected(vvSlicerManager * slicer)
{
-
// Change interface according to number of dimension
mExtentSize = 2*slicer->GetDimension();
if (slicer->GetDimension()<4) {
spin_zmax->setHidden(true);
}
- // Record initial extend
- mReducedExtent = new int[mExtentSize];
- mInitialExtent = new int[mExtentSize];
- mReducedExtent = mCurrentSlicerManager->GetImage()->GetFirstVTKImageData()->GetWholeExtent();
- for(int i=0; i<mExtentSize; i++) mInitialExtent[i] = mReducedExtent[i];
+ int *a = mCurrentImage->GetFirstVTKImageData()->GetWholeExtent();
+ for(int i=0; i<6; i++){
+ mInitialExtent[i] = a[i];
+ mReducedExtent[i] = a[i];
+ }
for(int i=0; i<mCurrentSlicerManager->GetNumberOfSlicers(); i++) {
mCurrentSlicerManager->GetSlicer(i)->EnableReducedExtent(true);
+ mCurrentSlicerManager->GetSlicer(i)->SetReducedExtent(mInitialExtent);
}
- // Set initial sliders values
+// Set initial sliders values
std::vector<int> imsize = mCurrentSlicerManager->GetImage()->GetSize();
- xminSlider->setMaximum(imsize[0]-1);
- xmaxSlider->setMaximum(imsize[0]-1);
- xmaxSlider->setValue(imsize[0]-1);
-
- yminSlider->setMaximum(imsize[1]-1);
- ymaxSlider->setMaximum(imsize[1]-1);
- ymaxSlider->setValue(imsize[1]-1);
-
- if (slicer->GetDimension() >2) {
- zminSlider->setMaximum(imsize[2]-1);
- zmaxSlider->setMaximum(imsize[2]-1);
- zmaxSlider->setValue(imsize[2]-1);
- }
-
- if (slicer->GetDimension() >3) {
- tminSlider->setMaximum(imsize[3]-1);
- tmaxSlider->setMaximum(imsize[3]-1);
- tmaxSlider->setValue(imsize[3]-1);
+ for(int dim=0; dim<slicer->GetDimension() && dim<3; ++dim){
+ mSliders[dim*2]->setMaximum(imsize[dim]-1);
+ mSliders[dim*2+1]->setMaximum(imsize[dim]-1);
+ mSliders[dim*2+1]->setValue(imsize[dim]-1);
}
-
spin_xmin->setMaximum(imsize[0]-1);
spin_xmax->setMaximum(imsize[0]-1);
spin_xmax->setValue(imsize[0]-1);
spin_tmax->setValue(imsize[3]-1);
}
- // Connect
- connect(xminSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderXMinValueChanged(int)));
- connect(xmaxSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderXMaxValueChanged(int)));
- connect(yminSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderYMinValueChanged(int)));
- connect(ymaxSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderYMaxValueChanged(int)));
- connect(zminSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderZMinValueChanged(int)));
- connect(zmaxSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderZMaxValueChanged(int)));
- connect(tminSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderTMinValueChanged(int)));
- connect(tmaxSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderTMaxValueChanged(int)));
-
- // connect(mCurrentSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateExtent()));
- //connect(mCurrentSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateExtent()));
-
- // connect(mIntensitySlider, SIGNAL(valueChanged(double)), this, SLOT(autoCropValueChanged(double)));
+ QSignalMapper* signalMapper = new QSignalMapper(this);
+ connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(sliderValueChanged(int)));
+ for(unsigned int i=0; i<mSliders.size(); ++i){
+ signalMapper->setMapping(mSliders[i], i);
+ connect(mSliders[i], SIGNAL(valueChanged(int)), signalMapper, SLOT(map()));
+ }
UpdateExtent();
}
//------------------------------------------------------------------------------
int n = mCurrentSlicerManager->GetDimension()*2; // 2D and 3D only
mArgsInfo.boundingBox_given = n;
mArgsInfo.boundingBox_arg = new int[n];
- mArgsInfo.boundingBox_arg[0] = xminSlider->value();
- mArgsInfo.boundingBox_arg[1] = xmaxSlider->value();
- mArgsInfo.boundingBox_arg[2] = yminSlider->value();
- mArgsInfo.boundingBox_arg[3] = ymaxSlider->value();
- if (n>3) { // 3D
- mArgsInfo.boundingBox_arg[4] = zminSlider->value();
- mArgsInfo.boundingBox_arg[5] = zmaxSlider->value();
+
+ for(int dim=0; dim<mCurrentSlicerManager->GetDimension() && dim<3; ++dim){
+ mArgsInfo.boundingBox_arg[dim*2] = mSliders[dim*2]->value();
+ mArgsInfo.boundingBox_arg[dim*2+1] = mSliders[dim*2+1]->value();
}
-
if (n>6) { // 4D
- // mArgsInfo.boundingBox_arg[6] = tminSlider->value();
- // mArgsInfo.boundingBox_arg[7] = tmaxSlider->value();
mArgsInfo.boundingBox_arg[6] = 0;
mArgsInfo.boundingBox_arg[7] = mCurrentImage->GetSize()[3]-1;
}
-
// We MUST reset initial extend to input image before using the
// filter to retrieve the correct image size
for(int i=0; i<mExtentSize; i++) {
mReducedExtent[i] = mInitialExtent[i];
- // DD(mArgsInfo.boundingBox_arg[i]);
}
+
UpdateExtent();
-
// Main filter
CropFilterType::Pointer filter = CropFilterType::New();
filter->SetInputVVImage(mCurrentImage);
QApplication::restoreOverrideCursor();
close();
}
-
+ std::ostringstream croppedImageName;
+ croppedImageName << "Cropped_" << mCurrentSlicerManager->GetSlicer(0)->GetFileName() << ".mhd";
// Retrieve result and display it
vvImage::Pointer output = filter->GetOutputVVImage();
- std::ostringstream osstream;
- osstream << "Cropped_" << mCurrentSlicerManager->GetSlicer(0)->GetFileName() << ".mhd";
- AddImage(output,osstream.str());
-
+ AddImage(output,croppedImageName.str());
// End
QApplication::restoreOverrideCursor();
close();
-
- /**
- // OLD approach with VTK
-
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
- vvImage::Pointer mResult=vvImage::New();
- vvImage::Pointer image= mCurrentSlicerManager->GetImage();
- for (std::vector<vtkImageData*>::const_iterator i=image->GetVTKImages().begin();
- i!=image->GetVTKImages().end(); i++) {
- vtkSmartPointer<vtkImageClip> filter=vtkSmartPointer<vtkImageClip>::New();
- ///Vtk is very weird, you need to "translate the extent" to get the correct origin
- //http://markmail.org/message/vndc2tr6kcabiakp#query:vtkImageClip%20origin+page:1+mid:6na7y57floutklvz+state:results
- vtkSmartPointer<vtkImageTranslateExtent> translate=vtkSmartPointer<vtkImageTranslateExtent>::New();
- filter->SetInput(*i);
- filter->SetOutputWholeExtent(xminSlider->value(),xmaxSlider->value(),
- yminSlider->value(),ymaxSlider->value(),
- zminSlider->value(),zmaxSlider->value());
- translate->SetTranslation(-xminSlider->value(),-yminSlider->value(),-zminSlider->value());
- translate->SetInput(filter->GetOutput());
- filter->ClipDataOn(); //Really create a cropped copy of the image
- translate->Update();
- vtkImageData* output=vtkImageData::New();
- output->ShallowCopy(translate->GetOutput());
- mResult->AddImage(output);
- }
- QApplication::restoreOverrideCursor();
- std::ostringstream osstream;
- osstream << "Crop_" << mCurrentSlicerManager->GetSlicer(0)->GetFileName() << ".mhd";
- AddImage(mResult, osstream.str());
- close();
-
- **/
}
//------------------------------------------------------------------------------
//qt
#include <QtDesigner/QDesignerExportWidget>
#include <QDialog>
-
+#include <QSlider>
// vv
#include "vvToolBase.h"
#include "vvToolWidgetBase.h"
virtual void apply();
virtual bool close();
virtual void reject();
- void sliderXMinValueChanged(int s);
- void sliderXMaxValueChanged(int s);
- void sliderYMinValueChanged(int s);
- void sliderYMaxValueChanged(int s);
- void sliderZMinValueChanged(int s);
- void sliderZMaxValueChanged(int s);
- void sliderTMinValueChanged(int s);
- void sliderTMaxValueChanged(int s);
void autoCropValueChanged(double v);
+ void sliderValueChanged(int id);
+
//-----------------------------------------------------
static void Initialize() {
void UpdateExtent();
virtual void closeEvent(QCloseEvent *event);
+ std::vector<QSlider*> mSliders;
}; // end class vvToolCropImage
//------------------------------------------------------------------------------