forked from biddisco/pv-meshless
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvtkCustomBoxWidget.h
130 lines (113 loc) · 5.56 KB
/
vtkCustomBoxWidget.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkCustomBoxWidget.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkCustomBoxWidget - 3D widget for manipulating a box
// .SECTION Description
// This 3D widget interacts with a vtkCustomBoxRepresentation class (i.e., it
// handles the events that drive its corresponding representation). The
// representation is assumed to represent a region of interest that is
// represented by an arbitrarily oriented hexahedron (or box) with interior
// face angles of 90 degrees (i.e., orthogonal faces). The representation
// manifests seven handles that can be moused on and manipulated, plus the
// six faces can also be interacted with. The first six handles are placed on
// the six faces, the seventh is in the center of the box. In addition, a
// bounding box outline is shown, the "faces" of which can be selected for
// object rotation or scaling. A nice feature of vtkCustomBoxWidget, like any 3D
// widget, will work with the current interactor style. That is, if
// vtkCustomBoxWidget does not handle an event, then all other registered
// observers (including the interactor style) have an opportunity to process
// the event. Otherwise, the vtkBoxWidget will terminate the processing of
// the event that it handles.
//
// To use this widget, you generally pair it with a vtkCustomBoxRepresentation
// (or a subclass). Various options are available in the representation for
// controlling how the widget appears, and how the widget functions.
//
// .SECTION Event Bindings
// By default, the widget responds to the following VTK events (i.e., it
// watches the vtkRenderWindowInteractor for these events):
// <pre>
// If one of the seven handles are selected:
// LeftButtonPressEvent - select the appropriate handle
// LeftButtonReleaseEvent - release the currently selected handle
// MouseMoveEvent - move the handle
// If one of the faces is selected:
// LeftButtonPressEvent - select a box face
// LeftButtonReleaseEvent - release the box face
// MouseMoveEvent - rotate the box
// In all the cases, independent of what is picked, the widget responds to the
// following VTK events:
// MiddleButtonPressEvent - translate the widget
// MiddleButtonReleaseEvent - release the widget
// RightButtonPressEvent - scale the widget's representation
// RightButtonReleaseEvent - stop scaling the widget
// MouseMoveEvent - scale (if right button) or move (if middle button) the widget
// </pre>
//
// Note that the event bindings described above can be changed using this
// class's vtkWidgetEventTranslator. This class translates VTK events
// into the vtkCustomBoxWidget's widget events:
// <pre>
// vtkWidgetEvent::Select -- some part of the widget has been selected
// vtkWidgetEvent::EndSelect -- the selection process has completed
// vtkWidgetEvent::Scale -- some part of the widget has been selected
// vtkWidgetEvent::EndScale -- the selection process has completed
// vtkWidgetEvent::Translate -- some part of the widget has been selected
// vtkWidgetEvent::EndTranslate -- the selection process has completed
// vtkWidgetEvent::Move -- a request for motion has been invoked
// </pre>
//
// In turn, when these widget events are processed, the vtkCustomBoxWidget
// invokes the following VTK events on itself (which observers can listen for):
// <pre>
// vtkCommand::StartInteractionEvent (on vtkWidgetEvent::Select)
// vtkCommand::EndInteractionEvent (on vtkWidgetEvent::EndSelect)
// vtkCommand::InteractionEvent (on vtkWidgetEvent::Move)
// </pre>
// .SECTION Caveats
// Note that in some cases the widget can be picked even when it is "behind"
// other actors. This is an intended feature and not a bug.
//
// This class, and the affiliated vtkCustomBoxRepresentation, are second generation
// VTK widgets. An earlier version of this functionality was defined in the
// class vtkBoxWidget.
// .SECTION See Also
// vtkCustomBoxRepresentation vtkBoxWidget
#ifndef __vtkCustomBoxWidget_h
#define __vtkCustomBoxWidget_h
#include "vtkBoxWidget2.h"
class vtkCustomBoxRepresentation;
class VTK_EXPORT vtkCustomBoxWidget : public vtkBoxWidget2
{
public:
// Description:
// Instantiate the object.
static vtkCustomBoxWidget *New();
// Description:
// Standard class methods for type information and printing.
vtkTypeMacro(vtkCustomBoxWidget,vtkBoxWidget2);
// Description:
// Specify an instance of vtkWidgetRepresentation used to represent this
// widget in the scene. Note that the representation is a subclass of vtkProp
// so it can be added to the renderer independent of the widget.
void SetRepresentation(vtkCustomBoxRepresentation *r)
{this->Superclass::SetWidgetRepresentation(reinterpret_cast<vtkWidgetRepresentation*>(r));}
// Description:
// Create the default widget representation if one is not set. By default,
// this is an instance of the vtkCustomBoxRepresentation class.
void CreateDefaultRepresentation();
protected:
vtkCustomBoxWidget();
~vtkCustomBoxWidget();
private:
vtkCustomBoxWidget(const vtkCustomBoxWidget&); //Not implemented
void operator=(const vtkCustomBoxWidget&); //Not implemented
};
#endif