VTK
vtkImplicitCylinderRepresentation.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkImplicitCylinderRepresentation.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
42#ifndef vtkImplicitCylinderRepresentation_h
43#define vtkImplicitCylinderRepresentation_h
44
45#include "vtkInteractionWidgetsModule.h" // For export macro
47
48class vtkActor;
50class vtkCellPicker;
51class vtkConeSource;
52class vtkLineSource;
53class vtkSphereSource;
54class vtkTubeFilter;
55class vtkCylinder;
56class vtkProperty;
57class vtkImageData;
59class vtkFeatureEdges;
60class vtkPolyData;
62class vtkTransform;
63class vtkBox;
64class vtkLookupTable;
65
66#define VTK_MAX_CYL_RESOLUTION 2048
67
68class VTKINTERACTIONWIDGETS_EXPORT vtkImplicitCylinderRepresentation : public vtkWidgetRepresentation
69{
70public:
75
77
81 void PrintSelf(ostream& os, vtkIndent indent);
83
85
89 void SetCenter(double x, double y, double z);
90 void SetCenter(double x[3]);
91 double* GetCenter();
92 void GetCenter(double xyz[3]);
94
96
100 void SetAxis(double x, double y, double z);
101 void SetAxis(double a[3]);
102 double* GetAxis();
103 void GetAxis(double a[3]);
105
107
111 void SetRadius(double r);
112 double GetRadius();
114
116
123 vtkSetClampMacro(MinRadius,double,0.001,0.25);
124 vtkGetMacro(MinRadius,double);
125 vtkSetClampMacro(MaxRadius,double,0.25,VTK_FLOAT_MAX);
126 vtkGetMacro(MaxRadius,double);
128
130
137 void SetAlongXAxis(int);
138 vtkGetMacro(AlongXAxis,int);
139 vtkBooleanMacro(AlongXAxis,int);
140 void SetAlongYAxis(int);
141 vtkGetMacro(AlongYAxis,int);
142 vtkBooleanMacro(AlongYAxis,int);
143 void SetAlongZAxis(int);
144 vtkGetMacro(AlongZAxis,int);
145 vtkBooleanMacro(AlongZAxis,int);
147
149
155 void SetDrawCylinder(int drawCyl);
156 vtkGetMacro(DrawCylinder,int);
157 vtkBooleanMacro(DrawCylinder,int);
159
161
167 vtkSetClampMacro(Resolution,int,8,VTK_MAX_CYL_RESOLUTION);
168 vtkGetMacro(Resolution,int);
170
172
177 vtkSetMacro(Tubing,int);
178 vtkGetMacro(Tubing,int);
179 vtkBooleanMacro(Tubing,int);
181
183
187 vtkSetMacro(OutlineTranslation,int);
188 vtkGetMacro(OutlineTranslation,int);
189 vtkBooleanMacro(OutlineTranslation,int);
191
193
197 vtkSetMacro(OutsideBounds,int);
198 vtkGetMacro(OutsideBounds,int);
199 vtkBooleanMacro(OutsideBounds,int);
201
203
209 vtkSetVector6Macro(WidgetBounds, double);
210 vtkGetVector6Macro(WidgetBounds, double);
212
214
222 vtkSetMacro(ConstrainToWidgetBounds, int);
223 vtkGetMacro(ConstrainToWidgetBounds, int);
224 vtkBooleanMacro(ConstrainToWidgetBounds, int);
226
228
231 vtkSetMacro(ScaleEnabled,int);
232 vtkGetMacro(ScaleEnabled,int);
233 vtkBooleanMacro(ScaleEnabled,int);
235
243
249
254 void UpdatePlacement(void);
255
257
260 vtkGetObjectMacro(AxisProperty,vtkProperty);
261 vtkGetObjectMacro(SelectedAxisProperty,vtkProperty);
263
265
269 vtkGetObjectMacro(CylinderProperty,vtkProperty);
270 vtkGetObjectMacro(SelectedCylinderProperty,vtkProperty);
272
274
277 vtkGetObjectMacro(OutlineProperty,vtkProperty);
278 vtkGetObjectMacro(SelectedOutlineProperty,vtkProperty);
280
282
286 vtkGetObjectMacro(EdgesProperty,vtkProperty);
288
289
293 void SetEdgeColor(double, double, double);
294 void SetEdgeColor(double x[3]);
296
298
301 virtual int ComputeInteractionState(int X, int Y, int modify=0);
302 virtual void PlaceWidget(double bounds[6]);
303 virtual void BuildRepresentation();
304 virtual void StartWidgetInteraction(double eventPos[2]);
305 virtual void WidgetInteraction(double newEventPos[2]);
306 virtual void EndWidgetInteraction(double newEventPos[2]);
308
310
313 virtual double *GetBounds();
314 virtual void GetActors(vtkPropCollection *pc);
320
322
327 vtkSetClampMacro(BumpDistance,double,0.000001,1);
328 vtkGetMacro(BumpDistance,double);
330
338 void BumpCylinder(int dir, double factor);
339
346 void PushCylinder(double distance);
347
348 // Manage the state of the widget
350 {
351 Outside=0,
358 TranslatingCenter
359 };
360
362
371 vtkSetClampMacro(InteractionState,int,Outside,TranslatingCenter);
373
375
379 virtual void SetRepresentationState(int);
380 vtkGetMacro(RepresentationState, int);
382
383protected:
386
388
389 // Keep track of event positions
390 double LastEventPosition[3];
391
392 // Control the radius
393 double MinRadius;
394 double MaxRadius;
395
396 // Controlling the push operation
398
399 // Controlling ivars
403
404 // The actual cylinder which is being manipulated
406
407 // The facet resolution for rendering purposes.
409
410 // The bounding box is represented by a single voxel image data
415 void HighlightOutline(int highlight);
416 int OutlineTranslation; //whether the outline can be moved
417 int ScaleEnabled; //whether the widget can be scaled
418 int OutsideBounds; //whether the widget can be moved outside input's bounds
419 double WidgetBounds[6];
421
422 // The cut cylinder is produced with a vtkCutter
427 void HighlightCylinder(int highlight);
428
429 // Optional tubes are represented by extracting boundary edges and tubing
434 int Tubing; //control whether tubing is on
435
436 // The + normal cone (i.e., in positive direction along normal)
440 void HighlightNormal(int highlight);
441
442 // The + normal line
446
447 // The - normal cone
451
452 // The - normal line
456
457 // The center positioning handle
461
462 // Do the picking
465
466 // Register internal Pickers within PickingManager
467 virtual void RegisterPickers();
468
469 // Transform the normal (used for rotation)
471
472 // Methods to manipulate the cylinder
473 void Rotate(double X, double Y, double *p1, double *p2, double *vpn);
474 void TranslateCylinder(double *p1, double *p2);
475 void TranslateOutline(double *p1, double *p2);
476 void TranslateCenter(double *p1, double *p2);
477 void TranslateCenterOnAxis(double *p1, double *p2);
478 void ScaleRadius(double *p1, double *p2);
479 void AdjustRadius(double X, double Y, double *p1, double *p2);
480 void Scale(double *p1, double *p2, double X, double Y);
482
483 // Properties used to control the appearance of selected objects and
484 // the manipulator in general.
493
494 // Intersect oriented infinite cylinder against bounding box
496
497 // Support GetBounds() method
499
500private:
502 void operator=(const vtkImplicitCylinderRepresentation&) VTK_DELETE_FUNCTION;
503};
504
505#endif
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:52
implicit function for a bounding box
Definition: vtkBox.h:42
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:70
generate polygonal cone
Definition: vtkConeSource.h:45
implicit function for a cylinder
Definition: vtkCylinder.h:45
extract boundary, non-manifold, and/or sharp edges from polygonal data
topologically and geometrically regular array of data
Definition: vtkImageData.h:46
defining the representation for a vtkImplicitCylinderWidget
void HighlightOutline(int highlight)
void HighlightCylinder(int highlight)
void BumpCylinder(int dir, double factor)
Translate the cylinder in the direction of the view vector by the specified BumpDistance.
void HighlightNormal(int highlight)
void TranslateCylinder(double *p1, double *p2)
virtual void PlaceWidget(double bounds[6])
void TranslateCenterOnAxis(double *p1, double *p2)
void SetEdgeColor(vtkLookupTable *)
Set color to the edge.
void ScaleRadius(double *p1, double *p2)
virtual int RenderOpaqueGeometry(vtkViewport *)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THESE METHODS OUTSIDE OF THE RENDE...
void AdjustRadius(double X, double Y, double *p1, double *p2)
void TranslateOutline(double *p1, double *p2)
virtual int ComputeInteractionState(int X, int Y, int modify=0)
Methods to interface with the vtkImplicitCylinderWidget.
void SetAxis(double x, double y, double z)
Set/Get the axis of rotation for the cylinder.
virtual void StartWidgetInteraction(double eventPos[2])
void SetCenter(double x, double y, double z)
Get the center of the cylinder.
void PushCylinder(double distance)
Push the cylinder the distance specified along the view vector.
static vtkImplicitCylinderRepresentation * New()
Instantiate the class.
virtual int RenderTranslucentPolygonalGeometry(vtkViewport *)
void Rotate(double X, double Y, double *p1, double *p2, double *vpn)
void GetCylinder(vtkCylinder *cyl)
Get the implicit function for the cylinder.
virtual double * GetBounds()
Methods supporting the rendering process.
virtual void GetActors(vtkPropCollection *pc)
For some exporters and other other operations we must be able to collect all the actors or volumes.
virtual void SetRepresentationState(int)
Sets the visual appearance of the representation based on the state it is in.
virtual void RegisterPickers()
Register internal Pickers in the Picking Manager.
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
virtual void EndWidgetInteraction(double newEventPos[2])
void Scale(double *p1, double *p2, double X, double Y)
void GetPolyData(vtkPolyData *pd)
Grab the polydata that defines the cylinder.
void TranslateCenter(double *p1, double *p2)
virtual void WidgetInteraction(double newEventPos[2])
void SetDrawCylinder(int drawCyl)
Enable/disable the drawing of the cylinder.
void SetEdgeColor(double, double, double)
virtual void ReleaseGraphicsResources(vtkWindow *)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Release any graphics resources that are being...
void SetRadius(double r)
Set/Get the radius of the cylinder.
void SetAlongXAxis(int)
Force the cylinder widget to be aligned with one of the x-y-z axes.
virtual int HasTranslucentPolygonalGeometry()
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THESE METHODS OUTSIDE OF THE RENDE...
void UpdatePlacement(void)
Satisfies the superclass API.
a simple class to control print indentation
Definition: vtkIndent.h:40
create a line defined by two end points
Definition: vtkLineSource.h:43
map scalar values into colors via a lookup table
create wireframe outline for arbitrary data set
Superclass for algorithms that produce only polydata as output.
map vtkPolyData to graphics primitives
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:86
a list of Props
represent surface properties of a geometric object
Definition: vtkProperty.h:65
create a polygonal sphere centered at the origin
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:61
filter that generates tubes around lines
Definition: vtkTubeFilter.h:84
abstract specification for Viewports
Definition: vtkViewport.h:48
abstract class defines interface between the widget and widget representation classes
window superclass for vtkRenderWindow
Definition: vtkWindow.h:35
@ dir
Definition: vtkX3D.h:324
#define VTK_MAX_CYL_RESOLUTION
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkBooleanMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
#define VTK_FLOAT_MAX
Definition: vtkType.h:161