DXF: El Formato de Intercambio de Dibujo de AutoCAD
¿Qué es DXF?
DXF (Drawing Exchange Format, Formato de Intercambio de Dibujo) es un formato de archivo CAD abierto desarrollado por Autodesk en 1982 para permitir la interoperabilidad de datos entre AutoCAD y otros programas. A diferencia de DWG (el formato binario nativo de AutoCAD), DXF fue diseñado desde el principio como texto ASCII legible por humanos, convirtiéndolo en el formato neutro universal para el intercambio de datos CAD en 2D y 3D.
Los archivos DXF usan la extensión .dxf. Prácticamente todas las aplicaciones de CAD, CAM, corte láser, corte de vinilo, mecanizado CNC y arquitectura pueden leer y escribir DXF. Es el formato de intercambio CAD más ampliamente soportado del mundo.
Estructura de un Archivo DXF
Cada archivo DXF se organiza en secciones, cada una delimitada por pares de marcadores 0\nSECTION y 0\nENDSEC:
0
SECTION
2
HEADER ← variables de cabecera: $ACADVER, $INSUNITS, $EXTMIN, $EXTMAX, etc.
0
ENDSEC
0
SECTION
2
TABLES ← tablas de símbolos: LAYER, LTYPE, STYLE, VPORT, etc.
0
ENDSEC
0
SECTION
2
BLOCKS ← definiciones de bloques (bibliotecas de símbolos reutilizables)
0
ENDSEC
0
SECTION
2
ENTITIES ← las entidades de dibujo reales (líneas, arcos, texto, etc.)
0
ENDSEC
0
EOF
Códigos de Grupo
Todo el formato DXF se basa en pares código de grupo / valor — cada línea en DXF es un código de grupo (entero) o el valor del código anterior:
| Rango de código | Significado |
|---|---|
| 0 | Tipo de entidad o nombre de sección |
| 8 | Nombre de capa |
| 10–19 | Coordenada X (10=principal, 11=secundaria…) |
| 20–29 | Coordenada Y |
| 30–39 | Coordenada Z |
| 40–49 | Valores de punto flotante (radio, altura, escala…) |
| 62 | Número de color (ACI: 1=rojo, 2=amarillo, 7=blanco/negro) |
Tipos de Entidad DXF Comunes
| Entidad | Código | Descripción |
|---|---|---|
| LINE | LINE |
Línea recta de punto a punto |
| CIRCLE | CIRCLE |
Círculo definido por centro + radio |
| ARC | ARC |
Arco: centro + radio + ángulos inicio/fin |
| LWPOLYLINE | LWPOLYLINE |
Polilínea 2D ligera (la más común para contornos 2D) |
| SPLINE | SPLINE |
Curva spline NURBS |
| TEXT | TEXT |
Texto de una sola línea |
| MTEXT | MTEXT |
Texto multilínea formateado |
| INSERT | INSERT |
Referencia de bloque |
| HATCH | HATCH |
Región rellena / patrón de sombreado |
| DIMENSION | DIMENSION |
Anotación de cota |
DXF en la Práctica: Lectura con ezdxf (Python)
ezdxf es la biblioteca Python estándar para leer y escribir DXF:
import ezdxf
from ezdxf import colors
from ezdxf.math import Vec3
# Abrir un archivo DXF existente
doc = ezdxf.readfile("plano_planta.dxf")
msp = doc.modelspace() # el espacio de dibujo principal
# Iterar todas las entidades
for entidad in msp:
print(entidad.dxftype(), entidad.dxf.layer)
# Filtrar por tipo de entidad
lineas = msp.query("LINE")
for linea in lineas:
print(f"Línea: {linea.dxf.start} → {linea.dxf.end}")
circulos = msp.query("CIRCLE")
for circulo in circulos:
print(f"Centro: {circulo.dxf.center}, r={circulo.dxf.radius:.3f}")
Crear un Archivo DXF
import ezdxf
# Crear un nuevo documento DXF (formato R2010)
doc = ezdxf.new("R2010")
msp = doc.modelspace()
# Configurar capas
doc.layers.add("MUROS", color=colors.WHITE)
doc.layers.add("PUERTAS", color=colors.CYAN)
doc.layers.add("VENTANAS", color=colors.GREEN)
doc.layers.add("TEXTO", color=colors.YELLOW)
# Dibujar planta
# Muros exteriores
msp.add_lwpolyline(
[(0,0), (10000,0), (10000,8000), (0,8000), (0,0)],
dxfattribs={"layer": "MUROS", "closed": True}
)
# Muro interior
msp.add_line((5000,0), (5000,5000), dxfattribs={"layer": "MUROS"})
# Arco de puerta
msp.add_arc(
center=(1000, 0), radius=900,
start_angle=0, end_angle=90,
dxfattribs={"layer": "PUERTAS"}
)
# Cota
msp.add_linear_dim(
base=(0, -500), p1=(0, 0), p2=(10000, 0),
dxfattribs={"layer": "TEXTO"}
).render()
# Texto
msp.add_text(
"Salón",
dxfattribs={"height": 300, "layer": "TEXTO", "insert": (2000, 4000)}
)
doc.saveas("planta_salida.dxf")
Versiones DXF
| Versión DXF | Versión AutoCAD | Código AC |
|---|---|---|
| DXF R12 | AutoCAD R12 | AC1009 |
| DXF R2000 | AutoCAD 2000 | AC1015 |
| DXF R2010 | AutoCAD 2010 | AC1024 |
| DXF R2018 | AutoCAD 2018 | AC1032 |
R12 es la versión más compatible — soportada por prácticamente todas las aplicaciones de CAD/CAM/láser. Exporta en R12 cuando envíes archivos a máquinas de fabricación o software antiguo.
DXF para Corte CNC y Láser
DXF es el formato dominante para enviar perfiles 2D a:
- Cortadoras láser (Universal Laser, Trotec, Epilog, xTool, Glowforge)
- Cortadoras de vinilo / plotters (Cricut, Silhouette, Roland)
- Fresadoras CNC (requiere conversión DXF → G-code mediante software CAM)
- Cortadoras de plasma y chorro de agua
Para perfiles de corte, usa entidades LWPOLYLINE con trayectorias cerradas en una sola capa:
import ezdxf
doc = ezdxf.readfile("diseño.dxf")
msp = doc.modelspace()
doc_corte = ezdxf.new("R12")
msp_corte = doc_corte.modelspace()
for entidad in msp.query("LWPOLYLINE"):
if entidad.is_closed:
msp_corte.add_entity(entidad.copy())
doc_corte.saveas("listo_para_laser.dxf")
Consejos Prácticos
- Exporta R12 para máxima compatibilidad — casi nada fuera de AutoCAD necesita características superiores a R12 para trabajo 2D
- LWPOLYLINE sobre POLYLINE — más eficiente, universalmente soportado, estándar para contornos 2D cerrados
- Trampa de unidades: el código
$INSUNITSde DXF: 0=sin unidades, 1=pulgadas, 4=mm. Comprueba siempre las unidades al importar — un dibujo en pulgadas abierto asumiendo mm será 25,4× el tamaño incorrecto - La capa 0 es especial — las entidades en la capa 0 dentro de un bloque heredan las propiedades de la capa que inserta (color, tipo de línea). No uses la capa 0 para entidades regulares fuera de bloques
- ezdxf para Python es la única biblioteca DXF puro-Python mantenida activamente
El formato ASCII abierto de DXF y su soporte universal en más de 40 años de software CAD y de fabricación lo convierten en el formato de intercambio definitivo para datos de dibujo técnico 2D.
Conversiones relacionadas
Conversiones frecuentes del catálogo: