HoopLang Docs
/
Playground
El libro · Capítulo 06

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#

HoopLang
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 }
}
Salida del compilador
capas.hoop: 52.4 × 52.4 mm, 5567 stitches, 3 threads, 5 trims, 42 ms

Las reglas son pocas:

  1. Las capas dicen qué va encima de qué, en el orden en que las escribes: fondo abajo, luego puntos, luego borde. Si dos objetos de capas distintas se tocan, el de la capa de abajo se borda primero. Siempre.
  2. 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.
  3. 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.
  4. Cada capa tiene un nombre único (layer x dos veces es E007). Los nombres de capa no chocan con los de formas o hilos: layer nombre y param nombre pueden convivir, como en galeria/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: false en el relleno de arriba:
HoopLang
fill rojo { shape: circle(center: (18mm, 30mm), r: 5mm), knockout: false }

Qué va en qué capa#

Una receta que funciona casi siempre:

  1. Fondos: los rellenos grandes. Fijan la tela antes que nada.
  2. Detalles: rellenos chicos, letras, figuras sobre el fondo.
  3. 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í:

HoopLang
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:

  1. Marcar: un corrido dibuja en la prenda dónde va la tela.
  2. Se pone el trozo de tela encima.
  3. Fijar: un corrido (aquí triple) cose la tela sobre la marca. Se recorta la tela que sobra, al ras.
  4. Cubrir: un satín tapa el borde cortado.
HoopLang
// 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
  }
}
Salida del compilador
galeria/aplique.hoop: 50.4 × 44.3 mm, 1428 stitches, 2 threads, 2 trims, 32 ms

Sin 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én for, if e inside, que se expanden en orden: todo lo que producen va en el mismo bloque. Otro seq o un place dentro de un seq es un error de sintaxis.
  • Fuera del seq el compilador sigue optimizando, y el bloque entero puede ir antes o después de los demás objetos de la capa.
  • Dentro del seq el orden escrito manda, incluso sobre el de las capas. Un texto dentro de un seq se 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:

Salida del compilador
capas-fuera.hoop:17:5: warning W009: fill overflows the `inside` shape at 14:3 by 3.0 mm on the right

Es 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