Fraxinus  17.12
An IGT application
cxGraphicalPrimitives.h
Go to the documentation of this file.
1 /*=========================================================================
2 This file is part of CustusX, an Image Guided Therapy Application.
3 
4 Copyright (c) 2008-2014, SINTEF Department of Medical Technology
5 All rights reserved.
6 
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions are met:
9 
10 1. Redistributions of source code must retain the above copyright notice,
11  this list of conditions and the following disclaimer.
12 
13 2. Redistributions in binary form must reproduce the above copyright notice,
14  this list of conditions and the following disclaimer in the documentation
15  and/or other materials provided with the distribution.
16 
17 3. Neither the name of the copyright holder nor the names of its contributors
18  may be used to endorse or promote products derived from this software
19  without specific prior written permission.
20 
21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 =========================================================================*/
32 
33 #ifndef CXGRAPHICALPRIMITIVES_H_
34 #define CXGRAPHICALPRIMITIVES_H_
35 
36 #include "cxResourceVisualizationExport.h"
37 
38 #include <boost/shared_ptr.hpp>
39 #include "vtkForwardDeclarations.h"
40 #include "cxTransform3D.h"
41 #include "cxViewportListener.h"
42 #include <vtkPolyDataAlgorithm.h>
43 #include <vtkGlyph3DMapper.h>
44 #include <vtkColorSeries.h>
45 #include <vtkLookupTable.h>
46 #include <vtkMapper.h>
47 
48 class QColor;
49 typedef vtkSmartPointer<class vtkPolyDataAlgorithm> vtkPolyDataAlgorithmPtr;
50 typedef vtkSmartPointer<class vtkArcSource> vtkArcSourcePtr;
51 typedef vtkSmartPointer<class vtkArrowSource> vtkArrowSourcePtr;
52 
53 namespace cx
54 {
55 
56 
57 class cxResourceVisualization_EXPORT GraphicalGeometricBase
58 {
59 public:
61  vtkRendererPtr renderer = vtkRendererPtr());
63 
64  void setRenderer(vtkRendererPtr renderer = vtkRendererPtr());
65  void setSource(vtkPolyDataAlgorithmPtr source);
66  void setBackfaceCulling(bool val);
67  void setVisibility(bool visible);
68  void setFrontfaceCulling(bool val);
69  // void setRepresentation();
70  void setColor(double red, double green, double blue);
71  void setColor(Vector3D color);
72  void setPosition(Vector3D point);
73 
74 
75  void setOpacity(double val);
76  void setUserMatrix(vtkMatrix4x4 *matrix);
77  void setPointSize(int pointSize);
78  void setScalarVisibility(bool show);
79 
80  vtkActorPtr getActor();
81  vtkPropertyPtr getProperty();
82  vtkPolyDataPtr getPolyData();
83  Vector3D getPosition() const;
84  vtkPolyDataAlgorithmPtr getSource();
85 
86 protected:
92  virtual vtkMapperPtr getMapper()=0;
93 };
94 
95 
103 class cxResourceVisualization_EXPORT GraphicalPolyData3D : public GraphicalGeometricBase
104 {
105 public:
107  vtkRendererPtr renderer = vtkRendererPtr());
108  void setIsWireFrame(bool val);
109  // void setRepresentation();
110  void setData(vtkPolyDataPtr data);
111  void setTexture(vtkTexturePtr texture);
112  vtkMapperPtr getMapper();
113 
114 private:
115  vtkPolyDataMapperPtr mMapper;
116 };
117 typedef boost::shared_ptr<GraphicalPolyData3D> GraphicalPolyData3DPtr;
118 
119 
122 class cxResourceVisualization_EXPORT GraphicalGlyph3DData : public GraphicalGeometricBase
123 {
124 public:
126  vtkRendererPtr renderer = vtkRendererPtr());
127  void setData(vtkPolyDataPtr data);
128  void setOrientationArray(const char* orientationArray);
129  void setColorArray(const char* colorArray);
130  void setLUT(const char* lut);
131  void setScaleFactor(double scaleFactor);
132  vtkMapperPtr getMapper();
133 
134 private:
135  vtkGlyph3DMapperPtr mMapper;
136 };
137 typedef boost::shared_ptr<GraphicalGlyph3DData> GraphicalGlyph3DDataPtr;
138 
139 
142 class cxResourceVisualization_EXPORT GraphicalPoint3D
143 {
144 public:
146  void setRenderer(vtkRendererPtr renderer = vtkRendererPtr());
147  ~GraphicalPoint3D();
148  void setRadius(double radius);
149  // void setColor(Vector3D color);
150  void setColor(QColor color);
151  void setValue(Vector3D point);
152  Vector3D getValue() const;
153  vtkActorPtr getActor();
154  vtkPolyDataPtr getPolyData();
155 
156 private:
157  vtkSphereSourcePtr source;
158  vtkPolyDataMapperPtr mapper;
159  vtkActorPtr actor;
160  vtkRendererPtr mRenderer;
161 };
162 typedef boost::shared_ptr<GraphicalPoint3D> GraphicalPoint3DPtr;
163 
166 class cxResourceVisualization_EXPORT GraphicalLine3D
167 {
168 public:
170  void setRenderer(vtkRendererPtr renderer = vtkRendererPtr());
171  ~GraphicalLine3D();
172  void setColor(QColor color);
173  void setValue(Vector3D point1, Vector3D point2);
174  void setStipple(int stipple);
175  vtkActorPtr getActor();
176 
177 private:
178  vtkPolyDataMapperPtr mapper;
179  vtkActorPtr actor;
180  vtkRendererPtr mRenderer;
181  vtkLineSourcePtr source;
182 };
183 typedef boost::shared_ptr<GraphicalLine3D> GraphicalLine3DPtr;
184 
187 class cxResourceVisualization_EXPORT GraphicalArc3D
188 {
189 public:
191  ~GraphicalArc3D();
192  void setColor(QColor color);
193  void setValue(Vector3D point1, Vector3D point2, Vector3D center);
194  void setStipple(int stipple);
195  vtkActorPtr getActor();
196 
197 private:
198  vtkPolyDataMapperPtr mapper;
199  vtkActorPtr actor;
200  vtkRendererPtr mRenderer;
201  vtkArcSourcePtr source;
202 };
203 typedef boost::shared_ptr<GraphicalArc3D> GraphicalArc3DPtr;
204 
207 class cxResourceVisualization_EXPORT GraphicalArrow3D
208 {
209 public:
211  ~GraphicalArrow3D();
212  void setColor(QColor color);
213  void setValue(Vector3D base, Vector3D normal, double length);
214 
215 private:
216  vtkPolyDataMapperPtr mapper;
217  vtkActorPtr actor;
218  vtkRendererPtr mRenderer;
219  vtkArrowSourcePtr source;
220 };
221 typedef boost::shared_ptr<GraphicalArrow3D> GraphicalArrow3DPtr;
222 
225 class cxResourceVisualization_EXPORT Rect3D
226 {
227 public:
228  Rect3D(vtkRendererPtr renderer, QColor color);
229  ~Rect3D();
230  void setColor(QColor color);
231  void updatePosition(const DoubleBoundingBox3D bb, const Transform3D& M);
232  void setLine(bool on, int width);
233  void setSurface(bool on);
234 
235 private:
236  vtkPolyDataMapperPtr mapper;
237  vtkActorPtr actor;
238  vtkRendererPtr mRenderer;
239  vtkPolyDataPtr mPolyData;
240  vtkPointsPtr mPoints;
241  vtkCellArrayPtr mSide;
242 };
243 typedef boost::shared_ptr<class Rect3D> Rect3DPtr;
244 
248 class cxResourceVisualization_EXPORT FollowerText3D
249 {
250 public:
252  void setRenderer(vtkRendererPtr renderer = vtkRendererPtr());
253 
254  ~FollowerText3D();
255  void setColor(QColor color);
256  void setText(QString text);
257  void setPosition(Vector3D pos);
258 
259  void setSize(double val);
260  void setSizeInNormalizedViewport(bool on, double size);
261  vtkFollowerPtr getActor();
262 
263  void scaleText();
264 
265 private:
266  vtkVectorTextPtr mText;
267  vtkFollowerPtr mFollower;
268  vtkRendererPtr mRenderer;
269  double mSize;
270 
271  ViewportListenerPtr mViewportListener;
272 };
273 typedef boost::shared_ptr<FollowerText3D> FollowerText3DPtr;
274 
278 class cxResourceVisualization_EXPORT CaptionText3D
279 {
280 public:
282  void setRenderer(vtkRendererPtr renderer = vtkRendererPtr());
283 
284  ~CaptionText3D();
285  void setColor(QColor color);
286  void setText(QString text);
287  void setPosition(Vector3D pos);
288 
289  void setSize(double val);
290  // void setSizeInNormalizedViewport(bool on, double size);
291  vtkCaptionActor2DPtr getActor();
292 
293  // void scaleText(); ///< internal method
294 
295  void placeBelowCenter();
296  void placeAboveCenter();
297  void setVisibility(bool visible);
298  Vector3D getPosition() const;
299 private:
300  vtkCaptionActor2DPtr mText;
301  // vtkFollowerPtr mFollower;
302  vtkRendererPtr mRenderer;
303  Vector3D mPos;
304 
305  // ViewportListenerPtr mViewportListener;
306 };
307 typedef boost::shared_ptr<CaptionText3D> CaptionText3DPtr;
308 
313 }
314 
315 #endif /*CXGRAPHICALPRIMITIVES_H_*/
vtkSmartPointer< class vtkTexture > vtkTexturePtr
vtkSmartPointer< class vtkActor > vtkActorPtr
boost::shared_ptr< class GraphicalPoint3D > GraphicalPoint3DPtr
vtkSmartPointer< class vtkPolyDataAlgorithm > vtkPolyDataAlgorithmPtr
PlainObject normal() const
vtkSmartPointer< class vtkPolyDataMapper > vtkPolyDataMapperPtr
boost::shared_ptr< class ViewportListener > ViewportListenerPtr
vtkSmartPointer< class vtkProperty > vtkPropertyPtr
Transform3D Transform3D
Transform3D is a representation of an affine 3D transform.
vtkSmartPointer< class vtkCellArray > vtkCellArrayPtr
boost::shared_ptr< GraphicalGlyph3DData > GraphicalGlyph3DDataPtr
Helper for rendering a line in 3D.
vtkSmartPointer< vtkPoints > vtkPointsPtr
boost::shared_ptr< GraphicalArc3D > GraphicalArc3DPtr
vtkSmartPointer< class vtkLineSource > vtkLineSourcePtr
Helper for rendering a point in 3D.
Helper for rendering an arrow in 3D.
vtkSmartPointer< class vtkRenderer > vtkRendererPtr
vtkSmartPointer< class vtkFollower > vtkFollowerPtr
Helper for rendering a a polydata in 3D.
vtkSmartPointer< class vtkMapper > vtkMapperPtr
Helper for rendering a line in 3D.
vtkSmartPointer< class vtkCaptionActor2D > vtkCaptionActor2DPtr
Helper for rendering 3D text that faces the camera and has a constant viewed size, always on top.
vtkSmartPointer< class vtkSphereSource > vtkSphereSourcePtr
Representation of a floating-point bounding box in 3D. The data are stored as {xmin,xmax,ymin,ymax,zmin,zmax}, in order to simplify communication with vtk.
Helper for rendering 3D text that faces the camera and has a constant viewed size.
vtkSmartPointer< vtkPolyData > vtkPolyDataPtr
vtkSmartPointer< class vtkVectorText > vtkVectorTextPtr
Eigen::Vector3d Vector3D
Vector3D is a representation of a point or vector in 3D.
Definition: cxVector3D.h:63
vtkSmartPointer< class vtkGlyph3DMapper > vtkGlyph3DMapperPtr
boost::shared_ptr< FollowerText3D > FollowerText3DPtr
vtkSmartPointer< class vtkArcSource > vtkArcSourcePtr
vtkSmartPointer< class vtkPolyDataAlgorithm > vtkPolyDataAlgorithmPtr
Definition: cxViewWrapper.h:50
RealScalar length() const
boost::shared_ptr< GraphicalPolyData3D > GraphicalPolyData3DPtr
boost::shared_ptr< class GraphicalLine3D > GraphicalLine3DPtr
vtkSmartPointer< class vtkArrowSource > vtkArrowSourcePtr
Helper for rendering a a glyph in 3D.
boost::shared_ptr< CaptionText3D > CaptionText3DPtr
vtkPolyDataAlgorithmPtr mSource
boost::shared_ptr< class Rect3D > Rect3DPtr
boost::shared_ptr< GraphicalArrow3D > GraphicalArrow3DPtr
Helper for drawing a rectangle in 3D.
Namespace for all CustusX production code.