1 #define DWG_TYPE DWG_TYPE__3DSOLID
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 dwg_point_3d pt3d;
11
12 dwg_ent_3dsolid *_3dsolid = obj->tio.entity->tio._3DSOLID;
13 Dwg_Version_Type dwg_version = obj->parent->header.version;
14 error = 0;
15
16 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, acis_empty, B);
17 #ifdef USE_DEPRECATED_API
18 if (dwg_ent_3dsolid_get_acis_empty (_3dsolid, &error) != acis_empty || error)
19 fail ("old API dwg_ent_3dsolid_get_acis_empty");
20 #endif
21 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, version, BS);
22 #ifdef USE_DEPRECATED_API
23 if (dwg_ent_3dsolid_get_version (_3dsolid, &error) != version || error)
24 fail ("old API dwg_ent_3dsolid_get_version");
25 #endif
26 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, num_blocks, BL);
27 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, acis_data, TV);
28 #ifdef USE_DEPRECATED_API
29 if ((acis_data
30 && strcmp ((char *)dwg_ent_3dsolid_get_acis_data (_3dsolid, &error),
31 (char *)acis_data))
32 || error)
33 fail ("old API dwg_ent_3dsolid_get_acis_data");
34 #endif
35
36 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, wireframe_data_present, B);
37 #ifdef USE_DEPRECATED_API
38 if (dwg_ent_3dsolid_get_wireframe_data_present (_3dsolid, &error)
39 != wireframe_data_present
40 || error)
41 fail ("old API dwg_ent_3dsolid_get_wireframe_data_present");
42 #endif
43 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, point_present, B);
44 #ifdef USE_DEPRECATED_API
45 if (dwg_ent_3dsolid_get_point_present (_3dsolid, &error) != point_present
46 || error)
47 fail ("old API dwg_ent_3dsolid_get_point_present");
48 #endif
49
50 CHK_ENTITY_3RD (_3dsolid, 3DSOLID, point);
51 #ifdef USE_DEPRECATED_API
52 dwg_ent_3dsolid_get_point (_3dsolid, &pt3d, &error);
53 if (error || memcmp (&point, &pt3d, sizeof (point)))
54 fail ("old API dwg_ent_3dsolid_get_point");
55 #endif
56
57 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, isoline_present, B);
58 #ifdef USE_DEPRECATED_API
59 if (dwg_ent_3dsolid_get_isoline_present (_3dsolid, &error) != isoline_present
60 || error)
61 fail ("old API dwg_ent_3dsolid_get_isoline_present");
62 #endif
63 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, isolines, BL);
64 #ifdef USE_DEPRECATED_API
65 if (dwg_ent_3dsolid_get_isolines (_3dsolid, &error) != isolines || error)
66 fail ("old API dwg_ent_3dsolid_get_isolines");
67 #endif
68 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, num_wires, BL);
69 #ifdef USE_DEPRECATED_API
70 if (dwg_ent_3dsolid_get_num_wires (_3dsolid, &error) != num_wires || error)
71 fail ("old API dwg_ent_3dsolid_get_num_wires");
72 #endif
73 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, num_silhouettes, BL);
74 #ifdef USE_DEPRECATED_API
75 if (dwg_ent_3dsolid_get_num_silhouettes (_3dsolid, &error) != num_silhouettes
76 || error)
77 fail ("old API dwg_ent_3dsolid_get_num_sil");
78 #endif
79
80 #ifdef USE_DEPRECATED_API
81 wires = dwg_ent_3dsolid_get_wires (_3dsolid, &error);
82 #else
83 wires = _3dsolid->wires;
84 #endif
85 if (!error)
86 {
87 for (i = 0; i < num_wires; i++)
88 {
89 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, type, RC);
90 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, selection_marker, BLd);
91 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, color, BL);
92 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, acis_index, BLd);
93 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, num_points, BL);
94 CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, axis_x);
95 CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, axis_y);
96 CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, axis_z);
97 CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, translation);
98 CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, scale);
99 }
100 #ifdef USE_DEPRECATED_API
101 free (wires);
102 #endif
103 }
104 else
105 fail ("wires");
106
107 #ifdef USE_DEPRECATED_API
108 silhouettes = dwg_ent_3dsolid_get_silhouettes (_3dsolid, &error);
109 #else
110 silhouettes = _3dsolid->silhouettes;
111 #endif
112 if (!error)
113 {
114 for (i = 0; i < num_silhouettes; i++)
115 {
116 CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette, vp_id, BL);
117 CHK_SUBCLASS_3RD (silhouettes[i], 3DSOLID_silhouette, vp_target);
118 CHK_SUBCLASS_3RD (silhouettes[i], 3DSOLID_silhouette,
119 vp_dir_from_target);
120 CHK_SUBCLASS_3RD (silhouettes[i], 3DSOLID_silhouette, vp_up_dir);
121 CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette,
122 vp_perspective, B);
123 CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette, has_wires, B);
124 if (silhouettes[i].has_wires)
125 {
126 wires = silhouettes[i].wires;
127 CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette, num_wires,
128 BL);
129 for (unsigned j = 0; j < silhouettes[i].num_wires; j++)
130 {
131 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, type, RC);
132 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, selection_marker,
133 BLd);
134 CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, color, BL);
135 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, acis_index, BLd);
136 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, num_points, BL);
137 CHK_SUBCLASS_3DPOINTS (wires[j], 3DSOLID_wire, points,
138 wires[i].num_points);
139 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, transform_present,
140 B);
141 if (wires[j].transform_present)
142 {
143 CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, axis_x);
144 CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, axis_y);
145 CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, axis_z);
146 CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, translation);
147 CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, scale);
148 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, has_rotation,
149 B);
150 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire,
151 has_reflection, B);
152 CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, has_shear, B);
153 }
154 }
155 }
156 }
157 #ifdef USE_DEPRECATED_API
158 free (silhouettes);
159 #endif
160 }
161 else
162 fail ("silhouettes");
163
164 SINCE (R_2007)
165 {
166 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, num_materials, BL);
167 if (!dwg_dynapi_entity_value (_3dsolid, "3DSOLID", "materials", &materials,
168 NULL))
169 fail ("3DSOLID.materials");
170 else
171 for (i = 0; i < num_materials; i++)
172 {
173 CHK_SUBCLASS_TYPE (_3dsolid->materials[i], 3DSOLID_material,
174 array_index, BL);
175 CHK_SUBCLASS_TYPE (_3dsolid->materials[i], 3DSOLID_material,
176 mat_absref, BL);
177 CHK_SUBCLASS_H (_3dsolid->materials[i], 3DSOLID_material,
178 material_handle);
179 }
180 CHK_ENTITY_H (_3dsolid, 3DSOLID, history_id);
181 }
182 SINCE (R_2013)
183 {
184 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, has_revision_guid, B);
185 if (has_revision_guid)
186 {
187 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, revision_guid, TF);
188 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, revision_major, BL);
189 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, revision_minor1, BS);
190 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, revision_minor2, BS);
191 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, revision_bytes, TF);
192 }
193 CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, end_marker, BL);
194 }
195 }