1. Hola, bordado
En este capítulo escribes tu primer diseño, lo verificas, lo compilas a un archivo PES y entiendes el sistema de coordenadas que usa todo HoopLang.
El primer archivo#
Crea un archivo llamado hola.hoop con esto:
// hola.hoop: mi primer bordado.
design "Hola" {
canvas: rect(size: (40mm, 40mm))
}
thread azul = #1f3a8a "Azul"
layer fondo {
fill azul { shape: circle(center: (20mm, 20mm), r: 15mm) }
}Son cuatro piezas, y las vas a ver en todos los diseños:
design "Hola" { … }declara el diseño: su nombre y sus propiedades. Hay un solodesignpor archivo.canvas: rect(size: (40mm, 40mm))es el lienzo: el espacio disponible en la prenda. Aquí, un cuadrado de 40 × 40 mm.thread azul = #1f3a8a "Azul"declara un hilo: un nombre para usar en el código (azul), un color (#1f3a8a) y una etiqueta que verá quien borda ("Azul").layer fondo { … }es una capa con un objeto:fill azul { … }, un relleno con el hilo azul cuya forma (shape) es un círculo de radio 15 mm centrado en (20 mm, 20 mm).
Las líneas que empiezan con // son comentarios: el compilador las ignora.
También existen los comentarios de bloque, /* así */.
Verificar#
hoop check hola.hoophola.hoop: ok — 1 threads, 1 layers, 1 objectscheck no escribe nada: revisa tipos, nombres, rangos y que lo cosido quepa
en el lienzo. Acostúmbrate a ejecutarlo cada vez que guardas.
Compilar#
hoop build hola.hoop salida/hola.hoop: 30.2 × 30.2 mm, 1449 stitches, 1 threads, 1 trims, 9 msEn la carpeta salida/ quedan hola.pes, hola.dst, hola.exp, hola.jef,
hola.vp3 y hola.xxx (uno por familia de máquinas), y dos vistas previas:
hola.svg, que muestra el bordado como se verá, y hola.needles.svg, que
muestra dónde entra la aguja. Abre hola.svg en el navegador.
Fíjate en el tamaño: el círculo mide 30 mm, pero el bordado mide 30.2 mm. No es un error: el compilador alarga cada fila del relleno unas décimas en los extremos (la compensación de tirón), porque el hilo, al tensarse, encoge la forma hacia adentro. En el capítulo 3 verás por qué.
¿Tienes una máquina Brother? Copia hola.pes a un pendrive y bórdalo. Antes,
lee la lista de prueba del capítulo 10:
tela firme, estabilizador, y nada de prendas caras la primera vez.
Las unidades son tipos#
En HoopLang todo se escribe en milímetros reales: lo que dice el archivo es lo que mide el bordado. Las medidas llevan siempre su unidad:
| Escribes | Es un | Ejemplo de uso |
|---|---|---|
2.5mm, 1cm | Length (longitud) | tamaños, posiciones, anchos |
45deg | Angle (ángulo) | dirección de las puntadas, giros |
30% | Ratio (proporción) | escalar |
3 | Int (entero) | repeticiones, pasadas |
1cm es exactamente 10mm. Un número sin unidad no es una longitud. Si
escribes density: 0.4 en vez de density: 0.4mm:
hola-densidad.hoop:8:70: error E001: 0.4 has no unit: add mm, cm, deg or %El mensaje dice el archivo, la línea (8) y la columna (70), el código del
error (E001, tipo incorrecto) y qué hacer. Un entero sin unidad sí es un
valor válido (un Int), así que r: 15 no se queja de la unidad sino del
tipo del argumento:
hola-sin-unidad.hoop:8:22: error E001: circle(center: Point, r: Length)Lee ese mensaje como la "firma" de la función: circle espera un center
que es un punto y un r que es una longitud.
Coordenadas: el origen arriba a la izquierda, y hacia abajo#
Un punto se escribe (x, y), con dos longitudes: (20mm, 20mm).
xcrece hacia la derecha.ycrece hacia abajo, como en la pantalla y en la máquina.rect(size: (40mm, 40mm))sin más pone su esquina superior izquierda en(0mm, 0mm).
(0,0) ──────────► x
│ ┌──────────┐
│ │ ● │ ● = (20mm, 20mm), el centro del lienzo
│ │ │
▼ └──────────┘ (40mm, 40mm)
yAsí, (5mm, 38mm) está cerca del borde inferior del lienzo, no del
superior. Agrega una segunda capa con una línea de corrido bajo el círculo:
// hola.hoop: mi primer bordado.
design "Hola" {
canvas: rect(size: (40mm, 40mm)) // 40 × 40 mm, esquina en (0, 0)
}
thread azul = #1f3a8a "Azul"
thread rojo = #cc3f24 "Rojo"
layer fondo {
fill azul { shape: circle(center: (20mm, 20mm), r: 15mm) }
}
layer firma {
// Una línea de lado a lado, bajo el círculo.
run rojo { path: path { from (5mm, 38mm) line (35mm, 38mm) } }
}hola.hoop: 30.2 × 33.1 mm, 1470 stitches, 2 threads, 2 trims, 7 msDos hilos, dos capas: la máquina borda primero el círculo azul, se detiene para que cambies al hilo rojo y borda la línea. Las capas dicen qué va encima de qué, en el orden en que las escribes (capítulo 6).
El lienzo te cuida#
El lienzo no es decorativo: el compilador revisa que lo cosido (el
relleno, la columna de satín, las letras) quede dentro, con una tolerancia de
0.3 mm. Mueve el círculo a center: (30mm, 20mm):
hola-fuera.hoop:8:3: error E006: fill overflows the canvas by 5.0 mm on the rightE006 dice cuánto se sale y por qué lado. El lienzo es "el pecho de la
polera" o "el parche": si algo se sale, en la prenda se sale de verdad.
Si omites canvas, el diseño compila igual, pero con una advertencia que te
dice cuánto mide y cómo declararlo:
hola-sin-canvas.hoop:1:1: warning W008: no canvas: bounds are not checked; the design measures 30.0 × 30.0 mm (declare `canvas: rect(size: (30mm, 30mm))`)
hola-sin-canvas.hoop: ok — 1 threads, 1 layers, 1 objectsLas advertencias (warning, códigos W…) no impiden compilar; los
errores (error, códigos E…) sí.
Los nombres se revisan#
Escribe mal el hilo, fill azull { … }:
hola-typo.hoop:8:3: error E003: undeclared thread `azull`; did you mean `azul`?Un color no es un hilo: fill #1f3a8a { … } tampoco compila. En la máquina
cada color es un carrete con nombre, y el lenguaje te obliga a declararlo
(capítulo 5).
Otras propiedades del diseño#
El bloque design acepta, además de canvas:
design "Hola" {
canvas: rect(size: (40mm, 40mm))
margin: 1mm // distancia mínima de lo cosido al borde del lienzo (0 a 20 mm; 0 por defecto)
fabric: Pique // la tela: Twill (por defecto), Pique, Fleece, Cap o Stretch
}fabric cambia los valores por defecto de las puntadas (capítulo 3).
Existen también origin, fit y frame, que verás en los capítulos 7 y 9.
Una pista de orden: el compilador lee el archivo de arriba abajo, y un nombre
existe desde la línea en que se declara. canvas existe a partir del
design; por eso el design suele ir primero.
Resumen#
- Un diseño es
design+thread+layer, y cada capa tiene objetos comofill hilo { shape: … }. - Todo va en milímetros reales; las unidades (
mm,cm,deg,%) son obligatorias. - El origen está arriba a la izquierda:
xa la derecha,yhacia abajo. canvases el espacio de la prenda: lo cosido que se salga esE006.hoop checkverifica;hoop buildescribe los archivos de máquina y las vistas previas.
Referencia: léxico · tipos · declaraciones · diagnósticos · herramientas