17 #ifndef __itkWarpMeshFilter_txx
18 #define __itkWarpMeshFilter_txx
29 template <
class TInputMesh,
class TOutputMesh,
class TDeformationField>
35 this->SetNumberOfRequiredInputs( 2 );
38 template <
class TInputMesh,
class TOutputMesh,
class TDeformationField>
47 template <
class TInputMesh,
class TOutputMesh,
class TDeformationField>
62 template <
class TInputMesh,
class TOutputMesh,
class TDeformationField>
67 Superclass::PrintSelf(os,indent);
74 template <
class TInputMesh,
class TOutputMesh,
class TDeformationField>
80 typedef typename TInputMesh::PointsContainer InputPointsContainer;
81 typedef typename TOutputMesh::PointsContainer OutputPointsContainer;
83 typedef typename TInputMesh::PointsContainerPointer InputPointsContainerPointer;
84 typedef typename TOutputMesh::PointsContainerPointer OutputPointsContainerPointer;
92 itkExceptionMacro(<<
"Missing Input Mesh");
97 itkExceptionMacro(<<
"Missing Output Mesh");
100 outputMesh->SetBufferedRegion( outputMesh->GetRequestedRegion() );
102 const InputPointsContainer * inPoints = inputMesh->GetPoints();
103 OutputPointsContainerPointer outPoints = outputMesh->GetPoints();
105 outPoints->Reserve( inputMesh->GetNumberOfPoints() );
106 outPoints->Squeeze();
109 typename InputPointsContainer::ConstIterator inputPoint = inPoints->Begin();
110 typename OutputPointsContainer::Iterator outputPoint = outPoints->Begin();
112 typedef typename InputMeshType::PointType InputPointType;
113 typedef typename OutputMeshType::PointType OutputPointType;
114 typedef typename DeformationFieldType::IndexType IndexType;
117 OutputPointType displacedPoint;
121 const unsigned int Dimension = fieldPtr->GetImageDimension();
123 while( inputPoint != inPoints->End() )
125 const InputPointType & originalPoint = inputPoint.Value();
126 fieldPtr->TransformPhysicalPointToIndex( originalPoint, index );
127 displacement = fieldPtr->GetPixel( index );
129 for(
unsigned int i=0; i<Dimension; i++)
131 displacedPoint[i] = originalPoint[i] + displacement[i];
134 outputPoint.Value() = displacedPoint;
143 this->CopyInputMeshToOutputMeshPointData();
144 this->CopyInputMeshToOutputMeshCells();
145 this->CopyInputMeshToOutputMeshCellLinks();
146 this->CopyInputMeshToOutputMeshCellData();
148 unsigned int maxDimension = TInputMesh::MaxTopologicalDimension;
150 for(
unsigned int dim = 0; dim < maxDimension; dim++ )
152 outputMesh->SetBoundaryAssignments( dim,
153 inputMesh->GetBoundaryAssignments(dim) );