1 // TODO DEBUGGING
2 #define DWG_TYPE DWG_TYPE_EXTRUDEDSURFACE
3 #include "common.c"
4
5 void
6 api_process (dwg_object *obj)
7 {
8 int error, isnew;
9 _3DSOLID_FIELDS;
10
11 //? sweep_profile, taper_angle
12 BITCODE_BS modeler_format_version; /*!< DXF 70 */
13 BITCODE_BL bindata_size; // 90
14 BITCODE_TF bindata; // 310|1
15 BITCODE_BS u_isolines; /*!< DXF 71 */
16 BITCODE_BS v_isolines; /*!< DXF 72 */
17 BITCODE_BL class_version; /*!< DXF 90 */
18 // sweep_options?
19 // BITCODE_BD height;
20 BITCODE_3BD sweep_vector; /*!< DXF 10 */
21 BITCODE_BD *sweep_transmatrix; /*!< DXF 40: 16x BD */
22 BITCODE_BD draft_angle; /*!< DXF 42 */
23 BITCODE_BD draft_start_distance; /*!< DXF 43 */
24 BITCODE_BD draft_end_distance; /*!< DXF 44 */
25 BITCODE_BD twist_angle; /*!< DXF 45 */
26 BITCODE_BD scale_factor; /*!< DXF 48 */
27 BITCODE_BD align_angle; /*!< DXF 49 */
28 BITCODE_BD *sweep_entity_transmatrix; /*!< DXF 46: 16x BD */
29 BITCODE_BD *path_entity_transmatrix; /*!< DXF 47: 16x BD */
30 BITCODE_B is_solid; /*!< DXF 290 */
31 BITCODE_BS sweep_alignment_flags; /*!< DXF 290 */
32 BITCODE_BS path_flags; /*!< DXF 71 */
33 BITCODE_B align_start; /*!< DXF 292 */
34 BITCODE_B bank; /*!< DXF 293 */
35 BITCODE_B base_point_set; /*!< DXF 294 */
36 BITCODE_B sweep_entity_transform_computed; /*!< DXF 295 */
37 BITCODE_B path_entity_transform_computed; /*!< DXF 296 */
38 BITCODE_3BD reference_vector_for_controlling_twist; /*!< DXF 11 */
39 BITCODE_H sweep_entity;
40 BITCODE_H path_entity;
41
42 Dwg_Version_Type dwg_version = obj->parent->header.version;
43 #ifdef DEBUG_CLASSES
44 dwg_ent_extrudedsurface *_obj = dwg_object_to_EXTRUDEDSURFACE (obj);
45
46 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, acis_empty, B);
47 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, version, BS);
48 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, acis_data, TF);
49 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, wireframe_data_present, B);
50 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, point_present, B);
51 CHK_ENTITY_3RD (_obj, EXTRUDEDSURFACE, point);
52 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, isoline_present, B);
53 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, isolines, BL);
54 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, num_wires, BL);
55 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, num_silhouettes, BL);
56 if (!dwg_dynapi_entity_value (_obj, "EXTRUDEDSURFACE", "wires", &wires,
57 NULL))
58 fail ("EXTRUDEDSURFACE.wires");
59 else
60 {
61 for (BITCODE_BL i = 0; i < num_wires; i++)
62 printf ("EXTRUDEDSURFACE.wires[%u]: " FORMAT_BLd "\n", i,
63 wires[i].selection_marker);
64 }
65 if (!dwg_dynapi_entity_value (_obj, "EXTRUDEDSURFACE", "silhouettes",
66 &silhouettes, NULL))
67 fail ("EXTRUDEDSURFACE.silhouettes");
68 else
69 {
70 for (BITCODE_BL i = 0; i < num_silhouettes; i++)
71 printf ("EXTRUDEDSURFACE.silhouettes[%u]: " FORMAT_BL "\n", i,
72 silhouettes[i].vp_id);
73 }
74 if (dwg_version >= R_2007 && _obj->history_id) // if it did not fail before
75 {
76 CHK_ENTITY_H (_obj, EXTRUDEDSURFACE, history_id);
77 }
78
79 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, modeler_format_version, BS);
80 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, bindata_size, BL);
81 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, bindata, TF); // 310|1
82 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, u_isolines, BS);
83 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, v_isolines, BS);
84 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, class_version, BL);
85
86 // CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, height, BD);
87 CHK_ENTITY_3RD (_obj, EXTRUDEDSURFACE, sweep_vector);
88 if (!dwg_dynapi_entity_value (_obj, "EXTRUDEDSURFACE", "sweep_transmatrix",
89 &sweep_transmatrix, NULL)
90 || !sweep_transmatrix)
91 fail ("EXTRUDEDSURFACE.sweep_transmatrix");
92 else
93 for (int i = 0; i < 16; i++)
94 {
95 ok ("EXTRUDEDSURFACE.sweep_transmatrix[%d]: %f", i,
96 sweep_transmatrix[i]);
97 }
98 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, draft_angle, BD);
99 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, draft_start_distance, BD);
100 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, draft_end_distance, BD);
101 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, twist_angle, BD);
102 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, scale_factor, BD);
103 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, align_angle, BD);
104 if (!dwg_dynapi_entity_value (_obj, "EXTRUDEDSURFACE",
105 "sweep_entity_transmatrix",
106 &sweep_entity_transmatrix, NULL)
107 || !sweep_entity_transmatrix)
108 fail ("EXTRUDEDSURFACE.sweep_entity_transmatrix");
109 else
110 for (int i = 0; i < 16; i++)
111 {
112 ok ("EXTRUDEDSURFACE.sweep_entity_transmatrix[%d]: %f", i,
113 sweep_entity_transmatrix[i]);
114 }
115 if (!dwg_dynapi_entity_value (_obj, "EXTRUDEDSURFACE",
116 "path_entity_transmatrix",
117 &path_entity_transmatrix, NULL)
118 || !path_entity_transmatrix)
119 fail ("EXTRUDEDSURFACE.path_entity_transmatrix");
120 else
121 for (int i = 0; i < 16; i++)
122 {
123 ok ("EXTRUDEDSURFACE.path_entity_transmatrix[%d]: %f", i,
124 path_entity_transmatrix[i]);
125 }
126 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, is_solid, B);
127 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, sweep_alignment_flags, BS);
128 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, path_flags, BS);
129 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, align_start, B);
130 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, bank, B);
131 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, base_point_set, B);
132 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, sweep_entity_transform_computed, B);
133 CHK_ENTITY_TYPE (_obj, EXTRUDEDSURFACE, path_entity_transform_computed, B);
134 CHK_ENTITY_3RD (_obj, EXTRUDEDSURFACE,
135 reference_vector_for_controlling_twist);
136 CHK_ENTITY_H (_obj, EXTRUDEDSURFACE, sweep_entity);
137 CHK_ENTITY_H (_obj, EXTRUDEDSURFACE, path_entity);
138 #endif
139 }