20 #include <vtkPlaneSource.h> 21 #include <vtkPolyData.h> 22 #include <vtkTransformPolyDataFilter.h> 25 #include <vtkClipPolyData.h> 26 #include <vtkCubeSource.h> 27 #include <vtkCutter.h> 28 #include <vtkGeneralTransform.h> 29 #include <vtkPPolyDataNormals.h> 31 #include <vtkStripper.h> 32 #include <vtkTextureMapToPlane.h> 33 #include <vtkTransform.h> 34 #include <vtkTransformPolyDataFilter.h> 35 #include <vtkTriangleFilter.h> 38 : m_UseGeometryParametricBounds(true),
41 m_PlaceByGeometry(false),
42 m_UseBoundingBox(false)
58 m_Box = vtkBox::New();
92 if (input.IsNull() || (input->GetPlaneGeometry() ==
nullptr) || (input->GetPlaneGeometry()->IsValid() ==
false) ||
101 vtkPolyData *planeSurface =
nullptr;
104 if (
auto *abstractGeometry =
105 dynamic_cast<AbstractTransformGeometry *>(input->GetPlaneGeometry()))
112 origin = abstractGeometry->GetPlane()->GetOrigin();
113 right = origin + abstractGeometry->GetPlane()->GetAxisVector(0);
114 bottom = origin + abstractGeometry->GetPlane()->GetAxisVector(1);
126 m_PlaneSource->SetXResolution((
int)abstractGeometry->GetParametricExtent(0));
127 m_PlaneSource->SetYResolution((
int)abstractGeometry->GetParametricExtent(1));
144 vtkGeneralTransform *composedResliceTransform = vtkGeneralTransform::New();
145 composedResliceTransform->Identity();
146 composedResliceTransform->Concatenate(abstractGeometry->GetVtkTransform()->GetLinearInverse());
147 composedResliceTransform->Concatenate(abstractGeometry->GetVtkAbstractTransform());
159 mitk::BoundingBox::PointType boundingBoxMin =
m_BoundingBox->GetMinimum();
160 mitk::BoundingBox::PointType boundingBoxMax =
m_BoundingBox->GetMaximum();
163 m_Box->SetXMin(boundingBoxMin[0], boundingBoxMin[1], boundingBoxMin[2]);
164 m_Box->SetXMax(boundingBoxMax[0], boundingBoxMax[1], boundingBoxMax[2]);
169 m_Box->SetXMin(-10000.0, -10000.0, -10000.0);
170 m_Box->SetXMax(10000.0, 10000.0, 10000.0);
174 m_Transform->Concatenate(input->GetPlaneGeometry()->GetVtkTransform());
189 else if (dynamic_cast<PlaneGeometry *>(input->GetPlaneGeometry()) !=
nullptr)
191 auto *planeGeometry =
dynamic_cast<PlaneGeometry *
>(input->GetPlaneGeometry());
212 FillVector3D(right, planeGeometry->GetExtent(0), 0.0, 0.0);
213 FillVector3D(bottom, 0.0, planeGeometry->GetExtent(1), 0.0);
218 origin = planeGeometry->GetOrigin();
219 right = planeGeometry->GetCornerPoint(
false,
true);
220 bottom = planeGeometry->GetCornerPoint(
true,
false);
245 mitk::BoundingBox::PointType boundingBoxMin =
m_BoundingBox->GetMinimum();
246 mitk::BoundingBox::PointType boundingBoxMax =
m_BoundingBox->GetMaximum();
247 mitk::BoundingBox::PointType boundingBoxCenter =
m_BoundingBox->GetCenter();
249 m_CubeSource->SetXLength(boundingBoxMax[0] - boundingBoxMin[0]);
250 m_CubeSource->SetYLength(boundingBoxMax[1] - boundingBoxMin[1]);
251 m_CubeSource->SetZLength(boundingBoxMax[2] - boundingBoxMin[2]);
252 m_CubeSource->SetCenter(boundingBoxCenter[0], boundingBoxCenter[1], boundingBoxCenter[2]);
260 m_Transform->Concatenate(planeGeometry->GetVtkTransform()->GetLinearInverse());
262 const BaseGeometry *referenceGeometry = planeGeometry->GetReferenceGeometry();
263 if (referenceGeometry)
273 m_Plane->SetOrigin(0.0, 0.0, 0.0);
274 m_Plane->SetNormal(0.0, 0.0, 1.0);
300 origin[0] = surfaceBounds[0];
301 origin[1] = surfaceBounds[2];
302 origin[2] = surfaceBounds[4];
304 right[0] = surfaceBounds[1];
305 right[1] = surfaceBounds[2];
306 right[2] = surfaceBounds[4];
308 bottom[0] = surfaceBounds[0];
309 bottom[1] = surfaceBounds[3];
310 bottom[2] = surfaceBounds[4];
336 output->CalculateBoundingBox();
345 if (output->GetVtkPolyData() ==
nullptr)
353 if (this->GetNumberOfInputs() < 1)
369 this->ProcessObject::SetNthInput(0, const_cast<mitk::PlaneGeometryData *>(input));
374 if (index + 1 > this->GetNumberOfInputs())
376 this->SetNumberOfRequiredInputs(index + 1);
379 this->ProcessObject::SetNthInput(index, const_cast<mitk::PlaneGeometryData *>(input));
const BoundingBox * GetBoundingBox() const
itk::BoundingBox< unsigned long, 3, ScalarType > BoundingBox
Standard 3D-BoundingBox typedef.
void SetIndexToWorldTransform(mitk::AffineTransform3D *transform)
const PlaneGeometryData * GetInput(void)
void GenerateOutputInformation() override
virtual void SetInput(const PlaneGeometryData *image)
int m_XResolution
X-resolution in parameter space.
void GenerateData() override
vtkLinearTransform * GetVtkTransform() const
Get the m_IndexToWorldTransform as a vtkLinearTransform.
GeometryTransformHolder::TransformType TransformType
~PlaneGeometryDataToSurfaceFilter() override
bool m_PlaceByGeometry
Define whether the Surface is at the origin and placed using the Geometry.
vtkClipPolyData * m_PlaneClipper
void FillVector3D(Tout &out, mitk::ScalarType x, mitk::ScalarType y, mitk::ScalarType z)
PlaneGeometryDataToSurfaceFilter()
BoundingBox::ConstPointer m_BoundingBox
vtkPPolyDataNormals * m_NormalsUpdater
vtkTextureMapToPlane * m_TextureMapToPlane
void SetBoundingBox(const BoundingBox *boundingBox)
vtkTriangleFilter * m_PlaneTriangler
virtual void UseBoundingBoxOn()
vtkTransform * m_Transform
vtkPolyData * m_PlanePolyData
Data class containing PlaneGeometry objects.
vtkCubeSource * m_CubeSource
int m_YResolution
Y-resolution in parameter space.
vtkPlaneSource * m_PlaneSource
Source to create the vtk-representation of the parameter space rectangle of the PlaneGeometry.
vtkCutter * m_PlaneCutter
vtkTransformPolyDataFilter * m_PolyDataTransformer
virtual BaseGeometry::Pointer GetGeometryForTimeStep(TimeStepType timeStep) const =0
Returns the geometry which corresponds to the given time step.
vtkTransformPolyDataFilter * m_VtkTransformPlaneFilter
Filter to create the vtk-representation of the PlaneGeometry, which is a transformation of the m_Plan...
MITKCORE_EXPORT const ScalarType eps
Describes a two-dimensional, rectangular plane.
vtkStripper * m_PlaneStripper
BaseGeometry Describes the geometry of a data object.
bool m_UseGeometryParametricBounds
If true, use Geometry3D::GetParametricBounds() to define the resolution in parameter space...
mitk::AffineTransform3D * GetIndexToWorldTransform()
Get the transformation used to convert from index to world coordinates.