mueble nombre # dimensiones, materiales, zócalo, patas... distribucion # grid + asignaciones zona A1..A3 puerta # overlay (opcional) montaje # pendiente
Indentación 2 espacios. Comentarios con #.
| ancho | mm — anchura |
| alto | mm — altura |
| fondo | mm — profundidad |
| grosor | mm — tablero (defecto 19) |
| tablero <color/textura> | carcasa |
| frente <color/textura> | puertas/cajones |
| canto fino|grueso | 0.4mm o 2mm ABS |
| trasera fino|tablero|ranurar | tipo de fondo (también acepta ranurado) |
Texturas: roble · pino · haya · nogal. Colores hex: #1a1a1a o nombres (blanco, negro...). Los hex #XXXXXX NO se confunden con comentarios.
patas 4 alto = 120 grueso = 40 retranqueo = 50 anclaje = inserto # tornillo|inserto|pegado
Anclaje: tornillo (4 tornillos por pata, defecto), inserto (rosca M6 + tornillo M6×40, típico de tarugo), pegado (sin tornillería). Sintaxis vieja sigue funcionando: altura-patas, grosor-patas...
ruedas 4 zocalo 80 retranqueo = 60 lateral = 30 trasero = 0 coronacion 60
Cada bloque acepta valor inline (cantidad/altura) y props anidadas. Para desactivar: zocalo no.
| sin-lateral-izq si | quita el lateral izquierdo |
| sin-lateral-dcha si | quita el lateral derecho |
| sin-techo si | sin tablero superior |
| sin-suelo si | sin tablero inferior |
cornisa alto = 35 perfil = escalon voladizo = 10
Perfiles: escalon · recto · redondo · curvo · corona · gola. Se cuenta por metros lineales en el despiece. Hardware: clavillos pin 1mm + tornillos ocultos + cola blanca. Forma corta: cornisa 30.
# tablero superior + holguras entre puertas y laterales marco superior = 80 entre = 4 lateral = 4
Fuerza puertas encastradas automáticamente. Tablero superior aparece en despiece + 4 confirmats. Forma corta: marco 80 (solo altura).
# bajo cocina con paso de tubos trasera = no largueros superior = si inferior = si alto = 80
Sin fondo pero con dos travesaños horizontales arriba/abajo. Cada larguero = 4 confirmats (2 por lateral). Aparece en el despiece. Sintaxis vieja larguero-superior / larguero-inferior también funciona.
Atajo: ` (backtick) abre/cierra · Ctrl+Enter o ▶ ejecuta · Esc cierra · arrastra por la barra superior
| A1 | resumen de la celda |
| A1.bisagra | valor de una propiedad |
| A1.alto | dimensión real de la celda en mm |
| mueble | resumen del mueble entero |
| lateral-izq · techo · suelo · tapa · fondo · zocalo | descripción de la pieza estructural |
| <nombre-de-zona> | datos de la zona con nombre |
| ? | aliases activos |
| ?? | MFL exportado completo |
| añadir mueble · nuevo mueble | crea un mueble nuevo en el escenario (no modifica el actual) |
| posicion = x, y | dentro del bloque añadir/nuevo mueble · mm respecto al origen (0,0) dibujado en el lienzo |
Crear un mueble nuevo (no modifica el actual; el plano del fondo es común a todos):
añadir mueble armario ancho = 1200 alto = 2000 fondo = 400 posicion = 800, 0 # x,y mm desde el origen — sólo XY, sin Z distribucion columnas = 2 filas = 1 A1 = puerta A2 = puerta
añadir mueble y nuevo mueble son equivalentes. Sin esa palabra inicial, mueble X se sigue interpretando como modificación del mueble actual. Convención Cartesiana: X crece a la derecha, Y crece hacia arriba (altura desde el suelo). El origen (0,0) está dibujado abajo-izquierda del lienzo: eje X rojo, eje Y verde. Un mueble con posicion = 0, 0 apoya en el suelo. Para apilar otro encima, su Y = altura del mueble que le soporta (p.ej. posicion = 0, 720).
Expresiones aritméticas + variables locales:
comoda.ancho → 800 comoda.lateral_izq.ancho → 19 comoda.tapa.voladizo_frente → 30 comoda.ancho - 2 * comoda.grosor → 762 _libre = comoda.ancho - 2*comoda.grosor _libre / 3 → 254
Operadores + - * / y paréntesis. Variables con prefijo _ persisten en la sesión. Acceso jerárquico con . sobre objetos: mueble, comoda (nombre), lateral_izq/_dcha, techo, suelo, tapa, fondo, zocalo, armazon, A1...
| A1.bordes | qué piezas delimitan la celda (4 lados) |
| A1.borde-arriba | solo una cara (techo, divisor_h_N…) |
| techo · lateral_izq · divisor_h_1 | info de la pieza · dimensiones · orient. |
| techo.uniones | con qué piezas se une (L-corner, T-joint, cross, butt) |
| union(a, b) | info de la unión + hardware actual |
| union(...).hardware = allen×2 | override persistido (pasa a despiece + CNC) |
| union(...).note = "..." | nota libre asociada a la unión |
| inventario | total de hardware del mueble |
| cnc · export | resumen del export con operaciones por pieza |
| <pieza>.operaciones | lista de taladros/fresados (con coords y diámetros) |
| validar | warnings/errores de las uniones |
| montaje | secuencia recomendada de ensamblaje paso a paso |
Tipos de hardware: tubillón, minifix, allen, escuadra, cabezal escondido, tornillo madera, grapa. Sintaxis libre: tubillón×4 + minifix×2.
construccion armazon # caja|armazon poste = 40 lateral = 12 travesano = 35 ranura = 10
En modo armazón los postes son las patas. Trasera encastrada en ranuras de los postes traseros. Sintaxis vieja: armazon-poste, armazon-lateral... también funciona.
tapa izq = 50 dcha = 50 frente = 30 trasero = 0 encimera = si # piedra/compacto
Defecto: tapa de madera (copia carcasa). Sintaxis vieja voladizo-izq/dcha/frente/trasero sigue funcionando.
distribucion columnas = 3 A:400 B:400 C:resto filas = 2 1:300 2:resto A1 = puerta B1..B2 = cajon # rango: 1 sola pieza con span cantidad = 3 A2.bisagra = derecha # excepción A1..C1.bisagra = izquierda # por rango
Tamaños: número en mm, fracción (1:resto) o ausentes. Rangos A1..A2 = puerta crean UNA puerta alta con rowSpan=2, no dos puertas separadas.
distribucion columnas = 3 filas = 1 A1 = puerta B1 = abierto B1.dividir-horizontal = 3 # B en 3 pisos C1 = puerta
El compilador expande filas a 3 y mantiene A y C enteras. Existe también dividir-vertical análogo para subdividir una fila en columnas.
El compilador asigna solo:
| Primera columna con puerta | → izquierda (sobre lateral) |
| Última columna con puerta | → derecha (sobre lateral) |
| Columnas intermedias | → encadenan vecina izq (sin colisiones) |
Solo escribe .bisagra si quieres romper la regla. Aviso del compilador si dos puertas adyacentes acaban con bisagras enfrentadas (chocarían al abrir 90°).
mueble armario ancho = 1200 distribucion.columnas = 3 distribucion.A1 = puerta distribucion.A1.bisagra = derecha puerta.tirador = pomo # default global
Prefijos válidos: distribucion, puerta, cajon, balda, barra, carpinteria. Mezclables con la sintaxis indentada clásica.
| puerta | puerta batiente |
| cajon | cajón o módulo de cajones |
| balda | balda fija (divide en filas) |
| barra | barra de colgar |
| abierto | hueco vacío |
| ciego | panel ciego (sin apertura) |
| falso-frente | panel decorativo fijo |
| bisagra izq|dcha|arriba|abajo | lado del giro (auto si no se indica) |
| hojas 1|2 | una o dos hojas |
| estilo superpuesta|encastrada|interior | superpuesta=overlay (def), encastrada=flush, interior=retranqueada. Sinónimos: solapada/embutida. |
| cristal si|no | puerta con vidrio |
| espejo si|no | |
| cierre-suave si|no | amortiguador |
| kit si|no | comprada hecha (no se fabrica) |
| tirador | ver tabla tiradores |
| cantidad <n> | cajones en la celda |
| separacion <mm> | entre frentes (def 2) |
| estilo superpuesto|encastrado | overlay/flush del frente. Sinónimos: solapado/embutido |
| espejo si|no | frente con espejo |
| cierre-suave si|no | guía con freno |
| push si|no | sin tirador, push-to-open |
| kit si|no | cuerpo comprado, fabricamos solo frontal |
| tirador | ver tabla tiradores |
| cantidad <n> | balda: nº de baldas |
| regulable si|no | balda en sistema 32mm |
| grosor <mm> | balda: si difiere |
| altura <mm> | barra: desde el techo |
| material aluminio|acero|madera | barra |
| tirador barra | tirador alargado (defecto) |
| tirador pomo | tirador puntual |
| tirador perfil | canal en el frente |
| tirador ninguno | sin tirador (push-to-open) |
zona A1..A3 puerta nombre = puerta-columna hojas = 1 bisagra = izquierda tirador = barra cristal = no mostrar = si kit = si
Rango contiguo H o V. Tipo: puerta (estructural) o ciego.
mueble x primera_columna = a1..a3 # declaración global fila_top = a1..c1 distribucion primera_columna = puerta primera_columna.bisagra = derecha fila_top = balda zona primera_columna puerta
Identificador en minúsculas (sin tildes). Visible desde distribucion y zona.
mueble x puerta # defaults para TODAS las puertas bisagra = izquierda tirador = barra cajon cierre-suave = si kit = si distribucion ...
Bloques puerta, cajon, balda, barra a nivel mueble = defaults; las celdas pueden sobrescribir.
| = | asignación |
| .. | rango (A1..C4) |
| resto | ocupa el sobrante |
| si / no | booleanos en castellano |
| # ... fin línea | comentario |
| ### ... ### | comentario de bloque |
El orden importa: lo último gana. Lo más específico (celda) sobrescribe lo heredado (defaults).
mueble base ancho = 1200 alto = 800 ... mueble alto ancho = 1200 alto = 700 ...
Varios bloques mueble en un fichero = varios muebles independientes.
| 📂 Cargar MFL | Abre fichero .mfl en el editor |
| 💾 Guardar MFL | Descarga el código actual como <mueble>.mfl |
| 📥 Cargar JSON/SVG | Importa proyecto JSON o SVG (con metadata) y regenera el MFL |
| ↓ Exportar JSON | Exporta los muebles compilados como JSON |
Los SVG exportados por MuebleLab llevan el JSON del proyecto incrustado en <metadata>. Cargar un SVG → reconstruye Furniture → genera MFL automáticamente vía furnitureToMFL().
Bajo el editor hay una consola de 3 líneas (con scroll, hasta 200 entradas) que muestra:
| 🔴 errores | propiedad desconocida, bloque no reconocido, tipo de celda inválido |
| 🟡 warnings | colisiones de bisagras, pegado en mueble grande... |
| 🟢 ok | "✓ N mueble(s) compilado(s)" |
Botón 🔩 Ver tornillería hace transparentes los tableros (0.13 op.) y deja visibles:
| tornillos & levas | aglomerado, minifix, allen |
| bisagras | cazoleta + brazo + plato + tornillos |
| guías de cajón | raíles + bolas de rodamiento (4–10 por guía) |
| tiradores | barra, pomo, perfil |