HoopLang Docs
/
Playground
Referencia del lenguaje

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#

Salida del compilador
primitiva := ("fill" | "satin" | "run" | "triple" | "text") HILO "{" propiedades "}"
propiedades := (clave ":" expresión ("," | salto de línea)?)*
  • HILO es el nombre de un thread declarado (o importado, como brother.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 de seq, inside, for o if).

Reglas que comparten todas las primitivas:

SituaciónDiagnóstico
Una propiedad repetidaE007 duplicate `clave`
Una propiedad que la primitiva no tieneE007 fill has no `colour` (shape, angle, density, stitch, underlay, pull, knockout) o, si hay un nombre parecido, did you mean `…`?
Falta la propiedad obligatoriaE007 fill is missing shape
Valor del tipo equivocadoE001 (un entero sin unidad: `width` needs a unit (e.g. 2mm))
Valor fuera de rangoE002 `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 mmE006 fill overflows the canvas by 15.0 mm on the right
Lo cosido se sale de su insideW009

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 perfilAfecta a
compensación de tirón del tatamifill, texto en relleno
compensación de tirón del satínsatin, texto en satín
separación de las filas del underlay del tatamifill
umbrales de ancho del underlay automático del satínsatin 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 tatamifill cuando no se escribe density
orden de bordado entre objetostodo el diseño

fill: relleno tatami#

HoopLang
// 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#

PropiedadTipoPor defecto (Twill)Rango válidoSignificado
shapeShape— (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.
angleAngle o autoautocualquieraDirecció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°.
densityLength0.20 mm × escala de la tela (0.22 mm en Stretch)0.2–1.0 mmSeparación entre filas. Menos es más denso.
stitchLength4 mm1.5–7 mmLargo máximo de puntada dentro de la fila.
underlayUnderlayAutoAuto, Edge, Tatami, DoubleTatami, NoneQué se cose debajo del relleno (ver abajo). Center y Zigzag son del satín: en un relleno son E002.
pullLength0.2 mm (según tela)0–0.6 mmCompensación de tirón: cuánto se alarga cada fila en ambos extremos, porque el hilo al tensarse encoge el relleno.
knockoutBooltrueRecorta lo que tapa de los rellenos de abajo (ver abajo).

Recorte bajo los rellenos (knockout)#

PropiedadTipoPor defectoQué hace
knockoutBooltrueCon 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 fill de 20 mm² o más. satin, run, triple y text nunca 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 los place.

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 en Pique y Stretch, 1.0 mm en Fleece), 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.
ValorContornoFilas abiertasCuándo
Auto (por defecto)síuna pasada, a 90° del rellenoCasi siempre: el estándar.
EdgesínoRellenos chicos o angostos, telas firmes y livianas: menos hilo.
Tataminouna pasada, a 90° del rellenoBordes que van tapados por un satín (el satín ya fija el borde).
DoubleTatamisídos pasadas cruzadas, a +45° y −45° del rellenoTelas mullidas (polar, toalla, felpa), donde una sola pasada se hunde.
NonenonoRellenos 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ódigoCuándo
E004 the shape is emptyLa forma tiene área cero.
W001 shape of 1.00 mm²: under 1.5 mm² does not sew cleanlyLa forma mide menos de 1.5 mm².
E002density, stitch o pull fuera de rango.
E001angle 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).

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

FormaPropiedadesQué cose
Rielesrails: (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).
Bordeborder: forma, width: wUn 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íneaalong: camino, width: wUna 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#

PropiedadTipoPor defecto (Twill)Rango válidoSignificado
rails2 Path abiertos (par o List)—exactamente 2, abiertosLos dos bordes de la columna.
borderShape—área > 0Forma cuyo contorno se cubre.
alongPath—≥ 2 puntosEje de la columna.
widthLength— (obligatoria con border y along)0.8–8 mmAncho de la columna. Con rails no se usa.
densityLength o autoauto0.2–0.6 mmAvance 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).
underlayUnderlayAutoNone, Center, Edge, Zigzag, AutoSoporte bajo la cobertura (ver abajo).
pullLength0.2 mm (según tela)0–0.6 mmCompensación de tirón: cuánto se ensancha cada borde hacia afuera.
rungsList de Path—caminosSe 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#

ValorQué cose antes de la coberturaCuándo
NoneNada.Columnas muy angostas, o encima de otro relleno.
CenterUn corrido por el centro de la columna (puntadas de 2 mm).Columnas angostas.
EdgeUn corrido por dentro de cada borde, a 0.4 mm (ida por un riel, vuelta por el otro).Columnas medianas.
ZigzagContorno (Edge) más un zigzag abierto (avance 2 mm).Columnas anchas: soporte y altura.
AutoSegú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ódigoCuándo
E007 a satin with border or along needs widthFalta 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 themSe escribió rungs.
E002width 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 fillwidth mayor que 7 mm.
E004 the shape is emptyborder con área cero.
W001border 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#

HoopLang
// 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.

PropiedadTipoPor defectoRango válidoSignificado
pathPath o Shape— (obligatoria)camino ≥ 2 puntos; forma de una piezaRecorrido. Un camino cerrado (close) vuelve al inicio. Una Shape de una sola pieza se recorre por su contorno exterior, como camino cerrado.
stitchLength2.5 mm1.0–6.0 mmLargo 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.

PropiedadTipoPor defectoRango válidoSignificado
pathPath o Shape— (obligatoria)como runRecorrido.
stitchLength2.5 mm1.0–6.0 mmLargo de cada puntada base.
passesInt3impar, 1–7Pasadas 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:

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

HoopLang
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 en Twill llevaría Center) 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#

PrimitivaObjeto del motor
fillun Tatami por pieza de la forma
satin con railsun Satin
satin con borderun Satin en anillo por pieza
satin con alongun Satin a ambos lados del camino
runRunning
tripleTripleRun
textText (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.