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 
48 class vtkActor;
49 class vtkPolyDataMapper;
50 class vtkCellPicker;
51 class vtkConeSource;
52 class vtkLineSource;
53 class vtkSphereSource;
54 class vtkTubeFilter;
55 class vtkCylinder;
56 class vtkProperty;
57 class vtkImageData;
58 class vtkOutlineFilter;
59 class vtkFeatureEdges;
60 class vtkPolyData;
62 class vtkTransform;
63 class vtkBox;
64 class vtkLookupTable;
65 
66 #define VTK_MAX_CYL_RESOLUTION 2048
67 
68 class VTKINTERACTIONWIDGETS_EXPORT vtkImplicitCylinderRepresentation : public vtkWidgetRepresentation
69 {
70 public:
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 
383 protected:
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
397  double BumpDistance;
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);
481  void SizeHandles();
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 
500 private:
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.
virtual double * GetBounds()
Methods supporting the rendering process.
void PushCylinder(double distance)
Push the cylinder the distance specified along the view vector.
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 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.
static vtkImplicitCylinderRepresentation * New()
Instantiate the class.
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