ContribCliquez ici pour proposer des corrections ou des compléments pour cette page.
Les manipulators ou manipulateurs

Traduit de la page : http://developer.x-plane.com/?article=manipulators

Depuis X-Plane 920, une nouvelle technique permettant une manipulation aisée des boutons et manettes dans les cockpit 3D a été mise en place. Cette technique fait appel à ce que Laminar a appelé des "manipulateurs". Les manipulateurs sont des fonctions et des propriétés que l'on peut activer lorsque la souris survole ou clique sur un ensemble de polygones du cockpit représentant la manette devant produire l'action programmée. Par exemple, les polygones 3D modélisant une manette de gaz pourront avoir comme propriété de s'activer au clic de la souries sur la manette et de modifier les gaz (et la position de la manette) si la souris est glissée.

Il existe sept types de manipulateurs supportés dans X-Plane 920:

  • None
  • Panel Click
  • Drag-Axis
  • 2-d Drag
  • Command
  • Command-Axis
  • Opaque
  • Button

Manipulateur "None"

Pas de Manipulation

Les Triangles sont ignorés lorsque l'on clique. C'est la fonction par défaut habituellement utilisée pour tout ce qui n'est pas cliquable. Cette manipulation ne nécessite aucune ressource CPU,

donc, dans un soucis d'optimisation, laissez le plus possible vos polygones comme non-manipulables.

C'est la seule manipulation possible pour les objets n'ayant pas de rapport avec le cockpit.

Le manipulateur "None" est également activé lorsque l'on utilise les attributs:

ATTR_no_cockpit ATTR_manip_none

Le manipulateur "None" n'aura donc aucune action et n'affichera aucune zone sensible (main ou flèche de la souris).
 

Manipulateur "Panel Click"

Un clic sur le polygone est implémenté via la texture du panel 2D qui doit être mappée. Ce manipulateur ne peut être utilisé que pour des objets texturés avec une texture "panel" (ou panel texture region). Le manipulateur "Panel Click" est activé par les attributs:

ATTR_cockpit

ATTR_cockpit_region <region number>

Le manipulateur "Panel Click" réagit suivant la zone du panel 2D survolée.
 

Manipulateur "Drag-Axis"

Lorsque l'utilisateur glisse sa souris le long d'un axe dans l'espace 3D de l'objet, une valeur de dataref est augmentée ou diminuée. Une longueur d'axe déterminant le trajet de la souris (en mètres) est nécessaire pour faire changer la dataref suivant une amplitude définie par deux paramètres d'extrémité. Le manipulateur "Drag-Axis" utilise l'attribut:

ATTR_manip_drag_axis <cursor> <x> <y> <z> <value1> < value2> <dataref> <tooltip>

x, y et z définissent la longueur et la direction de l'axe / value1 et value2 définissent les valeurs de départ et de fin de l'animation Si la souris est glissée au delà de l'une ou l'autre de ces limites, le manipulateur est maintenu : la valeur du dataref demeurera la même jusqu'à ce que la souris soit de nouveau glissée ou cliquée dans la zone. La valeur courante est maintenue après que la souris soit libérée et détermine la position du manipulateur par rapport au prochain clic de souris sur la zone. Par exemple, si un manipulateur est actuellement placé à une valeur intermédiaire entre les valeurs minimum et maximum, la souris se trouvera automatiquement à mi-chemin le long de l'axe si on clique de nouveau sur la zone.

Le manipulateur "Drag-Axis" est lié à l'animation de l'objet. L'orientation de l'axe du manipulateur lié à l'objet auquel il est attaché est identique chaque fois que la souris est cliquée dessus. Si la manipulation consiste à faire pivoter un levier par exemple, la zone de manipulation ne bougera pas avec le levier mais restera sur l'axe de la souris jusqu'à ce que celle-ci soit relâchée. Ce comportement est plus intuitif dans la pratique que ce qu'il peut paraître sur le papier !
 

Manipulateur "2-d Drag"

Le manipulateur "2-d Drag" combine deux manipulateurs en un, autorisant la modification de deux datarefs simultanément en glissant la souris le long de deux axes perpendiculaires. Pour diminuer plus de facilité, les axes sont définis dans l'espace 2D de l'écran (pas dans l'espace 3D de l'objet) et ont une orientation respective fixe. La première dataref est modifiée en glissant la souris horizontalement sur l'écran et la seconde en glissant verticalement. Ce type de manipulateur est utilisé pour des animations de type joystick ou manche (comme le carré et la croix utilisés pour le vol à la souris dans X-Plane). Le manipulateur "2-d Drag" utilise l'attribut:

ATTR_manip_drag_xy <cursor> <x> <y> <ref1 value1> <ref1 value2> <ref2 value1> <ref2 value2> <dataref1> <dataref2> <tooltip>.

x définit la distance sur laquelle la souris doit être glissée de gauche à droite afin de faire passer la dataref1 de <ref1 value1> à <ref1 value2>. De même, y détermine la distance parcourue du bas vers le haut pour la dataref2 de <ref2 value1> à <ref2 value2>.

