123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /*************************************************************************
- * Copyright (c) 2011 AT&T Intellectual Property
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors: Details at https://graphviz.org
- *************************************************************************/
- #pragma once
- #include <common/render.h>
- #ifdef FDP_PRIVATE
- #define NDIM 2
- typedef struct bport_s {
- edge_t *e;
- node_t *n;
- double alpha;
- } bport_t;
- /* gdata is attached to the root graph, each cluster graph,
- * and to each derived graph.
- * Graphs also use "builtin" fields:
- * n_cluster, clust - to record clusters
- */
- typedef struct {
- bport_t *ports; /* boundary ports. 0-terminated */
- int nports; /* no. of ports */
- boxf bb; /* bounding box of graph */
- int flags;
- int level; /* depth in graph hierarchy */
- graph_t *parent; /* smallest containing cluster */
- #ifdef DEBUG
- graph_t *orig; /* original of derived graph */
- #endif
- } gdata;
- #define GDATA(g) ((gdata*)(GD_alg(g)))
- #define BB(g) (GDATA(g)->bb)
- #define PORTS(g) (GDATA(g)->ports)
- #define NPORTS(g) (GDATA(g)->nports)
- #define LEVEL(g) (GDATA(g)->level)
- #define GPARENT(g) (GDATA(g)->parent)
- #ifdef DEBUG
- #define GORIG(g) (GDATA(g)->orig)
- #endif
- /*
- * Real nodes use "builtin" fields:
- * ND_pos - position information
- * ND_width,ND_height - node dimensions
- * ND_pinned
- * ND_lw,ND_rw,ND_ht - node dimensions in points
- * ND_id
- * ND_shape, ND_shape_info
- *
- * In addition, we use two of the dot fields for parent and derived node.
- * Previously, we attached these via ND_alg, but ND_alg may be needed for
- * spline routing, and splines=compound also requires the parent field.
- */
- #define DNODE(n) (ND_next(n))
- #define PARENT(n) (ND_clust(n))
- /* dndata is attached to nodes in derived graphs.
- * Derived nodes also use "builtin" fields:
- * clust - for cluster nodes, points to cluster in real graph.
- * pos - position information
- * width,height - node dimensions
- */
- typedef struct {
- int deg; /* degree of node */
- int wdeg; /* weighted degree of node */
- node_t *dn; /* If derived node is not a cluster, */
- /* dn points real node. */
- double disp[NDIM]; /* incremental displacement */
- } dndata;
- #define DNDATA(n) ((dndata*)(ND_alg(n)))
- #define DISP(n) (DNDATA(n)->disp)
- #define ANODE(n) (DNDATA(n)->dn)
- #define DEG(n) (DNDATA(n)->deg)
- #define WDEG(n) (DNDATA(n)->wdeg)
- #define IS_PORT(n) (!ANODE(n) && !ND_clust(n))
- #endif /* FDP_PRIVATE */
- #ifdef __cplusplus
- extern "C" {
- #endif
- struct fdpParms_s {
- int useGrid; /* use grid for speed up */
- int useNew; /* encode x-K into attractive force */
- int numIters; /* actual iterations in layout */
- int unscaled; /* % of iterations used in pass 1 */
- double C; /* Repulsion factor in xLayout */
- double Tfact; /* scale temp from default expression */
- double K; /* spring constant; ideal distance */
- double T0; /* initial temperature */
- };
- typedef struct fdpParms_s fdpParms_t;
- extern void fdp_layout(Agraph_t * g);
- extern void fdp_init_node_edge(Agraph_t * g);
- extern void fdp_cleanup(Agraph_t * g);
- #ifdef __cplusplus
- }
- #endif
|