Skip to content

Commit 6c7a293

Browse files
author
Charles PIGNEROL
committed
Pre-release 5.15.0. vtkEllipsoid and vtkEllipsoidWidget classes.
1 parent 183f442 commit 6c7a293

File tree

8 files changed

+643
-2
lines changed

8 files changed

+643
-2
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 "14")
6+
set (VTK_CONTRIB_MINOR_VERSION "15")
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: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#ifndef VTK_ELLIPSOID_H
2+
#define VTK_ELLIPSOID_H
3+
4+
#include <vtkImplicitFunction.h>
5+
6+
7+
/**
8+
* Classe décrivant une ellipsoïde selon les axes Ox, Oy et Oz.
9+
*/
10+
class vtkEllipsoid : public vtkImplicitFunction
11+
{
12+
public:
13+
14+
vtkTypeMacro(vtkEllipsoid, vtkImplicitFunction);
15+
16+
/**
17+
* Créé une ellipsoïde le long des axes Ox, Oy et Oz centrée en (0, 0, 0) de rayons 1.
18+
*/
19+
static vtkEllipsoid* New ( );
20+
21+
virtual void PrintSelf (ostream& os, vtkIndent indent);
22+
23+
/**
24+
* Evalue la fonction implicite de l'ellipsoïde.
25+
*/
26+
virtual double EvaluateFunction (double x[3]);
27+
28+
/**
29+
* Evalue le gradient de l'ellipsoïde.
30+
*/
31+
virtual void EvaluateGradient (double x[3], double g[3]);
32+
33+
/**
34+
* Définition des rayons de l'ellipsoïde.
35+
*/
36+
vtkSetMacro (XRadius, double);
37+
vtkGetMacro (XRadius, double);
38+
vtkSetMacro (YRadius, double);
39+
vtkGetMacro (YRadius, double);
40+
vtkSetMacro (ZRadius, double);
41+
vtkGetMacro (ZRadius, double);
42+
43+
44+
protected :
45+
46+
/**
47+
* Constructeur. Centre l'ellipsoïde en (0, 0, 0) et affecte 1. à ses rayons.
48+
*/
49+
vtkEllipsoid ( );
50+
51+
/**
52+
* Destructeur. RAS.
53+
*/
54+
virtual ~vtkEllipsoid ( );
55+
56+
/** Les rayonq de l'ellipsoïde. */
57+
double XRadius;
58+
double YRadius;
59+
double ZRadius;
60+
61+
62+
private :
63+
64+
/**
65+
* Constructeur de copie et opérateur = : interdits.
66+
*/
67+
vtkEllipsoid (const vtkEllipsoid&);
68+
vtkEllipsoid& operator = (const vtkEllipsoid&);
69+
}; // class vtkEllipsoid
70+
71+
72+
#endif // VTK_ELLIPSOID_H
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
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

src/VtkContrib/vtkEllipsoid.cpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include <VtkContrib/vtkEllipsoid.h>
2+
#include <vtkObjectFactory.h>
3+
4+
5+
vtkStandardNewMacro (vtkEllipsoid);
6+
7+
8+
vtkEllipsoid::vtkEllipsoid (const vtkEllipsoid&)
9+
: vtkImplicitFunction ( ), XRadius (1.), YRadius (1.), ZRadius (1.)
10+
{
11+
} // vtkEllipsoid::vtkEllipsoid
12+
13+
14+
vtkEllipsoid& vtkEllipsoid::operator = (const vtkEllipsoid&)
15+
{
16+
return *this;
17+
} // vtkEllipsoid::operator =
18+
19+
20+
vtkEllipsoid::vtkEllipsoid ( )
21+
{
22+
this->XRadius = 1.0;
23+
this->YRadius = 1.0;
24+
this->ZRadius = 1.0;
25+
} // vtkEllipsoid::vtkEllipsoid
26+
27+
28+
vtkEllipsoid::~vtkEllipsoid ( )
29+
{
30+
} // vtkEllipsoid::~vtkEllipsoid
31+
32+
33+
double vtkEllipsoid::EvaluateFunction (double x [3])
34+
{
35+
double x2 = x [0] * x [0];
36+
double y2 = x [1] * x [1];
37+
double z2 = x [2] * x [2];
38+
return (x2 / (this->XRadius * this->XRadius) + y2 / (this->YRadius * this->YRadius) + z2 / (this->ZRadius * this->ZRadius)) - 1.0;
39+
} // vtkEllipsoid::EvaluateFunction
40+
41+
42+
void vtkEllipsoid::EvaluateGradient (double x [3], double g [3])
43+
{
44+
g [0] = 2.0 * x [0] / (this->XRadius * this->XRadius);
45+
g [1] = 2.0 * x [1] / (this->YRadius * this->YRadius);
46+
g [2] = 2.0 * x [2] / (this->ZRadius * this->ZRadius);
47+
} // vtkEllipsoid::EvaluateGradient
48+
49+
50+
void vtkEllipsoid::PrintSelf (ostream& os, vtkIndent indent)
51+
{
52+
this->Superclass::PrintSelf(os,indent);
53+
54+
os << "XRadius: " << this->XRadius << ", YRadius:" << this->YRadius << ", ZRadius:" << this->ZRadius << "\n";
55+
} // vtkEllipsoid::PrintSelf

0 commit comments

Comments
 (0)