Skip to content

Commit 5b5f3d8

Browse files
author
Charles PIGNEROL
committed
First version of the vtkViewCubeActor class. This class allows you to orient a 3D view by clicking on its 26 faces. With each click, the camera is positioned so that it is normal to the clicked face.
1 parent d013c27 commit 5b5f3d8

File tree

8 files changed

+1456
-3
lines changed

8 files changed

+1456
-3
lines changed

cmake/version.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
#
44

55
set (VTK_CONTRIB_MAJOR_VERSION "5")
6-
set (VTK_CONTRIB_MINOR_VERSION "7")
7-
set (VTK_CONTRIB_RELEASE_VERSION "1")
6+
set (VTK_CONTRIB_MINOR_VERSION "8")
7+
set (VTK_CONTRIB_RELEASE_VERSION "0")
88
set (VTK_CONTRIB_VERSION ${VTK_CONTRIB_MAJOR_VERSION}.${VTK_CONTRIB_MINOR_VERSION}.${VTK_CONTRIB_RELEASE_VERSION})
99

1010

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
/** @file vtkViewCube.h
2+
* @author C. PIGNEROL, CEA/DAM/DSSI
3+
* @date 04/03/2025
4+
*/
5+
6+
#ifndef VTK_VIEWCUBE_H
7+
#define VTK_VIEWCUBE_H
8+
9+
#include <vtkPropAssembly.h>
10+
#include <vtkActor.h>
11+
#include <vtkPolyData.h>
12+
#include <vtkPolyDataMapper.h>
13+
#include <vtkCellPicker.h>
14+
#include <vtkTransform.h>
15+
#include <vtkRenderer.h>
16+
#include <vtkVectorText.h>
17+
18+
//
19+
// REM : source d'inspiration possible : classe vtkOrientationMarkerWidget couplée à vtkAnnotatedCubeActor
20+
//
21+
22+
/**
23+
* Classe d'acteur représentant un "ViewCube", objet interactif de repositionnement de la vue en cliquant sur ses faces.
24+
* La vue graphique est repositionnée perpendiculairement à la face sur laquelle on clique.
25+
* Ce viewcube est composé de faces intermédiaires aux 6 faces d'un cube (=> 36 faces)
26+
* @class vtkViewCube
27+
* @brief Classe d'acteur représentant un trièdre.
28+
*/
29+
30+
class vtkViewCube : public vtkPropAssembly
31+
{
32+
public:
33+
34+
vtkTypeMacro(vtkViewCube,vtkPropAssembly);
35+
36+
37+
/** Méthode de classe permettant de créer une instance de la classe vtkViewCube (style VTK).
38+
* @return un pointeur sur une instance de la classe VTK
39+
*/
40+
static vtkViewCube* New ( );
41+
42+
/**
43+
* Associe l'instance à un renderer avec la priorité transmise en argument.
44+
*/
45+
virtual void SetRenderers (vtkRenderer* renderer, vtkRenderer* drivenRenderer);
46+
virtual vtkRenderer* GetRenderer ( )
47+
{ return Renderer; }
48+
49+
/**
50+
* @return Une éventuelle matrice de transformation utilisateur.
51+
*/
52+
virtual vtkTransform* GetTransform ( );
53+
54+
/**
55+
* @param Une éventuelle matrice de transformation utilisateur.
56+
*/
57+
virtual void SetTransform (vtkTransform* transform);
58+
59+
/**
60+
* @param Les libellés pour chacune des faces.
61+
*/
62+
virtual void SetFacesLabels (const char* front, const char* back, const char* left, const char* right, const char* top, const char* bottom);
63+
64+
/**
65+
* Affiche ou non les libellés des faces.
66+
* @see LabelOff
67+
* @see LabelOn
68+
*/
69+
virtual void SetLabel (bool on);
70+
71+
/**
72+
* Affiche les libellés dans le plan de la vue.
73+
* @see Label2DOff
74+
* @see SetLabel2D
75+
*/
76+
virtual void LabelOn ( );
77+
virtual void LabelOff ( );
78+
79+
/**
80+
* Regarde si une face du cube est pointée aux coordonnées transmises et, le cas échéant, adapte la vue perpendiculairement à cette face.
81+
*/
82+
virtual void PickCallback (int x, int y);
83+
84+
85+
protected:
86+
87+
/** @brief Constructeur d'une instance de la classe vtkViewCube.
88+
*/
89+
vtkViewCube ( );
90+
91+
/** @brief Destructeur d'une instance de la classe vtkViewCube. RAS.
92+
*/
93+
virtual ~vtkViewCube ( );
94+
95+
96+
private :
97+
98+
/**
99+
* Constructeur de copie et opérateur = : interdits.
100+
*/
101+
vtkViewCube (const vtkViewCube&);
102+
vtkViewCube& operator = (const vtkViewCube&);
103+
104+
vtkRenderer *Renderer, *DrivenRenderer;
105+
106+
/** Le "cube". */
107+
vtkPolyData *CubePolyData;
108+
vtkActor *CubeActor;
109+
vtkPolyDataMapper *CubePolyDataMapper;
110+
111+
/** Le picking sur les faces du ViewCube. */
112+
vtkCellPicker *CellPicker;
113+
114+
/** Les labels. */
115+
vtkVectorText *XPlusVectorText, *XMinusVectorText, *YPlusVectorText, *YMinusVectorText, *ZPlusVectorText, *ZMinusVectorText;
116+
vtkActor *XPlusActor, *XMinusActor, *YPlusActor, *YMinusActor, *ZPlusActor, *ZMinusActor;
117+
118+
/** L'éventuelle transformation utilisateur. */
119+
vtkTransform *Transform;
120+
}; // class vtkViewCube
121+
122+
123+
#endif // VTK_VIEWCUBE_H
124+
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
/** @file vtkViewCubeActor.h
2+
* @author C. PIGNEROL, CEA/DAM/DSSI
3+
* @date 04/03/2025
4+
*/
5+
6+
#ifndef VTK_VIEWCUBE_ACTOR_H
7+
#define VTK_VIEWCUBE_ACTOR_H
8+
9+
#include <vtkPropAssembly.h>
10+
#include <vtkActor.h>
11+
#include <vtkPolyData.h>
12+
#include <vtkPolyDataMapper.h>
13+
#include <vtkCellPicker.h>
14+
#include <vtkTransform.h>
15+
#include <vtkRenderer.h>
16+
#include <vtkVectorText.h>
17+
18+
//
19+
// REM : source d'inspiration possible : classe vtkOrientationMarkerWidget couplée à vtkAnnotatedCubeActor
20+
//
21+
22+
/**
23+
* Classe d'acteur représentant un "ViewCube", objet interactif de repositionnement de la vue en cliquant sur ses faces.
24+
* La vue graphique est repositionnée perpendiculairement à la face sur laquelle on clique.
25+
* Ce viewcube est composé de faces intermédiaires aux 6 faces d'un cube (=> 36 faces)
26+
* @class vtkViewCubeActor
27+
* @brief Classe d'acteur représentant un trièdre.
28+
*/
29+
30+
class vtkViewCubeActor : public vtkPropAssembly
31+
{
32+
public:
33+
34+
vtkTypeMacro(vtkViewCubeActor,vtkPropAssembly);
35+
36+
37+
/** Méthode de classe permettant de créer une instance de la classe vtkViewCubeActor (style VTK).
38+
* @return un pointeur sur une instance de la classe VTK
39+
*/
40+
static vtkViewCubeActor* New ( );
41+
42+
/**
43+
* Associe l'instance à un renderer avec la priorité transmise en argument.
44+
*/
45+
virtual void SetRenderers (vtkRenderer* renderer, vtkRenderer* drivenRenderer);
46+
virtual vtkRenderer* GetRenderer ( )
47+
{ return Renderer; }
48+
49+
/**
50+
* @return Une éventuelle matrice de transformation utilisateur.
51+
*/
52+
virtual vtkTransform* GetTransform ( );
53+
54+
/**
55+
* @param Une éventuelle matrice de transformation utilisateur.
56+
*/
57+
virtual void SetTransform (vtkTransform* transform);
58+
59+
/**
60+
* @param Les libellés pour chacune des faces.
61+
*/
62+
virtual void SetFacesLabels (const char* front, const char* back, const char* left, const char* right, const char* top, const char* bottom);
63+
64+
/**
65+
* Affiche ou non les libellés des faces.
66+
* @see LabelOff
67+
* @see LabelOn
68+
*/
69+
virtual void SetLabel (bool on);
70+
71+
/**
72+
* Affiche les libellés dans le plan de la vue.
73+
* @see Label2DOff
74+
* @see SetLabel2D
75+
*/
76+
virtual void LabelOn ( );
77+
virtual void LabelOff ( );
78+
79+
/**
80+
* Regarde si une face du cube est pointée aux coordonnées transmises et, le cas échéant, adapte la vue perpendiculairement à cette face.
81+
*/
82+
virtual void PickCallback (int x, int y);
83+
84+
85+
protected:
86+
87+
/** @brief Constructeur d'une instance de la classe vtkViewCubeActor.
88+
*/
89+
vtkViewCubeActor ( );
90+
91+
/** @brief Destructeur d'une instance de la classe vtkViewCubeActor. RAS.
92+
*/
93+
virtual ~vtkViewCubeActor ( );
94+
95+
96+
private :
97+
98+
/**
99+
* Constructeur de copie et opérateur = : interdits.
100+
*/
101+
vtkViewCubeActor (const vtkViewCubeActor&);
102+
vtkViewCubeActor& operator = (const vtkViewCubeActor&);
103+
104+
vtkRenderer *Renderer, *DrivenRenderer;
105+
106+
/** Le "cube". */
107+
vtkPolyData *CubePolyData;
108+
vtkActor *CubeActor;
109+
vtkPolyDataMapper *CubePolyDataMapper;
110+
111+
/** Le picking sur les faces du ViewCube. */
112+
vtkCellPicker *CellPicker;
113+
114+
/** Les labels. */
115+
vtkVectorText *XPlusVectorText, *XMinusVectorText, *YPlusVectorText, *YMinusVectorText, *ZPlusVectorText, *ZMinusVectorText;
116+
vtkActor *XPlusActor, *XMinusActor, *YPlusActor, *YMinusActor, *ZPlusActor, *ZMinusActor;
117+
118+
/** L'éventuelle transformation utilisateur. */
119+
vtkTransform *Transform;
120+
}; // class vtkViewCubeActor
121+
122+
123+
#endif // VTK_VIEWCUBE_ACTOR_H
124+

0 commit comments

Comments
 (0)