VTK  9.2.6
vtkBoxRepresentation.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkBoxRepresentation.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=========================================================================*/
48#ifndef vtkBoxRepresentation_h
49#define vtkBoxRepresentation_h
50
51#include "vtkInteractionWidgetsModule.h" // For export macro
53
54class vtkActor;
56class vtkLineSource;
57class vtkSphereSource;
58class vtkCellPicker;
59class vtkProperty;
60class vtkPolyData;
61class vtkPoints;
64class vtkTransform;
65class vtkPlane;
66class vtkPlanes;
67class vtkBox;
68class vtkDoubleArray;
69class vtkMatrix4x4;
70
71class VTKINTERACTIONWIDGETS_EXPORT vtkBoxRepresentation : public vtkWidgetRepresentation
72{
73public:
78
80
84 void PrintSelf(ostream& os, vtkIndent indent) override;
86
95 void GetPlanes(vtkPlanes* planes);
96
97 // Get the underlying planes used by this rep
98 // this can be used as a cropping planes in vtkMapper
99 vtkPlane* GetUnderlyingPlane(int i) { return this->Planes[i]; }
100
102
108 vtkSetMacro(InsideOut, vtkTypeBool);
109 vtkGetMacro(InsideOut, vtkTypeBool);
110 vtkBooleanMacro(InsideOut, vtkTypeBool);
112
120 virtual void GetTransform(vtkTransform* t);
121
128 virtual void SetTransform(vtkTransform* t);
129
141
143
148 vtkGetObjectMacro(HandleProperty, vtkProperty);
149 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
151
153
158 vtkGetObjectMacro(FaceProperty, vtkProperty);
159 vtkGetObjectMacro(SelectedFaceProperty, vtkProperty);
161
163
168 vtkGetObjectMacro(OutlineProperty, vtkProperty);
169 vtkGetObjectMacro(SelectedOutlineProperty, vtkProperty);
171
173
178 vtkGetMacro(OutlineFaceWires, int);
179 void OutlineFaceWiresOn() { this->SetOutlineFaceWires(1); }
180 void OutlineFaceWiresOff() { this->SetOutlineFaceWires(0); }
182
184
190 vtkGetMacro(OutlineCursorWires, int);
191 void OutlineCursorWiresOn() { this->SetOutlineCursorWires(1); }
192 void OutlineCursorWiresOff() { this->SetOutlineCursorWires(0); }
194
196
200 virtual void HandlesOn();
201 virtual void HandlesOff();
203
205
208 void PlaceWidget(double bounds[6]) override;
209 void BuildRepresentation() override;
210 int ComputeInteractionState(int X, int Y, int modify = 0) override;
211 void StartWidgetInteraction(double e[2]) override;
212 void WidgetInteraction(double e[2]) override;
213 double* GetBounds() VTK_SIZEHINT(6) override;
214 void StartComplexInteraction(vtkRenderWindowInteractor* iren, vtkAbstractWidget* widget,
215 unsigned long event, void* calldata) override;
216 void ComplexInteraction(vtkRenderWindowInteractor* iren, vtkAbstractWidget* widget,
217 unsigned long event, void* calldata) override;
218 int ComputeComplexInteractionState(vtkRenderWindowInteractor* iren, vtkAbstractWidget* widget,
219 unsigned long event, void* calldata, int modify = 0) override;
220 void EndComplexInteraction(vtkRenderWindowInteractor* iren, vtkAbstractWidget* widget,
221 unsigned long event, void* calldata) override;
223
225
228 void ReleaseGraphicsResources(vtkWindow*) override;
229 int RenderOpaqueGeometry(vtkViewport*) override;
230 int RenderTranslucentPolygonalGeometry(vtkViewport*) override;
231 vtkTypeBool HasTranslucentPolygonalGeometry() override;
233
234 // Used to manage the state of the widget
235 enum
236 {
237 Outside = 0,
246 Scaling
247 };
248
258 void SetInteractionState(int state);
259
261
265 vtkGetMacro(TwoPlaneMode, bool);
266 void SetTwoPlaneMode(bool);
268
270
274 vtkGetMacro(SnapToAxes, bool);
275 vtkSetMacro(SnapToAxes, bool);
277
279
286
287 /*
288 * Register internal Pickers within PickingManager
289 */
290 void RegisterPickers() override;
291
293
297 vtkGetMacro(TranslationAxis, int);
298 vtkSetClampMacro(TranslationAxis, int, -1, 2);
300
302
305 void SetXTranslationAxisOn() { this->TranslationAxis = Axis::XAxis; }
306 void SetYTranslationAxisOn() { this->TranslationAxis = Axis::YAxis; }
307 void SetZTranslationAxisOn() { this->TranslationAxis = Axis::ZAxis; }
308 void SetTranslationAxisOff() { this->TranslationAxis = Axis::NONE; }
310
312
315 bool IsTranslationConstrained() { return this->TranslationAxis != Axis::NONE; }
317
324
325protected:
328
329 // Manage how the representation appears
330 double LastEventPosition[3];
331 double LastEventOrientation[4];
332 double StartEventOrientation[4];
333 double SnappedEventOrientations[3][4];
334 bool SnappedOrientation[3];
336
338
339 // Constraint axis translation
341
342 // the hexahedron (6 faces)
346 vtkPoints* Points; // used by others as well
347 double N[6][3]; // the normals of the faces
348
349 // A face of the hexahedron
353
354 // glyphs representing hot spots (e.g., handles)
358 virtual void PositionHandles();
359 int HighlightHandle(vtkProp* prop); // returns cell id
360 void HighlightFace(int cellId);
361 void HighlightOutline(int highlight);
362 virtual void ComputeNormals();
363 virtual void SizeHandles();
364
365 // wireframe outline
369
370 // Do the picking
376
377 // Transform the hexahedral points (used for rotations)
379
380 // Support GetBounds() method
382
383 // Properties used to control the appearance of selected objects and
384 // the manipulator in general.
392
393 // Control the orientation of the normals
398
399 // Helper methods
400 virtual void Translate(const double* p1, const double* p2);
401 virtual void Scale(const double* p1, const double* p2, int X, int Y);
402 virtual void Rotate(int X, int Y, const double* p1, const double* p2, const double* vpn);
403 void MovePlusXFace(const double* p1, const double* p2);
404 void MoveMinusXFace(const double* p1, const double* p2);
405 void MovePlusYFace(const double* p1, const double* p2);
406 void MoveMinusYFace(const double* p1, const double* p2);
407 void MovePlusZFace(const double* p1, const double* p2);
408 void MoveMinusZFace(const double* p1, const double* p2);
409 void UpdatePose(const double* p1, const double* d1, const double* p2, const double* d2);
410
411 // Internal ivars for performance
415
416 // The actual planes which are being manipulated
417 vtkPlane* Planes[6];
418
419 //"dir" is the direction in which the face can be moved i.e. the axis passing
420 // through the center
421 void MoveFace(const double* p1, const double* p2, const double* dir, double* x1, double* x2,
422 double* x3, double* x4, double* x5);
423 // Helper method to obtain the direction in which the face is to be moved.
424 // Handles special cases where some of the scale factors are 0.
425 void GetDirection(const double Nx[3], const double Ny[3], const double Nz[3], double dir[3]);
426
427private:
429 void operator=(const vtkBoxRepresentation&) = delete;
430};
431
432#endif
define the API for widget / widget representation
represents an object (geometry & properties) in a rendered scene
Definition vtkActor.h:61
a class defining the representation for the vtkBoxWidget2
int ComputeInteractionState(int X, int Y, int modify=0) override
These are methods that satisfy vtkWidgetRepresentation's API.
void SetZTranslationAxisOn()
Toggles constraint translation axis on/off.
virtual void PositionHandles()
virtual void SetTransform(vtkTransform *t)
Set the position, scale and orientation of the box widget using the transform specified.
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods for the class.
void MovePlusZFace(const double *p1, const double *p2)
void OutlineCursorWiresOff()
Control the representation of the outline.
void MoveMinusYFace(const double *p1, const double *p2)
void GetPlanes(vtkPlanes *planes)
Get the planes describing the implicit function defined by the box widget.
void SetOutlineCursorWires(int)
Control the representation of the outline.
vtkPolyDataMapper * HexFaceMapper
void StepBackward()
For complex events should we snap orientations to be aligned with the x y z axes.
void GetActors(vtkPropCollection *) override
These methods are necessary to make this representation behave as a vtkProp (i.e.,...
void MoveMinusXFace(const double *p1, const double *p2)
void MoveFace(const double *p1, const double *p2, const double *dir, double *x1, double *x2, double *x3, double *x4, double *x5)
virtual void HandlesOff()
Switches handles (the spheres) on or off by manipulating the underlying actor visibility.
void HighlightFace(int cellId)
int HighlightHandle(vtkProp *prop)
bool IsTranslationConstrained()
Returns true if ContrainedAxis.
void OutlineFaceWiresOn()
Control the representation of the outline.
vtkPolyDataMapper * OutlineMapper
vtkPlane * GetUnderlyingPlane(int i)
void GetDirection(const double Nx[3], const double Ny[3], const double Nz[3], double dir[3])
void SetXTranslationAxisOn()
Toggles constraint translation axis on/off.
virtual void Translate(const double *p1, const double *p2)
void MovePlusYFace(const double *p1, const double *p2)
virtual void SizeHandles()
void BuildRepresentation() override
These are methods that satisfy vtkWidgetRepresentation's API.
virtual void Rotate(int X, int Y, const double *p1, const double *p2, const double *vpn)
vtkSphereSource ** HandleGeometry
virtual void GetTransform(vtkTransform *t)
Retrieve a linear transform characterizing the transformation of the box.
vtkDoubleArray * PlaneNormals
void SetTwoPlaneMode(bool)
In two plane mode only the X planes are shown this is useful for defining thick slabs.
void WidgetInteraction(double e[2]) override
These are methods that satisfy vtkWidgetRepresentation's API.
vtkProperty * SelectedOutlineProperty
void OutlineCursorWiresOn()
Control the representation of the outline.
virtual void ComputeNormals()
void HighlightOutline(int highlight)
void GetPolyData(vtkPolyData *pd)
Grab the polydata (including points) that define the box widget.
void UpdatePose(const double *p1, const double *d1, const double *p2, const double *d2)
vtkProperty * SelectedHandleProperty
void MovePlusXFace(const double *p1, const double *p2)
vtkPolyDataMapper * HexMapper
void SetYTranslationAxisOn()
Toggles constraint translation axis on/off.
void StartWidgetInteraction(double e[2]) override
These are methods that satisfy vtkWidgetRepresentation's API.
void SetTranslationAxisOff()
Toggles constraint translation axis on/off.
void StepForward()
For complex events should we snap orientations to be aligned with the x y z axes.
vtkPolyDataMapper ** HandleMapper
void SetInteractionState(int state)
The interaction state may be set from a widget (e.g., vtkBoxWidget2) or other object.
virtual void HandlesOn()
Switches handles (the spheres) on or off by manipulating the underlying actor visibility.
void SetOutlineFaceWires(int)
Control the representation of the outline.
~vtkBoxRepresentation() override
void OutlineFaceWiresOff()
Control the representation of the outline.
virtual void CreateDefaultProperties()
void RegisterPickers() override
Register internal Pickers in the Picking Manager.
void PlaceWidget(double bounds[6]) override
These are methods that satisfy vtkWidgetRepresentation's API.
virtual void Scale(const double *p1, const double *p2, int X, int Y)
double * GetBounds() override
These are methods that satisfy vtkWidgetRepresentation's API.
static vtkBoxRepresentation * New()
Instantiate the class.
void MoveMinusZFace(const double *p1, const double *p2)
implicit function for a bounding box
Definition vtkBox.h:51
ray-cast cell picker for all kinds of Prop3Ds
dynamic, self-adjusting array of double
a simple class to control print indentation
Definition vtkIndent.h:49
create a line defined by two end points
represent and manipulate 4x4 transformation matrices
perform various plane computations
Definition vtkPlane.h:46
implicit function for convex set of planes
Definition vtkPlanes.h:62
represent the position of a point in 3D space
represent and manipulate 3D points
Definition vtkPoints.h:49
Superclass for algorithms that produce only polydata as output.
map vtkPolyData to graphics primitives
concrete dataset represents vertices, lines, polygons, and triangle strips
an ordered list of Props
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:66
represent surface properties of a geometric object
Definition vtkProperty.h:77
platform-independent render window interaction including picking and frame rate control.
create a polygonal sphere centered at the origin
describes linear transformations via a 4x4 matrix
abstract specification for Viewports
Definition vtkViewport.h:65
abstract class defines interface between the widget and widget representation classes
window superclass for vtkRenderWindow
Definition vtkWindow.h:48
int vtkTypeBool
Definition vtkABI.h:69
#define VTK_SIZEHINT(...)