DXF Viewer plugin 1.5.0.0 for Total Commander =============================================== * License: ----------- Copyright (C) 2026 by Thomas Beutlich This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt * Installation: ---------------- Open the plugin archive using Total Commander and installation will start. * Description: --------------- DXF Viewer is a lister plugin (WLX) for Total Commander to display DXF/DWG files as interactive 2-D views using GDI+. Supported file formats: o DXF (Drawing Exchange Format) o DWG (Drawing) Features: o 2-D GDI+ rendering of DXF/DWG geometry o TrueType font support for TEXT/MTEXT rendering o Mouse interaction: left-drag to pan, wheel to zoom o CTRL + left-drag to zoom to selection o Right-click context menu for layer visibility control o Double-click to fit view o Keyboard navigation: arrow keys for panning, +/- for zoom, HOME to reset view o Copy to clipboard o Dark mode support o Background file loading * ChangeLog: ------------- o Version 1.5.0.0 (21.06.2026) - added entity hover highlight: green semi-transparent overlay around hovered entity - added handle-based bbox aggregation for HATCH hover highlight (full hull, not just fill line) - added click-to-cycle through overlapping entities (left click, like ezdxf Qt viewer) - improved LWPOLYLINE hit test: per-segme nt distance (straight + bulge arc) instead of bbox only - added hit test for LWPOLYLINE in block primitives - added Aligned (halign=3) text: height and angle now computed from alignment points - added Fit (halign=5) text: width scale and angle computed from alignment points - added text generation flags (code 71): backward and upside-down mirroring - added XCLIP (SPATIAL_FILTER) entity support for block reference clipping (INSERT) - changed resize behavior: re-fit drawing to viewport on every resize (like ezdxf Qt viewer) - fixed Fit (halign=5) text bounding box to account for width scale - fixed ATTDEF rendering: ATTRIB values from INSERT now override the ATTDEF default text - fixed ATTDEF standalone display: show TAG instead of default VALUE (raw ATTDEF in modelspace) - fixed MINSERT: expand grid (colcount × rowcount) into individual INSERT primitives - fixed HATCH spline boundary: evaluate B-spline curves via De Boor's algorithm instead of using raw control points - fixed multiple solid HATCH (SOLID pattern) boundaries: outer fill combined with inner holes via GraphicsPath FillMode::Alternate instead of separate overlapping filled polygons - fixed MTEXT caret encoding (^c): all DXF caret control codes now decode via chr(c ^ 0x40) matching AutoCAD/ezdxf — ^J = 0x0A (line break), ^I = 0x09 (tab→space since GDI+ can't render control chars), ^[space] = literal caret, ^A..^Z = control chars 1-26, ^a..^z = !..:, etc. - fixed MTEXT default width: only apply explicit width (data.widthscale != 1.0) to prevent spurious word-wrap with 1-unit maxWidth - fixed TEXT rendering transform order: mirror (textgen) applied in local text space first, then scale (width factor), then rotate — fixes condensed rotated text being sheared - fixed TEXT rotation sign: restored correct GDI+ RotateAt direction for clockwise text rotation - fixed TEXT width factor (group code 41): now properly populated from DXF data for non-Aligned/Fit text, supporting condensed/expanded text - fixed MTEXT word distribution for wide layout rectangles: multi-word content with width much larger than natural text width now distributes words evenly across the full layout rectangle, matching DXF intent for left-aligned MTEXT - fixed MTEXT vertical text (flow direction code 72 = 3, Top-to-Bottom): characters stack vertically in columns with proper column advance based on fontSize × 1.25 × lineSpacingFactor - fixed Aligned (halign=3) and Fit (halign=5) text position: text baseline now starts at basePoint instead of midpoint, so the rendered text aligns with the reference line as in AutoCAD/ezdxf - libdxfrw: added SPATIAL_FILTER object raw data capture - libdxfrw: fixed DXF CLASS record parsing to skip malformed records o Version 1.4.0.0 (19.06.2026) - added MESH (AcDbSubDMesh) entity wireframe rendering - added DIMARC entity support - added MTEXT paragraph alignment (\pq formatting code) - added MTEXT Unicode codepoint escape (\U+XXXX) - added MTEXT non-breaking space (\~ renders as U+00A0) - fixed ellipse bounding box using minor axis length - fixed SPLINE rendering to prefer control points over fit points when both are present - fixed MTEXT line spacing to use AutoCAD convention (factor × 5/3 × height) - improved MTEXT rendering with paragraph alignment and word-wrapping for width-constrained text - libdxfrw: added initial DWG 2013/2018 format support - libdxfrw: added TOLERANCE entity read/write support - libdxfrw: added proxy graphics decoding for legacy DWG blocks - libdxfrw: added MESH (AcDbSubDMesh) decode and polyline face rendering - libdxfrw: added AcDbSurface family dispatch for DWG read coverage - libdxfrw: added SHAPE entity DWG encode and write API - libdxfrw: added HELIX entity DWG read and encode - libdxfrw: added OLE2FRAME entity DWG encode (R2000+) - libdxfrw: added IMAGE encode with imagedefreactor and display properties - libdxfrw: added GROUP entity members emitted as hard pointers - libdxfrw: added LEADER block-color, annotation, and direction/offset groups - libdxfrw: added LAYOUT object read from OBJECTS section for paper-space tab names - libdxfrw: added block-attribute ATTRIBs read/write on INSERT entities - libdxfrw: added ATTRIB field-length (code 73) and valign (code 74) read/write - libdxfrw: added DICTIONARY, GROUP, SCALE, MLINESTYLE, SUN, WIPEOUTVARIABLES, RASTERVARIABLES, DICTIONARYVAR object readers - libdxfrw: added PLOTSETTINGS full field set read/write (shared with LAYOUT prefix) - libdxfrw: added DIMSTYLE handle and R2007/R2010 members with dedup - libdxfrw: added UCS full DWG parse (origin/axes/elevation/orthoType) - libdxfrw: added MINSERT column/row/spacing grid DWG write - libdxfrw: added lossless raw-passthrough for unmodeled ENTITIES and OBJECTS - libdxfrw: added collision-free handle allocator with $HANDSEED emission - libdxfrw: added CLASSES records for unmodeled custom entities and objects - libdxfrw: added entity invisibleFlag (code 60) DWG read/write - libdxfrw: added entity reactor/xdict handle persistence - libdxfrw: fixed MTEXT group-3/1 chunking on codepoint boundaries (DBCS-safe) - libdxfrw: fixed POINT xAxisAngle (code 50) degree/radian conversion - libdxfrw: fixed LTYPE dash pattern rendering (one style handle per dash) - libdxfrw: fixed HATCH boundary spline interpolation and per-loop boundary handles - libdxfrw: fixed DWG R2004+ section read buffer model and LZ77 decompression - libdxfrw: fixed LZ77 AC18 bit-3 offset extension (opcodes 0x12-0x1F) - libdxfrw: fixed DWG IMAGE clip boundary type (code 71) handling - libdxfrw: fixed IMAGE/XRECORD truncation hardening and diagnostic logging - libdxfrw: fixed DIMENSION rotation guard and R2010 gate - libdxfrw: fixed CIRCLE/ARC thickness and extrusion emission in DXF - libdxfrw: fixed SORTENTSTABLE handle-stream desync - libdxfrw: fixed OLE2FRAME trailing RC byte to prevent handle-stream desync - libdxfrw: fixed DXF entity material (347) and plotstyle (390) version gating - libdxfrw: fixed CLASSES CRC mismatch as warn-only instead of whole-drawing-fatal - libdxfrw: fixed LWPolyline copy/assign to carry vertexnum and reset build pointer - libdxfrw: fixed broken pre-2004 entity-chain link no longer fails BLOCKS - libdxfrw: fixed LAYOUT viewportCount bounded before reserve (corrupt-input DoS) - libdxfrw: fixed handle-wrap assertion via HandleAllocator - libdxfrw: fixed DWG codepage mapping for non-Western locales (Cyrillic, Chinese, Japanese, Korean) - libdxfrw: fixed LAYOUT viewport_count bit-length decoding for AC1018+ files - libdxfrw: fixed MLINESTYLE per-element linetype index version gate for R2000–R2013 files - libdxfrw: fixed raw-net numeric-group capture corruption on DXF read - libdxfrw: fixed raw-net binary-chunk capture and reactor owner mis-latch on DXF read - libdxfrw: fixed POLYLINE_MESH smooth M/N subdivision density discarded on DWG read - libdxfrw: fixed DimOrdinate coordinate-type flag bit alignment (X/Y ordinate type) - libdxfrw: fixed ATTRIB/ATTDEF lockPosition read version gate (R2007+) - libdxfrw: fixed DWG header key names for DIMADEC/DIMFRAC - libdxfrw: fixed IMAGEDEF pixel dimensions discarded on DWG read - libdxfrw: improved DWG file parsing robustness (CRC validation, buffer bounds, truncation checks) o Version 1.3.0.0 (14.06.2026) - added status bar toggle (press B) with zoom, viewport and entity information - added IMAGE/IMAGEDEF entity support (raster image references) - fixed HATCH boundary collection for lines, circles, polylines, and arcs - fixed ACAD_TABLE entity rendering - improved MTEXT rendering with GDI+ word-wrapping for width-constrained text - libdxfrw: added ACAD_TABLE entity dispatch - libdxfrw: fixed MTEXT Embedded Object (code 101) handling - libdxfrw: fixed HATCH arc complementary angle conversion for CW arcs - libdxfrw: fixed HATCH DWG pattern line angle/offset to use world-frame convention o Version 1.2.1.0 (03.06.2026) - fixed: optimize rendering performance - fixed HATCH pattern lines - libdxfrw: fixed reading pattern lines from DWG file o Version 1.2.0.0 (01.06.2026) - added TrueType font support using XDATA font family names - fixed ByBlock and ByLayer color inheritance for entities on layer "0" in blocks - fixed: optimize rendering performance - fixed MLINE justification (offset positioning for Top/Bottom styles) - fixed 3D projection for circles, arcs, ellipses, 3DFACE, LWPolyline - fixed: keep center point invariant on +/- zoom - improved line type rendering with global LTSCALE, dot support, and custom patterns - libdxfrw: added ATTDEF, 3DSOLID entity dispatch and ACDSDATA section parsing - libdxfrw: fixed HELIX entity parsing to capture entity-level properties - libdxfrw: fixed parsing HATCH pattern definition lines - libdxfrw: improved load performance o Version 1.1.0.0 (27.05.2026) - added right-click context menu for layer visibility toggle - added zoom-to-selection via Ctrl+Left-drag - added layer visibility filtering for block (INSERT) entities - added auto-discovery of layers not defined in the LAYER table - fixed layer "0" entities in blocks to correctly inherit INSERT layer - fixed arrow key navigation direction - libdxfrw: fixed DIMENSION block name resolution with offset-based handles - libdxfrw: fixed Dynamic Block name resolution for INSERT entities - libdxfrw: fixed entity visible property from invisible flag - libdxfrw: fixed out-of-bounds access and buffer checks o Version 1.0.2.0 (25.05.2026) - added support for MLINE/XLINE - fixed Unicode path issue - fixed: do not reset zoom on resize - improved HATCH support - improved heuristic on initial zoom scale - rebuilt with patched libdxfrw from LibreCAD - libdxfrw: added wide-string file path support - libdxfrw: fixed DWG codepage mapping for non-Western encodings o Version 1.0.1.1 (22.05.2026) - rebuilt with patched libdxfrw o Version 1.0.1.0 (21.05.2026) - added DWG (Drawing) file format support - added font family matching for text rendering - added true color (24-bit) support for entities and layers - added solid fill rendering for HATCH - fixed line weight rendering - fixed MTEXT formatting codes leaking into displayed text - fixed arc direction rendering - fixed text width estimation for multi-byte (CJK) characters - libdxfrw: fixed text encoding corruption when viewing multiple DWG files o Version 1.0.0.1 (19.05.2026) - first public version - built with libdxfrw, win-iconv * References: -------------- o libdxfrw: C++ library to read and write DXF/DWG files - https://github.com/LibreCAD/LibreCAD/commits/master/libraries/libdxfrw o win-iconv: Lightweight iconv implementation for Windows - https://github.com/win-iconv/win-iconv o WLX Writer's Reference by Christian Ghisler - https://ghisler.github.io/WLX-SDK * Trademark and Copyright Statements: -------------------------------------- o Total Commander is Copyright (C) 1993-2026 by Christian Ghisler, Ghisler Software GmbH. - https://www.ghisler.com * Feedback: ------------ If you have problems, questions, suggestions please contact Thomas Beutlich. o Email: support@tbeu.de o URL: http://tbeu.totalcmd.net