8
#define offsetof(typ,fld) ((int)(&(((typ*)0)->fld)))
11
cg_t dd_open_constraint(void)
15
rv.g = agopen("nsg",Agstrictdirected, NIL(Agdisc_t*));
16
rv.anchor = agnode(rv.g,"_anchor",TRUE);
17
rv.inconsistent = TRUE; /* onetime initialization to set anchor */
22
* creates and initializes a new graph to contain the layout set,
23
* and creates a pointer from the original graph back to this layout.
25
ilbool DDopen(ILview_t *client)
27
static unsigned int D[] = {
28
sizeof(ddview_t), sizeof(ddmdlnode_t), sizeof(ddmdledge_t)
32
rv = (ddview_t*)il_open_view(&DynaDag, client, Agdirected, D);
33
rv->layout = agopen("dd_layout",Agdirected,&IL_graph_id_disc);
34
rv->dirty = agsubg(rv->layout,"updated nodes",TRUE);
35
rv->con[XCON] = dd_open_constraint();
36
rv->con[YCON] = dd_open_constraint();
37
rv->xscale = ROUND(1.0 / client->resolution);
38
rv->prev_low_rank = MAXINT;
43
void DDclose(ILview_t *argview)
51
view = (ddview_t*)(argview->pvt);
52
model = DDmodel(argview);
53
for (n = agfstnode(model); n; n = agnxtnode(n)) {
54
for (e = agfstedge(n); e; e = agnxtedge(e,n)) {
55
path = (ddmdledge_t*)(AGDATA(e));
56
dd_close_path(view,path);
59
dd_close_node(view,ln);
61
agclose(view->con[XCON].g);
62
agclose(view->con[YCON].g);
63
dd_close_config(view);
64
agclose(view->layout);
65
il_close_view((engview_t*)view);
68
Agraph_t *DDmodel(ILview_t *view)
70
return ((engview_t*)(view->pvt))->model.main;
73
ILnode_t *DDnodespec(ILview_t *argview, Agnode_t *model_node)
75
return (ILnode_t*)(((engview_t*)(argview->pvt))->engine->mdlobj_to_spec(argview,(Agobj_t*)model_node));
78
ILedge_t *DDedgespec(ILview_t *argview, Agedge_t *model_edge)
80
return (ILedge_t*)(((engview_t*)(argview->pvt))->engine->mdlobj_to_spec(argview,(Agobj_t*)model_edge));
83
ilbool DDcallback(ILview_t *view)
85
return dd_work((ddview_t*)(view->pvt));
88
ILengine_t DynaDag = {
100
void ddwrite(Agraph_t *g) {agwrite(g,stderr);}