1 #define DWG_TYPE DWG_TYPE_REGION
2 #include "common.c"
3
4 void
5 api_process (dwg_object *obj)
6 {
7 int error;
8 BITCODE_BL i;
9 _3DSOLID_FIELDS;
10
11 dwg_ent_region *region = dwg_object_to_REGION (obj);
12 Dwg_Version_Type dwg_version = obj->parent->header.version;
13
14 CHK_ENTITY_TYPE_W_OLD (region, REGION, acis_empty, B);
15 CHK_ENTITY_TYPE_W_OLD (region, REGION, version, BS);
16 CHK_ENTITY_TYPE (region, REGION, num_blocks, BL);
17 CHK_ENTITY_TYPE (region, REGION, acis_data, TV);
18 #ifdef USE_DEPRECATED_API
19 if ((acis_data
20 && strcmp ((char *)dwg_ent_region_get_acis_data (region, &error),
21 (char *)acis_data))
22 || error)
23 {
24 fail ("old API dwg_ent_region_get_acis_data");
25 }
26 #endif
27
28 CHK_ENTITY_TYPE_W_OLD (region, REGION, wireframe_data_present, B);
29 CHK_ENTITY_TYPE_W_OLD (region, REGION, point_present, B);
30 CHK_ENTITY_3RD_W_OLD (region, REGION, point);
31 CHK_ENTITY_TYPE_W_OLD (region, REGION, isoline_present, B);
32 CHK_ENTITY_TYPE_W_OLD (region, REGION, isolines, BL);
33 CHK_ENTITY_TYPE_W_OLD (region, REGION, num_wires, BL);
34 CHK_ENTITY_TYPE_W_OLD (region, REGION, num_silhouettes, BL);
35
36 #ifdef USE_DEPRECATED_API
37 wires = dwg_ent_region_get_wires (region, &error);
38 #else
39 wires = region->wires;
40 error = 0;
41 #endif
42 if (!error)
43 {
44 for (i = 0; i < num_wires; i++)
45 {
46 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, type, RC);
47 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, selection_marker, BLd);
48 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, color, BL);
49 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, acis_index, BLd);
50 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, num_points, BL);
51 CHK_SUBCLASS_3DPOINTS (wires[i], 3DSOLID_wire, points,
52 wires[i].num_points);
53 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, transform_present, B);
54 if (wires[i].transform_present)
55 {
56 CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, axis_x);
57 CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, axis_y);
58 CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, axis_z);
59 CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, translation);
60 CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, scale);
61 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, has_rotation, B);
62 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, has_reflection, B);
63 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, has_shear, B);
64 }
65 }
66 #ifdef USE_DEPRECATED_API
67 free (wires);
68 #endif
69 }
70 else
71 fail ("dwg_ent_region_get_wires");
72
73 #ifdef USE_DEPRECATED_API
74 silhouettes = dwg_ent_region_get_silhouettes (region, &error);
75 #else
76 silhouettes = region->silhouettes;
77 #endif
78 if (!error)
79 {
80 for (i = 0; i < num_silhouettes; i++)
81 {
82 CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette, vp_id, BL);
83 CHK_SUBCLASS_3RD (silhouettes[i], 3DSOLID_silhouette, vp_target);
84 CHK_SUBCLASS_3RD (silhouettes[i], 3DSOLID_silhouette,
85 vp_dir_from_target);
86 CHK_SUBCLASS_3RD (silhouettes[i], 3DSOLID_silhouette, vp_up_dir);
87 CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette,
88 vp_perspective, B);
89 CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette, has_wires, B);
90 if (silhouettes[i].has_wires)
91 {
92 wires = silhouettes[i].wires;
93 CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette, num_wires,
94 BL);
95 for (unsigned j = 0; j < silhouettes[i].num_wires; j++)
96 {
97 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, type, RC);
98 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, selection_marker,
99 BLd);
100 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, color, BL);
101 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, acis_index, BLd);
102 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, num_points, BL);
103 CHK_SUBCLASS_3DPOINTS (wires[j], 3DSOLID_wire, points,
104 wires[i].num_points);
105 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, transform_present,
106 B);
107 if (wires[j].transform_present)
108 {
109 CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, axis_x);
110 CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, axis_y);
111 CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, axis_z);
112 CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, translation);
113 CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, scale);
114 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, has_rotation,
115 B);
116 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire,
117 has_reflection, B);
118 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, has_shear, B);
119 }
120 }
121 }
122 }
123 #ifdef USE_DEPRECATED_API
124 free (silhouettes);
125 #endif
126 }
127 else
128 fail ("dwg_ent_body_get_silhouettes");
129
130 if (version > 1)
131 {
132 CHK_ENTITY_TYPE (region, REGION, num_materials, BL);
133 SINCE (R_2007)
134 {
135 if (!dwg_dynapi_entity_value (region, "REGION", "materials",
136 &materials, NULL))
137 fail ("REGION.materials");
138 else
139 {
140 for (i = 0; i < num_materials; i++)
141 {
142 CHK_SUBCLASS_TYPE (materials[i], 3DSOLID_material, array_index,
143 BL);
144 CHK_SUBCLASS_TYPE (materials[i], 3DSOLID_material, mat_absref,
145 BL);
146 CHK_SUBCLASS_H (materials[i], 3DSOLID_material,
147 material_handle);
148 }
149 }
150 }
151 }
152 CHK_ENTITY_TYPE (region, REGION, has_revision_guid, B);
153 if (has_revision_guid)
154 {
155 CHK_ENTITY_TYPE (region, REGION, revision_major, BL);
156 CHK_ENTITY_TYPE (region, REGION, revision_minor1, BS);
157 CHK_ENTITY_TYPE (region, REGION, revision_minor2, BS);
158 CHK_ENTITY_TYPE (region, REGION, revision_bytes, TV);
159 CHK_ENTITY_TYPE (region, REGION, end_marker, BL);
160 }
161
162 SINCE (R_2007)
163 {
164 CHK_ENTITY_H (region, REGION, history_id);
165 }
166 }