1 | /************************************************************************* |
2 | * Copyright (c) 2011 AT&T Intellectual Property |
3 | * All rights reserved. This program and the accompanying materials |
4 | * are made available under the terms of the Eclipse Public License v1.0 |
5 | * which accompanies this distribution, and is available at |
6 | * http://www.eclipse.org/legal/epl-v10.html |
7 | * |
8 | * Contributors: See CVS logs. Details at http://www.graphviz.org/ |
9 | *************************************************************************/ |
10 | #ifndef EDGE_BUNDLING_H |
11 | #define EDGE_BUNDLING_H |
12 | |
13 | #include <SparseMatrix.h> |
14 | |
15 | struct pedge_struct { |
16 | real wgt; /* weight, telling how many original edges this edge represent. If this edge consists of multiple sections of different weights then this is a lower bound. This only applied for agglomerative bundling */ |
17 | int npoints;/* number of poly points */ |
18 | int len;/* length of arra x. len >= npoints */ |
19 | int dim;/* dim >= 2. Point i is stored from x[i*dim]*/ |
20 | real edge_length; |
21 | real *x;/* coordinates of the npoints poly points. Dimension dim*npoints */ |
22 | real *wgts;/* number of original edges each section represnet. Dimension npoint - 1. This only applied for agglomerative bundling Null for other methods */ |
23 | }; |
24 | |
25 | typedef struct pedge_struct* pedge; |
26 | |
27 | pedge* edge_bundling(SparseMatrix A, int dim, real *x, int maxit_outer, real K, int method, int nneighbor, int compatibility_method, int max_recursion, real angle_param, real angle, int open_gl); |
28 | void pedge_delete(pedge e); |
29 | pedge pedge_realloc(pedge e, int np); |
30 | pedge pedge_wgts_realloc(pedge e, int n); |
31 | void pedge_export_mma(FILE *fp, int ne, pedge *edges); |
32 | void pedge_export_gv(FILE *fp, int ne, pedge *edges); |
33 | enum {METHOD_NONE = -1, METHOD_FD, METHOD_INK_AGGLOMERATE, METHOD_INK}; |
34 | enum {COMPATIBILITY_DIST = 0, COMPATIBILITY_FULL}; |
35 | pedge pedge_new(int np, int dim, real *x); |
36 | pedge pedge_wgt_new(int np, int dim, real *x, real wgt); |
37 | pedge pedge_double(pedge e); |
38 | |
39 | /* flip the polyline so that last point becomes the first, second last the second, etc*/ |
40 | pedge pedge_flip(pedge e); |
41 | |
42 | |
43 | #endif /* EDGE_BUNDLING_H */ |
44 | |
45 | |
46 | |