Skip to content

Commit dffeee0

Browse files
authored
Merge pull request #2 from thewtex/to-polydata
To polydata
2 parents 2b7cd5e + 7c21820 commit dffeee0

File tree

7 files changed

+100
-68
lines changed

7 files changed

+100
-68
lines changed

include/itkMeshToPolyDataFilter.h

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#ifndef itkMeshToPolyDataFilter_h
1919
#define itkMeshToPolyDataFilter_h
2020

21-
#include "itkImageToImageFilter.h"
21+
#include "itkProcessObject.h"
2222

2323
namespace itk
2424
{
@@ -33,49 +33,47 @@ namespace itk
3333
* \ingroup MeshToPolyData
3434
*
3535
*/
36-
template< typename TInputImage, typename TOutputImage >
37-
class MeshToPolyDataFilter: public ImageToImageFilter< TInputImage, TOutputImage >
36+
template< typename TInputMesh >
37+
class MeshToPolyDataFilter: public ProcessObject
3838
{
3939
public:
4040
ITK_DISALLOW_COPY_AND_ASSIGN(MeshToPolyDataFilter);
4141

42-
static constexpr unsigned int InputImageDimension = TInputImage::ImageDimension;
43-
static constexpr unsigned int OutputImageDimension = TOutputImage::ImageDimension;
42+
static constexpr unsigned int PointDimension = TInputMesh::PointDimension;
4443

45-
using InputImageType = TInputImage;
46-
using OutputImageType = TInputImage;
47-
using InputPixelType = typename InputImageType::PixelType;
48-
using OutputPixelType = typename OutputImageType::PixelType;
44+
using InputMeshType = TInputMesh;
4945

5046
/** Standard class typedefs. */
51-
using Self = MeshToPolyDataFilter< InputImageType, OutputImageType >;
52-
using Superclass = ImageToImageFilter< InputImageType, OutputImageType >;
47+
using Self = MeshToPolyDataFilter< InputMeshType >;
48+
using Superclass = ProcessObject;
5349
using Pointer = SmartPointer< Self >;
5450
using ConstPointer = SmartPointer< const Self >;
5551

5652
/** Run-time type information. */
57-
itkTypeMacro( MeshToPolyDataFilter, ImageToImageFilter );
53+
itkTypeMacro( MeshToPolyDataFilter, ProcessObject );
5854

5955
/** Standard New macro. */
6056
itkNewMacro( Self );
6157

58+
/** Set the mesh input of this process object. */
59+
using Superclass::SetInput;
60+
void SetInput(const InputMeshType *input);
61+
62+
/** Get the mesh input of this process object. */
63+
const InputMeshType * GetInput() const;
64+
65+
const InputMeshType * GetInput(unsigned int idx) const;
66+
6267
protected:
6368
MeshToPolyDataFilter();
64-
virtual ~MeshToPolyDataFilter() override {}
69+
~MeshToPolyDataFilter() override {}
6570

6671
void PrintSelf( std::ostream& os, Indent indent ) const override;
6772

68-
typedef typename OutputImageType::RegionType OutputRegionType;
69-
70-
virtual void DynamicThreadedGenerateData( const OutputRegionType & outputRegion) override;
73+
void GenerateData() override;
7174

7275
private:
7376

74-
75-
#ifdef ITK_USE_CONCEPT_CHECKING
76-
// Add concept checking such as
77-
// itkConceptMacro( FloatingPointPixel, ( itk::Concept::IsFloatingPoint< typename InputImageType::PixelType > ) );
78-
#endif
7977
};
8078
}
8179

include/itkMeshToPolyDataFilter.hxx

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,45 +20,60 @@
2020

2121
#include "itkMeshToPolyDataFilter.h"
2222

