Tutoriel:Scripts AutoValidation
Dans ce qui suit, les scripts sont écrits dans l'onglet Script > Javascript Global
"LE SCRIPT" de référence
rudimentaire : on nomme, dans le fichier GeoGebra, 'cible' l'objet attendu.
repris ici : Construction auto-validée Tâche : En utilisant les outils présents dans la barre d'outils, construire le milieu du segment [AB]. (A et B étant deux points 3D)
Script | Commentaire |
---|---|
function ggbOnInit() { | Cette fonction va être exécutée au lancement du fichier GGb |
ggbApplet.debug("ggbOnInit"); | (facultatif, "gérer" les erreurs) |
ggbApplet.registerAddListener("NouvObj"); | C'est le point clé !! Création d'un "mouchard", qui, à chaque création de nouvel objet, va appeler la procédure NouvObj |
} | Fin de ggbOnInit |
function NouvObj (obj) { | Début de la procédure qui va être exécutée à chaque création d'un nouvel objet |
if (obj != "fini") { | Chaque fois qu'elle est exécutée, la procédure crée un booléen nommé 'fini', il ne faut donc pas qu'elle soit exécutée pour l'objet 'fini', sinon elle tournerait en rond sur cet objet ! |
var cmd = "fini = ("+obj+"== cible)"; | Définition de la commande qui va définir le booléen 'fini' testant si le nouvel objet est égal à l'objet 'cible' attendu |
ggbApplet.debug(cmd); | |
ggbApplet.evalCommand(cmd); | Exécution de la commande |
fini = ggbApplet.getValueString("fini"); | Lecture de la valeur du booléen 'fini' |
if (fini.indexOf("true") > -1) { | on teste si 'true' est présent dans 'fini' |
alert("C'est bien !"); | Si oui, un "pop-up" à destination de l'élève |
} | Fin du "if" sur 'fini' |
} | Fin de la partie de procédure exécutée pour un nouvel objet différent de 'fini' |
} | Fin de la procédure 'NouvObj' |
==
Une variante avec, toujours 1 cible, mais pouvant avoir 2 "natures" différentes :
par exemple, si on attend une bissectrice d'angle (sans avoir été plus directif dans l'énoncé), que soit construite une demi-droite ou une droite, la réponse doit être validée.
Définir dans le fichier GGb une 'cible1', la droite bissectrice et une 'cible 2', la demi-droite bissectrice.
ici : Construction auto-validée bissectrice Tâche : En utilisant uniquement les outils proposés, construire la bissectrice de l'angle \hat{ABC}ˆ.
function ggbOnInit() { ggbApplet.debug("ggbOnInit"); ggbApplet.registerAddListener("NouvObj"); }
function NouvObj (obj) { if (obj != "fini") {
var cmd = "fini = ("+obj+"== cible1 || "+obj+"== cible2 )"; | Définition de la commande qui va définir le booléen 'fini' testant si le nouvel objet est égal à l'un ou l'autre des objets 'cible1' ou 'cible2' attendu. (la double barre || obtenue par 2 pressions successives sur AltGr + 6 est le OU logique en js.) |
ggbApplet.debug(cmd); ggbApplet.evalCommand(cmd); fini = ggbApplet.getValueString("fini"); if (fini.indexOf("true") > -1) { alert("C'est bien !"); } }
}
=
http://www.geogebra.org/material/show/id/933499 Const. auto-valid Pts équidistants de deux droites sécantes
function ggbOnInit() { ggbApplet.debug("ggbOnInit"); ggbApplet.registerAddListener("NouvObj"); }
function NouvObj (obj) { if (obj != "fini") { type=ggbApplet.getObjectType(obj); if(type=="point"){ var cmd = "fini = (Distance["+obj+",c] ==Distance["+obj+",d] )"} ggbApplet.debug(cmd); ggbApplet.evalCommand(cmd); fini = ggbApplet.getValueString("fini"); if (fini.indexOf("true") > -1) { alert("En voici un !"); } }
}
=
http://www.geogebra.org/material/show/id/940779 Const. auto-valid des 2 bissectrices de 2 droites sécantes
Construction auto-validée des 2 droites bissectrices des angles associés à 2 droites sécantes.
Avec utilisation du SoitValeur (SetValue) GeoGebra implémentée par Michel Iroir
function ggbOnInit() { ggbApplet.debug("ggbOnInit"); ggbApplet.registerAddListener("NouvObj"); }
function NouvObj (obj) { type=ggbApplet.getObjectType(obj); if(type=="line"){ test1 = ggbApplet.getValue("test1"); test2 = ggbApplet.getValue("test2"); cmd1="SetValue[test1,"+obj+"== cible1]"; cmd2="SetValue[test2 ,"+obj+"== cible2]"; if (test1 == 0) {ggbApplet.evalCommand(cmd1);}; if (test2 == 0) {ggbApplet.evalCommand(cmd2);}; } }