Primitivas de bordado
Una primitiva es la unidad que se borda: cada una produce uno o más
objetos del motor de puntadas, con un hilo y unos parámetros. HoopLang tiene
cinco primitivas: fill (relleno tatami), satin (columna de satín), run
(corrido), triple (corrido triple) y text (texto). Este capítulo
documenta las cuatro primeras; text tiene su propio capítulo,
texto.md. Los valores de los enums (telas, underlays) están en
catalogos.md; los tipos (Length, Shape, Path…) en
tipos.md; las capas, seq e inside en
declaraciones.md y control.md; los códigos
de error en diagnosticos.md.
Sintaxis común#
primitiva := ("fill" | "satin" | "run" | "triple" | "text") HILO "{" propiedades "}"
propiedades := (clave ":" expresión ("," | salto de línea)?)*HILOes el nombre de unthreaddeclarado (o importado, comobrother.red). Un color suelto (fill #000000 { … }) es un error de sintaxis (E000) y un nombre que no es un hilo declarado es E003.- Las propiedades van con nombre, en cualquier orden, separadas por coma o salto de línea.
- Una primitiva sólo puede aparecer dentro de una
layer(directamente o dentro deseq,inside,foroif).
Reglas que comparten todas las primitivas:
| Situación | Diagnóstico |
|---|---|
| Una propiedad repetida | E007 duplicate `clave` |
| Una propiedad que la primitiva no tiene | E007 fill has no `colour` (shape, angle, density, stitch, underlay, pull, knockout) o, si hay un nombre parecido, did you mean `…`? |
| Falta la propiedad obligatoria | E007 fill is missing shape |
| Valor del tipo equivocado | E001 (un entero sin unidad: `width` needs a unit (e.g. 2mm)) |
| Valor fuera de rango | E002 `density` = 0.1 mm: valid range is 0.2 to 1 mm |
Lo cosido se sale del canvas (menos su margin) más de 0.3 mm | E006 fill overflows the canvas by 15.0 mm on the right |
Lo cosido se sale de su inside | W009 |
Los rangos son inclusivos en ambos extremos.
Valores por defecto y tela#
Lo que el archivo no dice lo pone el perfil de la tela del diseño
(fabric: del design, o la del hoop que lo monta, que manda). El perfil
se aplica una sola vez al compilar y nunca pisa lo escrito: si el
archivo dice pull: 0.3mm, se usa 0.3 mm en cualquier tela. Los valores de
las tablas de este capítulo son los de Twill (sarga), la base del motor;
la tabla completa por tela está en catalogos.md.
| Ajuste del perfil | Afecta a |
|---|---|
| compensación de tirón del tatami | fill, texto en relleno |
| compensación de tirón del satín | satin, texto en satín |
| separación de las filas del underlay del tatami | fill |
| umbrales de ancho del underlay automático del satín | satin con underlay: Auto |
| largo máximo de un cruce de satín (se divide si es más largo) | satin, texto en satín |
| escala de densidad del tatami | fill cuando no se escribe density |
| orden de bordado entre objetos | todo el diseño |
fill: relleno tatami#
// file: p_fill.hoop
design "Relleno" { canvas: rect(size: (40mm, 30mm)), fabric: Pique }
thread azul = #1f4e9c "Azul" { brand: "Madeira", code: "1076" }
layer fondo {
fill azul {
shape: rect(at: (5mm, 5mm), size: (30mm, 20mm), radius: 2mm)
angle: 30deg
density: 0.4mm
stitch: 4mm
underlay: Auto
pull: 0.3mm
}
}En el bordado. El tatami cubre un área con filas paralelas de puntadas
de corrido, muy juntas, que van y vuelven de borde a borde. Las
penetraciones de filas vecinas se desfasan (un cuarto de puntada por fila)
para que no formen surcos visibles. Antes de la cobertura, un underlay
(filas abiertas perpendiculares y un corrido por dentro del borde) fija la
tela y levanta el relleno. Es la puntada para áreas grandes: fondos,
letras de más de unos 6 mm de trazo, figuras sólidas. Para bandas angostas
(< 7 mm) se prefiere satin, que brilla más.
Propiedades#
| Propiedad | Tipo | Por defecto (Twill) | Rango válido | Significado |
|---|---|---|---|---|
shape | Shape | — (obligatoria) | área > 0 | Área a rellenar. Una forma de varias piezas da un relleno por pieza. Los huecos (una diferencia a - b) quedan sin coser. |
angle | Angle o auto | auto | cualquiera | Dirección de las filas, desde el eje X. auto (o no escribirlo) elige, por pieza, el ángulo que haría un digitalizador: filas a lo largo de la figura, sin partir el relleno en zonas, lejos de 0°/90° y cerca de 45°. |
density | Length | 0.20 mm × escala de la tela (0.22 mm en Stretch) | 0.2–1.0 mm | Separación entre filas. Menos es más denso. |
stitch | Length | 4 mm | 1.5–7 mm | Largo máximo de puntada dentro de la fila. |
underlay | Underlay | Auto | Auto, Edge, Tatami, DoubleTatami, None | Qué se cose debajo del relleno (ver abajo). Center y Zigzag son del satín: en un relleno son E002. |
pull | Length | 0.2 mm (según tela) | 0–0.6 mm | Compensación de tirón: cuánto se alarga cada fila en ambos extremos, porque el hilo al tensarse encoge el relleno. |
knockout | Bool | true | Recorta lo que tapa de los rellenos de abajo (ver abajo). |
Recorte bajo los rellenos (knockout)#
| Propiedad | Tipo | Por defecto | Qué hace |
|---|---|---|---|
knockout | Bool | true | Con true, lo que este relleno tapa de un relleno anterior (de una capa de abajo o antes en la misma capa) no se cose, salvo un traslape de 0.4 mm. Con false, va encima sin recortar (efecto de capas). |
Reglas:
- Sólo recorta un
fillde 20 mm² o más.satin,run,tripleytextnunca recortan. - Si lo que el relleno tapa de otro es menos de 0.5 mm² (ya recortado a mano, o sólo se rozan), ese otro queda tal cual.
- Los restos del recorte que no se cosen limpio (menos de 1 mm², o más angostos que 0.6 mm) se descartan. Un relleno tapado entero desaparece.
- Vale igual entre diseños colocados con
place: el orden de abajo hacia arriba es el de las capas y losplace.
Underlay del relleno#
El underlay se cose antes de la cobertura y se combina de dos piezas:
- Contorno: un corrido por dentro de cada anillo del borde (exterior y huecos), a 0.5 mm del borde, con puntadas de 2 mm. Fija el borde a la tela para que no se deforme.
- Filas abiertas (tatami): filas separadas según la tela (1.5 mm en
Twill, 1.2 mm enPiqueyStretch, 1.0 mm enFleece), con puntadas de 4 mm, a 0.8 mm hacia adentro del borde. Fijan la tela al estabilizador y levantan la cobertura para que no se hunda.
| Valor | Contorno | Filas abiertas | Cuándo |
|---|---|---|---|
Auto (por defecto) | sí | una pasada, a 90° del relleno | Casi siempre: el estándar. |
Edge | sí | no | Rellenos chicos o angostos, telas firmes y livianas: menos hilo. |
Tatami | no | una pasada, a 90° del relleno | Bordes que van tapados por un satín (el satín ya fija el borde). |
DoubleTatami | sí | dos pasadas cruzadas, a +45° y −45° del relleno | Telas mullidas (polar, toalla, felpa), donde una sola pasada se hunde. |
None | no | no | Rellenos muy chicos o abiertos, o sobre otro bordado. |
Otros valores fijos del motor (no se escriben en el lenguaje): desfase entre filas 0.25 de puntada, ninguna puntada de fila bajo 0.5 mm, tránsitos por el borde con puntadas de 2.5 mm.
Diagnósticos#
| Código | Cuándo |
|---|---|
E004 the shape is empty | La forma tiene área cero. |
W001 shape of 1.00 mm²: under 1.5 mm² does not sew cleanly | La forma mide menos de 1.5 mm². |
| E002 | density, stitch o pull fuera de rango. |
| E001 | angle que no es Angle ni auto; shape que no es una forma cerrada. |
satin: columna de satín#
satin tiene tres formas, según cómo se da la columna. Exactamente una de
rails, border o along es obligatoria (con ninguna:
satin is missing rails or border or along; con dos:
satin: only one of rails, border, along, ambos E007).
design "Columnas" { canvas: rect(size: (70mm, 50mm)) }
thread negro = #1c1616 "Negro"
shape placa = rect(at: (5mm, 20mm), size: (25mm, 25mm), radius: 3mm)
layer columnas {
// Forma con rieles: dos caminos abiertos en el mismo sentido.
satin negro {
rails: [path { from (5mm, 5mm) line (65mm, 5mm) },
path { from (5mm, 9mm) line (65mm, 9mm) }]
density: 0.4mm
underlay: Zigzag
pull: 0.2mm
}
// Forma border: un marco de ancho fijo hacia adentro de la forma.
satin negro { border: placa, width: 3mm }
// Forma along: una línea con ancho, centrada en el camino.
satin negro { along: path { from (40mm, 20mm) line (65mm, 45mm) }, width: 2mm, underlay: None }
}En el bordado. El satín es un zigzag muy cerrado entre dos bordes: cada
puntada cruza la columna entera, así que el hilo queda largo, paralelo y
brillante. Es la puntada de los bordes de insignias, letras y líneas de
0.8 a 7 mm. Bajo 0.8 mm no hay columna (use run o triple); sobre 7 mm
los cruces largos se sueltan y enganchan (use fill o parta la columna).
El motor reparte los cruces a lo largo de ambos rieles, acorta las puntadas
del lado interior de las curvas (para no perforar dos veces el mismo
punto) y divide los cruces más largos que el máximo de la tela (7 mm en
Twill) en tramos con los cortes desplazados entre cruces vecinos.
Las tres formas#
| Forma | Propiedades | Qué cose |
|---|---|---|
| Rieles | rails: (a, b) o rails: [a, b] | La columna entre dos Path abiertos, que deben ir en el mismo sentido. El ancho lo dan los rieles (puede variar). |
| Borde | border: forma, width: w | Un anillo: la forma menos su interior a w del borde. El satín va hacia adentro del contorno: el borde exterior de la columna coincide con el de la forma. Una forma de varias piezas da una columna por pieza. |
| Línea | along: camino, width: w | Una columna de ancho w centrada en el camino (w/2 a cada lado). |
rails se escribe como un par de caminos entre paréntesis,
rails: (path {…}, path {…}), o como lista, rails: [path {…}, path {…}]:
las dos formas valen lo mismo.
Propiedades#
| Propiedad | Tipo | Por defecto (Twill) | Rango válido | Significado |
|---|---|---|---|---|
rails | 2 Path abiertos (par o List) | — | exactamente 2, abiertos | Los dos bordes de la columna. |
border | Shape | — | área > 0 | Forma cuyo contorno se cubre. |
along | Path | — | ≥ 2 puntos | Eje de la columna. |
width | Length | — (obligatoria con border y along) | 0.8–8 mm | Ancho de la columna. Con rails no se usa. |
density | Length o auto | auto | 0.2–0.6 mm | Avance entre cruces consecutivos. auto: según el ancho medio de la columna, 0.23 mm hasta 2 mm de ancho, 0.17 mm desde 3.5 mm, interpolado entre medio (las columnas anchas se cierran porque el hilo largo se aplana y cubre más). |
underlay | Underlay | Auto | None, Center, Edge, Zigzag, Auto | Soporte bajo la cobertura (ver abajo). |
pull | Length | 0.2 mm (según tela) | 0–0.6 mm | Compensación de tirón: cuánto se ensancha cada borde hacia afuera. |
rungs | List de Path | — | caminos | Se acepta y se valida, pero el compilador actual no la usa: no cambia las puntadas, y avisa W010 rungs is not used yet: …. |
Underlay del satín#
| Valor | Qué cose antes de la cobertura | Cuándo |
|---|---|---|
None | Nada. | Columnas muy angostas, o encima de otro relleno. |
Center | Un corrido por el centro de la columna (puntadas de 2 mm). | Columnas angostas. |
Edge | Un corrido por dentro de cada borde, a 0.4 mm (ida por un riel, vuelta por el otro). | Columnas medianas. |
Zigzag | Contorno (Edge) más un zigzag abierto (avance 2 mm). | Columnas anchas: soporte y altura. |
Auto | Según el ancho medio de la columna y los umbrales de la tela. | Por defecto. |
Umbrales de Auto en Twill: menos de 1.0 mm, ninguno; menos de 2.5 mm,
Center; menos de 4.5 mm, Edge; desde 4.5 mm, Zigzag. Cada tela cambia
estos umbrales (catalogos.md). La cobertura
empieza en el riel donde terminó el underlay, para no cruzar la columna en
el tránsito.
Diagnósticos#
| Código | Cuándo |
|---|---|
E007 a satin with border or along needs width | Falta width con border o along. |
E001 rails are two open Paths: (path { from … }, path { from … }), not [Path] | rails no son exactamente dos caminos abiertos (el mensaje dice qué se dio). |
W010 `rungs` is not used yet: the satin follows its rails without them | Se escribió rungs. |
| E002 | width fuera de 0.8–8 mm, density fuera de 0.2–0.6 mm, pull fuera de 0–0.6 mm. |
W003 7.5 mm satin: from 7 mm on, split it or use fill | width mayor que 7 mm. |
E004 the shape is empty | border con área cero. |
| W001 | border de menos de 1.5 mm². |
E004 could not build the satin border (is the shape narrower than the width?) | Al compilar, el anillo no se puede convertir en columna. |
run: corrido#
// file: p_run.hoop
design "Corridos" { canvas: rect(size: (60mm, 40mm)) }
thread negro = #1c1616 "Negro"
shape parche = circle(center: (45mm, 20mm), r: 10mm)
layer lineas {
run negro { path: path { from (5mm, 5mm) line (30mm, 5mm) line (30mm, 30mm) }, stitch: 2mm }
triple negro { path: path { from (5mm, 35mm) line (30mm, 35mm) }, stitch: 2.5mm, passes: 5 }
run negro { path: parche } // una forma de una pieza: recorre su contorno
}En el bordado. Una sola hilera de puntadas que sigue un camino: el
trazo más fino posible (el grosor de un hilo). Sirve para detalles finos,
contornos delicados, la marca de posición de un aplique y los tránsitos. El
motor corta el camino en las esquinas (giros de más de 30°), que siempre
llevan penetración para quedar nítidas, y reparte cada tramo entre esquinas
en puntadas iguales de a lo más stitch, sin importar cuán densamente esté
muestreada la curva. Dos esquinas a menos de 0.3 mm se funden en una.
| Propiedad | Tipo | Por defecto | Rango válido | Significado |
|---|---|---|---|---|
path | Path o Shape | — (obligatoria) | camino ≥ 2 puntos; forma de una pieza | Recorrido. Un camino cerrado (close) vuelve al inicio. Una Shape de una sola pieza se recorre por su contorno exterior, como camino cerrado. |
stitch | Length | 2.5 mm | 1.0–6.0 mm | Largo máximo de puntada. |
La tela no cambia run. Una Shape de varias piezas da E004
run along a shape needs a single piece (this shape has several); un tipo
que no es Path ni Shape, E001.
triple: corrido triple (bean)#
En el bordado. Cada puntada del corrido se cose varias veces (ida, vuelta, ida…), así que la línea queda gruesa y marcada sin llegar a ser una columna: contornos visibles, fijar un aplique, líneas de 1 mm aprox. El número de pasadas es impar para que la aguja termine en el extremo lejano y siga avanzando.
| Propiedad | Tipo | Por defecto | Rango válido | Significado |
|---|---|---|---|---|
path | Path o Shape | — (obligatoria) | como run | Recorrido. |
stitch | Length | 2.5 mm | 1.0–6.0 mm | Largo de cada puntada base. |
passes | Int | 3 | impar, 1–7 | Pasadas por puntada. 3 es lo normal; 5, extra grueso; 1 equivale a un run. |
passes par o fuera de rango da E002
passes = 4: odd, 1 to 7 (so it ends on the far side).
Ejemplo: un aplique#
El orden clásico de un aplique (marcar, fijar, cubrir) se fija con seq
(control.md), para que el compilador no lo reordene:
design "Aplique" { canvas: rect(size: (50mm, 50mm)) }
thread negro = #1c1616 "Negro"
shape pieza = circle(center: (25mm, 25mm), r: 20mm)
layer aplique {
seq {
run negro { path: pieza } // marca dónde va la tela
triple negro { path: pieza.inset(1mm), passes: 3 } // la fija
satin negro { border: pieza, width: 3mm } // la cubre
}
}Cómo la tela ajusta los parámetros#
design "Polar" { canvas: rect(size: (40mm, 40mm)), fabric: Fleece }
thread rojo = #cc3f24 "Rojo"
layer a {
fill rojo { shape: circle(center: (20mm, 20mm), r: 15mm) } // pull 0.4 mm del perfil
satin rojo { border: circle(center: (20mm, 20mm), r: 18mm), width: 2.5mm } // pull 0.35 mm del perfil
}En este diseño, sin escribir nada más:
- el relleno usa compensación 0.4 mm y underlay de filas cada 1.0 mm;
- el satín usa compensación 0.35 mm, umbrales de underlay 0.8 / 1.5 /
3.0 mm (una columna de 2 mm lleva
Edge, mientras que enTwillllevaríaCenter) y cruces de a lo más 6 mm.
Las propiedades escritas en el archivo (pull, density, underlay)
ganan siempre sobre el perfil. run y triple no dependen de la tela.
Relleno curvo#
El motor tiene un relleno curvo entre dos rieles (CurvedFill, filas que
siguen la curva), pero no está expuesto en HoopLang: no hay primitiva ni
propiedad que lo produzca.
Qué produce cada primitiva#
| Primitiva | Objeto del motor |
|---|---|
fill | un Tatami por pieza de la forma |
satin con rails | un Satin |
satin con border | un Satin en anillo por pieza |
satin con along | un Satin a ambos lados del camino |
run | Running |
triple | TripleRun |
text | Text (ver texto.md) |
El orden entre objetos de una misma capa lo elige el compilador (menos cortes y cambios de hilo); ver declaraciones.md y control.md.