Vous n'êtes pas identifié.
Bonjour,
Faut bien y passer, je regarde le modeldefXml du SDK car je réfléchis aux diverses jauges 3D pour le cockpit de mon projet en cours, notamment pour un volant de compensation de profondeur (elevator trim).
Il y a effectivement une rubrique à cet effet dans le fichier en question. En voici un extrait :
<Name>trimtab_elevator_key_pct</Name>
<AnimLength>100</AnimLength>
<Animation>
<Parameter>
<Sim>
<Variable>ELEVATOR TRIM PCT</Variable>
<Units>percent</Units>
<Scale>0.5</Scale>
<Bias>50</Bias>
</Sim>
</Parameter>
</Animation>
Je comprends que cette animation s'appuie sur la variable du simulateur "elevator trim pct" qui est un pourcentage, que la valeur moyenne (ici ce serait le neutre) correspond à la clé 50 et que je dois faire 2 tours complets du volant pour les clés d'animation de 0 à 100 (animlength=100) vu que l'échelle est à 1/2 (0.5). Est-ce que j'ai bon?
Autre chose, une variable de type position est-elle un enregistrement avec 2 rubriques (X et Y) en coordonnées d'écran? C'est ce qui me semble être à la lecture de ce fichier car je vois M:X ou M:Y pour un évènement de type souris.
Merci pour votre concours!
JMC
Dernière modification par gastonj (02-05-2016 11:06:46)
Hors ligne
Salut Gaston,
Bienvenu dans le monde du XML ...
Oui tu as bon. Ton animation Gmax doit se faire entre 0 et 100 en termes de keys.
La key 0 correspond à -50 soit plutôt -100 vu qu'il y a un scale de 0.5 et la key 100 correspond à +100 donc au final 2 tours donc ton trim sera plus "fin".
Comme c'est un peu vieux dans ma mémoire, je viens de vérifier sur le Cessna 150 et pour le trim j'ai utilisé "lever_trimtab_elevator_key_pct" au niveau animation.
Hors ligne
Bonjour,
Oui, je viens de le faire avec "trimtab_elevator_key_pct" et avec 2 tours. En gros, le nombre de tours de l'animation importe peu finalement, plus on fait de tours plus sensible c'est. Il faut en faire un quand même sinon ça paraitrait bizarre !
JMC
Hors ligne
Re,
Je poursuis mes investigations ....Est ce que "l1" ne serait pas le moyen de récupérer sur la pile la variable registre "s1" pour "store to 1" et "load from 1"?
Est-ce que les variables locales sont initialisées à 0 ou false etc...selon le type déclaré? Cela me semble être le cas si j'en crois quelques morceaux choisis du ModelDef.xml.
Dans les opérations sur la pile, il y a un joyeux mélange de données de différents types du genre opération arithmétique avec des booléens.
Bon, on a vraiment l'impression d'être revenu 40 ans en arrière du temps des "babasses" Hewlet Packard! Même moi qui suis loin d'être un génie, je sais utiliser "Yacc" et "Lex"
JMC
ps : un morceau choisi
<MouseRect>
<CallbackCode>
(M:Event) 'LeftSingle' scmp 0 !=
if{
<!-- Calculate amount to change value by pixel offset -->
(L:Magneto0Click, position) (M:X) - 10 / int s0 0 !=
if{
<!-- Calculate current value -->
(A:Recip eng right magneto:1,bool) 2 * (A:Recip eng left magneto:1,bool) +
<!-- Add amount to change to get new value -->
l0 + 3 min 0 max s1
<!-- Both -->
3 == if{ 3 (>K:MAGNETO1_SET) }
<!-- Right -->
els{ l1 2 == if{ 1 (>K:MAGNETO1_SET) }
<!-- Left -->
els{ l1 1 == if{ 2 (>K:MAGNETO1_SET) }
<!-- Off -->
els{ 0 (>K:MAGNETO1_SET) }
}
}
}
}
(M:X) (>L:Magneto0Click, position)
</CallbackCode>
</MouseRect>
J'ai mis en évidence les variables "registre". Mais je ne comprends pas pourquoi ils utilisent la variable "s0" : une idée?
Dernière modification par gastonj (02-05-2016 15:50:17)
Hors ligne
Bonjour,
Toutes les variables locales sont déclarées avec une valeur nulle par défaut, quel que soit le type.
Si on veut forcer la valeur à 1 au chargement du modèle, il suffit de créer une gauge qui initialise les variables (locales et autres) et la placer sur un panel du vc 3d.
[Vcockpit01] par exemple, avec X=1,Y=1,L=1,H=1 (gauge00=PushStol!PushStol_Init, 1, 1 , 1, 1):
.
<Gauge Name="PushStol_Init" Version="1.0">
<Element>
<Select>
<Value>
(L:Push_Init, bool) 0 ==
if{
1 (>A:REALISM,percent)
90 (>L:rot_tdb, number)
360 (>L:trans_tdb, number)
1 (>L:tdb_visible, number)
1 (>K:ALL_LIGHTS_TOGGLE)
50 (>A:ELEVATOR TRIM PCT, percent)
75 (>L:rot_computer, number)
0 (>L:visi_computer, number)
0 (>L:visi_win00, number)
0 (>L:visi_win01, number)
0 (>L:visi_win02 number)
0 (>L:VTHgps_ON, bool)
0 (>L:pushgps, number)
0 (>L:VTHtcn_ON, number)
1 (>L:VecDirVisi, number)
1 (>L:Push_Init, bool)
}
</Value>
</Select>
</Element>
Quant à la polonaise inverse, on a jamais dit qu'elle volait sur le dos!
Edit:
Pour les s0, s1, etc: stockage de la valeur dans un registre (de 0 à 49), équivalent de [STO] nnn des calculettes HP.
Pour lire les registres : l0, l1, ... (lettre L pour load).
Dernière modification par bede40 (02-05-2016 15:57:41)
Hors ligne
Salut,
Ok, tu confirmes ce que je pensais et c'est bien. Il semblerait que dans le code que j'ai balancé, une opération avec une valeur de variable nulle ne les gênent en aucune manière (pour eux c'est équivalent à 0 ou False)!As-tu vu l'utilisation de "S0" dans le code? Moi, j'avoue que non! Si j'ai vu, j'avais lu "10" au lieu de " l0"!
JMC
PS:J'ai du me séparer de ma HP, il y a plus de 20 ans ( non 30 ans, au profit d'un portable Compaq 8088,512k, 3" 1.4Mo,CGA).
Dernière modification par gastonj (02-05-2016 16:57:50)
Hors ligne