Navigation: Macro > Introduction |
![]() ![]() ![]() ![]() |
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… |
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 |
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