Slicer 5.13
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 <vtkWeakPointer.h>
34
35#include <map>
36#include <memory>
37
38class vtkActor;
39class vtkActor2D;
40class vtkCellPicker;
41class vtkConeSource;
42class vtkDoubleArray;
44class vtkGlyph3DMapper;
45class vtkLabelPlacementMapper;
46class vtkPoints;
47class vtkPolyData;
48class vtkPolyDataMapper;
49class vtkProperty;
50
52
53class VTK_SLICER_MARKUPS_MODULE_VTKWIDGETS_EXPORT vtkSlicerMarkupsWidgetRepresentation3D : public vtkSlicerMarkupsWidgetRepresentation
54{
55public:
58 void PrintSelf(ostream& os, vtkIndent indent) override;
59
60 void SetRenderer(vtkRenderer* ren) override;
61
65 void UpdateFromMRMLInternal(vtkMRMLNode* caller, unsigned long event, void* callData = nullptr) override;
66
68 void GetActors(vtkPropCollection*) override;
69 void ReleaseGraphicsResources(vtkWindow*) override;
70 int RenderOverlay(vtkViewport* viewport) override;
71 int RenderOpaqueGeometry(vtkViewport* viewport) override;
72 int RenderTranslucentPolygonalGeometry(vtkViewport* viewport) override;
73 vtkTypeBool HasTranslucentPolygonalGeometry() override;
74
76 double* GetBounds() VTK_SIZEHINT(6) override;
77
78 void CanInteract(vtkMRMLInteractionEventData* interactionEventData, int& foundComponentType, int& foundComponentIndex, double& closestDistance2) override;
79
82 void CanInteractWithLine(vtkMRMLInteractionEventData* interactionEventData, int& foundComponentType, int& foundComponentIndex, double& closestDistance2);
83
84 bool AccuratePick(int x, int y, double pickPoint[3], double pickNormal[3] = nullptr);
85
91 void SetInteractionAccuratePicker(vtkCellPicker* picker);
92
97
102 vtkSetMacro(OccludedRelativeOffset, double);
103 vtkGetMacro(OccludedRelativeOffset, double);
104
105protected:
108
109 void UpdateViewScaleFactor() override;
110
111 void UpdateControlPointSize() override;
112
114 {
115 public:
118
120 vtkSmartPointer<vtkDoubleArray> GlyphOrientationArray;
121
122 vtkSmartPointer<vtkGlyph3DMapper> GlyphMapper;
123
124 // Properties used to control the appearance of selected objects and
125 // the manipulator in general.
126 vtkSmartPointer<vtkProperty> Property;
127 vtkSmartPointer<vtkProperty> OccludedProperty;
128 vtkSmartPointer<vtkTextProperty> OccludedTextProperty;
129
130 vtkSmartPointer<vtkPolyData> VisiblePointsPolyData;
131
132 vtkSmartPointer<vtkFastSelectVisiblePoints> SelectVisiblePoints;
133
134 vtkSmartPointer<vtkIdTypeArray> ControlPointIndices; // store original ID to determine which control point is actually visible
135 vtkSmartPointer<vtkPointSetToLabelHierarchy> OccludedPointSetToLabelHierarchyFilter;
136
137 vtkSmartPointer<vtkGlyph3DMapper> OccludedGlyphMapper;
138 vtkSmartPointer<vtkLabelPlacementMapper> LabelsMapper;
139 vtkSmartPointer<vtkLabelPlacementMapper> LabelsOccludedMapper;
140
141 vtkSmartPointer<vtkActor> Actor;
142 vtkSmartPointer<vtkActor> OccludedActor;
143 vtkSmartPointer<vtkActor2D> LabelsActor;
144 vtkSmartPointer<vtkActor2D> LabelsOccludedActor;
145 };
146
148
150
152
154
158 {
159 public:
162
163 vtkSmartPointer<vtkPoints> Points;
164 vtkSmartPointer<vtkDoubleArray> Normals;
165 vtkSmartPointer<vtkPolyData> PointsPoly;
166 vtkSmartPointer<vtkGlyph3DMapper> Mapper;
167 vtkSmartPointer<vtkActor> Actor;
168 };
169
171 std::unique_ptr<LineDirectionArrowPipeline3D> LineDirectionArrowPipeline;
172
177
184 void UpdateRelativeCoincidentTopologyOffsets(vtkMapper* mapper, vtkMapper* occludedMapper);
186
191 vtkWeakPointer<vtkCellPicker> InteractionAccuratePicker;
192
197
198 static std::map<vtkRenderer*, vtkSmartPointer<vtkFloatArray>> CachedZBuffers;
199
200 vtkSmartPointer<vtkCallbackCommand> RenderCompletedCallback;
201 static void OnRenderCompleted(vtkObject* caller, unsigned long event, void* clientData, void* callData);
202 static vtkFloatArray* GetCachedZBuffer(vtkRenderer* renderer);
203
204private:
206 void operator=(const vtkSlicerMarkupsWidgetRepresentation3D&) = delete;
207};
208
209#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
double LineDirectionMarkerLastSpacing
Cached marker spacing/geometry MTime/reversed flag for BuildLineDirectionMarkers guard.
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)
std::unique_ptr< LineDirectionArrowPipeline3D > LineDirectionArrowPipeline
Direction arrow glyph pipeline (3D).
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)
void SetInteractionAccuratePicker(vtkCellPicker *picker)
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