File: pack.h

package info (click to toggle)
graphviz 14.1.2-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 139,476 kB
  • sloc: ansic: 142,288; cpp: 11,975; python: 7,883; makefile: 4,044; yacc: 3,030; xml: 2,972; tcl: 2,495; sh: 1,391; objc: 1,159; java: 560; lex: 423; perl: 243; awk: 156; pascal: 139; php: 58; ruby: 49; cs: 31; sed: 1
file content (115 lines) | stat: -rw-r--r-- 4,264 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/**
 * @file
 * @brief support for connected components
 * @ingroup public_apis
 *
 * **libpack** supports the use of connected components
 * in the context of laying out graphs using other graphviz libraries.
 * One set of functions can be used to take a single graph and break it
 * apart into connected components.
 * A complementary set of functions takes a collection of graphs
 * (not necessarily components of a single graph) which have been laid
 * out separately, and packs them together.
 *
 * As this library is meant to be used with `libcommon`, it relies on the
 * @ref Agraphinfo_t, @ref Agnodeinfo_t and @ref Agedgeinfo_t used in
 * that library.
 *
 * [man 3 libpack](https://graphviz.org/pdf/pack.3.pdf)
 *
 */

/*************************************************************************
 * 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 <stdbool.h>
#include <stddef.h>

#ifdef __cplusplus
extern "C" {
#endif

#include "types.h"

/* Type indicating granularity and method 
 *  l_undef    - unspecified
 *  l_node     - polyomino using nodes and edges
 *  l_clust    - polyomino using nodes and edges and top-level clusters
 *               (assumes ND_clust(n) unused by application)
 *  l_graph    - polyomino using computer graph bounding box
 *  l_array    - array based on graph bounding boxes
 *  l_aspect   - tiling based on graph bounding boxes preserving aspect ratio
 *  l_hull     - polyomino using convex hull (unimplemented)
 *  l_tile     - tiling using graph bounding box (unimplemented)
 *  l_bisect   - alternate bisection using graph bounding box (unimplemented)
 */
    typedef enum { l_undef, l_clust, l_node, l_graph, l_array, l_aspect } pack_mode;

#define PK_COL_MAJOR   (1 << 0)
#define PK_USER_VALS   (1 << 1)
#define PK_LEFT_ALIGN  (1 << 2)
#define PK_RIGHT_ALIGN (1 << 3)
#define PK_TOP_ALIGN   (1 << 4)
#define PK_BOT_ALIGN   (1 << 5)
#define PK_INPUT_ORDER (1 << 6)

typedef unsigned int packval_t;

    typedef struct {
	float aspect;		/* desired aspect ratio */
	int sz;			/* row/column size size */
	unsigned int margin;	/* margin left around objects, in points */
	bool doSplines; ///< use splines in constructing graph shape
	pack_mode mode;		/* granularity and method */
	bool *fixed;		/* fixed[i] == true implies g[i] should not be moved */
	packval_t* vals;	/* for arrays, sort numbers */
	int flags;       
    } pack_info;

#ifdef GVDLL
#ifdef GVC_EXPORTS
#define PACK_API __declspec(dllexport)
#else
#define PACK_API __declspec(dllimport)
#endif
#endif

#ifndef PACK_API
#define PACK_API /* nothing */
#endif

    PACK_API pointf *putRects(size_t ng, boxf *bbs, pack_info *pinfo);
    PACK_API int packRects(size_t ng, boxf* bbs, pack_info* pinfo);

    PACK_API pointf *putGraphs(size_t, Agraph_t **, Agraph_t *, pack_info *);
    PACK_API int packGraphs(size_t, Agraph_t **, Agraph_t *, pack_info *);
    PACK_API int packSubgraphs(size_t, Agraph_t **, Agraph_t *, pack_info *);
    PACK_API int pack_graph(size_t ng, Agraph_t **gs, Agraph_t *root, bool *fixed);

    PACK_API int shiftGraphs(size_t, Agraph_t **, pointf *, Agraph_t *, bool);

    PACK_API pack_mode getPackMode(Agraph_t * g, pack_mode dflt);
    PACK_API int getPack(Agraph_t *, int not_def, int dflt);
    PACK_API pack_mode getPackInfo(Agraph_t * g, pack_mode dflt, int dfltMargin, pack_info*);
    PACK_API pack_mode getPackModeInfo(Agraph_t * g, pack_mode dflt, pack_info*);
    PACK_API pack_mode parsePackModeInfo(const char* p, pack_mode dflt,
                                         pack_info* pinfo);

    PACK_API int isConnected(Agraph_t *);
    PACK_API Agraph_t **ccomps(Agraph_t *, size_t *, char *);
    PACK_API Agraph_t **cccomps(Agraph_t *, size_t *, char *);
    PACK_API Agraph_t **pccomps(Agraph_t *, size_t *, char *, bool *);
    PACK_API Agraph_t *mapClust(Agraph_t *);
#undef PACK_API
#ifdef __cplusplus
}
#endif