Navigation:  Macro >

Introduction

AiM Services
Previous pageReturn to chapter overviewNext page

Le langage de programmation développé dans Tell permet, grâce à sa simplicité, aux outils à disposition et à la grande richesse de ses instructions, de développer non seulement des aide au dessin mais toutes sortes  d’applications de calcul, de contrôle, de génération d’images, de génération de plans, d’impression ou de gestion.

Il s’apparente, pour sa structure, au langage BASIC

 

Toutes les fonctions de Tell sont accessibles de différentes manières

Des boites de dialogue sophistiqués peuvent être créées

Des instructions de calcul géométrique puissantes  sont disponibles

Les accès clavier, souris, port série sont possibles

L’affichage de l’écran est sous contrôle pour des création de scènes et autre

 

Les macro peuvent utiliser des « includes » et peuvent être chaînées entre elles.

Et si des limites devait être atteinte, la programmation en API peut prendre le relais avec des instructions similaires.

 

Les outils

L’éditeur pour la saisie (voir le manuel EDITEUR DE TEXTE)

Le Manuel « ON LINE » accessible depuis Tell , est affiché dans Internet Explorer, Firefox ou autres

 

Principe de construction d’un programme

Toute macro se termine par l’instruction END MACRO

Le programme principal est délimité par l’instruction END

Pour la clarté, il est souhaitable de commencer le programme par une entête (normalisée) qui sera une suite de commentaires précédés par le caractère !

Une entête normalisée contiendra :

- Le nom de la macro

- Le chemin

- Une description

- Un nom de créateur

- Une date de création

- Une information pour les modifications successives (Nom, date, description)

Le GLOSSAIRE permet une insertion rapide de ce paragraphe qui pourra alors être listé automatiquement par une macro « Catalogue »

 

Les variables

Les noms des variables numériques initialement à 0 sont nommées de façon mnémotechniques, ils peuvent être composés au maximum 16 caractères  (ne pas utiliser de caractères spéciaux).

 

Un certain nombre de mots réservés sont exclus tel que :

NB_ELEM, LAST_ELEM, FIRST_ELEM, PI, etc…
Se référer aux noms de fonctions dans le manuel macro.

 

Les noms des variables alphabétiques initialement vide, sont suivient par le caractère $ et nommées selon les mêmes critères que les variables numériques.

Une chaîne de caractères est par défaut de 120 caractères. Si c’est insuffisant, une déclaration est possible : Ex. COM A$[250]

 

Dans les deux cas, les variables peuvent être décrites sous forme de matrice.

 

Ex : Point(3,10)        permet de stocker 10 points 3D dans la variable Point.

Au delà de 10,une déclaration est obligatoire : soit DIM Point(3,20) ou COM Point(3,20).

 

Ex : nom$(10)[200]   permet de stocker 10 chaînes de 200 caractères dans la variable Nom  Dans ce cas, le passage dans un sous programme sera uniquement possible en « common ».

 

Les calculs d’angle sont retournés en radian , pour travailler en degré, initialiser la macro avec DEG.

 

Remarque :

Ne pas oublier d’initialiser la macro en degré si nécessaire

 

Les sous programmes

Les sous programmes sont placés après le END du programme principal, ils commence par SUB xxxx et se terminent par SUBEND.

A chaque fois qu’un calcul doit être fait à plusieurs reprise, il est très intéressant de les placer sous cette forme.

La lecture du programme principal est facilitée.

Les variables inclues dans un sous programme n’interfère pas avec celles d’un autre.

Seule les variables "passées" dans l’appel de ce dernier et les variables communes (COM) sont utilisées dans le sous programme.

Les variables d’appel et de retour à un sous programme sont placées entre parenthèses.

 

Ex : CALL Calcul(A,B,Point(*),nom$)

! -----------------------------------------------

       END

! -----------------------------------------------

       SUB Calcul(C,D,Point(*),nom$)

       SUBEND

       END MACRO

 

Remarque :

Pour les variables numériques :  seulement une matrice à une dimension
Pour les variable alphabétiques : pas de matrice

Remarque :

Les variables peuvent changer de nom, seul leur position est importante

 

Les tests

Des conditions peuvent être définies au moyen de test :

IF X=A THEN

Partie_1

ELSE

Partie_2

END IF

La "Partie 1 sera traitée si X=A

La partie 2 dans tous les autres.

 

Les mots "AND" et "OR" permettent de combiner des conditions.

Des parenthèses peuvent devenir nécessaires.

Ex: IF X=A AND (Y=B OR Z=C) THEN

 

