Funciones JavaScript
Una función escrita en JavaScript: para cálculos y geometría que resultan más fáciles de escribir en un lenguaje de propósito general, con las variables y los puntos del dibujo a mano. Se llama, se guarda y se vuelve a crear cuando cambia el dibujo, como cualquier otra función.
Sintaxis
FUNCTION NAME(a,b,…) JAVASCRIPT <<<
JavaScript …
>>>
FUNCTION NAME(a,b,…) JAVASCRIPT <<< JavaScript … >>>
| Parte | Significado |
|---|---|
| NAME | El nombre de la función, como en cualquier FUNCTION. |
| a, b | Sus parámetros: nombres de JavaScript, usados tal como se escriben (x, width, c). |
<<< … >>> |
El código: desde la línea siguiente a <<< hasta una línea que sea solo >>>, o en una sola línea entre ambos. Se conserva exactamente como se escribe. |
El código es el cuerpo de una función JavaScript de los parámetros (modo estricto). Lo que devuelve con return es el
valor de la función; puede no devolver nada si solo crea geometría.
Qué recibe el código
La API de dibujo, compartida con las extensiones: las variables del dibujo y los puntos de la página en la que se trabaja, y funciones para crear puntos y elementos. En resumen:
| Valores | Los números, las cadenas y true/false tal cual; una posición como {x, y}; una lista como array; un diccionario como Map. Los valores devueltos vuelven de la misma forma: un objeto con los números x e y es una posición; cualquier otro objeto, un diccionario de sus propiedades. |
vars.NAME, variable("NAME") |
Una variable del dibujo: vars.L y variable("L") son L. |
getPoint(n) |
Un punto: getPoint(4) o getPoint("P4"), como {x, y, id}. |
evaluate("…") |
Una expresión del lenguaje de dibujo: evaluate("DISTANCE(P0,P2)"). |
setVariable("NAME", value) |
Asigna una variable, con un número o una expresión. |
newPoint(…), offset(p, dx, dy), polar(p, angle, distance), between(p, q, t) |
Puntos nuevos: en una posición o definidos por una expresión; a partir de otro punto. Los tamaños pueden ser expresiones ("W/2"). |
line, arc, circle, bezier, polyline, point, text |
Elementos, a partir de puntos o posiciones. |
layer(n) |
La capa en la que se crean los elementos que siguen. |
command("…") |
Cualquier instrucción del lenguaje de dibujo: command("FILLET(@1,@2,5)"). |
print(…), console.log(…) |
Muestra valores, como hace PRINT. |
Las posiciones pueden darse como {x: 10, y: 20} o [10, 20]; un punto dado como tal (getPoint(4), "P4") hace que lo
creado sobre él lo siga.
Ejemplos
FUNCTION HYPOT(a, b) JAVASCRIPT <<< return Math.sqrt(a * a + b * b) >>>
DIAGONAL = HYPOT(L, W)

FUNCTION STAR(c, n, r) JAVASCRIPT <<<
for (let k = 0; k < 2 * n; k++) {
const a = Math.PI / 2 + k * Math.PI / n, b = a + Math.PI / n;
const r1 = k % 2 ? r / 2 : r, r2 = k % 2 ? r : r / 2;
line({ x: c.x + r1 * Math.cos(a), y: c.y + r1 * Math.sin(a) },
{ x: c.x + r2 * Math.cos(b), y: c.y + r2 * Math.sin(b) });
}
>>>
CALL STAR(P2, 5, W / 4)
Una estrella de cinco puntas en la esquina P2 de la caja: cambie W o mueva P2 y se vuelve a crear.
FUNCTION HOLES(widths) JAVASCRIPT <<<
let x = 20;
for (const w of widths) {
circle([x + w / 2, 50], w / 2);
x += w + 10;
}
return x;
>>>
WIDTHS = {10, 20, 40}
CALL HOLES(WIDTHS)
Una lista pasada a JavaScript como array: un agujero por cada ancho.
Notas
- Una función JavaScript ve las variables y los puntos del dibujo tal como están cuando se la llama. Los puntos y elementos que crea son suyos (como los de un bloque): se dibujan y exportan con el dibujo, pero no son elementos suyos que se puedan seleccionar o usar para el forzado de cursor uno a uno.
- Se llama como cualquier función: en una expresión, por su valor (
HYPOT(3,4)), o con CALL, por su geometría, desde el dibujo, un bloque u otra función. Las funciones del lenguaje de dibujo pueden llamarla, y ella puede llamarlas medianteevaluate. - Aislada: el código no puede acceder a archivos, a la red ni al equipo, solo a lo indicado arriba. Una llamada se detiene si ejecuta más de un millón de instrucciones o dura más de diez segundos, se llama a sí misma con más de 200 niveles de profundidad, o usa demasiada memoria.
- Repetible: un dibujo debe dar el mismo resultado cada vez que se calcula, así que
Math.random()da los mismos números cada vez y no existeDate. - El código que no se puede leer se rechaza al definir la función, indicando el motivo. Lo que falla durante la ejecución se muestra con la línea de la FUNCTION en la que ocurrió.
Véase también: FUNCTION, CALL, Bloques y control de flujo, API de dibujo, Extensiones.