Top | ![]() |
![]() |
![]() |
![]() |
void | menu | No Recursion |
void | move | No Hooks |
void | node-selection | No Recursion |
void | observe | No Recursion |
void | region-selection | No Hooks |
void | selection-error | No Hooks |
void | start-move | No Hooks |
void | stop | No Hooks |
void | stop-move | No Hooks |
enum | VisuInteractiveMethod |
enum | VisuInteractiveId |
enum | VisuInteractivePick |
enum | VisuInteractivePickError |
When one wants some interactions on the rendering area
(either from the mouse or from the keyboard), one should initialise
it using openGLInteractiveInit_session()
. Then, during the
interactive session, several modes have been implemented:
openGLInteractiveBegin_mark()
, is a mode where the mouse can select
a node and this nodes become highlighted.
openGLInteractiveBegin_move()
, the mouse is then used to move
picked nodes. Moves are possible in the plane of the screen or
constrained along axis of the bounding box.
openGLInteractiveBegin_observe()
, in this mode, the mouse is used
to change the position of camera, its orientation and its zoom
characteristics.
openGLInteractiveBegin_pick()
, this mode is the most complex
picking mode. It can select atoms up to two references and measure
distances and angles.
openGLInteractiveBegin_pickAndObserve()
, this mode is a simplified
mix of obervation and picking.
The observe mode has two different moving algorithms that can be
changed using openGLInteractiveSet_preferedObserveMethod()
. The
first, called 'constrained' (cf. OPENGL_OBSERVE_CONSTRAINED)
corresponds to movements along parallels and meridians. When the
mouse is moved along x axis, the camera raotates along a
parallel. When the camera is moved along y axis, the camera rotate
along a meridian. The top is always pointing to the north pole (in
fact, omega is always forced to 0 in this mode). This mode has a
'strange' behavior when the observer is near a pole: moving mouse
along x axis make the box rotates on itself. It is normal, because
movements on x axis is equivalent to movements on parallel and near
the poles, parallel are small circle around the z axis. This can be
unnatural in some occasion and the other mode, called 'walker' (see
OPENGL_OBSERVE_WALKER) can be used instead of the 'constrained'
mode. In the former, the moving is done has if the observer was a
walking ant on a sphere : moving the mouse along y axis makes the
ant go on or forward ; and x axis movements makes the ant goes on
its left or on it right. This is a more natural way to move the box
but it has the inconvient that it is hard to return in a given
position (omega has never the right value).
void
visu_interactive_class_setPreferedObserveMethod
(VisuInteractiveMethod method
);
There are two methods to move the camera in a pick and observe sesion. These two methods are described in the commentary of the keys OPENGL_OBSERVE_CONSTRAINED an dOPENGL_OBSERVE_WALKER.
VisuInteractiveMethod visu_interactive_class_getPreferedObserveMethod ();
There are two methods to move the camera in a pick and observe sesion. These two methods are described in the commentary of the keys OPENGL_OBSERVE_CONSTRAINED an dOPENGL_OBSERVE_WALKER.
VisuInteractive *
visu_interactive_new (VisuInteractiveId type
);
Creates a new interactive session of the given type
.
gboolean visu_interactive_setType (VisuInteractive *inter
,VisuInteractiveId id
);
It changes the kind of interactive session.
VisuInteractiveId
visu_interactive_getType (VisuInteractive *inter
);
It returns the kind of interactive session.
void visu_interactive_handleEvent (VisuInteractive *inter
,VisuGlView *view
,ToolSimplifiedEvents *ev
);
This routine should be called by the rendering window when some event is raised on the rendering surface.
inter |
a VisuInteractive object ; |
|
view |
a VisuGlView object the interaction happened on. |
|
ev |
a simplified event. |
ToolSimplifiedEvents *
visu_interactive_getEvent (VisuInteractive *inter
);
This routine can be called in callbacks of inter
to get some
details about the event that raise signals like
VisuInteractive::node-selection.
Since: 3.7
void visu_interactive_setNodeList (VisuInteractive *inter
,VisuGlExtNodes *nodes
);
Associate a VisuGlExtNodes object for node selection. This is mandatory for move, pick and mark actions.
inter |
a VisuInteractive object. |
|
nodes |
a VisuGlExtNodes object. |
[transfer full][allow-none] |
Since: 3.7
void visu_interactive_setMovingNodes (VisuInteractive *inter
,GArray *nodeIds
);
Defines the nodes that should be moved if inter
is a move
action session. The list is actually copied.
inter |
a VisuInteractive object. |
|
nodeIds |
a list of node ids. |
[element-type guint][allow-none] |
void visu_interactive_setMovingAxe (VisuInteractive *inter
,float axe[3]
);
Defines the axe that can be used to move along if inter
is a move
action session.
void visu_interactive_highlight (VisuInteractive *inter
,guint nodeId
);
This routine simulates an highlight action on nodeId
. This triggers the signal
“node-selection”, or “selection-error”
if nodeId
is invalid.
Since: 3.7
VisuGlCamera *
visu_interactive_popSavedCamera (VisuInteractive *inter
);
inter
object stores camera settings as a ring. This routine goes
to the next camera in the ring and returns the current one. The
popped camera is not actually removed from the ring.
a pointer to the previously current VisuGlCamera. It is owned by V_Sim and should not be touched.
Since: 3.6
void visu_interactive_pushSavedCamera (VisuInteractive *inter
,VisuGlCamera *camera
);
inter
object stores camera settings as a ring. The given camera
is copied in the ring if its values not already exist. The current camera
is set to this new one.
Since: 3.6
void visu_interactive_getSavedCameras (VisuInteractive *inter
,GList **cameras
,GList **head
);
inter
object stores camera settings as a ring. One can access the
set of saved cameras thanks to cameras
or to the current position
in the ring thanks to head
. cameras
or head
are not copied and
are owned by V_Sim. They should be considered read-only.
inter |
a VisuInteractive object. |
|
cameras |
a location to store a list of cameras. |
[out][element-type VisuGlCamera*] |
head |
a location to store a list of cameras. |
[out][element-type VisuGlCamera*] |
Since: 3.6
void visu_interactive_setReferences (VisuInteractive *inter
,VisuInteractive *from
);
Copies all node ids used as reference from from
to inter
.
Describes the different possible methods for observe moves.
These are the possible mouse interaction that are implemented.
no interaction ; |
||
interaction to rotate the view ; |
||
interaction to rotate the view and access limited pick action on the right click ; |
||
interaction to pick and measure ; |
||
interaction to select node ; |
||
interaction to move nodes ; |
||
interaction to mark nodes ; |
||
interaction to get drag moves of the mouse. |
Possible significations of a click.
click to void ; |
||
click to select one node ; |
||
click to measure a distance between two nodes ; |
||
click to measure an angle ; |
||
click to highlight a node ; |
||
click to select a first reference ; |
||
click to un-select a first reference ; |
||
click to select a second reference ; |
||
click to un-select a second reference ; |
||
click to measure distances and angles around one node ; |
||
click to select a list of nodes. |
Possible errors to occur when pick or measure.
“menu”
signalvoid user_function (VisuInteractive *obj, gint x, gint y, VisuNode *node, gpointer user_data)
This signal is emitted each time a menu key stroke is done.
obj |
the object emitting the signal. |
|
x |
the x coordinate. |
|
y |
the y coordinate. |
|
node |
a VisuNode. |
[type VisuNode*][transfer none][allow-none] |
user_data |
user data set when the signal handler was connected. |
Flags: No Recursion
Since: 3.7
“move”
signalvoid user_function (VisuInteractive *obj, ToolVector *delta, gpointer user_data)
This signal is emitted each time a set of nodes are moved. The corresponding movement translation is stored in delta.
obj |
the object emitting the signal. |
|
delta |
the delta of applied translation. |
|
user_data |
user data set when the signal handler was connected. |
Flags: No Hooks
Since: 3.6
“node-selection”
signalvoid user_function (VisuInteractive *obj, guint kind, VisuNodeArray *array, VisuNode *node1, VisuNode *node2, VisuNode *node3, gpointer user_data)
This signal is emitted each time a single node selection succeed, providing the
kind in kind
(see VisuInteractivePick). The corresponding nodes
are stored in node1
, node2
and node3
.
obj |
the object emitting the signal. |
|
kind |
a flag, see VisuInteractivePick. |
|
array |
the VisuNodeArray
hosting |
[type VisuNodeArray*][transfer none] |
node1 |
the primary node. |
[type VisuNode*][transfer none] |
node2 |
the secondary node, if any. |
[type VisuNode*][transfer none] |
node3 |
the tertiary node, if any. |
[type VisuNode*][transfer none] |
user_data |
user data set when the signal handler was connected. |
Flags: No Recursion
Since: 3.6
“observe”
signalvoid user_function (VisuInteractive *obj, gboolean bool, gpointer user_data)
This signal is emitted each time an observe session is start
(bool
is TRUE) or finished (bool
is FALSE).
obj |
the object emitting the signal. |
|
bool |
a boolean. |
|
user_data |
user data set when the signal handler was connected. |
Flags: No Recursion
Since: 3.6
“region-selection”
signalvoid user_function (VisuInteractive *obj, GArray *nodes, gpointer user_data)
This signal is emitted each time a region selection succeed. The corresponding nodes
are stored in nodes
.
obj |
the object emitting the signal. |
|
nodes |
an array of node ids. |
[element-type guint] |
user_data |
user data set when the signal handler was connected. |
Flags: No Hooks
Since: 3.6
“selection-error”
signalvoid user_function (VisuInteractive *obj, guint err, gpointer user_data)
This signal is emitted each time a selection fails, providing the
error in err
(see VisuInteractivePickError).
obj |
the object emitting the signal. |
|
err |
an error value. |
|
user_data |
user data set when the signal handler was connected. |
Flags: No Hooks
Since: 3.6
“start-move”
signalvoid user_function (VisuInteractive *obj, GArray *nodes, gpointer user_data)
This signal is emitted each time a set of nodes are clicked to be
moved. The corresponding nodes are stored in nodes
.
obj |
the object emitting the signal. |
|
nodes |
an array of node ids. |
[element-type guint] |
user_data |
user data set when the signal handler was connected. |
Flags: No Hooks
Since: 3.6
“stop”
signalvoid user_function (VisuInteractive *obj, gpointer user_data)
This signal is emitted each time a set of nodes are stopped to be moved.
obj |
the object emitting the signal. |
|
user_data |
user data set when the signal handler was connected. |
Flags: No Hooks
Since: 3.6
“stop-move”
signalvoid user_function (VisuInteractive *obj, ToolVector *delta, gpointer user_data)
This signal is emitted when a set of nodes are finished moving. The corresponding movement complete translation is stored in delta.
obj |
the object emitting the signal. |
|
delta |
the delta of applied translation. |
|
user_data |
user data set when the signal handler was connected. |
Flags: No Hooks
Since: 3.8