L'écriture simplifiée :

IF X THEN

ou

IF NOT X THEN

signifie que la condition est remplie ou n'est pas remplie si X<>0 .

 

Une erreur est signalée à la compilation si la ligne "END IF" est oubliée.

Toutes les lignes comprises entre le début et la fin du test sont indentées automatiquement.

 

Les sélections

Quant plusieurs conditions doivent être détectées les instructions IF THEN, ELSE, END IF peuvent remplacées par:

SELECT X

 CASE 10

 CASE 20

 CASE 30,40

 CASE ELSE

END SELECT

L'écriture est plus simple, l'utilisation de mots réservés est agréable pour sélectionner les codes des entités à traiter par exemple :

SELECT Code

 CASE #LINE

 CASE #CIRCLE

END SELECT

 

Des sélections ne sont possibles que sur des valeurs numériques.

 

Une erreur est signalée à la compilation si la ligne "END SELECT" est oubliée.

Toutes les lignes comprises entre le début et la fin du select sont indentées automatiquement.

 

Les Boucles

Lors de calculs qui nécessite une incrémentation ou une itération, on peut définir des boucles de différents types :

 

FOR I=1 TO NB_ELEM

NEXT I

 

Qui permet de passer la variable  I de 1 au nombre d’éléments contenus dans le dessin (NB_ELEM) par pas de 1 (défaut).

Si une incrémentation différente est souhaitée, on écrira :

 

FOR I=x TO 1 STEP –1

 

On remarque que le « step » peut être négatif.

 

L'incrémentation et la sortie de la boucle sont entièrement défis dans la première ligne de la boucle.

 

LOOP

 EXIT IF Fin

END LOOP

L'incrémentation est laissée aux soins de l'utilisateur

La sortie se fait grâce à un test  dès que la variable Fin existe (<>0)

Si des conditions plus complexes doivent être testées , le test s'écrira

EXIT IF (A>B OR C)

 

 

WHILE  C=10

END WHILE

Le test de sortie est inclus dans la première  ligne

 

Une erreur est signalée à la compilation si la ligne "NEXT I","END LOOP" ou "END WHILE"  est oubliée.

Toutes les lignes comprises entre le début et la fin d'une boucle sont indentées automatiquement.

Des boucles peuvent se suivre ou être imbriquées dans un programme en aucun cas, se chevaucher.

 

Remarque :

Les boucles peuvent prendre du temps (très relatif avec les machines actuelles) et spécialement, les boucles imbriquées

 

Un certain nombre d'instructions comportes une boucle qu'il faudra utiliser en priorité (gain de vitesse) par exemple :

DELETE ELEM From,To

TRANSFORM ELEM From.To MOVE Dx,Dy

PLOT ELEM From,To

ERASE ELEM From,To

 

La base d'entités d'un dessin

Toutes les entités sont crées (dessinées) dans l'ordre chronologique.

Chaque entité contient un certain nombre d'informations tel que ses propriétés géométriques, sa plume, sa couche etc…

De façon générale toutes les entités peuvent recevoir des attributs de type MACRO, LIB, UTILISATEURS  etc…

 

Toutes les "dimensions" des entités peuvent être consultées avec l'instruction

REQUEST Num_entité,#X,X  pour la coordonnée X par exemple et modifiées avec l'instruction MODIFY Num_entité,#Y,Y  pour la coordonnée Y par exemple.

 

Il faut prendre un soin particulier à bien comprendre l'évolution du numéro d'entité (Num_entité) lors de suppression d'entités ou d'édition d'un symbole dans un dessin. car la numérotation de la base est modifiée à chacune de ces actions.

 

Les entités spéciales

Un symbole est constitué d'un "START SYMBOL", de son contenu et d'un "END SYMBOL" qui sont des entités (non graphiques) à part entière.

Un symbole peut être nommé ,orienté, mis à une échelle contenir des attributs utilisateurs comme une matière etc…

 

Les entités "SPLINE" et "MARKER" son crées suite à une instruction START SPLINE ou START MARKER suivies par les coordonnées des points SPLINE POINT X,Y ou MARKER POINT X,Y et terminées par END SPLINE ou END MARKER.

Ces "START" et  "END" ne sont pas des entités.

Le marker ou la spline, sont comptabilisés comme une seule entité.

 

Pour la modification de ces derniers, On devra modifier le "point courant"  avec

MODIFY Num_elem,#CNT,Num_point puis modifier le point concerné avec

MODIFY Num_elem,#X,X_modif

MODIFY Num_elem,#Y,Y_modif