dxf-parser icon indicating copy to clipboard operation
dxf-parser copied to clipboard

Problem with parsing/showing ARC entity

Open mirh1 opened this issue 1 year ago • 3 comments

Hi,

I am not sure if this might rather be a three-dxf or dxf-parser issue but hoping this is the right place for my question:

We have an issue with showing some dxf files in dxf-viewer. Here we got a simplified example where you can see that in some cases an entity of Type ARC is not shown in its right position:

Arc

While other viewers that I used show the file correctly:

correctExample

By debugging the parsing process until reaching parseEntity(scanner, curr) in arc.js we noticed that the extrusion vector of the specific ARC entity (Group 210-230) is like (0, 0, -1) and also the x value of the arc.center has a reversed sign.

entity

For reproducing the problem see this example dxf below: example.zip

mirh1 avatar Mar 23 '23 13:03 mirh1

I don't maintain dxf-parser, but I was curious about this issue because I am looking at dxf-parser closely.

When I test, I am not getting extrusionDirectionX: -0.

import DxfParser from 'dxf-parser';
import * as fs from 'fs/promises';
const content = await fs.readFile('/path/to/example.dxf', {encoding: 'utf8'});
const parser = new DxfParser();
const dxf = parser.parse(content);
console.log(JSON.stringify(dxf));

The 2 arcs I see are:

    {
      "type": "ARC",
      "handle": "26",
      "ownerHandle": "1C",
      "inPaperSpace": false,
      "layer": "Cutting",
      "colorIndex": 7,
      "color": 16777215,
      "lineType": "Continuous",
      "lineweight": 0,
      "lineTypeScale": 1,
      "visible": true,
      "center": {
        "x": 33.9061329504177,
        "y": -33.9061329504178,
        "z": 0
      },
      "radius": 1.5,
      "extrusionDirectionX": 0,
      "extrusionDirectionY": 0,
      "extrusionDirectionZ": 1,
      "startAngle": 1.5707963267948966,
      "endAngle": 3.141592653589793,
      "angleLength": 1.5707963267948966
    },
   {
      "type": "ARC",
      "handle": "28",
      "ownerHandle": "1C",
      "inPaperSpace": false,
      "layer": "Cutting",
      "colorIndex": 1,
      "color": 16711680,
      "lineType": "Continuous",
      "lineweight": 0,
      "lineTypeScale": 1,
      "visible": true,
      "center": {
        "x": -30.9061329504177,
        "y": -35.9061329504178,
        "z": 0
      },
      "radius": 1.5,
      "extrusionDirectionX": 0,
      "extrusionDirectionY": 0,
      "extrusionDirectionZ": -1,
      "startAngle": 3.141592653589793,
      "endAngle": 4.71238898038469,
      "angleLength": 1.5707963267948966
    },

Notice, the handle values are different too. Are you sure you are using the same DXF? And was the parsed DXF json changed after parsing?

darcyparker avatar Mar 27 '23 19:03 darcyparker

Hi, thank you for taking a look at my issue! Yes, it is the same DXF (I renamed it, so the name in the screenshot differs). As you have tried the example by yourself, could you please tell me if the ARC entity was shown in correct position and looked like the second screenshot?

Edit: I just tried to open the DXF with three-dxf samples: Although the JSON looks different, the bug reminds the same. Please notice that the second ARC's x value (-35,90 here) has a positive sign in the alternative viewer I tried and that shows the ARC on correct position (see screenshots above). grafik

{ "type": "ARC", "handle": "26", "ownerHandle": "1C", "inPaperSpace": false, "layer": "Cutting", "colorIndex": 7, "color": 16777215, "lineType": "Continuous", "lineweight": 0, "lineTypeScale": 1, "visible": true, "center": { "x": 33.9061329504177, "y": -33.9061329504178, "z": 0 }, "radius": 1.5, "startAngle": 1.5707963267948966, "endAngle": 3.141592653589793, "angleLength": 1.5707963267948966 }, ... { "type": "ARC", "handle": "28", "ownerHandle": "1C", "inPaperSpace": false, "layer": "Cutting", "colorIndex": 1, "color": 16711680, "lineType": "Continuous", "lineweight": 0, "lineTypeScale": 1, "visible": true, "center": { "x": -30.9061329504177, "y": -35.9061329504178, "z": 0 }, "radius": 1.5, "startAngle": 3.141592653589793, "endAngle": 4.71238898038469, "angleLength": 1.5707963267948966 },

mirh1 avatar Apr 03 '23 05:04 mirh1

Sorry - I don't use three-dxf. So maybe that's where the bug is? I was just looking at the parser's results.

darcyparker avatar Apr 03 '23 11:04 darcyparker