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