VTK  9.2.6
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=========================================================================*/
78#ifndef vtkBoxWidget_h
79#define vtkBoxWidget_h
80
81#include "vtk3DWidget.h"
82#include "vtkInteractionWidgetsModule.h" // For export macro
83
84class vtkActor;
85class vtkCellPicker;
86class vtkPlanes;
87class vtkPoints;
88class vtkPolyData;
90class vtkProp;
91class vtkProperty;
92class vtkSphereSource;
93class vtkTransform;
94
95class VTKINTERACTIONWIDGETS_EXPORT vtkBoxWidget : public vtk3DWidget
96{
97public:
101 static vtkBoxWidget* New();
102
103 vtkTypeMacro(vtkBoxWidget, vtk3DWidget);
104 void PrintSelf(ostream& os, vtkIndent indent) override;
105
107
110 void SetEnabled(int) override;
111 void PlaceWidget(double bounds[6]) override;
112 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
114 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
115 {
116 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
117 }
119
128 void GetPlanes(vtkPlanes* planes);
129
131
136 vtkSetMacro(InsideOut, vtkTypeBool);
137 vtkGetMacro(InsideOut, vtkTypeBool);
138 vtkBooleanMacro(InsideOut, vtkTypeBool);
140
148 virtual void GetTransform(vtkTransform* t);
149
156 virtual void SetTransform(vtkTransform* t);
157
169
171
176 vtkGetObjectMacro(HandleProperty, vtkProperty);
177 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
179
181
185 void HandlesOn();
188
190
195 vtkGetObjectMacro(FaceProperty, vtkProperty);
196 vtkGetObjectMacro(SelectedFaceProperty, vtkProperty);
198
200
205 vtkGetObjectMacro(OutlineProperty, vtkProperty);
206 vtkGetObjectMacro(SelectedOutlineProperty, vtkProperty);
208
210
215 vtkGetMacro(OutlineFaceWires, int);
216 void OutlineFaceWiresOn() { this->SetOutlineFaceWires(1); }
217 void OutlineFaceWiresOff() { this->SetOutlineFaceWires(0); }
219
221
227 vtkGetMacro(OutlineCursorWires, int);
228 void OutlineCursorWiresOn() { this->SetOutlineCursorWires(1); }
229 void OutlineCursorWiresOff() { this->SetOutlineCursorWires(0); }
231
233
237 vtkSetMacro(TranslationEnabled, vtkTypeBool);
238 vtkGetMacro(TranslationEnabled, vtkTypeBool);
239 vtkBooleanMacro(TranslationEnabled, vtkTypeBool);
240 vtkSetMacro(ScalingEnabled, vtkTypeBool);
241 vtkGetMacro(ScalingEnabled, vtkTypeBool);
242 vtkBooleanMacro(ScalingEnabled, vtkTypeBool);
243 vtkSetMacro(RotationEnabled, vtkTypeBool);
244 vtkGetMacro(RotationEnabled, vtkTypeBool);
245 vtkBooleanMacro(RotationEnabled, vtkTypeBool);
247
248protected:
250 ~vtkBoxWidget() override;
251
252 // Manage the state of the widget
253 int State;
255 {
256 Start = 0,
259 Outside
260 };
261
262 // Handles the events
263 static void ProcessEvents(
264 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
265
266 // ProcessEvents() dispatches to these methods.
267 virtual void OnMouseMove();
268 virtual void OnLeftButtonDown();
269 virtual void OnLeftButtonUp();
270 virtual void OnMiddleButtonDown();
271 virtual void OnMiddleButtonUp();
272 virtual void OnRightButtonDown();
273 virtual void OnRightButtonUp();
274
275 // the hexahedron (6 faces)
279 vtkPoints* Points; // used by others as well
280 double N[6][3]; // the normals of the faces
281
282 // A face of the hexahedron
286
287 // glyphs representing hot spots (e.g., handles)
291 virtual void PositionHandles();
292 int HighlightHandle(vtkProp* prop); // returns cell id
293 void HighlightFace(int cellId);
294 void HighlightOutline(int highlight);
296 void SizeHandles() override;
297
298 // wireframe outline
302
303 // Do the picking
308
309 // Register internal Pickers within PickingManager
310 void RegisterPickers() override;
311
312 // Methods to manipulate the hexahedron.
313 virtual void Translate(double* p1, double* p2);
314 virtual void Scale(double* p1, double* p2, int X, int Y);
315 virtual void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
316 void MovePlusXFace(double* p1, double* p2);
317 void MoveMinusXFace(double* p1, double* p2);
318 void MovePlusYFace(double* p1, double* p2);
319 void MoveMinusYFace(double* p1, double* p2);
320 void MovePlusZFace(double* p1, double* p2);
321 void MoveMinusZFace(double* p1, double* p2);
322
323 //"dir" is the direction in which the face can be moved i.e. the axis passing
324 // through the center
325 void MoveFace(double* p1, double* p2, double* dir, double* x1, double* x2, double* x3, double* x4,
326 double* x5);
327 // Helper method to obtain the direction in which the face is to be moved.
328 // Handles special cases where some of the scale factors are 0.
329 void GetDirection(const double Nx[3], const double Ny[3], const double Nz[3], double dir[3]);
330
331 // Transform the hexahedral points (used for rotations)
333
334 // Properties used to control the appearance of selected objects and
335 // the manipulator in general.
343
344 // Control the orientation of the normals
349
350 // Control whether scaling, rotation, and translation are supported
354
355private:
356 vtkBoxWidget(const vtkBoxWidget&) = delete;
357 void operator=(const vtkBoxWidget&) = delete;
358};
359
360#endif
an abstract superclass for 3D widgets
Definition vtk3DWidget.h:71
represents an object (geometry & properties) in a rendered scene
Definition vtkActor.h:46
orthogonal hexahedron 3D widget
virtual void OnLeftButtonDown()
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
Methods that satisfy the superclass' API.
virtual void PositionHandles()
void SetOutlineCursorWires(int)
Control the representation of the outline.
void GenerateOutline()
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void OutlineCursorWiresOff()
Control the representation of the outline.
void PlaceWidget() override
Methods that satisfy the superclass' API.
virtual void Scale(double *p1, double *p2, int X, int Y)
vtkTypeBool ScalingEnabled
vtkPolyData * HexPolyData
void CreateDefaultProperties()
vtkPolyData * HexFacePolyData
virtual void Translate(double *p1, double *p2)
void PlaceWidget(double bounds[6]) override
Methods that satisfy the superclass' API.
vtkActor * HexOutline
void ComputeNormals()
~vtkBoxWidget() override
void HighlightOutline(int highlight)
vtkSphereSource ** HandleGeometry
vtkTransform * Transform
vtkProperty * SelectedFaceProperty
vtkCellPicker * HandlePicker
virtual void Rotate(int X, int Y, double *p1, double *p2, double *vpn)
void SetEnabled(int) override
Methods that satisfy the superclass' API.
void MoveFace(double *p1, double *p2, double *dir, double *x1, double *x2, double *x3, double *x4, double *x5)
vtkProperty * HandleProperty
static void ProcessEvents(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
virtual void OnRightButtonUp()
void OutlineCursorWiresOn()
Control the representation of the outline.
void MovePlusYFace(double *p1, double *p2)
vtkCellPicker * HexPicker
vtkPolyDataMapper * HexMapper
virtual void OnMiddleButtonDown()
vtkPoints * Points
void GetDirection(const double Nx[3], const double Ny[3], const double Nz[3], double dir[3])
vtkTypeBool RotationEnabled
void HandlesOn()
Switches handles (the spheres) on or off by manipulating the actor visibility.
void SetOutlineFaceWires(int)
Control the representation of the outline.
vtkTypeBool InsideOut
vtkTypeBool TranslationEnabled
vtkPolyDataMapper * HexFaceMapper
int HighlightHandle(vtkProp *prop)
static vtkBoxWidget * New()
Instantiate the object.
vtkActor * HexActor
vtkProperty * OutlineProperty
vtkActor ** Handle
void OutlineFaceWiresOn()
Control the representation of the outline.
vtkPolyData * OutlinePolyData
void MoveMinusXFace(double *p1, double *p2)
void MovePlusXFace(double *p1, double *p2)
virtual void GetTransform(vtkTransform *t)
Retrieve a linear transform characterizing the transformation of the box.
void RegisterPickers() override
Register internal Pickers in the Picking Manager.
vtkProperty * FaceProperty
vtkActor * HexFace
void OutlineFaceWiresOff()
Control the representation of the outline.
void MoveMinusZFace(double *p1, double *p2)
virtual void SetTransform(vtkTransform *t)
Set the position, scale and orientation of the box widget using the transform specified.
virtual void OnLeftButtonUp()
void MovePlusZFace(double *p1, double *p2)
virtual void OnRightButtonDown()
virtual void OnMiddleButtonUp()
void HandlesOff()
Switches handles (the spheres) on or off by manipulating the actor visibility.
vtkProperty * SelectedHandleProperty
void MoveMinusYFace(double *p1, double *p2)
virtual void OnMouseMove()
void GetPolyData(vtkPolyData *pd)
Grab the polydata (including points) that define the box widget.
void SizeHandles() override
vtkPolyDataMapper * OutlineMapper
vtkProperty * SelectedOutlineProperty
vtkPolyDataMapper ** HandleMapper
vtkActor * CurrentHandle
void HighlightFace(int cellId)
void GetPlanes(vtkPlanes *planes)
Get the planes describing the implicit function defined by the box widget.
ray-cast cell picker for all kinds of Prop3Ds
a simple class to control print indentation
Definition vtkIndent.h:34
abstract base class for most VTK objects
Definition vtkObject.h:57
implicit function for convex set of planes
Definition vtkPlanes.h:50
represent and manipulate 3D points
Definition vtkPoints.h:34
map vtkPolyData to graphics primitives
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition vtkPolyData.h:85
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:51
represent surface properties of a geometric object
Definition vtkProperty.h:62
create a polygonal sphere centered at the origin
describes linear transformations via a 4x4 matrix
int vtkTypeBool
Definition vtkABI.h:69