6. Capas y orden
Un bordado se construye de abajo hacia arriba, como una pintura al óleo: el fondo primero, los detalles encima, el contorno al final. Coserlo en otro orden se nota: un borde de satín bordado antes que el relleno queda tapado por él; un fondo bordado al final aplasta todo lo de abajo. En HoopLang el orden se escribe con capas, y dentro de cada capa el compilador busca el recorrido más eficiente.
Capas: de abajo hacia arriba#
design "Capas" { canvas: rect(size: (60mm, 60mm)) }
thread blanco = #f0f0f0 "Blanco"
thread rojo = #cc3f24 "Rojo"
thread negro = #1c1616 "Negro"
shape escudo = circle(center: (30mm, 30mm), r: 26mm)
layer fondo {
fill blanco { shape: escudo.inset(2mm) }
}
layer puntos {
inside escudo.inset(2mm) {
fill rojo { shape: circle(center: (18mm, 30mm), r: 5mm) }
fill negro { shape: circle(center: (30mm, 30mm), r: 5mm) }
fill rojo { shape: circle(center: (42mm, 30mm), r: 5mm) }
}
}
layer borde {
satin negro { border: escudo, width: 3mm }
}capas.hoop: 52.4 × 52.4 mm, 5567 stitches, 3 threads, 5 trims, 42 msLas reglas son pocas:
- Las capas dicen qué va encima de qué, en el orden en que las escribes:
fondoabajo, luegopuntos, luegoborde. Si dos objetos de capas distintas se tocan, el de la capa de abajo se borda primero. Siempre. - Dentro de una capa, el orden lo elige el compilador: agrupa por hilo (menos cambios de color), elige por dónde entrar y salir de cada objeto (tránsitos más cortos, escondidos bajo lo que se bordará encima) y corta el hilo sólo cuando hace falta.
- Lo que no se toca puede adelantarse a una capa anterior, si así se
ahorra un cambio de hilo. Es seguro: si dos objetos no se tocan, ninguno
tapa al otro y el orden no se ve en la tela. En
galeria/prueba-brother.hoop, el borde dorado (última capa) se borda junto con la estrella dorada, antes que las letras blancas, porque no las toca. - Cada capa tiene un nombre único (
layer xdos veces esE007). Los nombres de capa no chocan con los de formas o hilos:layer nombreyparam nombrepueden convivir, como engaleria/parche.hoop.
En el ejemplo, la capa puntos tiene dos círculos rojos y uno negro. El
compilador borda primero los dos rojos (un solo cambio de hilo) y luego el
negro; y como el borde de la capa siguiente también es negro, el círculo negro
y el satín van seguidos. Orden de colores resultante: blanco, rojo, negro.
Tres colores, dos cambios de hilo.
El solape: que no asome la tela#
Cuando un objeto de una capa de abajo toca uno de arriba, el compilador lo extiende un poco (0.4 mm) por debajo del de arriba. Sin ese solape, el hilo tira de la tela, las formas se encogen y entre dos colores vecinos aparece una rendija de tela. No tienes que hacer nada: dibuja las formas con sus bordes reales y el compilador agrega el solape.
Relleno sobre relleno: el recorte#
Cuando un relleno cae sobre otro relleno de una capa anterior, el de abajo no se cose bajo el de arriba: el compilador lo recorta solo, dejando el mismo traslape de 0.4 mm. Dos capas de relleno juntas dejan la pieza gruesa y tiesa, y la de arriba se hunde en la de abajo. En el ejemplo, el fondo blanco queda con tres huecos donde van los puntos.
- Sólo recortan los rellenos (
fill) de 20 mm² o más; un detalle más chico va encima. El satín, los corridos y el texto nunca recortan: van encima del relleno, que les sirve de base firme. - Si ya recortaste a mano (
canvas - estrella), el compilador lo nota y no vuelve a recortar: lo que escribiste queda tal cual. Con o sin recorte a mano, el resultado es un relleno bien recortado. - Si quieres el efecto de capas a propósito (un relleno en relieve sobre
otro), escribe
knockout: falseen el relleno de arriba:
fill rojo { shape: circle(center: (18mm, 30mm), r: 5mm), knockout: false }Qué va en qué capa#
Una receta que funciona casi siempre:
- Fondos: los rellenos grandes. Fijan la tela antes que nada.
- Detalles: rellenos chicos, letras, figuras sobre el fondo.
- Contornos: los satines de borde y los corridos que delinean. Tapan los cantos irregulares de los rellenos.
Es lo que hacen galeria/insignia.hoop (fondo, detalle, borde) y
galeria/prueba-brother.hoop.
Cortes y cambios de hilo#
Hay dos cosas que cuestan tiempo en la máquina:
- Un cambio de hilo (color change): la máquina se detiene y alguien (o el cabezal, en una multiaguja) cambia el carrete. En una máquina casera de una aguja es una pausa en que tú cambias el hilo a mano.
- Un corte (trim): entre dos objetos separados, la máquina corta el hilo para no dejar una hebra cruzando. Las máquinas sin cortahilos se detienen y tú cortas con tijera.
hoop build te dice cuántos cortes tiene el diseño (5 trims) y cuántos
hilos usa (3 threads). Por eso dejar que el compilador ordene dentro de las
capas vale la pena: menos cortes y menos cambios de hilo son menos tiempo y un
revés más limpio.
seq: cuando el orden importa#
A veces el orden no es negociable y el compilador no puede saberlo. Para eso
está seq: sus objetos se bordan seguidos y en el orden escrito, sin nada
en medio, aunque cueste un cambio de hilo.
Si en el ejemplo anterior escribes la capa de puntos así:
layer puntos {
seq {
fill rojo { shape: circle(center: (18mm, 30mm), r: 5mm) }
fill negro { shape: circle(center: (30mm, 30mm), r: 5mm) }
fill rojo { shape: circle(center: (42mm, 30mm), r: 5mm) }
}
}los colores quedan blanco, rojo, negro, rojo, negro: rojo y negro alternan
tal como los escribiste. Un seq así casi nunca es buena idea; sirve para lo
que la máquina no sabe.
El caso clásico: un aplique#
Un aplique es un trozo de tela cosido sobre la prenda. Se borda en un orden fijo:
- Marcar: un corrido dibuja en la prenda dónde va la tela.
- Se pone el trozo de tela encima.
- Fijar: un corrido (aquí triple) cose la tela sobre la marca. Se recorta la tela que sobra, al ras.
- Cubrir: un satín tapa el borde cortado.
// aplique.hoop: un aplique de tela, en el orden que exige la máquina.
// `seq` fija el orden: marcar dónde va la tela, fijarla y cubrir el borde.
import { c002 as negro, c204 as amarillo } from "../bibliotecas/janome.hoop"
design "Aplique corazón" {
canvas: rect(size: (50mm, 45mm))
fabric: Twill
}
shape corazon = path {
from (25mm, 44mm)
curve (8mm, 32mm) (0mm, 20mm) (0mm, 12mm)
curve (0mm, 4mm) (6mm, 0mm) (13mm, 0mm)
curve (19mm, 0mm) (23mm, 4mm) (25mm, 8mm)
curve (27mm, 4mm) (31mm, 0mm) (37mm, 0mm)
curve (44mm, 0mm) (50mm, 4mm) (50mm, 12mm)
curve (50mm, 20mm) (42mm, 32mm) (25mm, 44mm)
close
}
const contorno = corazon
layer aplique {
seq {
run negro { path: contorno, stitch: 2.5mm } // 1. marca: aquí va la tela
triple negro { path: contorno, passes: 3, stitch: 2mm } // 2. fija la tela (se recorta)
satin amarillo { border: corazon, width: 3.5mm } // 3. cubre el borde cortado
}
}galeria/aplique.hoop: 50.4 × 44.3 mm, 1428 stitches, 2 threads, 2 trims, 32 msSin seq, el compilador podría coser el triple antes que la marca (es el
mismo hilo, y le da igual), y no habría dónde poner la tela.
Un detalle práctico: la máquina se detiene en cada cambio de hilo, no
entre dos objetos del mismo hilo. En este ejemplo la marca y la fijación usan
el mismo negro, así que la máquina no para entre ellas para que pongas la
tela: tienes que detenerla tú. Si quieres que pare sola, usa para la marca un
hilo de otro color (por ejemplo, thread marca = #ff00ff "Marca aplique"): la
máquina se detendrá a "cambiar el hilo", y ése es tu momento de poner la tela.
Más reglas de seq:
- Va dentro de una capa, y contiene primitivas (
fill,satin,run,triple,text), y tambiénfor,ifeinside, que se expanden en orden: todo lo que producen va en el mismo bloque. Otroseqo unplacedentro de unseqes un error de sintaxis. - Fuera del
seqel compilador sigue optimizando, y el bloque entero puede ir antes o después de los demás objetos de la capa. - Dentro del
seqel orden escrito manda, incluso sobre el de las capas. Un texto dentro de unseqse borda letra por letra, en orden de lectura.
inside: lo que debe quedar dentro#
inside forma { … } dice que lo de adentro debe quedar dentro de esa forma.
No cambia las puntadas: es una promesa que el compilador verifica. En el
ejemplo de las capas, los tres puntos deben quedar dentro del escudo. Si
corres uno 10 mm a la derecha:
capas-fuera.hoop:17:5: warning W009: fill overflows the `inside` shape at 14:3 by 3.0 mm on the rightEs una advertencia, no un error: a veces un detalle sale del escudo a
propósito. La diferencia con canvas es de propósito: canvas es el espacio
de la prenda (salirse es un error, E006); inside es una forma del
diseño (salirse puede ser intencional). El texto en arco sobre un escudo va
fuera del escudo, pero dentro del lienzo.
Los inside se pueden anidar (manda el más cercano) y pueden contener seq,
for e if.
Resumen#
- Las capas dicen qué va encima, en el orden escrito: fondos, detalles, contornos.
- Dentro de una capa el compilador ordena: menos cambios de hilo, menos cortes, tránsitos escondidos.
- Lo que se toca respeta el orden de capas, con 0.4 mm de solape; lo que no se toca puede adelantarse para ahorrar cambios de hilo.
seq { … }fija un orden estricto (apliques, lo que sostiene la tela).inside forma { … }verifica que lo de adentro quede dentro (W009).- La máquina sólo se detiene en los cambios de hilo.
Referencia: control · declaraciones · diagnósticos