@@ -60,12 +60,16 @@ Dwg_Object *dwg_obj_generic_to_object (const void *restrict obj,
6060 int *restrict error);
6161#endif
6262// from dwg_api.c
63- EXPORT Dwg_Object_DICTIONARY *
63+ Dwg_Object_DICTIONARY *
6464dwg_add_DICTIONARY (Dwg_Data *restrict dwg,
6565 const char *restrict name, /* the NOD entry */
6666 const char *restrict text, /* maybe NULL */
6767 const BITCODE_RLL absolute_ref);
68+ Dwg_Object_VX_TABLE_RECORD *
69+ dwg_add_VX (Dwg_Data *restrict dwg, const char *restrict name /* maybe NULL */);
6870// from dwg.c
71+ BITCODE_RLL
72+ dwg_new_handseed (Dwg_Data *restrict dwg);
6973BITCODE_H
7074dwg_find_tablehandle_silent (Dwg_Data *restrict dwg, const char *restrict name,
7175 const char *restrict table);
@@ -9345,6 +9349,27 @@ Dxf_Pair *new_object (
93459349 LOG_TRACE ("Reuse existing BLOCK_HEADER.*Model_Space %X [0]\n",
93469350 pair->value.u)
93479351 }
9352+ // special-case VIEWPORT -> VX.
9353+ if (strEQc (name, "VIEWPORT") && dwg->header.version < R_2004
9354+ && dwg->header.version > R_11 && pair->code == 5)
9355+ {
9356+ Dwg_Object_VX_TABLE_RECORD *vx = dwg_add_VX (dwg, "");
9357+ Dwg_Object *vxobj = dwg_obj_generic_to_object (vx, &error);
9358+ Dwg_Entity_VIEWPORT *_vobj = obj->tio.entity->tio.VIEWPORT;
9359+ if (dwg->header_vars.HANDSEED)
9360+ {
9361+ vxobj->handle.value = dwg_new_handseed (dwg);
9362+ }
9363+ // vx->is_on = 1;
9364+ vx->viewport
9365+ = dwg_add_handleref (dwg, 4, pair->value.u, NULL);
9366+ LOG_TRACE ("VX_TABLE_RECORD.viewport = " FORMAT_REF " [H 4]\n",
9367+ ARGS_REF (vx->viewport));
9368+ _vobj->vport_entity_header
9369+ = dwg_add_handleref (dwg, 5, vxobj->handle.value, NULL);
9370+ LOG_TRACE ("VIEWPORT.vport_entity_header = " FORMAT_REF " [H 5]\n",
9371+ ARGS_REF (_vobj->vport_entity_header));
9372+ }
93489373 if (strNE (name, "DIMSTYLE") || pair->code == 105)
93499374 {
93509375 obj->handle.value = pair->value.u;
@@ -12925,8 +12950,16 @@ dxf_entities_read (Bit_Chain *restrict dat, Dwg_Data *restrict dwg)
1292512950 }
1292612951 if (pair->code == 0 && pair->value.s)
1292712952 {
12928- Dwg_Object *obj = &dwg->object[dwg->num_objects - 1];
12953+ BITCODE_BL last_ent = dwg->num_objects - 1;
12954+ Dwg_Object *obj = &dwg->object[last_ent];
1292912955 Dwg_Object_Entity *ent = obj->tio.entity;
12956+ // FIXUP hack for added VX and VX_CONTROL
12957+ while (obj->supertype != DWG_SUPERTYPE_ENTITY)
12958+ {
12959+ last_ent--;
12960+ obj = &dwg->object[last_ent];
12961+ ent = obj->tio.entity;
12962+ }
1293012963 if (ent->ownerhandle)
1293112964 {
1293212965 if (ent->ownerhandle->absolute_ref == mspace)
0 commit comments