Tutoriel:Scripts AutoValidation

De GeoGebra Manual
Aller à : navigation, rechercher

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);}; } }

© 2021 International GeoGebra Institute