Skip to content

Commit 6e7edc0

Browse files
author
Charles PIGNEROL
committed
Classe vtkFrustumWidget et test associé frustum_widget. vtkTrihedron : annulation de la rotation de 90° de l'affichage du "Y".
1 parent 404ac62 commit 6e7edc0

File tree

7 files changed

+1139
-3
lines changed

7 files changed

+1139
-3
lines changed

cmake/version.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#
44

55
set (VTK_CONTRIB_MAJOR_VERSION "5")
6-
set (VTK_CONTRIB_MINOR_VERSION "10")
6+
set (VTK_CONTRIB_MINOR_VERSION "11")
77
set (VTK_CONTRIB_RELEASE_VERSION "0")
88
set (VTK_CONTRIB_VERSION ${VTK_CONTRIB_MAJOR_VERSION}.${VTK_CONTRIB_MINOR_VERSION}.${VTK_CONTRIB_RELEASE_VERSION})
99

Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,271 @@
1+
/**
2+
* Widget de saisie d'un tronc dans l'espace.
3+
* @author Charles PIGNEROL, CEA/DAM/DCLC
4+
* @date 03/10/2025
5+
*/
6+
7+
#ifndef VTK_FRUSTUM_WIDGET_H
8+
#define VTK_FRUSTUM_WIDGET_H
9+
10+
#include <vtkActor.h>
11+
#include <vtk3DWidget.h>
12+
#include <vtkActor.h>
13+
#include <vtkCommand.h>
14+
#include <vtkImplicitPlaneWidget.h>
15+
#include <vtkPolyDataMapper.h>
16+
#include <vtkFrustumSource.h>
17+
#include <vtkPlane.h>
18+
#include <vtkPlanes.h>
19+
#include <vtkTubeFilter.h>
20+
21+
#include <map>
22+
#include <vector>
23+
24+
class vtkPlaneWidgetCallbackCommand;
25+
26+
/**
27+
* <P>Un widget pour saisir interactivement un tronc. Un tronc est ici défini comme étant la zone intérieure à 6 plans qui en définissent la bordure.
28+
* Les plans sont numérotés de 0 à 6 comme suit : gauche, droit, haut, bas, derrière, devant.</P>
29+
*
30+
* <P>tests/frustum_widget.cpp est un exemple d'utilisation avec callback permettant de connaître le tronc défini.</P>
31+
*/
32+
class vtkFrustumWidget : public vtk3DWidget
33+
{
34+
friend class vtkPlaneWidgetCallbackCommand;
35+
36+
public :
37+
38+
vtkTypeMacro(vtkFrustumWidget,vtk3DWidget)
39+
40+
/**
41+
* Pour l'accès au paramétrage des 6 plans du tronc (ordre de la classe vtkFrustumSource).
42+
*/
43+
enum SIDE { LEFT, RIGHT, BOTTOM, TOP, BACK, FRONT };
44+
45+
/**
46+
* Créé une représentation de type vtkConstrainedPointHandleRepresentation2.
47+
*/
48+
virtual void CreateDefaultRepresentation ( );
49+
50+
/**
51+
* Instanciation de la classe.
52+
*/
53+
static vtkFrustumWidget* New ( );
54+
55+
//@{
56+
/**
57+
* Methods that satisfy the superclass' API.
58+
*/
59+
virtual void SetInteractor (vtkRenderWindowInteractor* iren);
60+
virtual void SetEnabled (int);
61+
virtual void PlaceWidget(double bounds [6]);
62+
virtual void SetPlaceFactor (double factor);
63+
//@}
64+
65+
/**
66+
* @param indice du plan modifié ou consulté.
67+
* @param nouvelle origine.
68+
* @param nouvelle normale.
69+
*/
70+
virtual void SetPlane (SIDE p, double origin [3], double normal [3]);
71+
virtual void GetPlane (SIDE p, double origin [3], double normal [3]);
72+
virtual void SetPlaneOrigin (SIDE p, double origin [3]);
73+
virtual void GetPlaneOrigin (SIDE p, double origin [3]);
74+
virtual void SetPlaneNormal (SIDE p, double normal [3]);
75+
virtual void GetPlaneNormal (SIDE p, double normal [3]);
76+
77+
//@{
78+
/**
79+
* Modifications des propriété du widget.
80+
*/
81+
82+
// @param Opacité du tronc (6 plans) affiché.
83+
virtual void SetOpacity (double opacity);
84+
85+
/**
86+
* @param Composantes RGB des 3 interacteurs axiaux (gauche/droite, bas/haut, arrière/avant).
87+
* @warning SetInteractorEnabled doit être invoqué après On ( ) pour être effectif.
88+
*/
89+
virtual void SetInteractorColor (SIDE axis, double rgb [3]);
90+
virtual void SetInteractorEnabled (SIDE axis, bool enabled);
91+
//@}
92+
93+
/**
94+
* @return La boite englobante du tronc.
95+
*/
96+
virtual void GetBounds (double bounds [6]);
97+
98+
/**
99+
* @return La définition du tronc.
100+
*/
101+
virtual const vtkPlanes& GetPlanes ( ) const;
102+
virtual vtkPlanes& GetPlanes ( );
103+
104+
/**
105+
* Modification des 6 plans.
106+
*/
107+
virtual void SetPlanes (vtkPlanes& planes);
108+
109+
/**
110+
* Ajoute le couple de plans p1 et p2 de la liste des paires de plan devant rester parallèles.
111+
* Dans sa forme à 1 argument le second plan est celui implicitement apairé (gauche/droite, bas/haut, arrière/avant).
112+
*/
113+
virtual void AddParallelPlanes (SIDE p1, SIDE p2);
114+
virtual void AddParallelPlanes (SIDE p);
115+
116+
/**
117+
* Enlève le couple de plans p1 et p2 de la liste des paires de plan devant rester parallèles.
118+
*/
119+
virtual void RemoveParallelPlanes (SIDE p1, SIDE p2);
120+
virtual void RemoveParallelPlanes (SIDE p);
121+
122+
/**
123+
* @return Les couples de plans restant parallèles.
124+
*/
125+
virtual std::map<int, int> GetParallelPlanes ( ) const;
126+
127+
128+
protected :
129+
130+
/**
131+
* Classe permettant de contourner des difficultés rencontrées.
132+
* Un objectif est également de ne pas grossir les interacteurs car par défaut ils prennent beaucoup de place
133+
* et il en faut 6 pour le tronc.
134+
*/
135+
class vtkInternalPlaneWidget : public vtkImplicitPlaneWidget
136+
{
137+
public :
138+
139+
static vtkInternalPlaneWidget* New ( );
140+
141+
/**
142+
* Ne grossissent pas les interacteurs.
143+
*/
144+
virtual void PlaceWidget (double bounds [6]);
145+
virtual void SizeHandles ( );
146+
147+
/**
148+
* Nouvelle position => actualise la représentation sans recalculer la position qui est transmise en argument.
149+
*/
150+
virtual void UpdateRepresentation (double origin [3]);
151+
152+
/**
153+
* @return Le rayon de la poignée.
154+
*/
155+
virtual double GetHandleRadius ( );
156+
157+
/**
158+
* Affecte la couleur transmise en argument à l'interacteur.
159+
*/
160+
virtual void SetInteractorColor (double rgb [3]);
161+
162+
/**
163+
* (Dés)active l'interacteur tout en le laissant visible.
164+
*/
165+
virtual void SetInteractorEnabled (bool enabled);
166+
167+
168+
protected :
169+
170+
vtkInternalPlaneWidget ( );
171+
virtual ~vtkInternalPlaneWidget ( );
172+
173+
174+
private :
175+
176+
vtkInternalPlaneWidget (const vtkInternalPlaneWidget&);
177+
vtkInternalPlaneWidget& operator = (const vtkInternalPlaneWidget&);
178+
179+
/// true si en cours de placement du widget.
180+
bool _placing;
181+
}; // class vtkInternalPlaneWidget
182+
183+
/**
184+
* @return le p-ième plan du tronc
185+
*/
186+
virtual vtkInternalPlaneWidget* GetPlane (SIDE p);
187+
virtual const vtkInternalPlaneWidget* GetPlane (SIDE p) const;
188+
189+
/**
190+
* Actualisation lors de la modification d'un plan.
191+
*/
192+
virtual void Update (vtkInternalPlaneWidget* caller);
193+
194+
195+
private :
196+
197+
/**
198+
* Constructeur.
199+
*/
200+
vtkFrustumWidget ( );
201+
202+
/**
203+
* Destructeur. RAS.
204+
*/
205+
virtual ~vtkFrustumWidget ( );
206+
207+
/**
208+
* Constructeur et opérateur = : interdits.
209+
*/
210+
vtkFrustumWidget (const vtkFrustumWidget&);
211+
vtkFrustumWidget& operator = (const vtkFrustumWidget&);
212+
213+
/** Le tronc et sa représentation. */
214+
vtkSmartPointer<vtkFrustumSource> _frustum;
215+
vtkSmartPointer<vtkPlanes> _planes;
216+
vtkSmartPointer<vtkPolyDataMapper> _frustumMapper;
217+
vtkSmartPointer<vtkActor> _frustumActor;
218+
/** Le contour du tronc et sa représentation. */
219+
vtkSmartPointer<vtkTubeFilter> _contourFilter;
220+
vtkSmartPointer<vtkPolyDataMapper> _contourMapper;
221+
vtkSmartPointer<vtkActor> _contourActor;
222+
/** Les widgets interactifs. */
223+
std::vector<vtkSmartPointer<vtkInternalPlaneWidget>> _planeWidgets;
224+
vtkSmartPointer<vtkPlaneWidgetCallbackCommand> _planeCallback;
225+
/** Pour des opérations temporaires de récupération de données. */
226+
vtkSmartPointer<vtkPlane> _tmpPlane;
227+
228+
/* Les paires de plans parallèles entre-eux. */
229+
std::map<int, int> _parallelPlanes;
230+
}; // class vtkFrustumWidget
231+
232+
233+
class vtkPlaneWidgetCallbackCommand : public vtkCommand
234+
{
235+
public :
236+
237+
static vtkPlaneWidgetCallbackCommand* New ( )
238+
{ return new vtkPlaneWidgetCallbackCommand ( ); }
239+
240+
virtual ~vtkPlaneWidgetCallbackCommand ( )
241+
{ }
242+
243+
virtual void Execute (vtkObject* caller, unsigned long id, void* calldata);
244+
245+
virtual void SetFrustumWidget (vtkFrustumWidget* widget)
246+
{
247+
_frustumWidget = widget;
248+
} // SetFrustumWidget
249+
250+
protected :
251+
252+
vtkPlaneWidgetCallbackCommand ( )
253+
: vtkCommand ( ), _frustumWidget (0)
254+
{ }
255+
256+
257+
private :
258+
259+
vtkPlaneWidgetCallbackCommand (const vtkPlaneWidgetCallbackCommand&)
260+
{ assert (0 && "vtkPlaneWidgetCallbackCommand copy constructor is not allowed."); }
261+
vtkPlaneWidgetCallbackCommand& operator = (const vtkPlaneWidgetCallbackCommand&)
262+
{
263+
assert (0 && "vtkPlaneWidgetCallbackCommand assignment operator is not allowed.");
264+
return *this;
265+
}
266+
267+
vtkFrustumWidget* _frustumWidget;
268+
}; // class vtkPlaneWidgetCallbackCommand
269+
270+
271+
#endif // VTK_FRUSTUM_WIDGET_H

0 commit comments

Comments
 (0)