VTK  9.1.0
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
81class vtkActor;
82class vtkCellPicker;
83class vtkPlanes;
84class vtkPoints;
85class vtkPolyData;
87class vtkProp;
88class vtkProperty;
89class vtkSphereSource;
90class vtkTransform;
91
92class VTKINTERACTIONWIDGETS_EXPORT vtkBoxWidget : public vtk3DWidget
93{
94public:
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
166
168
173 vtkGetObjectMacro(HandleProperty, vtkProperty);
174 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
176
178
182 void HandlesOn();
185
187
192 vtkGetObjectMacro(FaceProperty, vtkProperty);
193 vtkGetObjectMacro(SelectedFaceProperty, vtkProperty);
195
197
202 vtkGetObjectMacro(OutlineProperty, vtkProperty);
203 vtkGetObjectMacro(SelectedOutlineProperty, vtkProperty);
205
207
212 vtkGetMacro(OutlineFaceWires, int);
213 void OutlineFaceWiresOn() { this->SetOutlineFaceWires(1); }
214 void OutlineFaceWiresOff() { this->SetOutlineFaceWires(0); }
216
218
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
245protected:
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);
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.
340
341 // Control the orientation of the normals
346
347 // Control whether scaling, rotation, and translation are supported
351
352private:
353 vtkBoxWidget(const vtkBoxWidget&) = delete;
354 void operator=(const vtkBoxWidget&) = delete;
355};
356
357#endif
an abstract superclass for 3D widgets
Definition vtk3DWidget.h:68
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:54
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:86
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:48
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