Les étapes de ce tutoriel :
L'utilisation de conditions d'affichage comme expliquée dans les pages précédentes fonctionne bien. Mais si l'on souhaite que la condition d’affichage soit la réussite à une construction géométrique, c'est un peu plus compliqué. Dans ce cas il est nécessaire d’utiliser un script (JavaScript).
Mais commençons par le début. Il faut tout d’abord construire la figure que les élèves vont devoir tracer. Par exemple, un triangle équilatéral de côté 3 cm. Il faut renommer « cible1 » cet objet.
Nous aurons également besoin d'un nombre nommé "test1". Le script le mettra à 1 lorsque la construction sera réussie.
Le message qui apparaîtra lorsque la construction sera réussie ("bravo" dans mon exemple) doit avoir un affichage conditionné par "test1==1" :
Il faut ensuite cacher tous les éléments de la construction (ne pas les effacer mais décocher "Afficher l’objet").
Il faut également mettre à 0 le nombre "test1" (pour cela taper "test1=0" dans la barre de saisie).
Il faut ensuite aller dans les propriétés de n'importe quel objet et aller dans l'onglet "Script" puis dans l'onglet "JavaScript global" et copier et coller le script ci-dessous :
function ggbOnInit() {
ggbApplet.debug("ggbOnInit");
ggbApplet.registerAddListener("NouvObj");
}
function NouvObj (obj) {
type=ggbApplet.getObjectType(obj);{
test1 = ggbApplet.getValue("test1");
cmd1="SetValue[test1,"+obj+"== cible1]";
if (test1 == 0) {ggbApplet.evalCommand(cmd1);};
ggbApplet.refreshViews();
}
}
Ce script compare tout nouvel objet créé à l'objet qui est nommé "cible1".
Lorsqu'il y a "correspondance" entre les deux objet alors le nombre "test1" devient égal à 1.
Attention : le script se lance à l'ouverture du fichier. Pour que le script soit actif, il faut fermer et rouvrir le fichier.
Pour en savoir plus sur ce genre de script, consulter la page dédiée du Wiki de GeoGebra.
Ce script n'est pas de moi : une première version en a été écrite par Mickael Borcherds (@mike_geogebra sur Twitter) en 2009.
Voici le résultat.
Il ne faut pas oublier, avant de sauvegarder le fichier, de :
Il est tout à fait possible d'avoir plusieurs cibles dans un exerciseur. Il suffit de dupliquer 3 lignes du script comme ci-contre.
Il ne faut pas oublier de créer les nombre "test2", "test3",...
Un exemple avec 2 cibles :
function ggbOnInit() {
ggbApplet.debug("ggbOnInit");
ggbApplet.registerAddListener("NouvObj");
}
function NouvObj (obj) {
type=ggbApplet.getObjectType(obj);{
test1 = ggbApplet.getValue("test1");
test2 = ggbApplet.getValue("test2");
test3 = ggbApplet.getValue("test3");
cmd1="SetValue[test1,"+obj+"== cible1]";
cmd2="SetValue[test2 ,"+obj+"== cible2]";
cmd3="SetValue[test3 ,"+obj+"== cible3]";
if (test1 == 0) {ggbApplet.evalCommand(cmd1);};
if (test2 == 0) {ggbApplet.evalCommand(cmd2);};
if (test3 == 0) {ggbApplet.evalCommand(cmd3);};
ggbApplet.refreshViews();
}
}