23-
#include "itkImageRegionIterator.h"
24-
#include "itkImageRegionConstIterator.h"
25-
2623
namespace itk
2724
{
2825

29-
template< typename TInputImage, typename TOutputImage >
30-
MeshToPolyDataFilter< TInputImage, TOutputImage >
26+
template< typename TInputMesh >
27+
MeshToPolyDataFilter< TInputMesh >
3128
::MeshToPolyDataFilter()
3229
{
30+
// Modify superclass default values, can be overridden by subclasses
31+
this->SetNumberOfRequiredInputs(1);
3332
}
3433

3534

36-
template< typename TInputImage, typename TOutputImage >
35+
template< typename TInputMesh >
3736
void
38-
MeshToPolyDataFilter< TInputImage, TOutputImage >
37+
MeshToPolyDataFilter< TInputMesh >
3938
::PrintSelf( std::ostream& os, Indent indent ) const
4039
{
4140
Superclass::PrintSelf( os, indent );
4241
}
4342

4443

45-
template< typename TInputImage, typename TOutputImage >
44+
template< typename TInputMesh >
4645
void
47-
MeshToPolyDataFilter< TInputImage, TOutputImage >
48-
::DynamicThreadedGenerateData( const OutputRegionType & outputRegion)
46+
MeshToPolyDataFilter< TInputMesh >
47+
::SetInput(const TInputMesh *input)
48+
{
49+
// Process object is not const-correct so the const_cast is required here
50+
this->ProcessObject::SetNthInput( 0, const_cast< TInputMesh * >( input ) );
51+
}
52+
53+
54+
template< typename TInputMesh >
55+
const typename MeshToPolyDataFilter< TInputMesh >::InputMeshType *
56+
MeshToPolyDataFilter< TInputMesh >
57+
::GetInput() const
58+
{
59+
return itkDynamicCastInDebugMode< const TInputMesh * >( this->GetPrimaryInput() );
60+
}
61+
62+
63+
template< typename TInputMesh >
64+
const typename MeshToPolyDataFilter< TInputMesh >::InputMeshType *
65+
MeshToPolyDataFilter< TInputMesh >
66+
::GetInput(unsigned int idx) const
4967
{
50-
OutputImageType * output = this->GetOutput();
51-
const InputImageType * input = this->GetInput();
52-
using InputRegionType = typename InputImageType::RegionType;
53-
InputRegionType inputRegion = InputRegionType(outputRegion.GetSize());
68+
return dynamic_cast< const TInputMesh * > ( this->ProcessObject::GetInput(idx) );
69+
}
5470

55-
itk::ImageRegionConstIterator<InputImageType> in(input, inputRegion);
56-
itk::ImageRegionIterator<OutputImageType> out(output, outputRegion);
5771

58-
for (in.GoToBegin(), out.GoToBegin(); !in.IsAtEnd() && !out.IsAtEnd(); ++in, ++out)
59-
{
60-
out.Set( in.Get() );
61-
}
72+
template< typename TInputMesh >
73+
void
74+
MeshToPolyDataFilter< TInputMesh >
75+
::GenerateData()
76+
{
6277
}
6378

6479
} // end namespace itk

itk-module.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ itk_module(MeshToPolyData
1818
ITKMesh
1919
TEST_DEPENDS
2020
ITKTestKernel
21+
ITKIOMeshVTK
2122
DESCRIPTION
2223
"${DOCUMENTATION}"
2324
EXCLUDE_FROM_DEFAULT

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,6 @@
4444
keywords='ITK InsightToolkit',
4545
url=r'https://itk.org/',
4646
install_requires=[
47-
r'itk'
47+
r'itk>=5.0rc1'
4848
]
4949
)

test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ itk_add_test(NAME itkMeshToPolyDataFilterTest
1010
COMMAND MeshToPolyDataTestDriver
1111
itkMeshToPolyDataFilterTest
1212
DATA{Input/cow.vtk}
13+
${ITK_TEST_OUTPUT_DIR}/itkMeshToPolyDataFilterTest.vtk
1314
)

test/itkMeshToPolyDataFilterTest.cxx

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
#include "itkMeshToPolyDataFilter.h"
2020

2121
#include "itkCommand.h"
22-
#include "itkImageFileWriter.h"
22+
#include "itkMeshFileReader.h"
23+
#include "itkMesh.h"
2324
#include "itkTestingMacros.h"
2425

2526
namespace{
@@ -51,45 +52,54 @@ class ShowProgress : public itk::Command
5152
};
5253
}
5354

