15 #include <vtkActor2D.h> 16 #include <vtkIntArray.h> 17 #include <vtkLabelPlacementMapper.h> 18 #include <vtkPointData.h> 19 #include <vtkPointSetToLabelHierarchy.h> 20 #include <vtkPolyData.h> 21 #include <vtkPolyDataMapper.h> 22 #include <vtkProperty2D.h> 23 #include <vtkStringArray.h> 24 #include <vtkTextProperty.h> 32 if (m_LabelCoordinates.IsNotNull())
33 m_LabelCoordinates->RemoveObserver(m_PointSetModifiedObserverTag);
49 m_Points = vtkSmartPointer<vtkPolyData>::New();
52 m_Labels = vtkSmartPointer<vtkStringArray>::New();
53 m_Labels->SetNumberOfValues(0);
54 m_Labels->SetName(
"labels");
57 m_Sizes = vtkSmartPointer<vtkIntArray>::New();
58 m_Sizes->SetNumberOfValues(0);
59 m_Sizes->SetName(
"sizes");
61 m_Points->GetPointData()->AddArray(m_Sizes);
62 m_Points->GetPointData()->AddArray(m_Labels);
64 m_PointSetToLabelHierarchyFilter = vtkSmartPointer<vtkPointSetToLabelHierarchy>::New();
65 m_PointSetToLabelHierarchyFilter->SetInputData(m_Points);
66 m_PointSetToLabelHierarchyFilter->SetLabelArrayName(
"labels");
67 m_PointSetToLabelHierarchyFilter->SetPriorityArrayName(
"sizes");
68 m_PointSetToLabelHierarchyFilter->Update();
70 m_LabelMapper = vtkSmartPointer<vtkLabelPlacementMapper>::New();
71 m_LabelMapper->SetInputConnection(m_PointSetToLabelHierarchyFilter->GetOutputPort());
73 m_LabelsActor = vtkSmartPointer<vtkActor2D>::New();
74 m_LabelsActor->SetMapper(m_LabelMapper);
79 if (m_LabelCoordinates.IsNull())
81 MITK_WARN <<
"No pointset defined to print labels!";
88 vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
90 auto pointsetsize = (size_t)m_LabelCoordinates->GetSize();
91 ls->
m_Labels->SetNumberOfValues(pointsetsize);
92 ls->
m_Sizes->SetNumberOfValues(pointsetsize);
94 for (
size_t i = 0; i < pointsetsize; i++)
100 if (m_LabelVector.size() > i)
101 ls->
m_Labels->SetValue(i, m_LabelVector[i]);
105 if (m_PriorityVector.size() > i)
106 ls->
m_Sizes->SetValue(i, m_PriorityVector[i]);
115 float color[3] = {1, 1, 1};
119 ls->
m_LabelsActor->GetProperty()->SetColor(color[0], color[1], color[2]);
133 m_LabelVector = LabelVector;
139 m_PriorityVector = PriorityVector;
145 if (m_LabelCoordinates.IsNotNull())
147 m_LabelCoordinates->RemoveObserver(m_PointSetModifiedObserverTag);
148 m_PointSetModifiedObserverTag = 0;
149 m_LabelCoordinates =
nullptr;
151 if (LabelCoordinates.IsNull())
155 m_LabelCoordinates = LabelCoordinates;
156 itk::MemberCommand<mitk::LabelAnnotation3D>::Pointer _PropertyListModifiedCommand =
157 itk::MemberCommand<mitk::LabelAnnotation3D>::New();
159 m_PointSetModifiedObserverTag = m_LabelCoordinates->AddObserver(itk::ModifiedEvent(), _PropertyListModifiedCommand);
L * GetLocalStorage(mitk::BaseRenderer *forRenderer)
Retrieves a LocalStorage for a specific BaseRenderer.
vtkSmartPointer< vtkStringArray > m_Labels
std::vector< mitk::BaseRenderer * > GetRegisteredBaseRenderer()
Organizes the rendering process.
vtkSmartPointer< vtkPointSetToLabelHierarchy > m_PointSetToLabelHierarchyFilter
bool IsGenerateDataRequired(mitk::BaseRenderer *renderer, mitk::Annotation *Annotation)
void SetPriorityVector(const std::vector< int > &PriorityVector)
Optional: Provide a vector of priorities. The labels with higher priorities will be visible in lower ...
Internal class holding the vtkActor, etc. for each of the render windows.
vtkSmartPointer< vtkIntArray > m_Sizes
vtkSmartPointer< vtkActor2D > m_LabelsActor
~LabelAnnotation3D() override
virtual destructor in order to derive from this class
vtkProp * GetVtkProp(BaseRenderer *renderer) const override
This method is implemented by the specific VTKAnnotation in order to create the element as a vtkProp...
mitk::LocalStorageHandler< LocalStorage > m_LSH
The LocalStorageHandler holds all LocalStorages for the render windows.
bool GetColor(float rgb[], const std::string &propertyKey="color") const
Convenience access method for color properties (instances of ColorProperty)
void UpdateVtkAnnotation(mitk::BaseRenderer *renderer) override
void SetLabelVector(const std::vector< std::string > &LabelVector)
Set the vector of labels that are shown to each corresponding point3D. The size has to be equal to th...
void RemoveFromBaseRenderer(BaseRenderer *renderer) override
Removes the Annotation from the specified renderer. It is not visible anymore then.
vtkSmartPointer< vtkPolyData > m_Points
LabelAnnotation3D()
explicit constructor which disallows implicit conversions
~LocalStorage()
Default deconstructor of the local storage.
bool GetOpacity(float &opacity, const std::string &propertyKey="opacity") const
Convenience access method for opacity properties (instances of FloatProperty)
vtkSmartPointer< vtkLabelPlacementMapper > m_LabelMapper
Point3D GetOffsetVector() const
void UpdateGenerateDataTime()
LocalStorage()
Default constructor of the local storage.
void SetLabelCoordinates(itk::SmartPointer< PointSet > LabelCoordinates)
Coordinates of the labels.
void PointSetModified(const itk::Object *, const itk::EventObject &)