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 
242  void GetCylinder(vtkCylinder *cyl);
243 
248  void GetPolyData(vtkPolyData *pd);
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 
292  void SetEdgeColor(vtkLookupTable*);
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);
315  virtual void ReleaseGraphicsResources(vtkWindow*);
316  virtual int RenderOpaqueGeometry(vtkViewport*);
318  virtual int HasTranslucentPolygonalGeometry();
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.
492  void CreateDefaultProperties();
493 
494  // Intersect oriented infinite cylinder against bounding box
495  void BuildCylinder();
496 
497  // Support GetBounds() method
499 
500 private:
502  void operator=(const vtkImplicitCylinderRepresentation&) VTK_DELETE_FUNCTION;
503 };
504 
505 #endif
virtual void EndWidgetInteraction(double newEventPos[2])
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:51
virtual int ComputeInteractionState(int X, int Y, int modify=0)
abstract specification for Viewports
Definition: vtkViewport.h:47
represent surface properties of a geometric object
Definition: vtkProperty.h:64
virtual void StartWidgetInteraction(double eventPos[2])
defining the representation for a vtkImplicitCylinderWidget
map scalar values into colors via a lookup table
generate polygonal cone
Definition: vtkConeSource.h:44
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:60
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:85
virtual void ReleaseGraphicsResources(vtkWindow *)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Release any graphics resources that are being...
abstract class defines interface between the widget and widget representation classes ...
virtual void BuildRepresentation()=0
Subclasses of vtkWidgetRepresentation must implement these methods.
a list of Props
window superclass for vtkRenderWindow
Definition: vtkWindow.h:37
create wireframe outline for arbitrary data set
create a polygonal sphere centered at the origin
virtual double * GetBounds()
Methods to make this class behave as a vtkProp.
#define VTK_FLOAT_MAX
Definition: vtkType.h:161
Superclass for algorithms that produce only polydata as output.
filter that generates tubes around lines
Definition: vtkTubeFilter.h:83
virtual int HasTranslucentPolygonalGeometry()
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THESE METHODS OUTSIDE OF THE RENDE...
a simple class to control print indentation
Definition: vtkIndent.h:39
virtual void RegisterPickers()
Register internal Pickers in the Picking Manager.
extract boundary, non-manifold, and/or sharp edges from polygonal data
topologically and geometrically regular array of data
Definition: vtkImageData.h:45
virtual void WidgetInteraction(double newEventPos[2])
virtual void GetActors(vtkPropCollection *)
For some exporters and other other operations we must be able to collect all the actors or volumes...
vtkSetMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
create a line defined by two end points
Definition: vtkLineSource.h:42
map vtkPolyData to graphics primitives
virtual int RenderOpaqueGeometry(vtkViewport *vtkNotUsed(viewport))
virtual void PlaceWidget(double *vtkNotUsed(bounds[6]))
The following is a suggested API for widget representations.
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:69
void PrintSelf(ostream &os, vtkIndent indent)
Standard methods for instances of this class.
vtkBooleanMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
implicit function for a cylinder
Definition: vtkCylinder.h:44
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
implicit function for a bounding box
Definition: vtkBox.h:41
virtual int RenderTranslucentPolygonalGeometry(vtkViewport *vtkNotUsed(viewport))
#define VTK_MAX_CYL_RESOLUTION