From dcfe2e0b944fe19998d889ce162b3871fe683288 Mon Sep 17 00:00:00 2001 From: Reini Urban Date: Mon, 14 Oct 2024 23:24:37 +0200 Subject: [PATCH 1/2] promote DIMASSOC to unstable lots of coverage --- bindings/dwg.i | 4 ++-- include/dwg.h | 15 +++++++-------- include/dwg_api.h | 8 ++++---- src/classes.inc | 2 +- src/dwg.spec | 16 ++++++++-------- src/dwg_api.c | 7 +++---- src/objects.c | 2 +- src/objects.in | 2 +- test/unit-testing/common.c | 25 +++++++++++++++++++++++++ test/unit-testing/dimassoc.c | 12 ++++++++---- 10 files changed, 60 insertions(+), 33 deletions(-) diff --git a/bindings/dwg.i b/bindings/dwg.i index 8e6e9e33a6..4b2d8928ff 100644 --- a/bindings/dwg.i +++ b/bindings/dwg.i @@ -421,6 +421,7 @@ EXPORT Dwg_Object_BLOCKXYGRIP** dwg_getall_BLOCKXYGRIP (Dwg_Data* dwg); EXPORT Dwg_Object_BLOCKXYPARAMETER** dwg_getall_BLOCKXYPARAMETER (Dwg_Data* dwg); EXPORT Dwg_Object_DATALINK** dwg_getall_DATALINK (Dwg_Data* dwg); EXPORT Dwg_Object_DBCOLOR** dwg_getall_DBCOLOR (Dwg_Data* dwg); +EXPORT Dwg_Object_DIMASSOC** dwg_getall_DIMASSOC (Dwg_Data* dwg); EXPORT Dwg_Object_EVALUATION_GRAPH** dwg_getall_EVALUATION_GRAPH (Dwg_Data* dwg); EXPORT Dwg_Object_FCFOBJECTCONTEXTDATA** dwg_getall_FCFOBJECTCONTEXTDATA (Dwg_Data* dwg); EXPORT Dwg_Object_GRADIENT_BACKGROUND** dwg_getall_GRADIENT_BACKGROUND (Dwg_Data* dwg); @@ -485,7 +486,6 @@ EXPORT Dwg_Object_ASSOCARRAYRECTANGULARPARAMETERS** dwg_getall_ASSOCARRAYRECTANG EXPORT Dwg_Object_CSACDOCUMENTOPTIONS** dwg_getall_CSACDOCUMENTOPTIONS (Dwg_Data* dwg); EXPORT Dwg_Object_CURVEPATH** dwg_getall_CURVEPATH (Dwg_Data* dwg); EXPORT Dwg_Object_DATATABLE** dwg_getall_DATATABLE (Dwg_Data* dwg); - EXPORT Dwg_Object_DIMASSOC** dwg_getall_DIMASSOC (Dwg_Data* dwg); EXPORT Dwg_Object_DMDIMOBJECTCONTEXTDATA** dwg_getall_DMDIMOBJECTCONTEXTDATA (Dwg_Data* dwg); EXPORT Dwg_Object_DYNAMICBLOCKPROXYNODE** dwg_getall_DYNAMICBLOCKPROXYNODE (Dwg_Data* dwg); EXPORT Dwg_Object_GEOMAPIMAGE** dwg_getall_GEOMAPIMAGE (Dwg_Data* dwg); @@ -751,6 +751,7 @@ EXPORT Dwg_Object_BLOCKXYGRIP* dwg_object_to_BLOCKXYGRIP (Dwg_Object* obj); EXPORT Dwg_Object_BLOCKXYPARAMETER* dwg_object_to_BLOCKXYPARAMETER (Dwg_Object* obj); EXPORT Dwg_Object_DATALINK* dwg_object_to_DATALINK (Dwg_Object* obj); EXPORT Dwg_Object_DBCOLOR* dwg_object_to_DBCOLOR (Dwg_Object* obj); +EXPORT Dwg_Object_DIMASSOC* dwg_object_to_DIMASSOC (Dwg_Object* obj); EXPORT Dwg_Object_EVALUATION_GRAPH* dwg_object_to_EVALUATION_GRAPH (Dwg_Object* obj); EXPORT Dwg_Object_FCFOBJECTCONTEXTDATA* dwg_object_to_FCFOBJECTCONTEXTDATA (Dwg_Object* obj); EXPORT Dwg_Object_GRADIENT_BACKGROUND* dwg_object_to_GRADIENT_BACKGROUND (Dwg_Object* obj); @@ -815,7 +816,6 @@ EXPORT Dwg_Object_ASSOCARRAYRECTANGULARPARAMETERS* dwg_object_to_ASSOCARRAYRECTA EXPORT Dwg_Object_CSACDOCUMENTOPTIONS* dwg_object_to_CSACDOCUMENTOPTIONS (Dwg_Object* obj); EXPORT Dwg_Object_CURVEPATH* dwg_object_to_CURVEPATH (Dwg_Object* obj); EXPORT Dwg_Object_DATATABLE* dwg_object_to_DATATABLE (Dwg_Object* obj); - EXPORT Dwg_Object_DIMASSOC* dwg_object_to_DIMASSOC (Dwg_Object* obj); EXPORT Dwg_Object_DMDIMOBJECTCONTEXTDATA* dwg_object_to_DMDIMOBJECTCONTEXTDATA (Dwg_Object* obj); EXPORT Dwg_Object_DYNAMICBLOCKPROXYNODE* dwg_object_to_DYNAMICBLOCKPROXYNODE (Dwg_Object* obj); EXPORT Dwg_Object_GEOMAPIMAGE* dwg_object_to_GEOMAPIMAGE (Dwg_Object* obj); diff --git a/include/dwg.h b/include/dwg.h index 6ebeb22473..6d37083a0b 100644 --- a/include/dwg.h +++ b/include/dwg.h @@ -5333,8 +5333,7 @@ typedef struct _dwg_object_DATALINK } Dwg_Object_DATALINK; /** - Object DIMASSOC (varies) DEBUGGING - --enable-debug only + Object DIMASSOC (varies) unstable */ typedef struct _dwg_DIMASSOC_Ref { @@ -5359,11 +5358,11 @@ typedef struct _dwg_object_DIMASSOC { struct _dwg_object_object *parent; BITCODE_H dimensionobj; - BITCODE_BL associativity; /*!< DXF 90, bitmask 0-15*/ + BITCODE_BL associativity; /*!< DXF 90, bitmask 0-15 */ BITCODE_B trans_space_flag; /*!< DXF 70 boolean */ - BITCODE_RC rotated_type; /*!< DXF 71 */ - Dwg_DIMASSOC_Ref *ref; /* 1-4x, with possible holes, - depend. on associativity bitmask */ + BITCODE_RC rotated_type; /*!< DXF 71 */ + Dwg_DIMASSOC_Ref *ref; /* 1-4x, with possible holes, + depends on associativity bitmask */ } Dwg_Object_DIMASSOC; typedef struct _dwg_ACTIONBODY @@ -8921,6 +8920,7 @@ typedef struct _dwg_object_object Dwg_Object_BLOCKXYPARAMETER *BLOCKXYPARAMETER; Dwg_Object_DATALINK *DATALINK; Dwg_Object_DBCOLOR *DBCOLOR; + Dwg_Object_DIMASSOC *DIMASSOC; Dwg_Object_EVALUATION_GRAPH *EVALUATION_GRAPH; Dwg_Object_FCFOBJECTCONTEXTDATA *FCFOBJECTCONTEXTDATA; Dwg_Object_GRADIENT_BACKGROUND *GRADIENT_BACKGROUND; @@ -8985,7 +8985,6 @@ typedef struct _dwg_object_object Dwg_Object_CSACDOCUMENTOPTIONS *CSACDOCUMENTOPTIONS; Dwg_Object_CURVEPATH *CURVEPATH; Dwg_Object_DATATABLE *DATATABLE; - Dwg_Object_DIMASSOC *DIMASSOC; Dwg_Object_DMDIMOBJECTCONTEXTDATA *DMDIMOBJECTCONTEXTDATA; Dwg_Object_DYNAMICBLOCKPROXYNODE *DYNAMICBLOCKPROXYNODE; Dwg_Object_GEOMAPIMAGE *GEOMAPIMAGE; @@ -10312,6 +10311,7 @@ EXPORT int dwg_setup_BLOCKXYGRIP (Dwg_Object *obj); EXPORT int dwg_setup_BLOCKXYPARAMETER (Dwg_Object *obj); EXPORT int dwg_setup_DATALINK (Dwg_Object *obj); EXPORT int dwg_setup_DBCOLOR (Dwg_Object *obj); +EXPORT int dwg_setup_DIMASSOC (Dwg_Object *obj); EXPORT int dwg_setup_EVALUATION_GRAPH (Dwg_Object *obj); EXPORT int dwg_setup_FCFOBJECTCONTEXTDATA (Dwg_Object *obj); EXPORT int dwg_setup_GRADIENT_BACKGROUND (Dwg_Object *obj); @@ -10401,7 +10401,6 @@ EXPORT int dwg_setup_ASSOCARRAYRECTANGULARPARAMETERS (Dwg_Object *obj); EXPORT int dwg_setup_CSACDOCUMENTOPTIONS (Dwg_Object *obj); EXPORT int dwg_setup_CURVEPATH (Dwg_Object *obj); EXPORT int dwg_setup_DATATABLE (Dwg_Object *obj); - EXPORT int dwg_setup_DIMASSOC (Dwg_Object *obj); EXPORT int dwg_setup_DMDIMOBJECTCONTEXTDATA (Dwg_Object *obj); EXPORT int dwg_setup_DYNAMICBLOCKPROXYNODE (Dwg_Object *obj); EXPORT int dwg_setup_GEOMAPIMAGE (Dwg_Object *obj); diff --git a/include/dwg_api.h b/include/dwg_api.h index c73bfdd7bc..22d6016ec6 100644 --- a/include/dwg_api.h +++ b/include/dwg_api.h @@ -824,6 +824,7 @@ extern "C" typedef struct _dwg_object_BLOCKXYPARAMETER dwg_obj_blockxyparameter; typedef struct _dwg_object_DATALINK dwg_obj_datalink; typedef struct _dwg_object_DBCOLOR dwg_obj_dbcolor; + typedef struct _dwg_object_DIMASSOC dwg_obj_dimassoc; typedef struct _dwg_object_EVALUATION_GRAPH dwg_obj_evaluation_graph; typedef struct _dwg_object_FCFOBJECTCONTEXTDATA dwg_obj_fcfobjectcontextdata; typedef struct _dwg_object_GRADIENT_BACKGROUND dwg_obj_gradient_background; @@ -917,7 +918,6 @@ extern "C" typedef struct _dwg_object_CSACDOCUMENTOPTIONS dwg_obj_csacdocumentoptions; typedef struct _dwg_object_CURVEPATH dwg_obj_curvepath; typedef struct _dwg_object_DATATABLE dwg_obj_datatable; - typedef struct _dwg_object_DIMASSOC dwg_obj_dimassoc; typedef struct _dwg_object_DMDIMOBJECTCONTEXTDATA dwg_obj_dmdimobjectcontextdata; typedef struct _dwg_object_DYNAMICBLOCKPROXYNODE @@ -1207,6 +1207,7 @@ extern "C" dwg_get_OBJECT_DECL (obj_blockxyparameter, BLOCKXYPARAMETER); dwg_get_OBJECT_DECL (obj_datalink, DATALINK); dwg_get_OBJECT_DECL (obj_dbcolor, DBCOLOR); + dwg_get_OBJECT_DECL (obj_dimassoc, DIMASSOC); dwg_get_OBJECT_DECL (obj_evaluation_graph, EVALUATION_GRAPH); dwg_get_OBJECT_DECL (obj_fcfobjectcontextdata, FCFOBJECTCONTEXTDATA); dwg_get_OBJECT_DECL (obj_gradient_background, GRADIENT_BACKGROUND); @@ -1286,7 +1287,6 @@ extern "C" dwg_get_OBJECT_DECL (obj_csacdocumentoptions, CSACDOCUMENTOPTIONS); dwg_get_OBJECT_DECL (obj_curvepath, CURVEPATH); dwg_get_OBJECT_DECL (obj_datatable, DATATABLE); - dwg_get_OBJECT_DECL (obj_dimassoc, DIMASSOC); dwg_get_OBJECT_DECL (obj_dmdimobjectcontextdata, DMDIMOBJECTCONTEXTDATA); dwg_get_OBJECT_DECL (obj_dynamicblockproxynode, DYNAMICBLOCKPROXYNODE); dwg_get_OBJECT_DECL (obj_geomapimage, GEOMAPIMAGE); @@ -1568,6 +1568,7 @@ extern "C" DWG_GETALL_OBJECT_DECL (BLOCKXYPARAMETER); DWG_GETALL_OBJECT_DECL (DATALINK); DWG_GETALL_OBJECT_DECL (DBCOLOR); + DWG_GETALL_OBJECT_DECL (DIMASSOC); DWG_GETALL_OBJECT_DECL (EVALUATION_GRAPH); DWG_GETALL_OBJECT_DECL (FCFOBJECTCONTEXTDATA); DWG_GETALL_OBJECT_DECL (GRADIENT_BACKGROUND); @@ -1634,7 +1635,6 @@ extern "C" DWG_GETALL_OBJECT_DECL (CSACDOCUMENTOPTIONS); DWG_GETALL_OBJECT_DECL (CURVEPATH); DWG_GETALL_OBJECT_DECL (DATATABLE); - DWG_GETALL_OBJECT_DECL (DIMASSOC); DWG_GETALL_OBJECT_DECL (DMDIMOBJECTCONTEXTDATA); DWG_GETALL_OBJECT_DECL (DYNAMICBLOCKPROXYNODE); DWG_GETALL_OBJECT_DECL (GEOMAPIMAGE); @@ -1920,6 +1920,7 @@ extern "C" CAST_DWG_OBJECT_TO_OBJECT_DECL (BLOCKXYPARAMETER); CAST_DWG_OBJECT_TO_OBJECT_DECL (DATALINK); CAST_DWG_OBJECT_TO_OBJECT_DECL (DBCOLOR); + CAST_DWG_OBJECT_TO_OBJECT_DECL (DIMASSOC); CAST_DWG_OBJECT_TO_OBJECT_DECL (EVALUATION_GRAPH); CAST_DWG_OBJECT_TO_OBJECT_DECL (FCFOBJECTCONTEXTDATA); CAST_DWG_OBJECT_TO_OBJECT_DECL (GRADIENT_BACKGROUND); @@ -1986,7 +1987,6 @@ extern "C" CAST_DWG_OBJECT_TO_OBJECT_DECL (CSACDOCUMENTOPTIONS); CAST_DWG_OBJECT_TO_OBJECT_DECL (CURVEPATH); CAST_DWG_OBJECT_TO_OBJECT_DECL (DATATABLE); - CAST_DWG_OBJECT_TO_OBJECT_DECL (DIMASSOC); CAST_DWG_OBJECT_TO_OBJECT_DECL (DMDIMOBJECTCONTEXTDATA); CAST_DWG_OBJECT_TO_OBJECT_DECL (DYNAMICBLOCKPROXYNODE); CAST_DWG_OBJECT_TO_OBJECT_DECL (GEOMAPIMAGE); diff --git a/src/classes.inc b/src/classes.inc index 3798de4794..52628cabb4 100644 --- a/src/classes.inc +++ b/src/classes.inc @@ -270,6 +270,7 @@ UNSTABLE_CLASS_DXF (ACTION, EVALUATION_GRAPH, ACAD_EVALUATION_GRAPH) /* almost */ UNSTABLE_CLASS (ACTION, DATALINK) UNSTABLE_CLASS (ACTION, DBCOLOR) + UNSTABLE_CLASS (ACTION, DIMASSOC) UNSTABLE_CLASS (ACTION, HELIX) /* ent, looks very stable */ UNSTABLE_CLASS (ACTION, LARGE_RADIAL_DIMENSION) /* ent */ UNSTABLE_CLASS (ACTION, LAYOUTPRINTCONFIG) /* ent. CSD_APP, probably a mistake as ent */ @@ -368,7 +369,6 @@ DEBUGGING_CLASS (ACTION, MPOLYGON) // hatch-like ent DEBUGGING_CLASS_CPP (ACTION, NAVISWORKSMODEL, AcDbNavisworksModel) /* ent, dxfname COORDINATION_MODEL? */ - DEBUGGING_CLASS (ACTION, DIMASSOC) DEBUGGING_CLASS_CPP (ACTION, TABLECONTENT, AcDbTableContent) // dxfname: "TABLE" DEBUGGING_CLASS (ACTION, ACSH_EXTRUSION_CLASS) DEBUGGING_CLASS (ACTION, ACSH_LOFT_CLASS) diff --git a/src/dwg.spec b/src/dwg.spec index 6504897a30..5a70733051 100644 --- a/src/dwg.spec +++ b/src/dwg.spec @@ -9934,14 +9934,6 @@ DWG_ENTITY_END FIELD_B (dimension.flip_arrow2, 296); \ FIELD_B (dimension.flip_arrow1, 297) -/*=============================================================================*/ - -/* In work area: - The following entities/objects are only stored as raw UNKNOWN_ENT/OBJ, - unless enabled via --enable-debug/-DDEBUG_CLASSES */ - -#if defined (DEBUG_CLASSES) || defined (IS_FREE) - // (varies) UNSTABLE // 1-4 references, see associativity bits 1-8. DWG_OBJECT (DIMASSOC) @@ -9999,6 +9991,14 @@ DWG_OBJECT (DIMASSOC) START_OBJECT_HANDLE_STREAM; DWG_OBJECT_END +/*=============================================================================*/ + +/* In work area: + The following entities/objects are only stored as raw UNKNOWN_ENT/OBJ, + unless enabled via --enable-debug/-DDEBUG_CLASSES */ + +#if defined (DEBUG_CLASSES) || defined (IS_FREE) + // (varies) fails the unit-test // See AcDbAssocActionBody.h and ASSOCPLANESURFACEACTIONBODY DWG_OBJECT (ASSOCSWEPTSURFACEACTIONBODY) diff --git a/src/dwg_api.c b/src/dwg_api.c index 70aeedbbad..d0813b8bb6 100644 --- a/src/dwg_api.c +++ b/src/dwg_api.c @@ -400,6 +400,7 @@ dwg_get_OBJECT (obj_blockxygrip, BLOCKXYGRIP) dwg_get_OBJECT (obj_blockxyparameter, BLOCKXYPARAMETER) dwg_get_OBJECT (obj_datalink, DATALINK) dwg_get_OBJECT (obj_dbcolor, DBCOLOR) +dwg_get_OBJECT (obj_dimassoc, DIMASSOC) dwg_get_OBJECT (obj_evaluation_graph, EVALUATION_GRAPH) dwg_get_OBJECT (obj_fcfobjectcontextdata, FCFOBJECTCONTEXTDATA) dwg_get_OBJECT (obj_gradient_background, GRADIENT_BACKGROUND) @@ -464,7 +465,6 @@ dwg_get_OBJECT (obj_assocarrayrectangularparameters, ASSOCARRAYRECTANGULARPARAME dwg_get_OBJECT (obj_csacdocumentoptions, CSACDOCUMENTOPTIONS) dwg_get_OBJECT (obj_curvepath, CURVEPATH) dwg_get_OBJECT (obj_datatable, DATATABLE) - dwg_get_OBJECT (obj_dimassoc, DIMASSOC) dwg_get_OBJECT (obj_dmdimobjectcontextdata, DMDIMOBJECTCONTEXTDATA) dwg_get_OBJECT (obj_dynamicblockproxynode, DYNAMICBLOCKPROXYNODE) dwg_get_OBJECT (obj_geomapimage, GEOMAPIMAGE) @@ -757,6 +757,7 @@ DWG_GETALL_OBJECT (BLOCKXYGRIP) DWG_GETALL_OBJECT (BLOCKXYPARAMETER) DWG_GETALL_OBJECT (DATALINK) DWG_GETALL_OBJECT (DBCOLOR) +DWG_GETALL_OBJECT (DIMASSOC) DWG_GETALL_OBJECT (EVALUATION_GRAPH) DWG_GETALL_OBJECT (FCFOBJECTCONTEXTDATA) DWG_GETALL_OBJECT (GRADIENT_BACKGROUND) @@ -821,7 +822,6 @@ DWG_GETALL_OBJECT (ASSOCARRAYRECTANGULARPARAMETERS) DWG_GETALL_OBJECT (CSACDOCUMENTOPTIONS) DWG_GETALL_OBJECT (CURVEPATH) DWG_GETALL_OBJECT (DATATABLE) - DWG_GETALL_OBJECT (DIMASSOC) DWG_GETALL_OBJECT (DMDIMOBJECTCONTEXTDATA) DWG_GETALL_OBJECT (DYNAMICBLOCKPROXYNODE) DWG_GETALL_OBJECT (GEOMAPIMAGE) @@ -1108,6 +1108,7 @@ CAST_DWG_OBJECT_TO_OBJECT (BLOCKXYGRIP) CAST_DWG_OBJECT_TO_OBJECT (BLOCKXYPARAMETER) CAST_DWG_OBJECT_TO_OBJECT (DATALINK) CAST_DWG_OBJECT_TO_OBJECT (DBCOLOR) +CAST_DWG_OBJECT_TO_OBJECT (DIMASSOC) CAST_DWG_OBJECT_TO_OBJECT (EVALUATION_GRAPH) CAST_DWG_OBJECT_TO_OBJECT (FCFOBJECTCONTEXTDATA) CAST_DWG_OBJECT_TO_OBJECT (GRADIENT_BACKGROUND) @@ -1172,7 +1173,6 @@ CAST_DWG_OBJECT_TO_OBJECT (ASSOCARRAYRECTANGULARPARAMETERS) CAST_DWG_OBJECT_TO_OBJECT (CSACDOCUMENTOPTIONS) CAST_DWG_OBJECT_TO_OBJECT (CURVEPATH) CAST_DWG_OBJECT_TO_OBJECT (DATATABLE) - CAST_DWG_OBJECT_TO_OBJECT (DIMASSOC) CAST_DWG_OBJECT_TO_OBJECT (DMDIMOBJECTCONTEXTDATA) CAST_DWG_OBJECT_TO_OBJECT (DYNAMICBLOCKPROXYNODE) CAST_DWG_OBJECT_TO_OBJECT (GEOMAPIMAGE) @@ -27998,7 +27998,6 @@ dwg_add_WEDGE (Dwg_Object_BLOCK_HEADER *restrict blkhdr, // DBCOLOR // DETAILVIEWSTYLE // DICTIONARYVAR -// DIMASSOC // DMDIMOBJECTCONTEXTDATA // DYNAMICBLOCKPROXYNODE // DYNAMICBLOCKPURGEPREVENTER diff --git a/src/objects.c b/src/objects.c index b16d4b6bb1..6dc3cac258 100644 --- a/src/objects.c +++ b/src/objects.c @@ -1543,7 +1543,7 @@ in_word_set (const char *str, size_t len) #line 258 "src/objects.in" {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str782, "BLOCK_HEADER", DWG_TYPE_BLOCK_HEADER, 0, STABLE}, #line 273 "src/objects.in" - {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str783, "DIMASSOC", DWG_TYPE_DIMASSOC, 0, DEBUGGING}, + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str783, "DIMASSOC", DWG_TYPE_DIMASSOC, 0, UNSTABLE}, {-1}, {-1}, #line 69 "src/objects.in" {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str786, "DIMENSION", DWG_TYPE_DIMENSION_LINEAR, 1, STABLE}, diff --git a/src/objects.in b/src/objects.in index e424473c6f..c8aadec368 100644 --- a/src/objects.in +++ b/src/objects.in @@ -270,7 +270,7 @@ GCC46_DIAG_IGNORE(-Wmissing-field-initializers) "DICTIONARY", "DICTIONARY", DWG_TYPE_DICTIONARY, 0, STABLE "DICTIONARYVAR", "DICTIONARYVAR", DWG_TYPE_DICTIONARYVAR, 0, STABLE "DICTIONARYWDFLT", "ACDBDICTIONARYWDFLT", DWG_TYPE_DICTIONARYWDFLT, 0, STABLE -"DIMASSOC", "DIMASSOC", DWG_TYPE_DIMASSOC, 0, DEBUGGING +"DIMASSOC", "DIMASSOC", DWG_TYPE_DIMASSOC, 0, UNSTABLE "DIMSTYLE", "DIMSTYLE", DWG_TYPE_DIMSTYLE, 0, STABLE "DIMSTYLE_CONTROL", "DIMSTYLE_CONTROL", DWG_TYPE_DIMSTYLE_CONTROL, 0, STABLE "DMDIMOBJECTCONTEXTDATA", "ACDB_DMDIMOBJECTCONTEXTDATA_CLASS", DWG_TYPE_DMDIMOBJECTCONTEXTDATA, 0, DEBUGGING diff --git a/test/unit-testing/common.c b/test/unit-testing/common.c index 4406f55ada..daa15af4bd 100644 --- a/test/unit-testing/common.c +++ b/test/unit-testing/common.c @@ -663,6 +663,31 @@ main (int argc, char *argv[]) error += test_code_nodist ( prefix, "2010/visualization_-_conference_room.dwg", cov); } + if (DWG_TYPE == DWG_TYPE_DIMASSOC) + { + error += test_code_nodist (prefix, "../test/issues/gh518/9.dwg", + cov); + error += test_code_nodist ( + prefix, + "../test-old/2018/from_cadforum.cz/A_BIG_COLLECTION.dwg", + cov); + error += test_code_nodist ( + prefix, "../td/2007/400306222-Main_board_line.dwg", cov); + error += test_code_nodist ( + prefix, "../td/2007/400306224-X_E_Motor_Line.dwg", cov); + error += test_code_nodist ( + prefix, + "../test-old/2004/from_uloz.to/61_001_00_Bo_Ze_A_KV1.dwg", + cov); + error += test_code_nodist ( + prefix, + "../test-old/2004/from_uloz.to/00_005_POHLADY_Kl_A.dwg", + cov); + error += test_code_nodist (prefix, + "../test-old/2004/from_uloz.to/" + "00_006_SCHODISKO_e_IX_X_Kl.dwg", + cov); + } if (DWG_TYPE == DWG_TYPE_POINTCLOUDCOLORMAP) { if (g_countmax == 1000) // only with -a diff --git a/test/unit-testing/dimassoc.c b/test/unit-testing/dimassoc.c index 937b845478..7f2843960d 100644 --- a/test/unit-testing/dimassoc.c +++ b/test/unit-testing/dimassoc.c @@ -12,10 +12,11 @@ api_process (dwg_object *obj) BITCODE_RC rotated_type; Dwg_DIMASSOC_Ref *ref; // BITCODE_BS j; - BITCODE_BL num_intsectobj, num_xrefs; + BITCODE_BL num_intsectobj, num_xrefs, num_xrefpaths, + num_intersec_xrefpaths; BITCODE_H *intsectobj, *xrefs; - // BITCODE_BL intsect_gsmarker; - // BITCODE_H intsectxrefobj; + BITCODE_T *xrefpaths; + // BITCODE_BL intersec_gsmarker; Dwg_Version_Type dwg_version = obj->parent->header.version; dwg_obj_dimassoc *dimassoc = dwg_object_to_DIMASSOC (obj); @@ -53,6 +54,9 @@ api_process (dwg_object *obj) num_xrefs = ref[i].num_xrefs; CHK_SUBCLASS_HV (ref[i], DIMASSOC_Ref, xrefs, num_xrefs); CHK_SUBCLASS_TYPE (ref[i], DIMASSOC_Ref, has_lastpt_ref, B); - CHK_SUBCLASS_3RD (ref[i], DIMASSOC_Ref, lastpt_ref); + CHK_SUBCLASS_TYPE (ref[i], DIMASSOC_Ref, num_intersec_xrefpaths, BL); + CHK_SUBCLASS_MAX (ref[i], DIMASSOC_Ref, num_intersec_xrefpaths, BL, 100); + // num_intersec_xrefpaths = ref[i].num_intersec_xrefpaths; + // CHK_SUBCLASS_TV (ref[i], DIMASSOC_Ref, intersec_xrefpaths, num_intersec_xrefpaths); } } From 812ff03adb513c873785d1a499a12907afc47b24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Josef=20=C5=A0pa=C4=8Dek?= Date: Thu, 10 Oct 2024 23:44:26 +0200 Subject: [PATCH 2/2] Improve DIMASSOC object --- doc/dynapi.texi | 12 ++++++-- include/dwg.h | 27 ++++++++++-------- src/dwg.spec | 75 +++++++++++++++++++++++++++---------------------- src/dynapi.c | 12 ++++++-- 4 files changed, 75 insertions(+), 51 deletions(-) diff --git a/doc/dynapi.texi b/doc/dynapi.texi index 91c476df2d..4d7ae15222 100644 --- a/doc/dynapi.texi +++ b/doc/dynapi.texi @@ -14116,12 +14116,18 @@ BL, DXF 91 BS @item xrefpaths TV*, DXF 301 +@item num_intersec_xrefpaths +BS +@item intersec_xrefpaths +TV* @item has_lastpt_ref B, DXF 75 -@item lastpt_ref -3BD +@item intersec_subent_type +BS, DXF 74 +@item intersec_gsmarker +BL, DXF 92 @item num_intsectobj -BL, DXF 74 +BL @item intsectobj H*, DXF 332 diff --git a/include/dwg.h b/include/dwg.h index 6d37083a0b..9c67cf16b4 100644 --- a/include/dwg.h +++ b/include/dwg.h @@ -5338,20 +5338,23 @@ typedef struct _dwg_object_DATALINK typedef struct _dwg_DIMASSOC_Ref { struct _dwg_object_DIMASSOC *parent; - BITCODE_T classname; /*!< DXF 1 constant */ - BITCODE_RC osnap_type; /*!< DXF 72 */ - BITCODE_BD osnap_dist; /*!< DXF 40 */ - BITCODE_3BD osnap_pt; /*!< DXF 10-30 */ + BITCODE_T classname; /*!< DXF 1 constant */ + BITCODE_RC osnap_type; /*!< DXF 72 */ + BITCODE_BD osnap_dist; /*!< DXF 40 */ + BITCODE_3BD osnap_pt; /*!< DXF 10-30 */ BITCODE_BS num_xrefs; - BITCODE_H *xrefs; /*!< DXF 331 the geometry objects, 1 or 2 */ - BITCODE_BS main_subent_type; /*!< DXF 73 */ - BITCODE_BL main_gsmarker; /*!< DXF 91 */ + BITCODE_H *xrefs; /*!< DXF 331 the geometry objects, 1 or 2 */ + BITCODE_BS main_subent_type; /*!< DXF 73 */ + BITCODE_BL main_gsmarker; /*!< DXF 91 */ BITCODE_BS num_xrefpaths; - BITCODE_T *xrefpaths; /*!< DXF 301 */ - BITCODE_B has_lastpt_ref; /*!< DXF 75 */ - BITCODE_3BD lastpt_ref; /*!< DXF ?? */ - BITCODE_BL num_intsectobj; /*!< DXF 74 */ - BITCODE_H* intsectobj; /*!< DXF 332 the intersection objects, 1 or 2 */ + BITCODE_T *xrefpaths; /*!< DXF 301 */ + BITCODE_BS num_intersec_xrefpaths; + BITCODE_T *intersec_xrefpaths; /*!< DXF 302 */ + BITCODE_B has_lastpt_ref; /*!< DXF 75 */ + BITCODE_BS intersec_subent_type; /*!< DXF 74 */ + BITCODE_BL intersec_gsmarker; /*!< DXF 92 */ + BITCODE_BL num_intsectobj; + BITCODE_H* intsectobj; /*!< DXF 332 the intersection objects, 1 or 2 */ } Dwg_DIMASSOC_Ref; typedef struct _dwg_object_DIMASSOC diff --git a/src/dwg.spec b/src/dwg.spec index 5a70733051..840062192c 100644 --- a/src/dwg.spec +++ b/src/dwg.spec @@ -9934,6 +9934,33 @@ DWG_ENTITY_END FIELD_B (dimension.flip_arrow2, 296); \ FIELD_B (dimension.flip_arrow1, 297) +#define AcDbOsnapPointRef_fields(index) \ + LOG_HANDLE ("DIMASSOC_Ref.rcount1: %d\n", index); \ + SUB_FIELD_T (ref[index], classname, 1); /* "AcDbOsnapPointRef" */ \ + SUB_FIELD_RC (ref[index], osnap_type, 72); /* 0-13 */ \ + SUB_FIELD_BL (ref[index], num_xrefs, 0); \ + SUB_HANDLE_VECTOR (ref[index], xrefs, num_xrefs, 4, 331); \ + if (FIELD_VALUE (ref[index].osnap_type) != 0) \ + { \ + SUB_FIELD_BL (ref[index], main_subent_type, 73); \ + SUB_FIELD_BL (ref[index], main_gsmarker, 91); \ + SUB_FIELD_BL (ref[index], num_xrefpaths, 0); \ + FIELD_VECTOR_T (ref[index].xrefpaths, T, ref[4].num_xrefpaths, 301) \ + } \ + SUB_FIELD_BD (ref[index], osnap_dist, 40); \ + SUB_FIELD_3BD (ref[index], osnap_pt, 10); \ + if (FIELD_VALUE (ref[index].osnap_type) == 6 \ + || FIELD_VALUE (ref[index].osnap_type) == 11) \ + { \ + SUB_FIELD_BL (ref[index], num_intsectobj, 0); \ + SUB_HANDLE_VECTOR (ref[index], intsectobj, num_intsectobj, 5, 332); \ + SUB_FIELD_BL (ref[index], intersec_subent_type, 74); \ + SUB_FIELD_BL (ref[index], intersec_gsmarker, 92); \ + SUB_FIELD_BL (ref[index], num_intersec_xrefpaths, 0); \ + FIELD_VECTOR_T (ref[index].intersec_xrefpaths, T, ref[index].num_intersec_xrefpaths, 302) \ + } \ + SUB_FIELD_B (ref[index], has_lastpt_ref, 75); + // (varies) UNSTABLE // 1-4 references, see associativity bits 1-8. DWG_OBJECT (DIMASSOC) @@ -9944,48 +9971,30 @@ DWG_OBJECT (DIMASSOC) FIELD_B (trans_space_flag, 70); FIELD_RC (rotated_type, 71); FIELD_HANDLE (dimensionobj, 4, 330); - REPEAT_CN (4, ref, Dwg_DIMASSOC_Ref) // i.e. AcDbOsnapPointRef + REPEAT_CN (6, ref, Dwg_DIMASSOC_Ref) // i.e. AcDbOsnapPointRef REPEAT_BLOCK - // TODO: there could be much more blocks, up to 5. - // 0 1 2 3 => 1 2 4 8. skip unset bits - if (!(FIELD_VALUE (associativity) & (1< bits 1 2 4 8. skip unset bits + if (!(FIELD_VALUE (associativity) & (1 << rcount1))) { #ifdef IS_JSON ENDHASH; #endif continue; } - LOG_HANDLE ("DIMASSOC_Ref.rcount1: %d\n", rcount1); - // DXF: 1, 72, 10, ??, 75 - SUB_FIELD_T (ref[rcount1], classname, 1); // "AcDbOsnapPointRef" - SUB_FIELD_RC (ref[rcount1], osnap_type, 72); // 0-13 - // idpaths: - SUB_FIELD_BL0 (ref[rcount1], num_intsectobj, 74); - SUB_HANDLE_VECTOR (ref[rcount1], intsectobj, num_intsectobj, 5, 332); - - SUB_FIELD_BD (ref[rcount1], osnap_dist, 40); - SUB_FIELD_3BD (ref[rcount1], osnap_pt, 10); - - // XrefFullSubentPath - SUB_FIELD_BL (ref[rcount1], num_xrefs, 0); // 1 or 2 - SUB_VALUEOUTOFBOUNDS (ref[rcount1], num_xrefs, 100) - SUB_HANDLE_VECTOR (ref[rcount1], xrefs, num_xrefs, 4, 331); - - // restrict only when writing, not when reading? - //if (FIELD_VALUE (ref[rcount1].osnap_type) == 6 || FIELD_VALUE (ref[rcount1].osnap_type) == 11) - // { - SUB_FIELD_BL0 (ref[rcount1], main_subent_type, 73); - SUB_FIELD_BL (ref[rcount1], main_gsmarker, 91); - SUB_FIELD_BL (ref[rcount1], num_xrefpaths, 0); - FIELD_VECTOR_T (ref[rcount1].xrefpaths, T, ref[rcount1].num_xrefpaths, 301) - // } - SUB_FIELD_B (ref[rcount1], has_lastpt_ref, 75); - if (FIELD_VALUE (ref[rcount1].has_lastpt_ref)) - { - SUB_FIELD_3BD (ref[rcount1], lastpt_ref, 0); - } + AcDbOsnapPointRef_fields(rcount1) SET_PARENT_OBJ (ref[rcount1]); END_REPEAT_BLOCK + if (FIELD_VALUE (ref[0].has_lastpt_ref) + || FIELD_VALUE (ref[1].has_lastpt_ref) + || FIELD_VALUE (ref[2].has_lastpt_ref) + || FIELD_VALUE (ref[3].has_lastpt_ref)) + { + AcDbOsnapPointRef_fields(4) + } + if (FIELD_VALUE (ref[4].has_lastpt_ref)) + { + AcDbOsnapPointRef_fields(5) + } END_REPEAT (ref) START_OBJECT_HANDLE_STREAM; diff --git a/src/dynapi.c b/src/dynapi.c index 5c4413862b..375c31d936 100644 --- a/src/dynapi.c +++ b/src/dynapi.c @@ -11478,12 +11478,18 @@ static const Dwg_DYNAPI_field _dwg_DIMASSOC_Ref_fields[] = { 0,0,0, 0 }, { "xrefpaths", "TV*", sizeof (BITCODE_TV*), OFF (struct _dwg_DIMASSOC_Ref, xrefpaths), 1,1,0, 301 }, + { "num_intersec_xrefpaths", "BS", sizeof (BITCODE_BS), OFF (struct _dwg_DIMASSOC_Ref, num_intersec_xrefpaths), + 0,0,0, 0 }, + { "intersec_xrefpaths", "TV*", sizeof (BITCODE_TV*), OFF (struct _dwg_DIMASSOC_Ref, intersec_xrefpaths), + 1,1,0, 0 }, { "has_lastpt_ref", "B", sizeof (BITCODE_B), OFF (struct _dwg_DIMASSOC_Ref, has_lastpt_ref), 0,0,0, 75 }, - { "lastpt_ref", "3BD", sizeof (BITCODE_3BD), OFF (struct _dwg_DIMASSOC_Ref, lastpt_ref), - 1,0,0, 0 }, - { "num_intsectobj", "BL", sizeof (BITCODE_BL), OFF (struct _dwg_DIMASSOC_Ref, num_intsectobj), + { "intersec_subent_type", "BS", sizeof (BITCODE_BS), OFF (struct _dwg_DIMASSOC_Ref, intersec_subent_type), 0,0,0, 74 }, + { "intersec_gsmarker", "BL", sizeof (BITCODE_BL), OFF (struct _dwg_DIMASSOC_Ref, intersec_gsmarker), + 0,0,0, 92 }, + { "num_intsectobj", "BL", sizeof (BITCODE_BL), OFF (struct _dwg_DIMASSOC_Ref, num_intsectobj), + 0,0,0, 0 }, { "intsectobj", "H*", sizeof (BITCODE_H*), OFF (struct _dwg_DIMASSOC_Ref, intsectobj), 1,1,0, 332 }, {NULL, NULL, 0, 0, 0,0,0, 0},