LibreDWG / libredwg

Official mirror of libredwg. With CI hooks and nightly releases. PR's ok
https://savannah.gnu.org/projects/libredwg/
GNU General Public License v3.0
896 stars 222 forks source link

Problems with dimension arrowheads #663

Open timoria21 opened 1 year ago

timoria21 commented 1 year ago

Hello,

While trying to read the arrowheads of dimensions I encountered some problems.

I have created various .dwg files just for testing purposes, each one has different arrowheads: You can find them inside the attached file test.zip. For example:

First, if there is an Oblique arrowhead the generated .json file is blank. I mean, the .json file is generated, but without any entities/tables. Adding the -v9 argument shows many errors.

Second, looking at the DXF reference, the left arrowhead and the right arrowhead handles should be stored within the associated DIMSTYLE, in the DIMBLK1 and DIMBLK2 fields, respectively. But they are empty every time, is this normal? (I could be wrong here, they might be stored only if an override is happening, but I'm not sure)

Thanks,

Dave

michal-josef-spacek commented 1 year ago

@timoria21 When you look to e.g. ah_dot_dot: There is one DIMENSION_LINEAR entity:

Object number: 65/41, Size: 170 [MS], Type: 21 [BS], Address: 5327
Add entity DIMENSION_LINEAR [65] Decode entity DIMENSION_LINEAR
bitsize: 1312 [RL] @3.2
 Hdlsize: 48, hdl_dat: @164.0 - @170.0 (170)
 obj string stream +1311: @163.7 (1311) has_strings: 1
 @161.7 data_size: 2/0x2 [RS]
handle: 0.1.B9 [H 5]
EED[0] size: 49 [BS]
EED[0] handle: 5.1.12
EED[0] raw: 49
00060044005300540059004C00450002004657010500000000000000C846AD004601004658010500000000000000C80201
EED[0] code: 0 [RC], wstring: len=6 [RS] "DSTYLE" [TU]
EED[1] code: 2 [RC], open: 0x0 [RC]
EED[2] code: 70 [RC], short: 343 [RS]
EED[3] code: 5 [RC], entity: 0xC800000000000000 [ulong]
EED[4] code: 70 [RC], short: 173 [RS]
EED[5] code: 70 [RC], short: 1 [RS]
EED[6] code: 70 [RC], short: 344 [RS]
EED[7] code: 5 [RC], entity: 0xC800000000000000 [ulong]
EED[8] code: 2 [RC], close: 0x1 [RC]

EED[9] size: 0 [BS] (end)
num_eed: 9
preview_exists: 0 [B 0]
entmode: 2 [BB 0]
num_reactors: 0 [BL 0]
is_xdic_missing: 1 [B 0]
color.raw: 0x100 [BSx 0]
ltype_scale: 1.000000 [BD 48]
ltype_flags: 0 [BB 0]
plotstyle_flags: 0 [BB 0]
material_flags: 0 [BB 0]
shadow_flags: 0x0 [RC 284]
invisible: 0 [BS 60]
linewt: 0x1d [RC 370]
layer: (5.1.10) abs:10 [H 8] => LAYER 0
--common_size: 502
extrusion: (0.000000, 0.000000, 1.000000) [3BD 210]
text_midpt: (43.108596, 33.529627) [2RD 11]
elevation: 0.000000 [BD 31]
flag1: 0xb [RC 0]
flag => 0x20 [RC 70]
user_text: "" [TU 1]
text_rotation: 0.000000 [BD 53]  0º
horiz_dir: 0.000000 [BD 51]  0º
ins_scale: (1.000000, 1.000000, 1.000000) [3BD_1 0]
ins_rotation: 0.000000 [BD 54]
attachment: 5 [BS 71]
lspace_style: 1 [BS 72]
lspace_factor: 1.000000 [BD 41]
act_measurement: 12.445869 [BD 42]
unknown: 0 [B 73]
flip_arrow1: 0 [B 74]
flip_arrow2: 0 [B 75]
clone_ins_pt: (0.000000, 0.000000) [2RD 12]
xline1_pt: (36.885662, 32.764791, 0.000000) [3BD 13]
xline2_pt: (49.331530, 32.764791, 0.000000) [3BD 14]
def_pt: (49.331530, 33.529627, 0.000000) [3BD 0]
oblique_angle: 0.000000 [BD 52]  0º
dim_rotation: 0.000000 [BD 50]  0º
 handle stream: +18 @161.5 MISSING (@164.0  @166.0)
dimstyle: (5.1.27) abs:27 [H 0] => DIMSTYLE Standard
block: (5.1.BB) abs:BB [H 0]
 object_map{B9} = 65
 padding: 48/8 (6 bits)

DIMBLK1 and DIMBLK2 are defined in EED:

EED[2] code: 70 [RC], short: 343 [RS]
EED[3] code: 5 [RC], entity: 0xC800000000000000 [ulong]

and

EED[6] code: 70 [RC], short: 344 [RS]
EED[7] code: 5 [RC], entity: 0xC800000000000000 [ulong]

0xC800000000000000 mean HANDLE 0.1.C8 → _Dot block

DIMSAH is defined in EED:

EED[4] code: 70 [RC], short: 173 [RS]
EED[5] code: 70 [RC], short: 1 [RS]

There is an error in preview decoding.

michal-josef-spacek commented 1 year ago

Decoding of Oblique DWGs is with errors.

rurban commented 1 year ago

And the eed entity ulong's need to be byteswapped to get the handle

timoria21 commented 1 year ago

Thank you for the tests, now it's clear to me how to get these information.

But how are you generating that log exactly? For some reasons I can't make it work on my end.

This is what I'm doing (powershell): ...\libredwg-0.12.5.5186-win64\dwgread.exe' -v9 -o .\ah_dot_dot.json .\ah_dot_dot.dwg 2>&1 > log.txt

But the arrowhead handle is still 0 and overall I see a different output.

image

log.txt

michal-josef-spacek commented 1 year ago

But how are you generating that log exactly? For some reasons I can't make it work on my end.

In Linux:

dwgread -v9 ah_dot_dot.dwg |& less

Output:

...
handle: 0.1.B9 [H 5] @7.2
EED[0] size: 49 [BS] @8.4
EED[0] handle: 5.1.12 @10.4
EED[0] raw: 49
00060044005300540059004C00450002004657010500000000000000C846AD004601004658010500000000000000C80201
      D   S   T   Y   L   E       F W                     F     F     F X                         
EED[0] code: 0 [RC], wstring: len=6 [RS] "DSTYLE" [TU] @25.4
EED[1] code: 2 [RC], open: 0x0 [RC] @27.4
EED[2] code: 70 [RC], short: 343 [RS] @30.4
EED[3] code: 5 [RC], entity: 0xC800000000000000 [ulong] @39.4
EED[4] code: 70 [RC], short: 173 [RS] @42.4
EED[5] code: 70 [RC], short: 1 [RS] @45.4
EED[6] code: 70 [RC], short: 344 [RS] @48.4
EED[7] code: 5 [RC], entity: 0xC800000000000000 [ulong] @57.4
EED[8] code: 2 [RC], close: 0x1 [RC] @59.4
 @59.4
EED[9] size: 0 [BS] (end)
num_eed: 9
...
timoria21 commented 1 year ago

Hello,

I'm testing on a Windows 10 OS [Version 22H2 (OS Build 19045.2728)] and somehow the output of EED[3] and EED[7] is different.

EED[0] code: 0 [RC], wstring: len=6 [RS] ""DSTYLE"" [TU] @25.4
EED[1] code: 2 [RC], open: 0x0 [RC] @27.4
EED[2] code: 70 [RC], short: 343 [RS] @30.4
EED[3] code: 5 [RC], entity: 0x0 [ulong] @39.4
EED[4] code: 70 [RC], short: 173 [RS] @42.4
EED[5] code: 70 [RC], short: 1 [RS] @45.4
EED[6] code: 70 [RC], short: 344 [RS] @48.4
EED[7] code: 5 [RC], entity: 0x0 [ulong] @57.4
EED[8] code: 2 [RC], close: 0x1 [RC] @59.4

I keep getting entity: 0x0 instead of the right handle code. As you can see the rest is OK.

I tried with these two versions of libreDWG: Release 0.12.5 Release 0.12.5.5186

I haven't done any changes to the code and I'm just using the .exe file.

What could be wrong here? Is it the OS?

Thanks,

Dave

michal-josef-spacek commented 1 year ago

Files in this issue: