Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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,
72 int &foundComponentType, int &foundComponentIndex, double &closestDistance2) override;
73
77 int &foundComponentType, int &foundComponentIndex, double &closestDistance2);
78
79 bool AccuratePick(int x, int y, double pickPoint[3], double pickNormal[3]=nullptr);
80
85
90 vtkSetMacro(OccludedRelativeOffset, double);
91 vtkGetMacro(OccludedRelativeOffset, double);
92
93protected:
96
97 void UpdateViewScaleFactor() override;
98
99 void UpdateControlPointSize() override;
100
102 {
103 public:
106
108 vtkSmartPointer<vtkDoubleArray> GlyphOrientationArray;
109
110 vtkSmartPointer<vtkGlyph3DMapper> GlyphMapper;
111
112 // Properties used to control the appearance of selected objects and
113 // the manipulator in general.
114 vtkSmartPointer<vtkProperty> Property;
115 vtkSmartPointer<vtkProperty> OccludedProperty;
116 vtkSmartPointer<vtkTextProperty> OccludedTextProperty;
117
118 vtkSmartPointer<vtkPolyData> VisiblePointsPolyData;
119
120 vtkSmartPointer<vtkFastSelectVisiblePoints> SelectVisiblePoints;
121
122 vtkSmartPointer<vtkIdTypeArray> ControlPointIndices; // store original ID to determine which control point is actually visible
123 vtkSmartPointer<vtkPointSetToLabelHierarchy> OccludedPointSetToLabelHierarchyFilter;
124
125 vtkSmartPointer<vtkGlyph3DMapper> OccludedGlyphMapper;
126 vtkSmartPointer<vtkLabelPlacementMapper> LabelsMapper;
127 vtkSmartPointer<vtkLabelPlacementMapper> LabelsOccludedMapper;
128
129 vtkSmartPointer<vtkActor> Actor;
130 vtkSmartPointer<vtkActor> OccludedActor;
131 vtkSmartPointer<vtkActor2D> LabelsActor;
132 vtkSmartPointer<vtkActor2D> LabelsOccludedActor;
133 };
134
136
138
140
142
149 void UpdateRelativeCoincidentTopologyOffsets(vtkMapper* mapper, vtkMapper* occludedMapper);
151
152 vtkSmartPointer<vtkCellPicker> AccuratePicker;
153
158
159 static std::map<vtkRenderer*, vtkSmartPointer<vtkFloatArray> > CachedZBuffers;
160
161 vtkSmartPointer<vtkCallbackCommand> RenderCompletedCallback;
162 static void OnRenderCompleted(vtkObject* caller, unsigned long event, void* clientData, void* callData);
163 static vtkFloatArray* GetCachedZBuffer(vtkRenderer* renderer);
164
165private:
167 void operator=(const vtkSlicerMarkupsWidgetRepresentation3D&) = delete;
168};
169
170#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