55+
5456
int itkMeshToPolyDataFilterTest( int argc, char * argv[] )
5557
{
56-
if( argc < 2 )
58+
if( argc < 3 )
5759
{
5860
std::cerr << "Usage: " << argv[0];
59-
std::cerr << " outputImage";
61+
std::cerr << " inputMesh outputPolyData";
6062
std::cerr << std::endl;
6163
return EXIT_FAILURE;
6264
}
63-
const char * outputImageFileName = argv[1];
65+
const char * inputMeshFileName = argv[1];
66+
const char * outputPolyDataFileName = argv[1];
6467

65-
const unsigned int Dimension = 2;
68+
const unsigned int Dimension = 3;
6669
using PixelType = float;
67-
using ImageType = itk::Image< PixelType, Dimension >;
70+
using MeshType = itk::Mesh< PixelType, Dimension >;
71+
72+
using MeshReaderType = itk::MeshFileReader< MeshType >;
73+
MeshReaderType::Pointer meshReader = MeshReaderType::New();
74+
meshReader->SetFileName( inputMeshFileName );
75+
meshReader->Update();
6876

69-
using FilterType = itk::MeshToPolyDataFilter< ImageType, ImageType >;
77+
using FilterType = itk::MeshToPolyDataFilter< MeshType >;
7078
FilterType::Pointer filter = FilterType::New();
7179

72-
EXERCISE_BASIC_OBJECT_METHODS( filter, MeshToPolyDataFilter, ImageToImageFilter );
80+
EXERCISE_BASIC_OBJECT_METHODS( filter, MeshToPolyDataFilter, ProcessObject );
81+
82+
filter->SetInput( meshReader->GetOutput() );
7383

74-
// Create input image to avoid test dependencies.
75-
ImageType::SizeType size;
76-
size.Fill( 128 );
77-
ImageType::Pointer image = ImageType::New();
78-
image->SetRegions( size );
79-
image->Allocate();
80-
image->FillBuffer(1.1f);
84+
//// Create input image to avoid test dependencies.
85+
//ImageType::SizeType size;
86+
//size.Fill( 128 );
87+
//ImageType::Pointer image = ImageType::New();
88+
//image->SetRegions( size );
89+
//image->Allocate();
90+
//image->FillBuffer(1.1f);
8191

82-
ShowProgress::Pointer showProgress = ShowProgress::New();
83-
filter->AddObserver( itk::ProgressEvent(), showProgress );
84-
filter->SetInput(image);
92+
//ShowProgress::Pointer showProgress = ShowProgress::New();
93+
//filter->AddObserver( itk::ProgressEvent(), showProgress );
94+
//filter->SetInput(image);
8595

86-
typedef itk::ImageFileWriter< ImageType > WriterType;
87-
WriterType::Pointer writer = WriterType::New();
88-
writer->SetFileName( outputImageFileName );
89-
writer->SetInput( filter->GetOutput() );
90-
writer->SetUseCompression(true);
96+
//typedef itk::ImageFileWriter< ImageType > WriterType;
97+
//WriterType::Pointer writer = WriterType::New();
98+
//writer->SetFileName( outputImageFileName );
99+
//writer->SetInput( filter->GetOutput() );
100+
//writer->SetUseCompression(true);
91101

92-
TRY_EXPECT_NO_EXCEPTION( writer->Update() );
102+
TRY_EXPECT_NO_EXCEPTION( filter->Update() );
93103

94104

95105
return EXIT_SUCCESS;

wrapping/itkMeshToPolyDataFilter.wrap

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1+
itk_wrap_include("itkMesh.h")
2+
itk_wrap_include("itkDefaultStaticMeshTraits.h")
3+
14
itk_wrap_class("itk::MeshToPolyDataFilter" POINTER)
2-
itk_wrap_image_filter("${WRAP_ITK_SCALAR}" 2)
5+
UNIQUE(types "${WRAP_ITK_SCALAR};D")
6+
foreach(d ${ITK_WRAP_IMAGE_DIMS})
7+
foreach(t ${types})
8+
itk_wrap_template("M${ITKM_${t}}${d}" "itk::Mesh< ${ITKT_${t}},${d} >")
9+
endforeach()
10+
endforeach()
311
itk_end_wrap_class()
4-

0 commit comments

Comments
 (0)