Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
vtkSlicerMarkupsWidgetRepresentation3D.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Copyright (c) ProxSim ltd., Kwun Tong, Hong Kong. All Rights Reserved.
4
5 See COPYRIGHT.txt
6 or http://www.slicer.org/copyright/copyright.txt for details.
7
8 Unless required by applicable law or agreed to in writing, software
9 distributed under the License is distributed on an "AS IS" BASIS,
10 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 See the License for the specific language governing permissions and
12 limitations under the License.
13
14 This file was originally developed by Davide Punzo, punzodavide@hotmail.it,
15 and development was supported by ProxSim ltd.
16
17=========================================================================*/
18
26
27#ifndef vtkSlicerMarkupsWidgetRepresentation3D_h
28#define vtkSlicerMarkupsWidgetRepresentation3D_h
29
30#include "vtkSlicerMarkupsModuleVTKWidgetsExport.h"
32
33#include <map>
34
35class vtkActor;
36class vtkActor2D;
37class vtkCellPicker;
39class vtkGlyph3DMapper;
40class vtkLabelPlacementMapper;
41class vtkPolyDataMapper;
42class vtkProperty;
43
45
46class VTK_SLICER_MARKUPS_MODULE_VTKWIDGETS_EXPORT vtkSlicerMarkupsWidgetRepresentation3D : public vtkSlicerMarkupsWidgetRepresentation
47{
48public:
51 void PrintSelf(ostream& os, vtkIndent indent) override;
52
53 void SetRenderer(vtkRenderer* ren) override;
54
58 void UpdateFromMRMLInternal(vtkMRMLNode* caller, unsigned long event, void* callData = nullptr) override;
59
61 void GetActors(vtkPropCollection*) override;
62 void ReleaseGraphicsResources(vtkWindow*) override;
63 int RenderOverlay(vtkViewport* viewport) override;
64 int RenderOpaqueGeometry(vtkViewport* viewport) override;
65 int RenderTranslucentPolygonalGeometry(vtkViewport* viewport) override;
66 vtkTypeBool HasTranslucentPolygonalGeometry() override;
67
69 double* GetBounds() VTK_SIZEHINT(6) override;
70
71 void CanInteract(vtkMRMLInteractionEventData* interactionEventData, int& foundComponentType, int& foundComponentIndex, double& closestDistance2) override;
72
75 void CanInteractWithLine(vtkMRMLInteractionEventData* interactionEventData, int& foundComponentType, int& foundComponentIndex, double& closestDistance2);
76
77 bool AccuratePick(int x, int y, double pickPoint[3], double pickNormal[3] = nullptr);
78
83
88 vtkSetMacro(OccludedRelativeOffset, double);
89 vtkGetMacro(OccludedRelativeOffset, double);
90
91protected:
94
95 void UpdateViewScaleFactor() override;
96
97 void UpdateControlPointSize() override;
98
100 {
101 public:
104
106 vtkSmartPointer<vtkDoubleArray> GlyphOrientationArray;
107
108 vtkSmartPointer<vtkGlyph3DMapper> GlyphMapper;
109
110 // Properties used to control the appearance of selected objects and
111 // the manipulator in general.
112 vtkSmartPointer<vtkProperty> Property;
113 vtkSmartPointer<vtkProperty> OccludedProperty;
114 vtkSmartPointer<vtkTextProperty> OccludedTextProperty;
115
116 vtkSmartPointer<vtkPolyData> VisiblePointsPolyData;
117
118 vtkSmartPointer<vtkFastSelectVisiblePoints> SelectVisiblePoints;
119
120 vtkSmartPointer<vtkIdTypeArray> ControlPointIndices; // store original ID to determine which control point is actually visible
121 vtkSmartPointer<vtkPointSetToLabelHierarchy> OccludedPointSetToLabelHierarchyFilter;
122
123 vtkSmartPointer<vtkGlyph3DMapper> OccludedGlyphMapper;
124 vtkSmartPointer<vtkLabelPlacementMapper> LabelsMapper;
125 vtkSmartPointer<vtkLabelPlacementMapper> LabelsOccludedMapper;
126
127 vtkSmartPointer<vtkActor> Actor;
128 vtkSmartPointer<vtkActor> OccludedActor;
129 vtkSmartPointer<vtkActor2D> LabelsActor;
130 vtkSmartPointer<vtkActor2D> LabelsOccludedActor;
131 };
132
134
136
138
140
147 void UpdateRelativeCoincidentTopologyOffsets(vtkMapper* mapper, vtkMapper* occludedMapper);
149
150 vtkSmartPointer<vtkCellPicker> AccuratePicker;
151
156
157 static std::map<vtkRenderer*, vtkSmartPointer<vtkFloatArray>> CachedZBuffers;
158
159 vtkSmartPointer<vtkCallbackCommand> RenderCompletedCallback;
160 static void OnRenderCompleted(vtkObject* caller, unsigned long event, void* clientData, void* callData);
161 static vtkFloatArray* GetCachedZBuffer(vtkRenderer* renderer);
162
163private:
165 void operator=(const vtkSlicerMarkupsWidgetRepresentation3D&) = delete;
166};
167
168#endif
extract points that are visible (based on z-buffer calculation)
virtual void UpdateRelativeCoincidentTopologyOffsets(vtkMapper *mapper)
Abstract Superclass for all specific types of MRML nodes.
vtkSmartPointer< vtkDoubleArray > GlyphOrientationArray
Orientation of the glyphs, represented as an array of quaternions.
int RenderTranslucentPolygonalGeometry(vtkViewport *viewport) override
static std::map< vtkRenderer *, vtkSmartPointer< vtkFloatArray > > CachedZBuffers
void CanInteract(vtkMRMLInteractionEventData *interactionEventData, int &foundComponentType, int &foundComponentIndex, double &closestDistance2) override
void UpdateRelativeCoincidentTopologyOffsets(vtkMapper *mapper, vtkMapper *occludedMapper)
bool AccuratePick(int x, int y, double pickPoint[3], double pickNormal[3]=nullptr)
void UpdateFromMRMLInternal(vtkMRMLNode *caller, unsigned long event, void *callData=nullptr) override
void ReleaseGraphicsResources(vtkWindow *) override
virtual void UpdateNthPointAndLabelFromMRML(int n)
int RenderOpaqueGeometry(vtkViewport *viewport) override
vtkSmartPointer< vtkCallbackCommand > RenderCompletedCallback
void GetActors(vtkPropCollection *) override
Methods to make this class behave as a vtkProp.
static void OnRenderCompleted(vtkObject *caller, unsigned long event, void *clientData, void *callData)
static vtkFloatArray * GetCachedZBuffer(vtkRenderer *renderer)
void CanInteractWithLine(vtkMRMLInteractionEventData *interactionEventData, int &foundComponentType, int &foundComponentIndex, double &closestDistance2)
ControlPointsPipeline3D * GetControlPointsPipeline(int controlPointType)
int RenderOverlay(vtkViewport *viewport) override
double * GetBounds() VTK_SIZEHINT(6) override
Return the bounds of the representation.
vtkTypeBool HasTranslucentPolygonalGeometry() override
void SetRenderer(vtkRenderer *ren) override
void PrintSelf(ostream &os, vtkIndent indent) override