Todo lo que esta página afirma tiene una corrida que lo respalda: o un oráculo
externo (AutoCAD 2027 real, libredwg, pyshp) o una batería de tests pública
en el repositorio. Los números citan su tanda en el historial del proyecto
(PROGRESO.md), donde está el método de cada uno.
| Claim | Resultado | Oráculo |
|---|---|---|
| Kit de escritura nativa R2000/2004/2010/2013/2018 (add, modify, borrado moderno, xref, ltype, downsave, dimassoc) | 31/31 OK | AutoCAD 2027 real (accoreconsole) |
| QSAVE round-trip: AutoCAD abre nuestro DWG, lo re-guarda con SU encoder, nuestro reader lo relee con censo exacto | 8/8 OK | AutoCAD 2027 + parser propio |
| DIMASSOC (cotas asociativas escritas por nosotros): byte-por-byte idéntico al de AutoCAD y re-vincula en vivo al editar la geometría | ✓ probado | AutoCAD 2027 (MOVE sobre la entidad base) |
| Expediente municipal como DWG nativo: un DWG R2010 por lámina en paper space, layout "LAMINA n DE N", cajetín, capas conservadas | AUDIT 0 errores | AutoCAD 2027 (_AUDIT, ambas láminas) |
| Registros STYLE y DIMSTYLE (~80 campos R2007+) editables con write-back nativo: re-emisión sin cambios bit-idéntica al original | AUDIT 0 errores | dwgread + AutoCAD 2027 |
| Lectura de planos municipales reales (XREF, MLEADER, ACAD_TABLE, WIPEOUT, MLINE, cotas de todas las familias) con justificación exacta | 6/6 anclas idénticas | PDF AutoCAD vs visor, fixture controlado |
| Batería de tests del proyecto | 1760 passed · 0 failed | pytest (25-jul-2026, 9ª tanda) |
| Smoke de la suite instalada (la app empaquetada, no el server dev): planos demo, civil, expediente, loteo | ✓ OK | API real del build 2026.12 |
Sin ODA ni libredwg en la escritura: el encoder es propio, bit a bit contra la especificación pública del formato (ODA DWG spec) y validado contra AutoCAD real — no solo contra lectores tolerantes.
Estos tres dibujos no son maquetas: son planos municipales reales del
corpus, leídos por el parser propio y redibujados por el renderer propio.
Cada uno se regenera con python tools/render_svg.py <plano.dwg>
<salida.svg> — si el parser se rompiera, se vería aquí.
Son SVG vectoriales, no capturas de pantalla: se pueden abrir y medir. Lo que ves es exactamente lo que el visor dibuja.
| Claim | Resultado | Oráculo |
|---|---|---|
| Parser SHX/SHP propio (opcodes completos: vectores, arcos octante/fraccional, bulges, subformas) | 286 glifos romans correctos | ezdxf.fonts.shapefile (librería independiente) |
| Registros STYLE decodificados (layout ODA) en planos reales | 25/25 archivos R14→2018 | corpus municipal (219 DWG) |
| Texto renderizado con la tipografía real del estilo (romans/txt/isocp) y word-wrap con métricas reales | ✓ verificado en vivo | planos SERVIU con 685+ textos |
| Compilador .SHX propio: generamos nuestras fuentes de trazo (142 glifos latinos / 2.693 completos) en formato unifont 1.0, sin copiar un byte de Autodesk | ezdxf las abre · 'A' a 21/21 | ezdxf.fonts.shapefile (lector independiente) |
Los .shx de Autodesk NO se redistribuyen: se leen del AutoCAD
(u otro CAD) del cliente o de ~/.spiralcad/fonts. Y para el
cliente que no tiene ningún CAD instalado, desde 2026.12 va el set PROPIO
compilado por nosotros (tools/generar_shx.py); como deriva de las
fuentes LFF de LibreCAD es GPL v2+ y viaja como archivo de datos aparte con su
aviso de licencia. Nadie se queda sin tipografía técnica.
| Claim | Resultado | Oráculo |
|---|---|---|
| Escritor .shp/.shx/.dbf propio (anillos exterior CW / hoyos CCW según spec ESRI) + .prj UTM 19S | ✓ formato válido | pyshp (librería independiente) |
| Round-trip exportar → importar contra el visor | geometría exacta | verificación en vivo |
| Reproyección real entre datums (PSAD56 / SAD69 / SIRGAS-Chile) y husos UTM 18S-19S: se transforma la GEOMETRÍA vértice a vértice, no solo el rótulo del .prj | round-trip <1 mm · arco de meridiano ±0,06 mm | integración numérica independiente (no la misma serie) |
Por qué importa: el catastro chileno llega en PSAD56 y el proyecto se dibuja en SIRGAS. Superponerlos sin transformar corre el plano ~400 m en Chile central — el lote equivocado. Cada datum declara su fuente EPSG y su exactitud (los parámetros publicados son promedios regionales, del orden de 1-6 m: sirven para catastro y proyecto vial, no para geodesia de precisión), y se pueden reemplazar por los del IGM de tu zona.
| Claim | Resultado | Oráculo |
|---|---|---|
| Secciones transversales a lámina A3 (grilla terreno vs subrasante, áreas C/R, escala unificada) | ✓ PDF válido multipágina | terreno sintético verificable (plano inclinado) |
| Perfil de red sanitaria a lámina (terreno, tuberías con Ø/pendiente/largo, cámaras fondo→tapa, banda de datos) | ✓ PDF válido | red de 3 pozos con cotas conocidas |
| Cuantías del movimiento de tierras (áreas medias + Bruckner) a CSV (Excel) y lámina A4 | corte/relleno ≈ fórmula cerrada | terreno plano inclinado, W·d + s·d² |
| Loteo con calle interna: parcelas por área objetivo con frente mínimo SOBRE la calle | áreas ±1% · cobertura ±1% | rectángulo y trapecio de área conocida |
| Curvas de nivel del TIN con rótulos de cota orientados, maestras cada 5ª | rectas x=(cota−100)/0.01 | terreno sintético plano inclinado |
| Terreno DESDE curvas de nivel (plano o shapefile de catastro) con cada curva forzada como línea de quiebre en la triangulación | cota interpola entre curvas | cono sintético de cota conocida |
| Cuantías del corredor por estructura: m² desarrollados de pavimento/bermas/aceras/taludes (corte y relleno por separado) y m³ por capa | = fórmula cerrada ±1e-3 | terraplén de talud 2:1 sobre terreno plano |
| Sección tipo POR SECTORES en un mismo eje (urbano con solera y acera / rural con cuneta) | cada código solo en su tramo | eje sintético de 100 m, 2 sectores |
| Renderer del visor: 19k trazos visibles; LOD de textos <3px; caches bbox/bloques | ~8 ms/frame | playwright A/B con plano sintético 40k |
Honestidad de la medición: con 15.000 textos a zoom de lectura el
canvas 2D toca su piso (~136 ms, igual con y sin batch — el costo es el
fillText nativo). La respuesta para ese tramo es el renderer WebGL
del roadmap; el resto del visor ya vuela.
El kit completo de validación se regenera y corre con un comando (requiere AutoCAD instalado para la parte del oráculo):
python tools/validacion_autocad.py # kit 31/31 + QSAVE round-trip python tools/audit_accoreconsole.py # apertura en AutoCAD real pytest tests/ # batería completa del proyecto python scratch_audit/smoke_suite.py # smoke de la suite INSTALADA
Todo el método forense (series D/E/P, swaps de page map,
caminatas de handles) quedó documentado en PROGRESO.md y
scratch_audit/ del repositorio.
| Área | Estado declarado |
|---|---|
| R2007 write AutoCAD-STRICT (semilla CRC64) | Investigación abierta — dwgread lo acepta y el QSAVE round-trip pasa; el CRC64 estricto no está cerrado. Barrido del 25-jul: 0 aciertos en ~200 combinaciones (8 regiones candidatas × polaridad normal/reflejada × xor-out × 4 semillas) contra los 8 AC1021 reales del corpus. No es un pendiente, es reversing sin resolver — y tiene poco premio: la ruta limpia a R2007 ya existe (downsave a R2010 y editar la copia) |
| Bloques dinámicos de AutoCAD (formato real) | ESCRITURA pendiente: exige el grafo de evaluación completo (parámetros + acciones + grips consistentes) — hoy va el fallback nativo por estados, re-editable. LECTURA: alcanzable y en carpeta — la afirmación anterior ("ni libredwg lo tiene") era falsa y se corrigió el 25-jul |
| Reproyección de datums (GIS) | CERRADO en 2026.12 (ver sección 3). El límite que queda es de EXACTITUD, no de capacidad: los parámetros de datum son los promedios regionales publicados por EPSG (1-6 m), no una grilla NTv2 — para geodesia de precisión hay que cargar los parámetros del IGM de la zona |
| Revit / BIM profesional | Por diseño: interop IFC4+BCF, no paridad |
| Textos masivos a zoom de lectura | Piso del canvas 2D medido (sección 4) — WebGL en roadmap |
FICHA TÉCNICA La ficha completa del producto está en ficha-tecnica.html.