Contrairement au manipulateur "drag-axis", le "2-d Drag" n'est pas modifié suivant l'animation de l'objet (L'axe des x sera toujours horizontal et l'axe y toujours vertical). Malgré tout, la zone cliquable sera toujours positionnée à l'endroit où se trouve l'objet qui l'utilise.

Dans l'exemple qui suit, le manipulateur "2-d Drag" est configuré pour manipuler un volant de direction. L'axe des x contrôle le roulis (glissade de 80 pixels) et l'axe des y contrôle la profondeur (glissade de 50 pixels). Note: Comme il est plus simple de descendre la souris au lieu de la monter pour augmenter le cabrage, l'axe vertical possède des valeurs négatives:

ATTR_manip_drag_xy four_arrows 80 -50 -1 1 -1 1 sim/cockpit2/controls/yoke_roll_ratio sim/cockpit2/controls/yoke_pitch_ratio I am a tooltip.

L'attribution de 2 datarefs pour le manipulateur "2-d Drag" n'est pas obligatoire. Une dataref unique peut être manipulée dans l'espace 2D en entrant une valeur de 0 pour celle qui ne sont pas utilisées et une dataref nommée "null" pour l'axe ignoré.

Manipulateur "Command"

Le manipulateur "Command" appel une action lorsque la souris est cliquée dessus. L'action est demandée tant que la souris est cliquée. Ce manipulateur utilise l'attribut:

ATTR_manip_command <cursor> <command> <tooltip>

Manipulateur "Command-Axis"

Le déplacement le long d'un axe spécifique modifie une paire de commandes sujet à la direction de la glissade. La commande continue à être appelée tant que la souris est cliquée ou bien traînée en arrière le long de l'axe jusqu'à la position neutre. Le déplacement depuis la position neutre jusqu'à la zone opposée de l'axe appelle la deuxième commande. La position neutre est centrée sur l'endroit où la souris a été à l'origine et occupe 40% de la longueur totale de l'axe. Une application typique serait la manipulation de mollettes (trim par exemple) et des interrupteurs à trois positions. Le manipulateur "Commande-axis" prend la forme :

ATTR_manip_command_axis <cursor> <x> <y> <z> <command1> <command2> <tooltip>

Les paramètres x, y et z définissent l'orientation et la longueur en mètres de l'axe de glissade. Une glissade positive appelle <command1> et une glissade négative appelle <comande2>. L'exemple suivant montre un manipulateur "Command-axis" configuré comme une mollette de trim:

ATTR_manip_command_axis up_down 0.00 0.00 -0.01 sim/flight_controls/pitch_trim_down sim/flight_controls/pitch_trim_up I am also a tooltip.

Les valeurs d'axe dans cet exemple correspondraient à une manette standard positionnées sur un élément horizontal du cockpit. Glisser la souris environ 2 millimètres vers le nez de l'avion met le trim à piquer, 2 millimètre dans l'autre sens met le trim à cabrer.

Manipulateur "Opaque"

Ce manipulateur rend les manipulations non-opérantes. Contrairement au manipulateur "None", le manipulateur "Opaque" avale la souris si l'on peut dire. C'est une sorte de "trou noir" qui permet d'éviter à deux zones de manipulateurs d'interférer malencontreusement. Il pourrait être utiliser pour agir comme zone de sécurité au dessus d'un interrupteur par exemple.

Manipulateur "Button"

Nouveauté de X-Plane 930: Ces manipulateurs changent une dataref lorsque la souris est cliquée ou maintenue, créant ainsi une action comparable à un bouton. Il y a cinq groupes de boutons: push-button, radio button, toggle button, delta button et wrap button. Les groupes push-button, radio button et toggle button sont destinés à donner une action de type "bouton". Les groupes delta button et wrap button sont sensé générer des zones sensibles invisibles par dessus un mesh 3D.

  • "Push-Button" : Le manipulateur "Push-Button" commande une dataref en baissant sa valeur lorsque la souris est cliquée et en la remontant lorsque la souris est relachée.
     
  • "Radio Button" : Le manipulateur "Radio-Button" commande une dataref vers une certaine valeur à chaque fois que la zone est cliquée. (Il est considéré comme un "bouton radio" car un groupe de ces manipulateurs partageant une dataref unique mais utilisant des valeurs différentes peuvent créer un une action de type "radio")
     
  • "Toggle" : Le manipulateur "Toggle" fait basculer une dataref d'une valeur à l'autre chaque fois que la zone est cliquée.
     
  • "Delta" : Avec le manipulateur "Delta", la valeur de la dataref est augmentée (ou diminuée) chaque fois que le bouton est cliqué (ou maintenu). Si la dataref dépasse ses limites, la limite maximale est maintenue.
     
  • "Wrapping" : Avec le manipulateur "Wrapping", la valeur de la dataref est augmentée (ou diminuée) chaque fois que le bouton est cliqué (ou maintenu). Si la dataref dépasse ses limites, la valeur reprend à partir du début, en boucle.

