Notas sobre comandos en Javascript para GeoGebra
Hay muy poco en la red sobre JavasCript y GeoGebra pero a mi me ha resultado de enorme utilidad para algunas construcciones. Aquí tienes mis notas de trabajo con ideas fundamentales para aplicar en construcciones y material de GeoGebra.
Descargar notas en un documento en Latex: Notas sobre JavaScript en GeoGebra
Enlaces útiles
Lista completa de los comandos en inglés:
https://wiki.geogebra.org/en/Category:Commands
Lista completa de los comandos de Geogebra para Javascript:
https://wiki.geogebra.org/en/Reference:JavaScript
Funciones
Resumen de funciones de Javascript empleadas en construcciones de Geogebra:
// Cambiar el estilo de un punto
SetPointStyle("A", int style);
Los posibles valores son estos:
- 0: Full dot
- 1: Cross
- 2: Empty dot
- 3: Plus sign
- 4: Full diamond
- 5: Empty diamond
- 6: Triangle north
- 7: Triangle south
- 8: Triangle east
- 9: Triangle west
- 10: Full dot (but with no outline)
// Borrar elementos en Geogebra
ap.evalCommand("Delete(A_0)");
// Crear puntos nuevos
ap.evalCommand("A=(0,1)");
// Modificar la condición de visibilidad de un objeto
ap.evalCommand("SetConditionToShowObject(A,a)");
// Ocultar etiquetas de un elemento
ap.evalCommand("ShowLabel(A,"+false+")");
// Cambiar el color de un elemento
ap.evalCommand("SetColor(A,1, 0.2, 0.5)");
// Cambiar la opacidad de un elemento (valor entre 0 y 1)
ap.evalCommand("SetFilling(A, 0.1)");
// Activar el rastro de un elemento
ap.evalCommand("SetTrace(A,"+false+")");
// Ocultar un elemento
ap.evalCommand("SetVisibleInView("+arrayDeNuevos[arrayDeNuevos.length-3]+",1,"+false+")");
// Cambiar el grosor de línea
ap.evalCommand("SetLineThickness("+arrayDeNuevos[1]+","+grosor+")");
// Extraer/tomar el valor de una variable de Geogebra
var niveles = ap.getValue("slide");
// Apuntar a un objeto en Geogebra
var ap = ggbApplet;
var a = ap.getValue("a");
Segmentos de código útiles
Manejo de cadenas en Javascript
// Cambiar el valor de un Booleano en función de la aparición de paréntesis y signos de suma en una función
var validate = ap.getValue("validate");
var stAnswer = ap.getValueString("stAnswerFunc");
stAnswer = """ + stAnswer + """; // Convertir a string
var numBrackets = 0;
if (validate) {
numBrackets = char_count(stAnswer, "(");
numPluses = char_count(stAnswer, "+");
if (numBrackets == 3 && numPluses == 2) {
ap.evalCommand("BoolBrackets=true");
} else {
ap.evalCommand("BoolBrackets=false");
}
}
// Función para contar caracteres en una cadena
function char_count(str, letter) {
var letter_Count = 0;
for (var position = 0; position < str.length; position++) {
if (str.charAt(position) == letter) {
letter_Count += 1;
}
}
return letter_Count;
}
Imprimir todos los campos generados por un comando en un bucle
var r = ap.evalCommandGetLabels("Prism("+arrayDeNuevos[0]+","+size+")");
var elementos = r.split(",");
for (var cont = 0; cont < elementos.length; cont++) {
alert(elementos[cont]); // Imprime el objeto
alert("""+elementos[cont]+"""); // Imprime el nombre del elemento
}
Crear un listener para un objeto de Geogebra
// Adjudicar una función a un objeto para que se ejecute al pinchar
ggbApplet.registerObjectClickListener("A", "myAupdateListenerFunction");
myAupdateListenerFunction("A");
Crear un manejador global para controlar eventos
function ggbOnInit() {
ggbApplet.registerClickListener("ClickL");
}
function ClickL(nam) {
ggbApplet.evalCommand('ClickNam="'+nam+'"');
ggbApplet.evalCommand('ClickType="'+ggbApplet.getObjectType(nam)+'"');
}
Función para generar un número aleatorio entre dos valores
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
Función árbol para crear fractales en Geogebra
function arbol(p1, p2, p3, segmento, n) {
var ap = ggbApplet;
var t, seg_reflex, pun_reflex;
t = ap.evalCommandGetLabels("Fractal("+p1+","+p2+","+p3+")");
var arrayDeNuevos = t.split(",");
ap.evalCommand("ShowLabel("+arrayDeNuevos[0]+","+false+")");
ap.evalCommand("ShowLabel("+arrayDeNuevos[1]+","+false+")");
var grosor = 2 * n;
seg_reflex = ap.evalCommandGetLabels("Reflect("+arrayDeNuevos[1]+","+segmento+")");
pun_reflex = ap.evalCommandGetLabels("Reflect("+arrayDeNuevos[0]+","+segmento+")");
ap.evalCommand("SetColor("+arrayDeNuevos[0]+",1, 0.2, 0.5)");
ap.evalCommand("SetLineThickness("+arrayDeNuevos[1]+","+grosor+")");
ap.evalCommand("SetLineThickness("+seg_reflex+","+grosor+")");
n -= 1;
if (n == 0) return 1;
arbol(p2, p3, arrayDeNuevos[0], arrayDeNuevos[1], n);
arbol(p2, p3, pun_reflex, seg_reflex, n);
return 1;
}
Función para crear "Listeners" en objetos recién creados
function ggbOnInit() {
var ap = ggbApplet;
ap.registerObjectClickListener("A", "palometear");
alert("Todo en orden");
}
function palometear(objeto) {
var ap = ggbApplet;
var segment = ap.getValue("segment");
var t = ap.evalCommandGetLabels("palometas2("+objeto+","+segment+")");
var arrayDeNuevos = t.split(",");
ap.registerObjectClickListener(arrayDeNuevos[0], "palometear");
ap.registerObjectClickListener(arrayDeNuevos[2], "palometear");
}