Bloques y control de flujo
Bucles (FOR, FOREACH, WHILE), decisiones (IF) y funciones propias, para crear geometría que un solo comando no puede: una fila de tantos agujeros como quepan, un patrón alrededor de un círculo, una pieza hecha de elementos repetidos.
Forman parte del dibujo como cualquier otro comando: se guardan en el archivo del dibujo tal como se escriben y
siguen siendo paramétricos. Un bloque se vuelve a ejecutar, desde el principio, cada vez que cambia el dibujo: si
cambia L, mueve un punto o cambia una variable que el bloque utiliza, lo que creó se vuelve a crear para ajustarse.
BEGIN … END
Las instrucciones que repite un bucle, o que elige una decisión, van entre BEGIN y END:
FOR I = 1 TO 5 BEGIN
P10 = [I * 50, 100]
P11 = P10 + [0, 40]
LINE P10, P11
END
- Una instrucción por línea, como en todas partes; o varias en una línea, separadas por
;:FOR I = 1 TO 5 BEGIN P10 = [I * 50, 100] ; P11 = P10 + [0, 40] ; LINE P10, P11 END. Es una forma rápida de escribir un bloque en la ventana Interactiva (o pulse Shift+Enter en ella para empezar una línea nueva). - Una instrucción puede continuar más allá del final de una línea dentro de paréntesis, corchetes o llaves:
( ),[ ],{ }. //inicia un comentario hasta el final de la línea: en una línea propia o después de una instrucción.- Los bloques pueden anidarse dentro de otros bloques a cualquier profundidad.
Cómo se ejecuta un bloque
Dentro de un bloque, las instrucciones se ejecutan una tras otra, como en un programa:
- Una asignación da a la variable o al punto su valor en ese momento:
N = N + 1suma uno a N, yP10 = [I * 50, 100]coloca P10 donde corresponde en esta vuelta del bucle. - Un elemento (LINE, ARC, CIRCLE, TEXT, FILL …) se crea en ese mismo momento, a partir de los puntos tal como están: la siguiente vuelta del bucle puede mover P10 sin mover la línea ya creada.
- Un nombre con una posición puede usarse donde un elemento espera un punto:
LINE Q, Rdibuja desde la posición Q hasta la posición R.
Un bloque ve las variables y los puntos del dibujo, pero lo que asigna es suyo: P10 asignado en un bloque no es el
P10 del dibujo, y L = 100 dentro de un bloque cambia L solo para el resto del bloque. Asignar #CL (la capa
actual) elige la capa de los elementos que el bloque crea a partir de ese momento.
También ve los elementos del dibujo, así que puede trabajar a lo largo de ellos: ONELEMENT(@12,I/N), LENGTHOF(@12) y las
demás funciones de elementos dentro de un bloque siguen al elemento cuando cambia (la
herramienta Línea de costura coloca así sus agujeros a lo largo de una línea).
Lo que crea un bloque
Lo que crea un bloque se dibuja, se exporta y se imprime con el dibujo, cada curva en su propia capa, igual que lo de una pieza, con el grosor de línea de su elemento y su configuración BRIDGES, TOOL y RULE (consulte Configuración de elementos). Pero pertenece al bloque: sus curvas no son elementos del dibujo, así que no se pueden seleccionar, usar para el forzado de cursor ni acotar una a una. Al seleccionar el bloque se selecciona entero. Su texto se dibuja como contornos.
Las instrucciones
| Instrucción | Qué hace |
|---|---|
| FOR | Un bloque para cada número de una serie. |
| FOREACH | Un bloque para cada uno de varios puntos o valores. |
| WHILE | Un bloque una y otra vez, mientras algo sea verdadero. |
| IF | Un bloque, u otro, u otro: el primero cuya condición sea verdadera. |
| FUNCTION | Una función propia: un valor calculado, geometría creada, o ambas cosas. |
| FUNCTION … JAVASCRIPT | Una función propia escrita en JavaScript. |
| CALL | Dibuja la geometría de una función. |
BREAK |
Sale del bucle en el que está. |
CONTINUE |
Pasa a la siguiente vuelta del bucle en el que está. |
RETURN |
Sale de una función (con su valor: RETURN expression) o de un bloque. |
Cuando algo falla
Un bloque escrito en la ventana Interactiva se ejecuta de inmediato y, si algo falla (un nombre que no conoce, un punto que no es una posición), se muestra el motivo junto con la línea en la que falló, y el bloque no se añade.
Un bucle que no termina nunca se detiene tras un millón de instrucciones; una función que se llama a sí misma sin fin se detiene a 100 llamadas de profundidad. Un bloque que falla más tarde (cuando el dibujo ha cambiado) dibuja lo que había creado antes de fallar.