VTK  9.3.20240521
vtkBoxRepresentation.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
46#ifndef vtkBoxRepresentation_h
47#define vtkBoxRepresentation_h
48
49#include "vtkInteractionWidgetsModule.h" // For export macro
51#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
52
53VTK_ABI_NAMESPACE_BEGIN
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 VTK_MARSHALAUTO vtkBoxRepresentation
73{
74public:
79
81
85 void PrintSelf(ostream& os, vtkIndent indent) override;
87
96 void GetPlanes(vtkPlanes* planes);
97
98 // Get the underlying planes used by this rep
99 // this can be used as a cropping planes in vtkMapper
100 vtkPlane* GetUnderlyingPlane(int i) { return this->Planes[i]; }
101
103
109 vtkSetMacro(InsideOut, vtkTypeBool);
110 vtkGetMacro(InsideOut, vtkTypeBool);
111 vtkBooleanMacro(InsideOut, vtkTypeBool);
113
121 virtual void GetTransform(vtkTransform* t);
122
129 virtual void SetTransform(vtkTransform* t);
130
142
144
149 vtkGetObjectMacro(HandleProperty, vtkProperty);
150 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
152
154
159 vtkGetObjectMacro(FaceProperty, vtkProperty);
160 vtkGetObjectMacro(SelectedFaceProperty, vtkProperty);
162
164
169 vtkGetObjectMacro(OutlineProperty, vtkProperty);
170 vtkGetObjectMacro(SelectedOutlineProperty, vtkProperty);
172
174
177 void SetForegroundColor(double _arg1, double _arg2, double _arg3);
178 void SetForegroundColor(const double _arg[3])
179 {
180 this->SetForegroundColor(_arg[0], _arg[1], _arg[2]);
181 }
183
185
189 void SetInteractionColor(double _arg1, double _arg2, double _arg3);
190 void SetInteractionColor(const double _arg[3])
191 {
192 this->SetInteractionColor(_arg[0], _arg[1], _arg[2]);
193 }
195
197
202 vtkGetMacro(OutlineFaceWires, int);
203 void OutlineFaceWiresOn() { this->SetOutlineFaceWires(1); }
204 void OutlineFaceWiresOff() { this->SetOutlineFaceWires(0); }
206
208
214 vtkGetMacro(OutlineCursorWires, int);
215 void OutlineCursorWiresOn() { this->SetOutlineCursorWires(1); }
216 void OutlineCursorWiresOff() { this->SetOutlineCursorWires(0); }
218
220
224 virtual void HandlesOn();
225 virtual void HandlesOff();
227
229
232 void PlaceWidget(double bounds[6]) override;
233 void BuildRepresentation() override;
234 int ComputeInteractionState(int X, int Y, int modify = 0) override;
235 void StartWidgetInteraction(double e[2]) override;
236 void WidgetInteraction(double e[2]) override;
237 double* GetBounds() VTK_SIZEHINT(6) override;
238 void StartComplexInteraction(vtkRenderWindowInteractor* iren, vtkAbstractWidget* widget,
239 unsigned long event, void* calldata) override;
240 void ComplexInteraction(vtkRenderWindowInteractor* iren, vtkAbstractWidget* widget,
241 unsigned long event, void* calldata) override;
242 int ComputeComplexInteractionState(vtkRenderWindowInteractor* iren, vtkAbstractWidget* widget,
243 unsigned long event, void* calldata, int modify = 0) override;
244 void EndComplexInteraction(vtkRenderWindowInteractor* iren, vtkAbstractWidget* widget,
245 unsigned long event, void* calldata) override;
247
249
252 void ReleaseGraphicsResources(vtkWindow*) override;
253 int RenderOpaqueGeometry(vtkViewport*) override;
254 int RenderTranslucentPolygonalGeometry(vtkViewport*) override;
255 vtkTypeBool HasTranslucentPolygonalGeometry() override;
257
258 // Used to manage the state of the widget
259 enum
260 {
261 Outside = 0,
270 Scaling
271 };
272
282 void SetInteractionState(int state);
283
285
289 vtkGetMacro(TwoPlaneMode, bool);
290 void SetTwoPlaneMode(bool);
292
294
298 vtkGetMacro(SnapToAxes, bool);
299 vtkSetMacro(SnapToAxes, bool);
301
303
310
311 /*
312 * Register internal Pickers within PickingManager
313 */
314 void RegisterPickers() override;
315
317
321 vtkGetMacro(TranslationAxis, int);
322 vtkSetClampMacro(TranslationAxis, int, -1, 2);
324
326
329 void SetXTranslationAxisOn() { this->TranslationAxis = Axis::XAxis; }
330 void SetYTranslationAxisOn() { this->TranslationAxis = Axis::YAxis; }
331 void SetZTranslationAxisOn() { this->TranslationAxis = Axis::ZAxis; }
332 void SetTranslationAxisOff() { this->TranslationAxis = Axis::NONE; }
334
336
339 bool IsTranslationConstrained() { return this->TranslationAxis != Axis::NONE; }
341
348
349protected:
352
353 // Manage how the representation appears
354 double LastEventPosition[3];
355 double LastEventOrientation[4];
356 double StartEventOrientation[4];
357 double SnappedEventOrientations[3][4];
358 bool SnappedOrientation[3];
360
362
363 // Constraint axis translation
365
366 // the hexahedron (6 faces)
370 vtkPoints* Points; // used by others as well
371 double N[6][3]; // the normals of the faces
372
373 // A face of the hexahedron
377
378 // glyphs representing hot spots (e.g., handles)
382 virtual void PositionHandles();
383 int HighlightHandle(vtkProp* prop); // returns cell id
384 void HighlightFace(int cellId);
385 void HighlightOutline(int highlight);
386 virtual void ComputeNormals();
387 virtual void SizeHandles();
388
389 // wireframe outline
393
394 // Do the picking
400
401 // Transform the hexahedral points (used for rotations)
403
404 // Support GetBounds() method
406
407 // Properties used to control the appearance of selected objects and
408 // the manipulator in general.
416
417 // Control the orientation of the normals
422
423 // Helper methods
424 virtual void Translate(const double* p1, const double* p2);
425 virtual void Scale(const double* p1, const double* p2, int X, int Y);
426 virtual void Rotate(int X, int Y, const double* p1, const double* p2, const double* vpn);
427 void MovePlusXFace(const double* p1, const double* p2);
428 void MoveMinusXFace(const double* p1, const double* p2);
429 void MovePlusYFace(const double* p1, const double* p2);
430 void MoveMinusYFace(const double* p1, const double* p2);
431 void MovePlusZFace(const double* p1, const double* p2);
432 void MoveMinusZFace(const double* p1, const double* p2);
433 void UpdatePose(const double* p1, const double* d1, const double* p2, const double* d2);
434
435 // Internal ivars for performance
439
440 // The actual planes which are being manipulated
441 vtkPlane* Planes[6];
442
443 //"dir" is the direction in which the face can be moved i.e. the axis passing
444 // through the center
445 void MoveFace(const double* p1, const double* p2, const double* dir, double* x1, double* x2,
446 double* x3, double* x4, double* x5);
447 // Helper method to obtain the direction in which the face is to be moved.
448 // Handles special cases where some of the scale factors are 0.
449 void GetDirection(const double Nx[3], const double Ny[3], const double Nz[3], double dir[3]);
450
451private:
453 void operator=(const vtkBoxRepresentation&) = delete;
454};
455
456VTK_ABI_NAMESPACE_END
457#endif
define the API for widget / widget representation
represents an object (geometry & properties) in a rendered scene
Definition vtkActor.h:151
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.
void SetForegroundColor(const double _arg[3])
Set the foreground color (the outline of the box).
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 ConstrainedAxis.
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 SetInteractionColor(const double _arg[3])
Set the interaction color.
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 SetForegroundColor(double _arg1, double _arg2, double _arg3)
Set the foreground color (the outline of the box).
void MoveMinusZFace(const double *p1, const double *p2)
void SetInteractionColor(double _arg1, double _arg2, double _arg3)
Set the interaction color.
implicit function for a bounding box
Definition vtkBox.h:110
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:108
create a line defined by two end points
represent and manipulate 4x4 transformation matrices
perform various plane computations
Definition vtkPlane.h:135
implicit function for convex set of planes
Definition vtkPlanes.h:151
represent the position of a point in 3D space
represent and manipulate 3D points
Definition vtkPoints.h:139
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
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:64
#define VTK_SIZEHINT(...)
#define VTK_MARSHALAUTO