MFL · Chuleta de referencia v1

Manual completo Editor MFL

MFL — MuebleLab Furniture Language

Castellano · indentación significativa · `=` asigna · `..` rango

Estructura

mueble nombre
  # dimensiones, materiales, zócalo, patas...
  distribucion
    # grid + asignaciones
  zona A1..A3 puerta
    # overlay (opcional)
  montaje
    # pendiente

Indentación 2 espacios. Comentarios con #.

Dimensiones (obligatorias)

anchomm — anchura
altomm — altura
fondomm — profundidad
grosormm — tablero (defecto 19)

Materiales

tablero <color/textura>carcasa
frente <color/textura>puertas/cajones
canto fino|grueso0.4mm o 2mm ABS
trasera fino|tablero|ranurartipo 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 (sintaxis homogénea)

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, zócalo, coronación

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.

Paneles opcionales

sin-lateral-izq siquita el lateral izquierdo
sin-lateral-dcha siquita el lateral derecho
sin-techo sisin tablero superior
sin-suelo sisin tablero inferior

Cornisa decorativa

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.

Marco frontal (vitrina/alacena)

# 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).

Largueros traseros (sin fondo)

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

Consola REPL (terminal flotante)

Atajo: ` (backtick) abre/cierra · Ctrl+Enter o ▶ ejecuta · Esc cierra · arrastra por la barra superior

A1resumen de la celda
A1.bisagravalor de una propiedad
A1.altodimensión real de la celda en mm
muebleresumen del mueble entero
lateral-izq · techo · suelo · tapa · fondo · zocalodescripción de la pieza estructural
<nombre-de-zona>datos de la zona con nombre
?aliases activos
??MFL exportado completo
añadir mueble · nuevo mueblecrea un mueble nuevo en el escenario (no modifica el actual)
posicion = x, ydentro 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...

Piezas, uniones y hardware (REPL)

A1.bordesqué piezas delimitan la celda (4 lados)
A1.borde-arribasolo una cara (techo, divisor_h_N…)
techo · lateral_izq · divisor_h_1info de la pieza · dimensiones · orient.
techo.unionescon qué piezas se une (L-corner, T-joint, cross, butt)
union(a, b)info de la unión + hardware actual
union(...).hardware = allen×2override persistido (pasa a despiece + CNC)
union(...).note = "..."nota libre asociada a la unión
inventariototal de hardware del mueble
cnc · exportresumen del export con operaciones por pieza
<pieza>.operacioneslista de taladros/fresados (con coords y diámetros)
validarwarnings/errores de las uniones
montajesecuencia 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.

Construcción (caja / armazón)

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 con voladizos

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.

Distribución

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.

Dividir solo una celda (azúcar)

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.

Bisagras automáticas

El compilador asigna solo:

Primera columna con puertaizquierda (sobre lateral)
Última columna con puertaderecha (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°).

Dot paths — alternativa a indentar

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.

Tipos de contenido de celda

puertapuerta batiente
cajoncajón o módulo de cajones
baldabalda fija (divide en filas)
barrabarra de colgar
abiertohueco vacío
ciegopanel ciego (sin apertura)
falso-frentepanel decorativo fijo

Propiedades de puerta

bisagra izq|dcha|arriba|abajolado del giro (auto si no se indica)
hojas 1|2una o dos hojas
estilo superpuesta|encastrada|interiorsuperpuesta=overlay (def), encastrada=flush, interior=retranqueada. Sinónimos: solapada/embutida.
cristal si|nopuerta con vidrio
espejo si|no
cierre-suave si|noamortiguador
kit si|nocomprada hecha (no se fabrica)
tiradorver tabla tiradores

Propiedades de cajón

cantidad <n>cajones en la celda
separacion <mm>entre frentes (def 2)
estilo superpuesto|encastradooverlay/flush del frente. Sinónimos: solapado/embutido
espejo si|nofrente con espejo
cierre-suave si|noguía con freno
push si|nosin tirador, push-to-open
kit si|nocuerpo comprado, fabricamos solo frontal
tiradorver tabla tiradores

Propiedades de balda y barra

cantidad <n>balda: nº de baldas
regulable si|nobalda en sistema 32mm
grosor <mm>balda: si difiere
altura <mm>barra: desde el techo
material aluminio|acero|maderabarra

Tiradores (puertas y cajones)

tirador barratirador alargado (defecto)
tirador pomotirador puntual
tirador perfilcanal en el frente
tirador ningunosin tirador (push-to-open)

Bloque zona (overlay)

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.

Alias de rangos (variables)

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.

Defaults globales por tipo

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.

Reglas generales

=asignación
..rango (A1..C4)
restoocupa el sobrante
si / nobooleanos en castellano
# ... fin líneacomentario
### ... ###comentario de bloque

El orden importa: lo último gana. Lo más específico (celda) sobrescribe lo heredado (defaults).

Composición — varios muebles

mueble base
  ancho = 1200
  alto  = 800
  ...

mueble alto
  ancho = 1200
  alto  = 700
  ...

Varios bloques mueble en un fichero = varios muebles independientes.

Editor — cargar / guardar

📂 Cargar MFLAbre fichero .mfl en el editor
💾 Guardar MFLDescarga el código actual como <mueble>.mfl
📥 Cargar JSON/SVGImporta proyecto JSON o SVG (con metadata) y regenera el MFL
Exportar JSONExporta 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().

Errores en el editor

Bajo el editor hay una consola de 3 líneas (con scroll, hasta 200 entradas) que muestra:

🔴 errorespropiedad desconocida, bloque no reconocido, tipo de celda inválido
🟡 warningscolisiones de bisagras, pegado en mueble grande...
🟢 ok"✓ N mueble(s) compilado(s)"

Vista 3D — modo tornillería

Botón 🔩 Ver tornillería hace transparentes los tableros (0.13 op.) y deja visibles:

tornillos & levasaglomerado, minifix, allen
bisagrascazoleta + brazo + plato + tornillos
guías de cajónraíles + bolas de rodamiento (4–10 por guía)
tiradoresbarra, pomo, perfil