1 // TODO unstable.
2 // Needed for ACSH_CLASS primitives
3 #define DWG_TYPE DWG_TYPE_EVALUATION_GRAPH
4 #include "common.c"
5
6 void
7 api_process (dwg_object *obj)
8 {
9 int error;
10 BITCODE_BLd first_nodeid, first_nodeid_copy;
11 BITCODE_BL num_nodes, i;
12 Dwg_EVAL_Node *nodes;
13 BITCODE_B has_graph;
14 BITCODE_BL num_edges;
15 Dwg_EVAL_Edge *edges;
16
17 Dwg_Version_Type dwg_version = obj->parent->header.version;
18 dwg_obj_evaluation_graph *_obj = dwg_object_to_EVALUATION_GRAPH (obj);
19
20 CHK_ENTITY_TYPE (_obj, EVALUATION_GRAPH, first_nodeid, BLd);
21 CHK_ENTITY_TYPE (_obj, EVALUATION_GRAPH, first_nodeid_copy, BLd);
22 CHK_ENTITY_TYPE (_obj, EVALUATION_GRAPH, num_nodes, BL);
23 if (!dwg_dynapi_entity_value (_obj, "EVALUATION_GRAPH", "nodes", &nodes,
24 NULL))
25 fail ("EVAL_Node.nodes");
26 else
27 for (i = 0; i < _obj->num_nodes; i++)
28 {
29 BITCODE_BLd node[4];
30 CHK_SUBCLASS_TYPE (_obj->nodes[i], EVAL_Node, id, BL);
31 CHK_SUBCLASS_TYPE (_obj->nodes[i], EVAL_Node, edge_flags, BL);
32 CHK_SUBCLASS_TYPE (_obj->nodes[i], EVAL_Node, nextid, BLd);
33 CHK_SUBCLASS_H (_obj->nodes[i], EVAL_Node, evalexpr);
34 // CHK_SUBCLASS_VECTOR_TYPE (_obj->nodes[i], EVAL_Node, node, 4, BLd);
35 if (dwg_dynapi_subclass_value (&_obj->nodes[i], "EVAL_Node", "node",
36 &node, NULL))
37 {
38 for (int j = 0; j < 4; j++)
39 {
40 ok ("EVAL_Node.node[%d]: " FORMAT_BLd, j, node[j]);
41 }
42 }
43 else
44 fail ("EVAL_Node.node[4]");
45 CHK_SUBCLASS_TYPE (_obj->nodes[i], EVAL_Node, active_cycles, B);
46 }
47 CHK_ENTITY_TYPE (_obj, EVALUATION_GRAPH, has_graph, B);
48
49 CHK_ENTITY_TYPE (_obj, EVALUATION_GRAPH, num_edges, BL);
50 if (!dwg_dynapi_entity_value (_obj, "EVALUATION_GRAPH", "edges", &edges,
51 NULL))
52 fail ("EVAL_Edge.edges");
53 else
54 for (i = 0; i < _obj->num_edges; i++)
55 {
56 BITCODE_BLd edge[5];
57 CHK_SUBCLASS_TYPE (_obj->edges[i], EVAL_Edge, id, BL);
58 CHK_SUBCLASS_TYPE (_obj->edges[i], EVAL_Edge, nextid, BLd);
59 CHK_SUBCLASS_TYPE (_obj->edges[i], EVAL_Edge, e1, BLd);
60 CHK_SUBCLASS_TYPE (_obj->edges[i], EVAL_Edge, e2, BLd);
61 CHK_SUBCLASS_TYPE (_obj->edges[i], EVAL_Edge, e3, BLd);
62 // CHK_SUBCLASS_VECTOR_TYPE (edges, EVAL_Edge, edge, 5, BLd);
63 if (dwg_dynapi_subclass_value (&_obj->edges[i], "EVAL_Edge",
64 "out_edge", &edge, NULL))
65 {
66 for (int j = 0; j < 5; j++)
67 {
68 ok ("EVAL_Edge.out_edge[%d]: " FORMAT_BLd, j, edge[j]);
69 }
70 }
71 else
72 fail ("EVAL_Edge.out_edge[5]");
73 }
74 }