24 #include <vtkCellArray.h> 25 #include <vtkFloatArray.h> 26 #include <vtkGlyph3D.h> 27 #include <vtkGlyphSource2D.h> 29 #include <vtkPointData.h> 30 #include <vtkPolyDataMapper.h> 31 #include <vtkPropAssembly.h> 32 #include <vtkTextActor.h> 33 #include <vtkTextProperty.h> 34 #include <vtkTransform.h> 35 #include <vtkTransformFilter.h> 135 if ((fabs(in[0]) > 0) && ((fabs(in[0]) > fabs(in[1])) || (in[1] == 0)))
138 out[0] = -in[1] / in[0];
143 else if (fabs(in[1]) > 0)
147 out[1] = -in[0] / in[1];
199 mitk::PointSet::DataType::Pointer itkPointSet = input->GetPointSet(timestep);
201 if (itkPointSet.GetPointer() ==
nullptr)
208 mitk::PointSet::PointsContainer::Iterator pointsIter = itkPointSet->GetPoints()->Begin();
212 mitk::PointSet::PointDataContainer::Iterator pointDataIter;
213 pointDataIter = itkPointSet->GetPointData()->Begin();
218 bool pointDataBroken = (itkPointSet->GetPointData()->Size() != itkPointSet->GetPoints()->Size());
220 if (itkPointSet->GetPointData()->size() == 0 || pointDataBroken)
247 int NumberContourPoints = 0;
248 bool pointsOnSameSideOfPlane =
false;
250 const int text2dDistance = 10;
255 itk::Point<ScalarType> point = pointsIter->Value();
272 vtkLinearTransform *dataNodeTransform = input->GetGeometry()->GetVtkTransform();
276 for (pointsIter = itkPointSet->GetPoints()->Begin(); pointsIter != itkPointSet->GetPoints()->End(); pointsIter++)
279 preLastPt2d = lastPt2d;
285 point = pointsIter->Value();
291 dataNodeTransform->TransformPoint(vtkp, vtkp);
304 float dist = geo2D->
Distance(point);
311 if (pointDataIter->Value().selected)
326 if (dynamic_cast<mitk::StringProperty *>(this->
GetDataNode()->GetProperty(
"label")) !=
nullptr)
328 const char *pointLabel =
330 std::string l = pointLabel;
331 if (input->GetSize() > 1)
333 std::stringstream ss;
334 ss << pointsIter->Index();
340 ls->
m_VtkTextActor->SetDisplayPosition(pt2d[0] + text2dDistance, pt2d[1] + text2dDistance);
344 float unselectedColor[4] = {1.0, 1.0, 0.0, 1.0};
349 ls->
m_VtkTextActor->GetTextProperty()->SetColor(unselectedColor[0], unselectedColor[1], unselectedColor[2]);
363 pointsOnSameSideOfPlane = (distance * lastDistance) > 0.5;
369 vtkSmartPointer<vtkLine>
line = vtkSmartPointer<vtkLine>::New();
372 line->GetPointIds()->SetId(0, NumberContourPoints);
373 NumberContourPoints++;
376 line->GetPointIds()->SetId(1, NumberContourPoints);
377 NumberContourPoints++;
383 float distancePoints = point.EuclideanDistanceTo(lastP);
385 std::stringstream buffer;
392 Vector2D pos2d = (lastPt2d.GetVectorFromOrigin() + pt2d.GetVectorFromOrigin()) * 0.5 + vec2d * text2dDistance;
405 std::stringstream buffer;
406 buffer << angle(vec.GetVnlVector(), -lastVec.GetVnlVector()) * 180 / vnl_math::pi <<
"°";
411 Vector2D lastVec2d = lastPt2d - preLastPt2d;
412 lastVec2d.Normalize();
413 vec2d = vec2d - lastVec2d;
417 Vector2D pos2d = lastPt2d.GetVectorFromOrigin() + vec2d * text2dDistance * text2dDistance;
430 if (pointDataIter != itkPointSet->GetPointData()->End())
461 vtkSmartPointer<vtkLine> closingLine = vtkSmartPointer<vtkLine>::New();
462 closingLine->GetPointIds()->SetId(0, 0);
463 closingLine->GetPointIds()->SetId(1, NumberContourPoints - 1);
479 vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
480 vtkSmartPointer<vtkMatrix4x4> a, b = vtkSmartPointer<vtkMatrix4x4>::New();
486 b->SetElement(3, 3, 1);
487 b->SetElement(2, 3, 0);
488 b->SetElement(1, 3, 0);
489 b->SetElement(0, 3, 0);
490 b->SetElement(3, 2, 0);
491 b->SetElement(3, 1, 0);
492 b->SetElement(3, 0, 0);
497 b->SetElement(0, 0, b->GetElement(0, 0) / spacing[0]);
498 b->SetElement(1, 0, b->GetElement(1, 0) / spacing[0]);
499 b->SetElement(2, 0, b->GetElement(2, 0) / spacing[0]);
500 b->SetElement(1, 1, b->GetElement(1, 1) / spacing[1]);
501 b->SetElement(2, 1, b->GetElement(2, 1) / spacing[1]);
503 b->SetElement(0, 2, b->GetElement(0, 2) / spacing[2]);
504 b->SetElement(1, 2, b->GetElement(1, 2) / spacing[2]);
505 b->SetElement(2, 2, b->GetElement(2, 2) / spacing[2]);
507 transform->SetMatrix(b);
520 vtkSmartPointer<vtkTransformFilter> transformFilterU = vtkSmartPointer<vtkTransformFilter>::New();
522 transformFilterU->SetTransform(transform);
546 vtkSmartPointer<vtkTransformFilter> transformFilterS = vtkSmartPointer<vtkTransformFilter>::New();
548 transformFilterS->SetTransform(transform);
606 if (node->
GetIntProperty(
"point 2D size", oldPointSize, renderer))
616 if (shape.IsNotNull())
631 float unselectedColor[4];
641 if (dynamic_cast<mitk::ColorProperty *>(
642 this->
GetDataNode()->GetPropertyList(renderer)->GetProperty(
"selectedcolor")) !=
nullptr)
647 selectedColor[0] = tmpColor[0];
648 selectedColor[1] = tmpColor[1];
649 selectedColor[2] = tmpColor[2];
650 selectedColor[3] = 1.0f;
652 else if (dynamic_cast<mitk::ColorProperty *>(
653 this->
GetDataNode()->GetPropertyList(
nullptr)->GetProperty(
"selectedcolor")) !=
nullptr)
658 selectedColor[0] = tmpColor[0];
659 selectedColor[1] = tmpColor[1];
660 selectedColor[2] = tmpColor[2];
661 selectedColor[3] = 1.0f;
667 ls->
m_UnselectedActor->GetProperty()->SetColor(unselectedColor[0], unselectedColor[1], unselectedColor[2]);
678 double contourColor[4] = {1.0f, 0.0f, 0.0f, 1.0f};
682 if (dynamic_cast<mitk::ColorProperty *>(
683 this->
GetDataNode()->GetPropertyList(renderer)->GetProperty(
"contourcolor")) !=
nullptr)
688 contourColor[0] = tmpColor[0];
689 contourColor[1] = tmpColor[1];
690 contourColor[2] = tmpColor[2];
691 contourColor[3] = 1.0f;
693 else if (dynamic_cast<mitk::ColorProperty *>(
694 this->
GetDataNode()->GetPropertyList(
nullptr)->GetProperty(
"contourcolor")) !=
nullptr)
699 contourColor[0] = tmpColor[0];
700 contourColor[1] = tmpColor[1];
701 contourColor[2] = tmpColor[2];
702 contourColor[3] = 1.0f;
713 if (needGenerateData)
738 node->
AddProperty(
"Pointset.2D.shape", pointsetShapeProperty, renderer, overwrite);
std::vector< vtkSmartPointer< vtkTextActor > > m_VtkTextLabelActors
mitk::BaseProperty * GetProperty(const char *propertyKey, const mitk::BaseRenderer *renderer=nullptr, bool fallBackOnDataProperties=true) const
Get the property (instance of BaseProperty) with key propertyKey from the PropertyList of the rendere...
virtual ScalarType SignedDistance(const Point3D &pt3d_mm) const
L * GetLocalStorage(mitk::BaseRenderer *forRenderer)
Retrieves a LocalStorage for a specific BaseRenderer.
vtkSmartPointer< vtkPropAssembly > m_PropAssembly
vtkSmartPointer< vtkActor > m_ContourActor
bool IsGenerateDataRequired(mitk::BaseRenderer *renderer, mitk::Mapper *mapper, mitk::DataNode *dataNode) const
virtual DataNode * GetDataNode() const
Get the DataNode containing the data to map. Method only returns valid DataNode Pointer if the mapper...
vtkSmartPointer< vtkActor > m_UnselectedActor
vtkLinearTransform * GetVtkTransform() const
Get the m_IndexToWorldTransform as a vtkLinearTransform.
vtkSmartPointer< vtkPolyDataMapper > m_VtkSelectedPolyDataMapper
bool GetFloatProperty(const char *propertyKey, float &floatValue, const mitk::BaseRenderer *renderer=nullptr) const
Convenience access method for float properties (instances of FloatProperty)
Organizes the rendering process.
vtkSmartPointer< vtkGlyph3D > m_UnselectedGlyph3D
DataCollection - Class to facilitate loading/accessing structured data.
virtual const PlaneGeometry * GetCurrentWorldPlaneGeometry()
Get the current 2D-worldgeometry (m_CurrentWorldPlaneGeometry) used for 2D-rendering.
vtkSmartPointer< vtkPolyData > m_VtkUnselectedPointListPolyData
vtkSmartPointer< vtkFloatArray > m_DistancesBetweenPoints
mitk::LocalStorageHandler< LocalStorage > m_LSH
The LocalStorageHandler holds all (three) LocalStorages for the three 2D render windows.
bool GetBoolProperty(const char *propertyKey, bool &boolValue, const mitk::BaseRenderer *renderer=nullptr) const
Convenience access method for bool properties (instances of BoolProperty)
vtkSmartPointer< vtkPoints > m_SelectedPoints
bool GetOpacity(float &opacity, const mitk::BaseRenderer *renderer, const char *propertyKey="opacity") const
Convenience access method for opacity properties (instances of FloatProperty)
void WorldToDisplay(const Point3D &worldIndex, Point2D &displayPoint) const
This method converts a 3D world index to the display point using the geometry of the renderWindow...
vtkProp * GetVtkProp(mitk::BaseRenderer *renderer) override
returns the a prop assembly
bool GetIntProperty(const char *propertyKey, int &intValue, const mitk::BaseRenderer *renderer=nullptr) const
Convenience access method for int properties (instances of IntProperty)
vtkSmartPointer< vtkFloatArray > m_UnselectedScales
vtkSmartPointer< vtkPolyDataMapper > m_VtkContourPolyDataMapper
~PointSetVtkMapper2D() override
std::vector< vtkSmartPointer< vtkTextActor > > m_VtkTextAngleActors
vtkSmartPointer< vtkPolyDataMapper > m_VtkUnselectedPolyDataMapper
vtkSmartPointer< vtkFloatArray > m_SelectedScales
vtkSmartPointer< vtkPoints > m_UnselectedPoints
The ColorProperty class RGB color property.
BaseData * GetData() const
Get the data object (instance of BaseData, e.g., an Image) managed by this DataNode.
vtkSmartPointer< vtkPolyData > m_VtkSelectedPointListPolyData
void AddProperty(const char *propertyKey, BaseProperty *property, const mitk::BaseRenderer *renderer=nullptr, bool overwrite=false)
Add the property (instance of BaseProperty) if it does not exist (or always ifoverwrite istrue) with ...
Data structure which stores a set of points. Superclass of mitk::Mesh.
static void SetDefaultProperties(mitk::DataNode *node, mitk::BaseRenderer *renderer=nullptr, bool overwrite=false)
set the default properties for this mapper
bool GetColor(float rgb[3], const mitk::BaseRenderer *renderer=nullptr, const char *propertyKey="color") const
Convenience access method for color properties (instances of ColorProperty)
vtkSmartPointer< vtkPolyData > m_VtkContourPolyData
Internal class holding the mapper, actor, etc. for each of the 3 2D render windows.
vtkSmartPointer< vtkPoints > m_ContourPoints
bool GetVisibility(bool &visible, const mitk::BaseRenderer *renderer, const char *propertyKey="visible") const
Convenience access method for visibility properties (instances of BoolProperty with property-key "vis...
vtkSmartPointer< vtkActor > m_SelectedActor
vtkSmartPointer< vtkCellArray > m_ContourLines
void vtk2itk(const Tin &in, Tout &out)
vtkSmartPointer< vtkGlyphSource2D > m_SelectedGlyphSource2D
vtkSmartPointer< vtkGlyph3D > m_SelectedGlyph3D
int m_DistancesDecimalDigits
vtkSmartPointer< vtkTextActor > m_VtkTextActor
itk::RGBPixel< float > Color
Color Standard RGB color typedef (float)
mitk::PropertyList * GetPropertyList(const mitk::BaseRenderer *renderer=nullptr) const
Get the PropertyList of the renderer. If renderer is nullptr, the BaseRenderer-independent PropertyLi...
static bool in(Reader::Char c, Reader::Char c1, Reader::Char c2, Reader::Char c3, Reader::Char c4)
void itk2vtk(const Tin &in, Tout &out)
vtkSmartPointer< vtkGlyphSource2D > m_UnselectedGlyphSource2D
const mitk::Vector3D GetSpacing() const
Get the spacing (size of a pixel).
void ResetMapper(BaseRenderer *renderer) override
Reset the mapper (i.e., make sure that nothing is displayed) if no valid data is present. In most cases the reimplemented function disables the according actors (toggling visibility off)
const float selectedColor[]
int GetTimestep() const
Returns the current time step as calculated from the renderer.
ScalarType Distance(const Point3D &pt3d_mm) const
Distance of the point from the geometry (bounding-box not considered)
mitk::BaseProperty * GetProperty(const std::string &propertyKey) const
Get a property by its name.
virtual void CreateVTKRenderObjects(mitk::BaseRenderer *renderer)
Describes a two-dimensional, rectangular plane.
std::vector< vtkSmartPointer< vtkTextActor > > m_VtkTextDistanceActors
void GenerateDataForRenderer(mitk::BaseRenderer *renderer) override
Generate the data needed for rendering into renderer.
virtual const mitk::PointSet * GetInput() const
Class for nodes of the DataTree.
static void SetDefaultProperties(DataNode *node, BaseRenderer *renderer=nullptr, bool overwrite=false)
Set default values of properties used by this mapper to node.
static bool makePerpendicularVector2D(const mitk::Vector2D &in, mitk::Vector2D &out)