Retour à l'introduction.

Les scripts


L'automate
Le Langage
Détail des commandes complexes
Exemples
Le Langage d'évaluation

L'automate

Zetta6 implémente un automate permettant de reproduire certaines tâches par le biais de scripts.
C'est par exemple le cas avec le script de démonstration fourni avec le logiciel.

Plus concrètement, l'automate lit un script et exécute linéairement chacune des diverses commandes (dessin sur le plan 2D, ouvrir un plan, création des vues, génération du solide, changement des paramètres de génération, etc...)

Le langage

Les scripts sont nommés avec une extension ".z6s", ils sont de type texte et peuvent avoir autant des sauts à la ligne de type Unix (\n) ou Ms Windows (\r\n).
Chaque instruction est rendue distincte par un saut à la ligne ou avec le caractère ';', les commandes et les paramètres sont séparés par un espace.

Il y a deux types d'instructions, les variables d'environnement (placées en début de fichier et commençant par le caractère ':') et les commandes. Il est également possible d'ajouter des commentaires (ignorés par l'automate), pour cela la ligne doit commencer par le caractère '#'

A noter que les commandes dédiés au tracé d'entités 2D commencent toutes par un point ('.').

Les commandes peuvent être placées dans des blocs d'instruction par le biais de la commande bloc suivi des instructions placées entre parenthèses (voir les exemples avec la calculatrice).

Liste des variables d'environnement

Avertissement : Le mode animation peut être utile pour rendre interactif certains scripts, mais ralentit considérablement la vitesse d'exécution.

Liste des commandes (Script type Français)

Liste des commandes de tracé d'entités 2D (Script type Français)

Les commandes suivantes sont dédiées à la manipulation de la calculatrice (pour plus d'informations voir la section sur le langage d'évaluation).

Détail des commandes complexes

Définition d'une vue : vue type type_coordonnées x1 y1 x2 y2
  Le type peut être face (vue de face), cote (vue de côté), haut (vue de dessus) ou mult (vue multiple, les cadres de vues seront recherchés automatiquement).
  Le type de coordonnées peut être abs ou rel. Cela défini le type des coordonnées du second point des coordonnées, suivant si l'on souhaite le spécifier en coordonnées absolues (depuis le point 0) ou relatives (suivant le premier point, qui lui sera toujours en coordonnées absolues)
  Suivent les coordonnées des deux points formant la diagonale du rectangle de la vue.

Définition d'une origine : origine type x y
  Le type peut être face (vue de face), cote (vue de côté) ou haut (vue de dessus).
  Suivent les coordonnées du point d'origine, respectivement en X et en Y.

Changement d'un paramètre : param type valeur

Exemple

Le fichier de démonstration est en soit un exemple, d'ailleurs l'exemple ci-dessous s'en inspire, si ce n'est que chaque commande est commentée.

# Assignation de la langue Française pour le langage du script (a noter que cela définit la sélection de la langue du script, mais également pour la synthèse vocale)
:lang FR

# Ouvre le plan "exemples.dxf", il doit être dans le même dossier que le script.
ouvrir_plan "exemples.dxf"

# Réinitialisation des cadres et vues et des origines éventuellement dessinées par l'utilisateur.
reinit

# Chargement de la configuration utilisateur.
charge_config

# Changement de la couleur RAL du solide (ici en noir), ce changement de paramètre n'est effectif que pour ce script et ne touche pas la configuration utilisateur.
param id_ral 9005

# On s'assure d'être sur l'onglet 2D.
onglet2D

# Création des cadres de vues (un seul cadre en mode automatique).
vue mult abs 270 34 420 170

# Lance la génération 3D.
gen3D

Le Langage d'évaluation

Une extension du langage de script permet d'effectuer des calculs directement dans le script. Il faut utiliser la commande calc suivie d'une expression à évaluer.

Les opérations doivent être mises entre parenthèse, ces dernières pouvant être imbriquées.
Par exemple:

