VTK  9.0.1
vtkBoxWidget.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkBoxWidget.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 =========================================================================*/
75 #ifndef vtkBoxWidget_h
76 #define vtkBoxWidget_h
77 
78 #include "vtk3DWidget.h"
79 #include "vtkInteractionWidgetsModule.h" // For export macro
80 
81 class vtkActor;
82 class vtkCellPicker;
83 class vtkPlanes;
84 class vtkPoints;
85 class vtkPolyData;
86 class vtkPolyDataMapper;
87 class vtkProp;
88 class vtkProperty;
89 class vtkSphereSource;
90 class vtkTransform;
91 
92 class VTKINTERACTIONWIDGETS_EXPORT vtkBoxWidget : public vtk3DWidget
93 {
94 public:
98  static vtkBoxWidget* New();
99 
100  vtkTypeMacro(vtkBoxWidget, vtk3DWidget);
101  void PrintSelf(ostream& os, vtkIndent indent) override;
102 
104 
107  void SetEnabled(int) override;
108  void PlaceWidget(double bounds[6]) override;
109  void PlaceWidget() override { this->Superclass::PlaceWidget(); }
111  double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
112  {
113  this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
114  }
116 
125  void GetPlanes(vtkPlanes* planes);
126 
128 
133  vtkSetMacro(InsideOut, vtkTypeBool);
134  vtkGetMacro(InsideOut, vtkTypeBool);
135  vtkBooleanMacro(InsideOut, vtkTypeBool);
137 
145  virtual void GetTransform(vtkTransform* t);
146 
153  virtual void SetTransform(vtkTransform* t);
154 
165  void GetPolyData(vtkPolyData* pd);
166 
168 
173  vtkGetObjectMacro(HandleProperty, vtkProperty);
174  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
176 
178 
182  void HandlesOn();
183  void HandlesOff();
185 
187 
192  vtkGetObjectMacro(FaceProperty, vtkProperty);
193  vtkGetObjectMacro(SelectedFaceProperty, vtkProperty);
195 
197 
202  vtkGetObjectMacro(OutlineProperty, vtkProperty);
203  vtkGetObjectMacro(SelectedOutlineProperty, vtkProperty);
205 
207 
211  void SetOutlineFaceWires(int);
212  vtkGetMacro(OutlineFaceWires, int);
213  void OutlineFaceWiresOn() { this->SetOutlineFaceWires(1); }
214  void OutlineFaceWiresOff() { this->SetOutlineFaceWires(0); }
216 
218 
223  void SetOutlineCursorWires(int);
224  vtkGetMacro(OutlineCursorWires, int);
225  void OutlineCursorWiresOn() { this->SetOutlineCursorWires(1); }
226  void OutlineCursorWiresOff() { this->SetOutlineCursorWires(0); }
228 
230 
234  vtkSetMacro(TranslationEnabled, vtkTypeBool);
235  vtkGetMacro(TranslationEnabled, vtkTypeBool);
236  vtkBooleanMacro(TranslationEnabled, vtkTypeBool);
237  vtkSetMacro(ScalingEnabled, vtkTypeBool);
238  vtkGetMacro(ScalingEnabled, vtkTypeBool);
239  vtkBooleanMacro(ScalingEnabled, vtkTypeBool);
240  vtkSetMacro(RotationEnabled, vtkTypeBool);
241  vtkGetMacro(RotationEnabled, vtkTypeBool);
242  vtkBooleanMacro(RotationEnabled, vtkTypeBool);
244 
245 protected:
246  vtkBoxWidget();
247  ~vtkBoxWidget() override;
248 
249  // Manage the state of the widget
250  int State;
252  {
253  Start = 0,
256  Outside
257  };
258 
259  // Handles the events
260  static void ProcessEvents(
261  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
262 
263  // ProcessEvents() dispatches to these methods.
264  virtual void OnMouseMove();
265  virtual void OnLeftButtonDown();
266  virtual void OnLeftButtonUp();
267  virtual void OnMiddleButtonDown();
268  virtual void OnMiddleButtonUp();
269  virtual void OnRightButtonDown();
270  virtual void OnRightButtonUp();
271 
272  // the hexahedron (6 faces)
276  vtkPoints* Points; // used by others as well
277  double N[6][3]; // the normals of the faces
278 
279  // A face of the hexahedron
283 
284  // glyphs representing hot spots (e.g., handles)
288  virtual void PositionHandles();
289  int HighlightHandle(vtkProp* prop); // returns cell id
290  void HighlightFace(int cellId);
291  void HighlightOutline(int highlight);
292  void ComputeNormals();
293  void SizeHandles() override;
294 
295  // wireframe outline
299 
300  // Do the picking
305 
306  // Register internal Pickers within PickingManager
307  void RegisterPickers() override;
308 
309  // Methods to manipulate the hexahedron.
310  virtual void Translate(double* p1, double* p2);
311  virtual void Scale(double* p1, double* p2, int X, int Y);
312  virtual void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
313  void MovePlusXFace(double* p1, double* p2);
314  void MoveMinusXFace(double* p1, double* p2);
315  void MovePlusYFace(double* p1, double* p2);
316  void MoveMinusYFace(double* p1, double* p2);
317  void MovePlusZFace(double* p1, double* p2);
318  void MoveMinusZFace(double* p1, double* p2);
319 
320  //"dir" is the direction in which the face can be moved i.e. the axis passing
321  // through the center
322  void MoveFace(double* p1, double* p2, double* dir, double* x1, double* x2, double* x3, double* x4,
323  double* x5);
324  // Helper method to obtain the direction in which the face is to be moved.
325  // Handles special cases where some of the scale factors are 0.
326  void GetDirection(const double Nx[3], const double Ny[3], const double Nz[3], double dir[3]);
327 
328  // Transform the hexahedral points (used for rotations)
330 
331  // Properties used to control the appearance of selected objects and
332  // the manipulator in general.
339  void CreateDefaultProperties();
340 
341  // Control the orientation of the normals
345  void GenerateOutline();
346 
347  // Control whether scaling, rotation, and translation are supported
351 
352 private:
353  vtkBoxWidget(const vtkBoxWidget&) = delete;
354  void operator=(const vtkBoxWidget&) = delete;
355 };
356 
357 #endif
vtkPolyDataMapper * HexMapper
Definition: vtkBoxWidget.h:274
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:47
vtkActor ** Handle
Definition: vtkBoxWidget.h:285
vtkProperty * HandleProperty
Definition: vtkBoxWidget.h:333
vtkProperty * SelectedOutlineProperty
Definition: vtkBoxWidget.h:338
vtkActor * HexActor
Definition: vtkBoxWidget.h:273
vtkActor * CurrentHandle
Definition: vtkBoxWidget.h:303
vtkPolyDataMapper * HexFaceMapper
Definition: vtkBoxWidget.h:281
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:45
abstract base class for most VTK objects
Definition: vtkObject.h:53
vtkPolyDataMapper ** HandleMapper
Definition: vtkBoxWidget.h:286
vtkTypeBool ScalingEnabled
Definition: vtkBoxWidget.h:349
represent surface properties of a geometric object
Definition: vtkProperty.h:61
static void ProcessEvents(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
Handles the char widget activation event.
vtkActor * HexFace
Definition: vtkBoxWidget.h:280
virtual void SetEnabled(int)
Methods for turning the interactor observer on and off, and determining its state.
implicit function for convex set of planes
Definition: vtkPlanes.h:49
void OutlineFaceWiresOff()
Control the representation of the outline.
Definition: vtkBoxWidget.h:214
vtkPolyDataMapper * OutlineMapper
Definition: vtkBoxWidget.h:297
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:54
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:84
vtkProperty * FaceProperty
Definition: vtkBoxWidget.h:335
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkPolyData * OutlinePolyData
Definition: vtkBoxWidget.h:298
vtkTransform * Transform
Definition: vtkBoxWidget.h:329
vtkCellPicker * HexPicker
Definition: vtkBoxWidget.h:302
vtkPolyData * HexFacePolyData
Definition: vtkBoxWidget.h:282
virtual void RegisterPickers()
Register internal Pickers in the Picking Manager.
int vtkTypeBool
Definition: vtkABI.h:69
vtkPoints * Points
Definition: vtkBoxWidget.h:276
create a polygonal sphere centered at the origin
vtkTypeBool InsideOut
Definition: vtkBoxWidget.h:342
vtkProperty * SelectedFaceProperty
Definition: vtkBoxWidget.h:336
a simple class to control print indentation
Definition: vtkIndent.h:33
void PlaceWidget() override
Methods that satisfy the superclass' API.
Definition: vtkBoxWidget.h:109
vtkProperty * OutlineProperty
Definition: vtkBoxWidget.h:337
vtkTypeBool RotationEnabled
Definition: vtkBoxWidget.h:350
vtkCellPicker * HandlePicker
Definition: vtkBoxWidget.h:301
vtkActor * HexOutline
Definition: vtkBoxWidget.h:296
vtkTypeBool TranslationEnabled
Definition: vtkBoxWidget.h:348
map vtkPolyData to graphics primitives
vtkPolyData * HexPolyData
Definition: vtkBoxWidget.h:275
void OutlineCursorWiresOn()
Control the representation of the outline.
Definition: vtkBoxWidget.h:225
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:66
orthogonal hexahedron 3D widget
Definition: vtkBoxWidget.h:92
int OutlineFaceWires
Definition: vtkBoxWidget.h:343
void OutlineCursorWiresOff()
Control the representation of the outline.
Definition: vtkBoxWidget.h:226
int OutlineCursorWires
Definition: vtkBoxWidget.h:344
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
void OutlineFaceWiresOn()
Control the representation of the outline.
Definition: vtkBoxWidget.h:213
an abstract superclass for 3D widgets
Definition: vtk3DWidget.h:67
virtual void SizeHandles()
Definition: vtk3DWidget.h:152
virtual void PlaceWidget()
This method is used to initially place the widget.
represent and manipulate 3D points
Definition: vtkPoints.h:33
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
Methods that satisfy the superclass' API.
Definition: vtkBoxWidget.h:110
vtkSphereSource ** HandleGeometry
Definition: vtkBoxWidget.h:287
vtkProperty * SelectedHandleProperty
Definition: vtkBoxWidget.h:334