Un interpréteur de scripts est intégré à GeoLicia.
Les scripts permettent d'automatiser des constructions (macros) ou de
faire des tests sur la figure (parallélisme, orthogonalité, ...)
La syntaxe est sensible à la casse. Les commandes sont en minuscules.
Voici quelques exemples.
Crée le milieu de deux points |
Construit le cercle passant par trois points |
Teste si un point est sur une droite |
import GPoint
import GPoint
milieu de [#1#2]
export LAST
|
import GPoint|un point du cercle
import GPoint|un deuxième point du cercle
import GPoint|un troisième point du cercle
ifexists Point #1 & Point #2 & Point #3
{invisible} @10000= mediatrice de [#1#2]
{invisible} @10001= mediatrice de [#2#3]
@10002=intersection(0) de @10000 et de @10001
@10003= cercle de centre @10002 passant par #1
export @10000 @10001 @10002 @10003
endif
return
|
import GPoint
import GDroite
projection de #1 sur #2
iflikepoint LAST=#1
return true
endif
return false
|
Commandes :
1. Imports, exports d'objets.
return
[chaine]
Termine le script en renvoyant l'argument optionnel chaine.
export obj1 obj2 obj3 ...
Exporte des objets créés et termine le script.
Les objets créés dans le scripts sont détruits à la fin de son exécution.
Pour que les objets subsistent, il faut les exporter.
Il faut bien prendre garde lorsqu'on exporte un objet d'exporter aussi les
objets qui le définissent (et dans le bon ordre).
Le nom des objets à exporter doit commencer par le caractère spécial
@.
import <type>[|message]
Attend que l'utilisateur clique sur un objet du type souhaité. L'objet est
alors nommé #1, #2, #3, ... selon l'ordre
d'apparition de la commande import dans le script.
On peut éventuellement définir un message qui renseigne l'utilisateur sur la nature de l'objet à sélectionner
<type> peut être :
- GPoint : pour un point
- GDroite : pour une droite
- GDemidroite : pour une demi-droite
- GSegment : pour un segment
- GCercle : pour un cercle
2. Les tests
Toutes les instructions de test suivent la syntaxe suivante :
if<instr> <condition>
(instruction si la condition est vérifiée)
endif
ifexists <type> nomobj
<instr>
endif
<instr> ne sera executé qui si des objets de type donné
<type> portant les noms nomobj existent.
Cela permet d'éviter d'utiliser des objets qui n'ont pas été définis ou
qui ont été détruits.
Les types pour <type> sont :
On peut utiliser les opérateurs logiques & (et), |
(ou) et ! (non) et des parenthèses.
Exemple :
ifexists Point A & Point B &
Point C
if exists (Segment [AB] | Droite (AB))
& Point C & !(Point D)
iflikepoint p1=p2
<instr>
endif
Teste si les deux points p1 et p2 sont identiques, même s'ils ont été
définis différemment.
Comme pour ifexists, on peut utiliser des opérateurs logiques.
iflike obj
<instr>
endif
Teste s'il existe un objet identique à obj qui doit être un
point, une droite, un segment ou un cercle.
Comme pour ifexists, on peut utiliser des opérateurs logiques.
3. Création d'objets
Les objets sont créés temporairement, le temps de l'exécution du script.
Il ne sont pas affichés à l'écran. Pour créer définitivement un objet, il
faut utiliser la commande export.
Pour ne pas interférer avec des objets déjà créés, les objets nouvellement
créés doivent avoir pour nom @10000, @10001,
@10002, ... tous commençant par le caractère spécial @.
On peut aussi omettre le nom des objets dans leur définition. On y fait alors référence par l'indicateur spécial LAST pour le dernier objet créé ou LAST(1) pour l'avant dernier, LAST(2) pour l'antépénultième (avant-avant-dernier), etc...
Objets de base
Point nom(x,y) [sur obj]
Crée un point, éventuellement lié à un objet (droite, segment, cercle).
Lorsque le point est lié à une droite, obj est le nom de la droite.
Lorsque le point est lié à un segment, obj est du type
[p1p2]. Dans le cas d'un cercle, cercle nom_du_cercle.
Les coordonnées peuvent être ajustées pour être sur l'objet.
Exemple :
Point A(50,100)
Point B(10,10) sur d
Point C(50,60) sur [AB]
Point D(60,70) sur cercle @10
nom=droite (p1p2)
Crée la droite passant par les points p1 et p2. La
droite est nommée nom.
Exemple :
Point A(50,100)
Point B(10,10)
d= droite (AB)
nom=segment [p1p2]
Crée le segment d'extrémités les points p1 et p2.
Exemple :
Point A(50,100)
Point B(10,10)
@10000= segment[AB]
nom=demi-droite [p1p2)
Crée la demi-droite d'origine p1 et qui passe par p2.
Exemple :
Point A(50,100)
Point B(10,10)
@10000= demi-droite [AB)
nom= cercle de centre <c> passant
par <p>
Crée un cercle.
Exemple :
@10000= cercle de centre A passant par B
nom= cercle de diametre
[p1p2]
Crée un cercle de diamètre donné
Exemple :
@10000= cercle de diametre [AB]
Objets construits
nom= droite perpendiculaire a <d>
passant par <p>
Exemple :
@10000= droite perpendiculaire a d passant par A
nom= droite parallele a <d> passant
par <p>
Exemple :
@10000= droite parallele a d passant par A
nom= mediatrice de [p1p2]
Exemple :
@10000= mediatrice de [AB]
nom= bissectrice de p1p2p3
Exemple :
@10000= bissectrice de ABC
nom= milieu de [p1p2]
Exemple :
I= milieu de [AB]
nom= homothetie de <p> de centre
<c> et de facteur <f>
Exemple :
@10000= homothetie de A de centre O et de facteur -0.25
nom= symetrie(<obj>) de
<p>
Symétrie centrale ou axiale selon que obj est une droite ou un point.
Exemple :
@10000= symetrie(O) de A
@10001= symetrie(d) de A
nom= projection de <p> sur
<d>
Projection orthogonale sur une droite. <d> peut être une droite, un
segment ou une demi-droite. Dans tous les cas, on considère la projection sur
la droite.
Exemple :
@10000= projection de A sur d
nom= translation de <p> de vecteur
<p1p2>
Exemple :
C= translation de D de vecteur AB
nom= intersection(0|1) de obj1 et de
obj2
Intersection entre deux objets. Lorsque plusieurs intersections sont
possibles (avec des cercles), on les distingue en précisant 0 ou 1 entre les
parenthèses.
Les objets peuvent être : droite, segment, demi-droite, cercle.
Exemple :
@10000= intersection(0) de d et de d'
@10001= cercle de centre A passant par B
@10002= intersection(0) de d et de @10001
@10003= intersection(1) de d et de @10002
Attributs
On peut faire précéder la définition d'un objet par des attributs, notés
entre accolades.
- {invisible}
- {epais}
- {plein}
- {tiretlong}
- {pointille}
- {tiretpointille}
- {tiretcourt}
|