Skip to content

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