Propriétés des Manipulateurs

Ces propriétés s'appliquent à tous les manipulateurs excepté:

  • Les manipulateurs "None" et "Opaque" (vu qu'ils n'ont pas d'action réelle).
  • Les manipulateur "Panel" (qui tirent leurs propriétés du panel 2D).

Les Curseurs

Tous les manipulateurs vous autorisent à spécifier le type de curseur qui apparaitra lorsque la souris survolera la zone. (le manipulateur "Panel" utilisera le curseur liée à la zone du panel survolée). Les spécifications pour les ObjV8 listent tous les choix de curseur possibles:

  • four_arrows
  • hand
  • button
  • rotate_small
  • rotate_small_left
  • rotate_small_right
  • rotate_medium
  • rotate_medium_left
  • rotate_medium_right
  • rotate_large
  • rotate_large_left
  • rotate_large_right
  • up_down
  • down
  • up
  • left_right
  • right
  • left
  • arrow

L'axe 3-D

Les manipulateurs "Axis" et "Command-axis" vous autorisent une glissade sur un plan 3D, ils nécessitent donc la spécification d'un axe.

  • L'axe est un axe 3D, il est donc défini comme une longueur via x, y et z (en mètres).
  • Cet axe est également lié à l'animation (si le manipulateur est sur un objet qui tourne, l'axe va tourner.
  • L'axe des manipulateurs implique une amplitude d'augmentation et de diminution de la valeur. Les valeurs déterminent cette amplitude.

EXEMPLE: pour un axe X = 1, Y = 1, Z = 0, si vous glissez en haut à droite (suivant les coordonnées de l'objet) la valeur de la dataref augmentera.

La position de l'axe dans le cockpit 3D est liée à la position qu'il occupait au moment où l'utilisateur a cliqué. Par exemple: Si la dataref liée à l'axe correspond à la manette des gaz et que les gaz sont au maximum au moment du clic, la totalité de l'axe sera placé vers la zone sensé réduire les gaz. Si la manette des gaz est à 50%, le centre de l'axe se situera à l'endroit du clic. En un mot, l'axe se positionnera suivant la valeur à laquelle se situe la dataref au moment du clic. (Pour le manipulateur "Command-axis", le centre de l'axe est toujours le point d'ancrage)

L'Axe 2D

L'axe de glissade 2D est un cas à part: Il autorise une glissade sur un plan 2D type "écran" (l'axe est toujours orienté haut-bas / droite-gauche peu importe le point de vue du pilote. Ces axes on une taille définie en pixels. Un "x" positif signifie qu'une glissade vers la droite augmentera la valeur de la première dataref. Un "y" positif signifie qu'une glissade vers le haut augmente la valeur de la première dataref.

Les Datarefs et les Valeurs

Pour les manipulateurs d'axe 3D et 2D, une ou deux datarefs sont demandées de même qu'une valeur basse et une valeur haute. Les valeurs basses et hautes cadrent l'amplitude de l'axe. Par exemple, pour une manette des gaz, une valeur basse et haute de 0.0 et 1.0 indiqueront au manipulateur quelle valeur de la mise des gaz correspondra à la limite de l'axe. (En d'autres termes: l'axe détermine la taille de la zone de glissade dans le cockpit 3D et les valeurs de la dataref déterminent la position sur cet axe à un moment donné)

Les Commandes

Une commande peut être appelée avec le manipulateur "Command" (la commande est appelée lorsque le bouton de la souris est enfoncé) ou le manipulateur "Command-axis" (la commande est appelée lors de la glissade vers la droite ou la gauche de l'axe).

Les Tooltips

Tous les manipulateurs vous autorisent à spécifier des annotations (tooltip). Quand le pointeur de la souris passe au dessus de la zone du manipulateur et que l'utilisateur a activé la fonction "aide sur les instruments" (voir les options du menu d'X-Plane), l'annotation sera affichée. Ca permet de fournir des instructions sur un tableau de bord personnalisé. Les annotations ne doivent pas contenir de "retour chariot".

Manipulateurs sur des Versions plus anciennes d'X-Plane

Avant X-Plane 920, il n'y avait que deux manière d'inter-agir sur le tableau de bord en cockpit 3D:

  • Cliquer sur des objets recouvrant un polygone utilisant la texture "panel" (équivalent au manipulateur "None")
  • Cliquer sur un polygone texturé avec la texture Panel (équivalent du manipulateur "Panel")

Comme les attributs "ATTR_cockpit", "ATTR_cockpit_region" et "ATTR_no_cockpit" sont définis également par le manipulateur, ces comportements deviennent "automatiques".

AC3D Note: Si vous éditez un cockpits 3D dans AC3D en utilisant la nouvelle version 3.2 du plugin, vous devrez redéfinir les propriétés des manipulateurs afin que ceux-ci soient correctement cliquables.