From 2af510361cbbb58eb93301dfa0f97103effc87e7 Mon Sep 17 00:00:00 2001 From: Xavi Ramirez Date: Tue, 27 May 2025 11:27:04 +0800 Subject: [PATCH 1/4] Added lineWeight support to dxf exporter --- packages/maker.js/src/core/dxf.ts | 33 ++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/packages/maker.js/src/core/dxf.ts b/packages/maker.js/src/core/dxf.ts index 6ac9e7076..3a8f77757 100644 --- a/packages/maker.js/src/core/dxf.ts +++ b/packages/maker.js/src/core/dxf.ts @@ -165,10 +165,11 @@ namespace MakerJs.exporter { return textEntity; } - function layerOut(layerId: string, layerColor: number) { + function layerOut(layerId: string, layerColor: number, layerLineWeight: number) { const layerEntity: DxfParser.Layer = { name: layerId, - color: layerColor + color: layerColor, + lineWeight: layerLineWeight }; return layerEntity; } @@ -195,7 +196,7 @@ namespace MakerJs.exporter { layerIds.forEach(layerId => { var layerOptions = colorLayerOptions(layerId); if (layerOptions) { - layerTable.layers[layerId] = layerOut(layerId, layerOptions.color); + layerTable.layers[layerId] = layerOut(layerId, layerOptions.color, layerOptions.lineWeight); } }); const tableName: DxfParser.TableNames = 'layer'; @@ -207,6 +208,9 @@ namespace MakerJs.exporter { var units = dxfUnit[opts.units]; doc.header["$INSUNITS"] = units; } + if (opts.enableLineWeight) { + doc.header["$LWDISPLAY"] = 1; + } } function entities(walkedPaths: IWalkPath[], chains: IChainOnLayer[], captions: (ICaption & { layer?: string })[]) { @@ -285,6 +289,7 @@ namespace MakerJs.exporter { map["LINE"] = function (line: DxfParser.EntityLINE) { append("0", "LINE", + "370", "-1", // Set line weight to -1 to use the layer's line weight "8", line.layer, "10", @@ -300,6 +305,7 @@ namespace MakerJs.exporter { map["CIRCLE"] = function (circle: DxfParser.EntityCIRCLE) { append("0", "CIRCLE", + "370", "-1", // Set line weight to -1 to use the layer's line weight "8", circle.layer, "10", @@ -313,6 +319,7 @@ namespace MakerJs.exporter { map["ARC"] = function (arc: DxfParser.EntityARC) { append("0", "ARC", + "370", "-1", // Set line weight to -1 to use the layer's line weight "8", arc.layer, "10", @@ -348,6 +355,7 @@ namespace MakerJs.exporter { map["POLYLINE"] = function (polyline: DxfParser.EntityPOLYLINE) { append("0", "POLYLINE", + "370", "-1", // Set line weight to -1 to use the layer's line weight "8", polyline.layer, "66", @@ -418,6 +426,9 @@ namespace MakerJs.exporter { "6", "CONTINUOUS" ); + if (layer.lineWeight) { + append("370", layer.lineWeight); + } } function lineTypeOut(lineType: DxfParser.LineType) { @@ -523,6 +534,11 @@ namespace MakerJs.exporter { * Text size for TEXT entities. */ fontSize?: number; + + /** + * Line weight to control the thickness of the lines drawn. + */ + lineWeight?: number; } /** @@ -544,6 +560,11 @@ namespace MakerJs.exporter { * Flag to use POLYLINE */ usePOLYLINE?: boolean; + + /** + * Flag to enable line weight. + */ + enableLineWeight?: boolean; } /** @@ -554,3 +575,9 @@ namespace MakerJs.exporter { layer: string; } } + +declare namespace DxfParser { + export interface Layer { + lineWeight?: number; + } +} From fe9c7463898e1832a5a94da11dacc60a0ffd560e Mon Sep 17 00:00:00 2001 From: Xavi Ramirez Date: Sat, 31 May 2025 17:38:04 +0900 Subject: [PATCH 2/4] Updated dxf unit test to include line weight codes --- packages/maker.js/test/dxf.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/maker.js/test/dxf.js b/packages/maker.js/test/dxf.js index 52fc6e26d..faf1433b0 100644 --- a/packages/maker.js/test/dxf.js +++ b/packages/maker.js/test/dxf.js @@ -28,10 +28,10 @@ describe('Export DXF', function() { '0', 'ENDSEC', '0', 'SECTION', '2', 'ENTITIES', - '0', 'LINE', '8', 'square', '10', '0', '20', '0', '11', '50', '21', '0', - '0', 'LINE', '8', 'square', '10', '50', '20', '0', '11', '50', '21', '50', - '0', 'LINE', '8', 'square', '10', '50', '20', '50', '11', '0', '21', '50', - '0', 'LINE', '8', 'square', '10', '0', '20', '50', '11', '0', '21', '0', + '0', 'LINE', '370', '-1', '8', 'square', '10', '0', '20', '0', '11', '50', '21', '0', + '0', 'LINE', '370', '-1', '8', 'square', '10', '50', '20', '0', '11', '50', '21', '50', + '0', 'LINE', '370', '-1', '8', 'square', '10', '50', '20', '50', '11', '0', '21', '50', + '0', 'LINE', '370', '-1', '8', 'square', '10', '0', '20', '50', '11', '0', '21', '0', '0', 'TEXT', '10', '25', '20', '25', '11', '25', '21', '25', '40', '4', '1', 'fold here', '50', '45', '8', 'square', '72', '4', '73', '0', '0', 'ENDSEC', '0', 'EOF' From 1ac2c1a6634f2faf294449a32581dc2c8ca28eaf Mon Sep 17 00:00:00 2001 From: Xavi Ramirez Date: Wed, 2 Jul 2025 20:08:26 -0500 Subject: [PATCH 3/4] Removed document level option --- packages/maker.js/src/core/dxf.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/packages/maker.js/src/core/dxf.ts b/packages/maker.js/src/core/dxf.ts index 3a8f77757..3ec08b726 100644 --- a/packages/maker.js/src/core/dxf.ts +++ b/packages/maker.js/src/core/dxf.ts @@ -208,9 +208,7 @@ namespace MakerJs.exporter { var units = dxfUnit[opts.units]; doc.header["$INSUNITS"] = units; } - if (opts.enableLineWeight) { - doc.header["$LWDISPLAY"] = 1; - } + doc.header["$LWDISPLAY"] = 1; } function entities(walkedPaths: IWalkPath[], chains: IChainOnLayer[], captions: (ICaption & { layer?: string })[]) { @@ -560,11 +558,6 @@ namespace MakerJs.exporter { * Flag to use POLYLINE */ usePOLYLINE?: boolean; - - /** - * Flag to enable line weight. - */ - enableLineWeight?: boolean; } /** From f4dbee987bda4fc9bb107a1fa54100a3adbcf672 Mon Sep 17 00:00:00 2001 From: Xavi Ramirez Date: Thu, 3 Jul 2025 16:49:15 -0500 Subject: [PATCH 4/4] Fixed DXF unit tests by adding header --- packages/maker.js/test/dxf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/maker.js/test/dxf.js b/packages/maker.js/test/dxf.js index faf1433b0..16f4647fe 100644 --- a/packages/maker.js/test/dxf.js +++ b/packages/maker.js/test/dxf.js @@ -20,7 +20,7 @@ describe('Export DXF', function() { .addTo(model, 'square'); const expected = [ - '0', 'SECTION', '2', 'HEADER', '9', '$INSUNITS', '70', '1', '0', 'ENDSEC', + '0', 'SECTION', '2', 'HEADER', '9', '$INSUNITS', '70', '1', '9', '$LWDISPLAY', '70', '1', '0', 'ENDSEC', '0', 'SECTION', '2', 'TABLES', '0', 'TABLE', '2', 'LTYPE', '0', 'LTYPE', '72', '65', '70', '64', '2', 'CONTINUOUS', '3', '______', '73', '0', '40', '0', '0', 'ENDTAB',