You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Herramienta web para convertir curvas (.svg) en trayectorias oscilantes (.gcode) para el modelado por deposición líquida. Diseñada para quienes trabajan con extrusoras de arcilla y máquinas CNC.
3
+
Herramienta web para convertir curvas `.svg` en trayectorias oscilantes `.gcode` para modelado por deposición líquida. Está pensada para extrusoras de arcilla y máquinas CNC donde importa sostener flujo, continuidad de capa y control geométrico.
4
4
5
-
---
5
+
BarroCode toma un dibujo vectorial como línea central, lo muestrea sobre su longitud de arco y desplaza cada punto con una figura local de Lissajous. El resultado es una trayectoria imprimible por capas, con unión suave entre alturas, Z-hop sobre cruces, viajes concéntricos y exportación directa a G-code.
6
6
7
-
## Pendientes
8
-
```
9
-
Slider de coordenadas para ubicar un eje z en el espacio de trabajo para que funcione como centro, y que dentro de los paramametros del keyframe pueda escalar esa curva en particular, como para hacer gradaciones de escala, en relación a las trayectorias. Este slider es vertical, en el mismo estilo que todo lo demás, se ubica en una columna de ancho 1/5 del tercio de panel inferior. Se posiciona a en el centro, entre la visualización de lissajous y el visualizador del gcode.
10
-
11
-
Make a zhop-like movement a bit before, during, and after the line intersects itself or another line at each layer height, so as not to interrupt the flow of clay when printing.
12
-
13
-
In the trayectory vis, make the line stroke subtly adjust according to the zoom level on the panel. Also, make their color a bit more saturated and a bit lighter. It looks too dull currently.
14
-
15
-
(v2) Que un plano normal a cada vector de la dirección actual en la trayectori sea el lugar donde se evalua y desplaza el punto cada lissajous, para generar una trayectoria helicoidal y no plana entre capas; así se suaviza el transito entre capas.
16
-
17
-
COlores: keyframes individually colored according to ther location along the trayectory, reflecting the visualization marker color at that point.
18
-
19
-
eje n y eje t tienen dos colores en los acentos, pero esos no tienen relación con la visualización de lissajou, deberías estilizar los paneles de ejes igual que el de acoplamiento de fase. También, en esa letra negra que se usa para todos los valores numéricos; bajarle un poco lo oscuro; si ahora está en un value 10, dame un value 9.
20
-
21
-
Make "Drop svg box" smaller. Logo 50% biggger
22
-
```
23
-
24
-
## Inicio rápido
7
+
## Inicio Rápido
25
8
26
9
```bash
27
10
npm install
28
11
npm run dev
29
12
```
30
13
31
-
Abre la URL que aparece en la terminal (normalmente `http://localhost:5173`).
14
+
Abre la URL que aparece en la terminal, normalmente `http://localhost:5173`.
32
15
33
-
### Build de producción
16
+
Para generar una versión estática:
34
17
35
18
```bash
36
19
npm run build
37
20
```
38
21
39
-
Genera la versión web estática en `dist/`. Esa carpeta puede servirse desde cualquier servidor estático o publicarse en GitHub Pages (ver `.github/workflows/deploy.yml`).
40
-
41
-
---
42
-
43
-
## Cómo funciona
44
-
45
-
El trayecto de impresión es la **suma de dos movimientos independientes**:
46
-
47
-
```
48
-
punto_final(s) = línea_central(s) ← trayecto global del SVG
El build queda en `dist/` y puede servirse desde cualquier servidor estático o publicarse en GitHub Pages.
23
+
24
+
## Qué Genera
25
+
26
+
-**Entrada:** un SVG con `<path>`, `<polyline>`, `<polygon>`, `<line>`, `<circle>`, `<ellipse>` o `<rect>`.
27
+
-**Proceso:** muestreo por longitud de arco, marco local tangente/normal, onda de Lissajous, apilado por capas y optimización de viajes.
28
+
-**Salida:** G-code absoluto en milímetros, con opción de extrusión `E`.
29
+
-**Uso previsto:** impresión continua de arcilla, sin retracción, con trayectorias orgánicas controladas desde una curva central.
30
+
31
+
```mermaid
32
+
flowchart LR
33
+
A["SVG importado"] --> B["Muestreo de trayectos"]
34
+
B --> C["Marco local T/N"]
35
+
C --> D["Onda de Lissajous"]
36
+
D --> E["Capas con Z"]
37
+
E --> F["Previsualización"]
38
+
E --> G["G-code"]
39
+
H["Parámetros y keyframes"] --> D
40
+
H --> E
51
41
```
52
42
53
-
-`s` = longitud de arco acumulada a lo largo del camino SVG (en mm)
54
-
-`N(s)` = vector normal unitario en `s` (perpendicular al trayecto, apunta a la izquierda del sentido de avance)
55
-
-`T(s)` = vector tangente unitario en `s` (sentido de avance)
56
-
- Las longitudes de onda (`λN`, `λT`) se miden **sobre el arco**, no sobre un eje recto, por lo que el patrón es consistente sin importar la curvatura del camino
57
-
-`δ` (delta) es la diferencia de fase entre N y T — controla la **forma de Lissajous** (0° = línea, 90° = elipse cuando λN = λT, etc.)
58
-
59
-
La previsualización **Marco del extrusor** en el panel inferior izquierdo muestra únicamente la figura de Lissajous en coordenadas locales (T, N), desacoplada completamente de la forma del trayecto global. Úsala para afinar la figura antes de preocuparte por el camino.
60
-
61
-
---
62
-
63
-
## Flujo de uso
64
-
65
-
### 1. Cargar un SVG
66
-
67
-
Arrastra un archivo SVG al área de carga o haz clic en ella.
68
-
69
-
El sistema lee elementos `<path>`, `<polyline>`, `<polygon>`, `<line>`, `<circle>`, `<ellipse>` y `<rect>`.
70
-
71
-
Si no tienes un archivo a mano, haz clic en **"Cargar SVG de ejemplo"** — incluye una curva en S, una elipse y una línea diagonal.
72
-
73
-
### 2. Revisar la lista de trayectos
74
-
75
-
Cada elemento geométrico detectado aparece en la lista **Trayectos SVG**:
76
-
77
-
- Activa o desactiva trayectos individualmente.
78
-
- Sobreescribe la **amplitud** o la **longitud de onda** por trayecto (si lo dejas en blanco, se usa el valor global).
43
+
## Cómo Funciona
79
44
80
-
### 3. Ajustar parámetros
45
+
El trayecto de impresión es la suma de una línea central y dos oscilaciones locales:
81
46
82
-
#### Panel izquierdo — parámetros de impresión
83
-
84
-
| Parámetro | Efecto |
85
-
|---|---|
86
-
|**Espaciado de muestras**| Densidad de muestreo del camino (unidades SVG). Menor valor = onda más suave, más puntos. |
87
-
|**Altura de capa**| Incremento Z entre capas apiladas (mm). |
88
-
|**Número de capas / Altura total**| Controla cuántas capas se generan. Puedes definirlo por cantidad de capas o por altura total. |
89
-
|**Offset Z de boquilla**| Se suma al Z de cada capa (calibración de primera capa). |
90
-
|**Z seguro**| Altura a la que se mueve la boquilla durante los desplazamientos entre trayectos. |
91
-
|**Factor de escala**| Convierte unidades SVG a mm. Usá `1` si tu SVG está dibujado en mm; `0.2645` para píxeles a 96 dpi. |
92
-
|**Origen X / Y**| Desplaza toda la impresión sobre la cama (mm). |
93
-
|**Invertir Y**| Espeja el eje Y (el eje Y de SVG crece hacia abajo; la mayoría de las impresoras lo quieren hacia arriba). |
94
-
|**Velocidad de impresión / desplazamiento**| mm/min para movimientos de extrusión y de viaje. |
95
-
|**Generar valores E**| Incluye la columna E en el G-code. Desactivalo para una salida de solo movimiento. |
96
-
|**Multiplicador de extrusión**| Unidades E por mm de desplazamiento. Ajustalo a tu sistema de bomba o tornillo sin fin (típico: 0.02–0.1). |
97
-
|**Transición suave entre capas**| Conecta el final de la capa N con el inicio de la capa N+1 con un movimiento continuo (interpola XY con smoothstep y Z linealmente). Sin retracción ni levantamiento — ideal para arcilla. |
98
-
|**Longitud de transición**| Longitud en mm del tramo de unión entre capas. |
99
-
|**Dirección alternada**| Las capas impares imprimen en sentido inverso, lo que reduce la deriva direccional en arcilla. |
100
-
|**Cerrar trayecto**| Agrega un movimiento de regreso al inicio de cada trayecto (útil para elipses y formas cerradas). |
101
-
|**Pausa al inicio**| Pausa G4 (ms) en la primera posición de impresión, dándole tiempo a la arcilla para comenzar a fluir. |
102
-
|**Movimiento de cebado**| Extrude una línea corta antes de la impresión principal para cebar la boquilla. |
103
-
104
-
#### Panel derecho — parámetros de Lissajous
105
-
106
-
| Parámetro | Efecto |
107
-
|---|---|
108
-
|**Amplitud N**| Semi-amplitud de la oscilación lateral (mm). El trayecto se desvía esta distancia hacia los lados del centro. |
109
-
|**Amplitud T**| Semi-amplitud de la oscilación adelante/atrás (mm). |
110
-
|**Longitud de onda N / T**| Longitud de arco de un ciclo completo de onda (mm). Se mide sobre la curva. |
111
-
|**Delta (δ)**| Diferencia de fase entre N y T. Controla la forma: 0° = línea, 90° = elipse (si λN = λT), valores intermedios = formas de Lissajous. |
112
-
|**Offset de fase**| Fase inicial de la onda (radianes). |
113
-
|**Desfase de fase por capa**| Fase extra que se suma por cada capa — crea una apariencia helicoidal o en espiral. |
114
-
115
-
Los **preajustes** en la parte superior del panel derecho aplican configuraciones predefinidas de Lissajous con una miniatura visual de la figura resultante.
116
-
117
-
### 4. Sistema de keyframes
118
-
119
-
La barra de línea de tiempo debajo de la previsualización 3D permite **anclar valores de Lissajous en puntos específicos del trayecto**:
120
-
121
-
1. Mové el slider de la línea de tiempo al punto deseado (0% = inicio, 100% = fin).
122
-
2. Ajustá los parámetros de Lissajous al valor que querés en ese punto.
123
-
3. Hacé clic en **⊕ KF** para crear un keyframe.
124
-
4. Entre keyframes, los valores se interpolan linealmente.
125
-
126
-
Hacé clic en un keyframe (diamante naranja) para seleccionarlo y editar sus valores. El botón **✕** elimina el keyframe seleccionado; el ícono de papelera elimina todos.
127
-
128
-
### 5. Previsualización 3D
47
+
```text
48
+
punto_final(s) = línea_central(s)
49
+
+ N(s) · ampN · sin(2π·s/λN + δ)
50
+
+ T(s) · ampT · sin(2π·s/λT)
51
+
```
129
52
130
-
-**Líneas coloreadas** = trayecto generado, una tonalidad por capa (azul pizarra en la base → terracota en la cima).
131
-
-**Líneas punteadas** = transiciones entre capas.
132
-
-**Punto animado** = posición del extrusor virtual según la línea de tiempo.
133
-
-**Cubo de orientación** (esquina inferior derecha) = muestra los ejes X/Y/Z en tiempo real.
53
+
-`s` es la longitud de arco acumulada sobre el camino SVG.
54
+
-`N(s)` es el vector normal unitario del trayecto.
55
+
-`T(s)` es el vector tangente unitario del trayecto.
56
+
-`λN` y `λT` son longitudes de onda medidas sobre el arco, no sobre un eje recto.
57
+
-`δ` controla la diferencia de fase entre normal y tangente, y por lo tanto la figura de Lissajous.
La previsualización **Marco del extrusor** muestra la figura de Lissajous en coordenadas locales `(T, N)`, desacoplada del trayecto global. Sirve para afinar la forma de la oscilación antes de evaluar cómo se adapta al SVG.
punto = puntoCentral + normal × offsetN + tangente × offsetT
174
-
```
175
-
176
-
-`normal` es el vector perpendicular al trayecto en cada muestra.
177
-
-`arcoLongitud` es la distancia acumulada a lo largo de la curva — la longitud de onda siempre se mide sobre el camino, independientemente de su forma.
178
-
- Para curvas cerradas (círculos, elipses), la onda cierra sin discontinuidades.
179
-
180
-
---
181
159
182
-
## Optimización de desplazamientos
160
+
## Limitaciones Conocidas
183
161
184
-
Al cambiar de capa, la herramienta aplica una estrategia **nearest-neighbor** para ordenar los trayectos de forma que minimice la distancia total de los saltos entre ellos. Esto reduce el tiempo de impresión y la cantidad de movimientos que cruzan el área ya impresa.
162
+
-**Transforms anidados complejos en SVG:** los transforms simples sobre elementos individuales funcionan bien; grupos profundamente anidados pueden no resolverse completamente.
163
+
-**Unidades SVG no son mm por defecto:** ajusta el factor de escala según el sistema de coordenadas del archivo.
164
+
-**Sin retracción:** la salida está orientada a arcilla, donde cortar flujo suele ser indeseable.
165
+
-**Modelo de extrusión lineal:**`E += distancia * multiplicador`.
166
+
-**Sin malla de nivelación de cama.**
185
167
186
-
---
168
+
## Estructura Del Proyecto
187
169
188
-
## Limitaciones conocidas
189
-
190
-
-**Transforms anidadas complejas en SVG**: los transforms simples (traslación, rotación) sobre elementos individuales funcionan bien. Transforms sobre grupos `<g>` profundamente anidados pueden no resolverse completamente.
191
-
-**Unidades SVG ≠ mm por defecto**: ajustá el factor de escala según el sistema de coordenadas de tu SVG.
192
-
-**Sin retracción**: el G-code generado no incluye movimientos de retracción (la impresión en arcilla raramente los requiere).
193
-
-**Modelo de extrusión lineal**: `E += distancia × multiplicador`. Adecuado para extrusoras de arcilla por presión de aire o tornillo sin fin.
194
-
-**Sin malla de nivelación de cama**.
195
-
196
-
---
197
-
198
-
## Estructura del proyecto
199
-
200
-
```
170
+
```text
201
171
src/
202
-
types/index.ts tipos TypeScript compartidos
172
+
types/index.ts
203
173
lib/
204
-
svgParser.ts parseo de SVG y muestreo de trayectos (usa el DOM SVG del navegador)
205
-
waveGenerator.ts matemática de la onda de Lissajous, apilado de capas y keyframes
206
-
gcodeGenerator.ts formato de G-code, optimización nearest-neighbor y descarga
174
+
svgParser.ts
175
+
waveGenerator.ts
176
+
gcodeGenerator.ts
177
+
hopUtils.ts
178
+
skirtUtils.ts
207
179
components/
208
-
App.tsx estado principal y flujo de datos
209
-
PathParams.tsx UI de parámetros de impresión (panel izquierdo)
210
-
LissajousParams.tsx UI de parámetros de Lissajous y preajustes (panel derecho)
211
-
PathList.tsx lista de trayectos con activación y sobreescritura por trayecto
212
-
Preview2D.tsx previsualización 3D ortográfica con línea de tiempo y keyframes
213
-
LissajousPreview.tsx previsualización animada de la figura de Lissajous
214
-
GcodeOutput.tsx visualización y descarga del G-code
215
-
NumInput.tsx input numérico con soporte de scroll para cambiar valores
180
+
PathParams.tsx
181
+
LissajousParams.tsx
182
+
PathList.tsx
183
+
Preview2D.tsx
184
+
LissajousPreview.tsx
185
+
GcodeOutput.tsx
186
+
CenterScaleParams.tsx
187
+
NumInput.tsx
216
188
public/
217
-
sample.svg archivo de prueba incluido
218
-
logo.png logotipo completo
219
-
isotype.png isotipo (ícono cuadrado)
220
-
fonts/ GSCode variable font
221
-
dist/ salida del build estático (GitHub Pages)
189
+
sample.svg
190
+
logo.png
191
+
isotype.png
192
+
fonts/
193
+
dist/
222
194
```
223
195
224
-
---
196
+
## Documentación
197
+
198
+
-[docs/usage.md](docs/usage.md): flujo de uso y parámetros.
199
+
-[docs/architecture.md](docs/architecture.md): pipeline interno y responsabilidades.
200
+
-[docs/fabrication-notes.md](docs/fabrication-notes.md): criterios de fabricación con arcilla.
201
+
-[pendientes.md](pendientes.md): notas de trabajo abiertas.
0 commit comments