|
| 1 | +/** |
| 2 | + * Widget de saisie d'une ellipsoïde dans l'espace. |
| 3 | + * @author Charles PIGNEROL, CEA/DAM/DCLC |
| 4 | + * @date 09/12/2025 |
| 5 | + */ |
| 6 | + |
| 7 | +#ifndef VTK_ELLIPSOID_WIDGET_H |
| 8 | +#define VTK_ELLIPSOID_WIDGET_H |
| 9 | + |
| 10 | +#include "VtkContrib/vtkEllipsoid.h" |
| 11 | +#include "VtkContrib/vtkPolygonFilter.h" |
| 12 | + |
| 13 | +#include <vtkBoxWidget.h> |
| 14 | +#include <vtkCommand.h> |
| 15 | +#include <vtkPolyDataMapper.h> |
| 16 | +#include <vtkParametricEllipsoid.h> |
| 17 | +#include <vtkParametricFunctionSource.h> |
| 18 | +#include <vtkTransform.h> |
| 19 | + |
| 20 | + |
| 21 | +/** |
| 22 | + * <P>Un widget pour saisir interactivement une ellipsoïde. L'ellipsoïde est ici délimitée par 6 plans qui en définissent la bordure. |
| 23 | + * Les plans sont numérotés de 0 à 6 comme suit : gauche, droit, haut, bas, derrière, devant. L'ellipsoïde est tangente en ces 6 plans.</P> |
| 24 | + * |
| 25 | + * <P>Pour mémo, la transformation portée par la classe vtkBoxWidget décrit la transformation effectuée à partir de PlaceWidget, |
| 26 | + * ce qui implique que la position initiale n'est pas décrite dans cette transformation. |
| 27 | + * Concernant l'ellipsoid, décrite de manière paramétrique (classe vtkParametricEllipsoid), elle est centrée en 0. Cette ellipsoid est |
| 28 | + * représentée par un acteur véhiculant une transformation analogue à celle de vtkBoxWidget mais portant en plus la position initiale. |
| 29 | + * </P> |
| 30 | + * |
| 31 | + * <P>tests/ellipsoid_widget.cpp est un exemple d'utilisation avec callback permettant de connaître l'ellipsoïde définie.</P> |
| 32 | + * @see vtkEllipsoid |
| 33 | + */ |
| 34 | +class vtkEllipsoidWidget : public vtkBoxWidget |
| 35 | +{ |
| 36 | + public : |
| 37 | + |
| 38 | + vtkTypeMacro(vtkEllipsoidWidget,vtkBoxWidget) |
| 39 | + |
| 40 | + /** |
| 41 | + * Créé une représentation de type vtkConstrainedPointHandleRepresentation2. |
| 42 | + */ |
| 43 | + virtual void CreateDefaultRepresentation ( ); |
| 44 | + |
| 45 | + /** |
| 46 | + * Instanciation de la classe. |
| 47 | + */ |
| 48 | + static vtkEllipsoidWidget* New ( ); |
| 49 | + |
| 50 | + //@{ |
| 51 | + /** |
| 52 | + * Methods that satisfy the superclass' API. |
| 53 | + */ |
| 54 | + virtual void PlaceWidget (double bounds [6]); |
| 55 | + virtual void PlaceWidget (double xRadius, double yRadius, double zRadius, vtkTransform* transform); |
| 56 | + virtual void SetEnabled (int); |
| 57 | + //@} |
| 58 | + |
| 59 | + //@{ |
| 60 | + /** |
| 61 | + * Modifications des propriété du widget. |
| 62 | + */ |
| 63 | + |
| 64 | + /** |
| 65 | + * Les dimensions de l'ellipsoïde selon les 3 axes (avant transformation). |
| 66 | + */ |
| 67 | + virtual void GetPosition (double& x, double& y, double& z); |
| 68 | + |
| 69 | + /** |
| 70 | + * Les dimensions de l'ellipsoïde selon les 3 axes. |
| 71 | + */ |
| 72 | + virtual double GetXRadius ( ); |
| 73 | + virtual double GetYRadius ( ); |
| 74 | + virtual double GetZRadius ( ); |
| 75 | + |
| 76 | + /** |
| 77 | + * La discrétisation de l'ellipsoïde autour des 3 axes (avant transformation). |
| 78 | + */ |
| 79 | + virtual void GetDiscretisation (unsigned int& u, unsigned int& v, unsigned int& w); |
| 80 | + virtual void SetDiscretisation (unsigned int u, unsigned int v, unsigned int w); |
| 81 | + |
| 82 | + /** |
| 83 | + * @param Opacité de l'ellipsoïde affichée. |
| 84 | + */ |
| 85 | + virtual void SetEllipsoidOpacity (double opacity); |
| 86 | + |
| 87 | + /** |
| 88 | + * @param Composantes RGB des l'ellipsoïde. |
| 89 | + */ |
| 90 | + virtual void SetEllipsoidColor (double rgb [3]); |
| 91 | + virtual void SetEllipsoidColor (double r, double g, double b); |
| 92 | + //@} |
| 93 | + |
| 94 | + |
| 95 | + protected : |
| 96 | + |
| 97 | + /** |
| 98 | + * Appelé lorsque la box widget est modifiée : actualise l'ellipsoïde. |
| 99 | + */ |
| 100 | + class vtkBoxInteractionCommand : public vtkCommand |
| 101 | + { |
| 102 | + public : |
| 103 | + |
| 104 | + vtkBoxInteractionCommand ( ) |
| 105 | + : _widget (0) |
| 106 | + { } |
| 107 | + virtual ~vtkBoxInteractionCommand ( ) |
| 108 | + { _widget = 0; } |
| 109 | + static vtkBoxInteractionCommand* New ( ); |
| 110 | + |
| 111 | + virtual void SetWidget (vtkEllipsoidWidget* widget) |
| 112 | + { _widget = widget; } |
| 113 | + virtual void Execute (vtkObject* caller, unsigned long id, void* calldata); |
| 114 | + |
| 115 | + |
| 116 | + private : |
| 117 | + |
| 118 | + vtkBoxInteractionCommand (const vtkBoxInteractionCommand&) |
| 119 | + : _widget (0) |
| 120 | + { } |
| 121 | + vtkBoxInteractionCommand& operator = (const vtkBoxInteractionCommand&) |
| 122 | + { return *this; } |
| 123 | + |
| 124 | + vtkEllipsoidWidget* _widget; |
| 125 | + }; // class vtkBoxInteractionCommand |
| 126 | + |
| 127 | + /** |
| 128 | + * Actualise la représentation de l'ellipsoïde suite à une modification de l'interacteur. |
| 129 | + */ |
| 130 | + virtual void UpdateEllipsoid ( ); |
| 131 | + |
| 132 | + |
| 133 | + private : |
| 134 | + |
| 135 | + /** |
| 136 | + * Constructeur. |
| 137 | + */ |
| 138 | + vtkEllipsoidWidget ( ); |
| 139 | + |
| 140 | + /** |
| 141 | + * Destructeur. RAS. |
| 142 | + */ |
| 143 | + virtual ~vtkEllipsoidWidget ( ); |
| 144 | + |
| 145 | + /** |
| 146 | + * Constructeur et opérateur = : interdits. |
| 147 | + */ |
| 148 | + vtkEllipsoidWidget (const vtkEllipsoidWidget&); |
| 149 | + vtkEllipsoidWidget& operator = (const vtkEllipsoidWidget&); |
| 150 | + |
| 151 | + /** L'ellipsoïde et sa représentation. */ |
| 152 | + vtkSmartPointer<vtkParametricEllipsoid> _ellipsoid; |
| 153 | + vtkSmartPointer<vtkParametricFunctionSource> _ellipsoidSource; |
| 154 | + vtkSmartPointer<vtkPolygonFilter> _polygonFilter; |
| 155 | + vtkSmartPointer<vtkPolyDataMapper> _ellipsoidMapper; |
| 156 | + vtkSmartPointer<vtkActor> _ellipsoidActor; |
| 157 | + vtkSmartPointer<vtkBoxInteractionCommand> _interactionCallback; |
| 158 | + vtkSmartPointer<vtkTransform> _transform; |
| 159 | +}; // class vtkEllipsoidWidget |
| 160 | + |
| 161 | + |
| 162 | +#endif // VTK_ELLIPSOID_WIDGET_H |
0 commit comments