¿Qué es DXF?
DXF — Drawing Exchange Format (Formato de Intercambio de Dibujos) — es un formato de datos CAD abierto desarrollado por Autodesk en 1982 para permitir la interoperabilidad de datos entre AutoCAD y otros programas. Mientras que el formato nativo de Autodesk es el binario DWG, DXF fue diseñado como una alternativa abierta y basada en texto que cualquier aplicación puede leer y escribir sin tarifas de licencia ni ingeniería inversa.
Los archivos DXF usan la extensión .dxf y vienen en dos variantes:
- DXF ASCII — Texto legible por humanos, la forma más común
- DXF Binario — Representación binaria compacta (poco utilizada; soporte limitado)
Hoy en día, DXF es compatible con prácticamente todas las aplicaciones CAD, CNC, corte láser y gráficos vectoriales: AutoCAD, LibreCAD, QCAD, FreeCAD, Inkscape, CorelDRAW, SolidWorks (importación) y cientos de herramientas industriales.
Estructura del Archivo DXF
Un archivo DXF ASCII está organizado como una secuencia de pares código de grupo / valor. Cada dato está descrito por un código de grupo numérico (identificador de tipo) seguido de su valor en la línea siguiente:
0 ← código de grupo: tipo de entidad o palabra clave
LINE ← valor: esto es una entidad LINE (línea)
8 ← código 8: nombre de capa
0 ← valor: capa "0" (capa por defecto)
10 ← código 10: coordenada X del punto de inicio
100.0 ← valor
20 ← código 20: coordenada Y del punto de inicio
200.0 ← valor
Secciones Principales de DXF
| Sección | Propósito |
|---|---|
HEADER |
Variables de todo el dibujo: unidades, límites, capa actual, versión |
TABLES |
Tablas con nombre: tipos de línea, capas, estilos de texto, estilos de dimensión |
BLOCKS |
Definiciones de bloques (bibliotecas de símbolos reutilizables) |
ENTITIES |
La geometría del dibujo: líneas, círculos, arcos, texto, etc. |
OBJECTS |
Objetos no gráficos: diccionarios, datos extendidos |
Tipos de Entidades Comunes
| Entidad | Descripción |
|---|---|
LINE |
Segmento de línea recta |
CIRCLE |
Círculo completo |
ARC |
Arco |
LWPOLYLINE |
Polilínea 2D ligera |
TEXT |
Texto de una sola línea |
MTEXT |
Texto de múltiples líneas |
INSERT |
Referencia a bloque |
HATCH |
Área rellena |
SPLINE |
Spline NURBS |
Trabajar con DXF en Python: ezdxf
ezdxf es la biblioteca Python líder para leer y escribir archivos DXF:
pip install ezdxf
Leer un Archivo DXF
import ezdxf
def inspeccionar_dxf(ruta: str) -> None:
"""Muestra todas las entidades en un archivo DXF."""
doc = ezdxf.readfile(ruta)
msp = doc.modelspace()
print(f"Versión DXF: {doc.dxfversion}")
print(f"Entidades: {len(msp)}")
for entidad in msp:
tipo = entidad.dxftype()
if tipo == 'LINE':
print(f"LÍNEA: ({entidad.dxf.start.x:.1f}, {entidad.dxf.start.y:.1f}) → "
f"({entidad.dxf.end.x:.1f}, {entidad.dxf.end.y:.1f})")
elif tipo == 'CIRCLE':
c = entidad.dxf.center
print(f"CÍRCULO: centro=({c.x:.1f},{c.y:.1f}), radio={entidad.dxf.radius:.1f}")
elif tipo == 'TEXT':
print(f"TEXTO: '{entidad.dxf.text}'")
inspeccionar_dxf('plano.dxf')
Crear un Archivo DXF
import ezdxf
def crear_plano_dxf(ruta_salida: str) -> None:
"""Crea un plano simple como DXF."""
doc = ezdxf.new('R2010')
doc.header['$INSUNITS'] = 4 # milímetros
msp = doc.modelspace()
# Añadir capas
doc.layers.add('PAREDES', color=7)
doc.layers.add('PUERTAS', color=5)
doc.layers.add('ANOTACIONES', color=2)
# Paredes exteriores (rectángulo: 8000mm × 6000mm)
msp.add_lwpolyline(
[(0, 0), (8000, 0), (8000, 6000), (0, 6000)],
close=True,
dxfattribs={'layer': 'PAREDES', 'lineweight': 50},
)
# Pared interior
msp.add_line(
(4000, 0), (4000, 4000),
dxfattribs={'layer': 'PAREDES'},
)
# Arco de puerta (900mm)
msp.add_arc(
center=(4000, 0),
radius=900,
start_angle=0,
end_angle=90,
dxfattribs={'layer': 'PUERTAS'},
)
# Etiqueta de habitación
msp.add_text(
'Salón',
dxfattribs={'layer': 'ANOTACIONES', 'height': 200, 'insert': (2000, 3000)},
)
doc.saveas(ruta_salida)
print(f"DXF guardado: {ruta_salida}")
crear_plano_dxf('plano.dxf')
DXF vs DWG: ¿Cuál Usar?
| Aspecto | DXF | DWG |
|---|---|---|
| Apertura | Especificación abierta | Formato binario propietario |
| Legible por humanos | Sí (DXF ASCII) | No |
| Tamaño de archivo | Mayor (~2–5× DWG) | Compacto |
| Compatibilidad | Todo el software CAD | Productos Autodesk + capas de compatibilidad |
| Soporte 3D | Limitado | Modelado sólido 3D completo |
| Caso de uso | Interoperabilidad, CNC, corte láser | Almacenamiento nativo de AutoCAD |
Para máxima interoperabilidad — como enviar un dibujo a una cortadora láser, fresadora CNC o un colega que usa un software diferente — DXF es la elección clara.
DXF para CNC y Corte Láser
Al preparar archivos DXF para mecanizado CNC o corte láser:
- Usa solo polilíneas cerradas para trayectorias de corte
- Establece las unidades explícitamente (
$INSUNITSen mm o pulgadas) - Separa los tipos de corte por capa — p.ej., capa "CORTE" para cortes pasantes, "GRABADO" para grabado
- Sin líneas de construcción ni texto a menos que la máquina deba grabarlos
- DXF R12 o R2000 — la mayoría de los controladores CNC soportan uno de estos
import ezdxf
def preparar_para_laser(entrada: str, salida: str) -> None:
"""Prepara un DXF para corte láser: mantiene solo entidades de corte."""
doc = ezdxf.readfile(entrada)
msp = doc.modelspace()
a_eliminar = []
for entidad in msp:
tipo = entidad.dxftype()
capa = entidad.dxf.get('layer', '0').upper()
if capa != 'CORTE' or tipo not in ('LWPOLYLINE', 'CIRCLE', 'ARC', 'LINE'):
a_eliminar.append(entidad)
for entidad in a_eliminar:
msp.delete_entity(entidad)
doc.dxfversion = 'AC1015'
doc.saveas(salida)
print(f"DXF preparado guardado: {salida}")
preparar_para_laser('diseno_con_anotaciones.dxf', 'listo_para_laser.dxf')
Conversiones relacionadas
Conversiones frecuentes del catálogo: