Skip to main content

Interfaz de Nodos

Gestión de Nodos: Source y Target

Si clicamos en uno de los nodos, en este caso un Source node, veremos diversos parámetros configurables:

  • Name: nombre identificativo del nodo.
  • Path / Tag: ruta o etiqueta del XML de origen.
  • Static value: valor fijo opcional, útil para debug o para probar el modelo ignorando las conexiones.
  • Default value: permite definir un nodo como valor constante, por ejemplo para realizar sumas, offsets o aplicar factores que queremos modificar rápidamente.

Si presionamos la flecha situada junto al path/tag, se desplegará una lista de etiquetas que el software ha parseado automáticamente del archivo abierto en el editor.

Al mismo tiempo, el editor de modelos se desplazará a un lado para permitir visualizar e interactuar con el XML original, facilitando la localización de los tags que nos interesan.


En el caso de los Target nodes, su funcionamiento es análogo a los Source nodes, pero en este caso definimos el tag/path de destino.

Esta cadena será la que se utilizará para construir el XML final cuando se genere la conversión.


Custom Nodes y Lógica Personalizada

Los nodos más potentes del sistema son los Custom Nodes, diseñados para permitir la creación de transformaciones completamente personalizadas mediante:

  • JavaScript
  • Python

En estos nodos podemos definir:

  • Nombre del nodo
  • Color identificativo
  • Inputs personalizados
  • Tipos de variables más comunes (numéricos, strings, booleanos, etc.)

Estos tipos se parsean directamente en el código, por lo que su función es principalmente organizativa y visual.

Junto al nombre del nodo encontramos el botón “Load to server”, que permite subir el nodo personalizado a la toolbox global, haciéndolo accesible para el resto de usuarios.


Ejemplo avanzado: ASL to AGL Conversor (JavaScript)

Un ejemplo práctico de uso de Custom Nodes es el nodo ASLtoAGLConversorJS, encargado de convertir alturas Above Sea Level (ASL) a Above Ground Level (AGL).

Este nodo:

  1. Parsea los valores de entrada.
  2. Realiza una petición HTTP a un servicio público.
  3. Obtiene la elevación del terreno.
  4. Calcula la altura real respecto al suelo.

function run() {
    try {
        const lat = parseFloat(Lat);
        const lon = parseFloat(Lon);
        const msl = parseFloat(Elevation);
        if (isNaN(lat) || isNaN(lon) || isNaN(msl)) {
            return msl.toFixed(2);
        }
        if (lat < -90 || lat > 90 || lon < -180 || lon > 180) {
            return msl.toFixed(2);
        }
        const url = `https://api.open-meteo.com/v1/elevation?latitude=${lat}&longitude=${lon}`;
        const data = httpGet(url);
        if (!data || !data.elevation || data.elevation.length === 0) {
            return msl.toFixed(2);
        }
        const groundElevation = parseFloat(data.elevation[0]);
        if (isNaN(groundElevation)) {
            return msl.toFixed(2);
        }
        const agl = msl - groundElevation;
        if (agl < -100 || agl > 10000) {
            return msl.toFixed(2);
        }
        return agl.toFixed(2);
    } catch (e) {
        return parseFloat(Elevation).toFixed(2);
    }
}

Que será capaz de parsear los datos de entrada, que están respecto al nivel del mar, realizar peticiones a un servidor público y hacer la conversión a altura respecto al suelo.

En la esquina superior derecha tenemos diversos elementos útiles para estos modelos. En Update server model podremos actualizar el modelo a nivel servidor para que todos los usuarios vean el que acabamos de guardar. En Add node nos aparecerá un desplegable para añadir el nodo del tipo que deseemos.

El botón Open toolbox abrirá la caja de herramientas de nodos en el lateral derecho, donde todos los usuarios tendrán acceso a los nodos custom que se hayan subido al servidor.

Podemos simplemente arrastrar los nodos hacia la pizarra para añadirlos.

Para conectar nodos entre sí, podemos hacer Ctrl + mantener pulsado desde uno de los puntos naranjas del nodo para extraer el hilo. Para conectarlo al nodo de destino solo hay que soltar el ratón sobre él.

Para deshacer cualquier cambio, se puede utilizar Ctrl + Z.

Finalmente, en la esquina inferior derecha podremos:

  • Eliminar el modelo del servidor mediante la papelera
  • Resetear la vista para centrarnos en el punto (0,0) del canvas
  • Aplicar los cambios locales

Estos cambios solo se aplican a nivel local.
Para guardarlos en servidor será necesario utilizar Update server model.

Si aplicamos los cambios y seleccionamos archivos desde el explorador, se realizará automáticamente una conversión para cada XML seleccionado.