calc "pointx = 5"  Déclare une variable nommée pointx à la valeur 5
calc "pointx = (pointx+37)"  pointx vaudra 42.

Des opérations distinctes peuvent être mises sur la même ligne en les plaçant dans des blocs de guillemets différents ou en les séparant par le caractère ';'.
Par exemple les deux expressions ci-dessous sont sémantiquement identiques:

calc "pointx=42" "pointy=75"
calc "pointx=42 ; pointy=75"

Une fois les opérations effectuées, les variables sont utilisables dans le script comme des valeurs numériques, par exemple en reprenant les valeurs précédentes:

# Place une origine au point 42 ; 75
origine pointx pointy

Des fonctions sont également définies pour effectuer des opérations usuelles comme le calcul d'une racine carré:

calc "phi = ( (1 + (sqrt 5)) / 2 )"

Contrairement aux opérateurs qui exigent d'avoir deux opérandes (une de chaque côté), les fonctions peut avoir un nombre variable d'opérande suivant le cas, ces opérandes étant placés à la suite de l'appel de fonction.

En plus des variables standards, il est possible d'utiliser des tableaux via les caractères '[' et ']' lors de l'affectation.

calc "tableau = [0 1 2 3]"
calc "t0 = tableau[0]"
calc "t3 = tableau[3]"

Ici la variable t0 vaudra le premier indice du tableau (donc 0) et t3 le dernier élément (donc 3).

Liste des opérations avec leur priorité opératoire:

A titre d'exemple, voici un programme qui exécute des trois premières itérations de l'algorithme de Gauss-Legendre pour calculer le nombre π :

:lang FR
:lang_ver 100
:anim 0

calc "iter_pi=0"
calc "a = 1.0 ; b = (1/(sqrt 2)) ; t = (1/4.0) ; p = 1.0"

bloc calc_pi
{
    calc "as = ((a + b) / 2) ; bs = (sqrt(a*b)) ; ts = (t - p * ((a-as)^2)) ; ps = 2 * p"
    calc "pi_c = ( ((as + bs) ^ 2) / (4 * ts) )"
    calc "a = as; b = bs; t = ts; p = ps"
    calc "iter_pi = iter_pi + 1"
}

boucle "iter_pi < 3" calc_pi
message "Valeur de pi après" iter_pi "itérations :" pi_c

Affichera "Valeur de pi après 3 itérations : 3.14159265359" (tous les nombres rééls sont arrondis à 12 chiffres après la virgule pour l'affichage)

Notez que pour demander l'affichage du message, on aurait pu retirer les guillemets et mettre une ligne tel que:

message Valeur de pi après iter_pi itérations : pi_c

Si c'est un peu plus lisible au niveau du code, c'est aussi beaucoup plus inefficace, en particulier avec une phrase longue car l'interpréteur devra tester si chaque mot est une variable à évaluer, tandis que l'affichage est direct avec des chaînes entre guillemets,

Un autre exemple, qui cette fois ci génère et trace une sinusoïde :

:lang FR; :lang_ver 100; :anim 0

onglet2D
fermer_plan

calc "echelle_trace=50"
calc "iter_sin=0 ; inc_sin=0.2"
calc "p1 = [ 0 0 ] ; p2 = [ 0 0 ]"

bloc trace_segment_sinusoide
{
    .ligne p1[x] p1[y] p2[x] p2[y]
}

bloc b_sinusoide
{
    calc "p2[x] = p1[x] ; p2[y]=p1[y]"
    calc "p1[x] = (p1[x] + ((inc_sin*0.5) * echelle_trace))"
    calc "p1[y] = ((sin iter_sin) * echelle_trace)"
    si "iter_sin != 0" trace_segment_sinusoide
    calc "iter_sin = iter_sin + inc_sin"
}

boucle "iter_sin < (inc_sin*50)" b_sinusoide
cadrage2D

Sur ce type de script (exécutant une boucle relativement longue), l'activation du mode animation peut sensiblement dégrader les performances.

Retour à l'introduction.