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