wolffd@0: /* $Id: pack.h,v 1.17 2009/08/11 21:23:23 erg Exp $ $Revision: 1.17 $ */ wolffd@0: /* vim:set shiftwidth=4 ts=8: */ wolffd@0: wolffd@0: /********************************************************** wolffd@0: * This software is part of the graphviz package * wolffd@0: * http://www.graphviz.org/ * wolffd@0: * * wolffd@0: * Copyright (c) 1994-2004 AT&T Corp. * wolffd@0: * and is licensed under the * wolffd@0: * Common Public License, Version 1.0 * wolffd@0: * by AT&T Corp. * wolffd@0: * * wolffd@0: * Information and Software Systems Research * wolffd@0: * AT&T Research, Florham Park NJ * wolffd@0: **********************************************************/ wolffd@0: wolffd@0: wolffd@0: wolffd@0: #ifndef _PACK_H wolffd@0: #define _PACK_H 1 wolffd@0: wolffd@0: #ifdef __cplusplus wolffd@0: extern "C" { wolffd@0: #endif wolffd@0: wolffd@0: #include "types.h" wolffd@0: wolffd@0: /* Type indicating granularity and method wolffd@0: * l_undef - unspecified wolffd@0: * l_node - polyomino using nodes and edges wolffd@0: * l_clust - polyomino using nodes and edges and top-level clusters wolffd@0: * (assumes ND_clust(n) unused by application) wolffd@0: * l_graph - polyomino using computer graph bounding box wolffd@0: * l_array - array based on graph bounding boxes wolffd@0: * l_aspect - tiling based on graph bounding boxes preserving aspect ratio wolffd@0: * l_hull - polyomino using convex hull (unimplemented) wolffd@0: * l_tile - tiling using graph bounding box (unimplemented) wolffd@0: * l_bisect - alternate bisection using graph bounding box (unimplemented) wolffd@0: */ wolffd@0: typedef enum { l_undef, l_clust, l_node, l_graph, l_array, l_aspect } pack_mode; wolffd@0: wolffd@0: #define PK_COL_MAJOR 1 wolffd@0: #define PK_USER_VALS 2 wolffd@0: wolffd@0: typedef unsigned char packval_t; wolffd@0: wolffd@0: typedef struct { wolffd@0: float aspect; /* desired aspect ratio */ wolffd@0: int sz; /* row/column size size */ wolffd@0: unsigned int margin; /* margin left around objects, in points */ wolffd@0: int doSplines; /* use splines in constructing graph shape */ wolffd@0: pack_mode mode; /* granularity and method */ wolffd@0: boolean *fixed; /* fixed[i] == true implies g[i] should not be moved */ wolffd@0: packval_t* vals; /* for arrays, sort numbers */ wolffd@0: int flags; wolffd@0: } pack_info; wolffd@0: #ifdef GVDLL wolffd@0: #define extern __declspec(dllexport) wolffd@0: #else wolffd@0: #define extern wolffd@0: #endif wolffd@0: wolffd@0: /*visual studio*/ wolffd@0: #ifdef WIN32_DLL wolffd@0: #ifndef GVC_EXPORTS wolffd@0: #define extern __declspec(dllimport) wolffd@0: #endif wolffd@0: #endif wolffd@0: /*end visual studio*/ wolffd@0: wolffd@0: extern point *putRects(int ng, boxf* bbs, pack_info* pinfo); wolffd@0: extern int packRects(int ng, boxf* bbs, pack_info* pinfo); wolffd@0: wolffd@0: extern point *putGraphs(int, Agraph_t **, Agraph_t *, pack_info *); wolffd@0: extern int packGraphs(int, Agraph_t **, Agraph_t *, pack_info *); wolffd@0: extern int packSubgraphs(int, Agraph_t **, Agraph_t *, pack_info *); wolffd@0: extern int pack_graph(int ng, Agraph_t** gs, Agraph_t* root, boolean* fixed); wolffd@0: wolffd@0: extern int shiftGraphs(int, Agraph_t**, point*, Agraph_t*, int); wolffd@0: wolffd@0: extern pack_mode getPackMode(Agraph_t * g, pack_mode dflt); wolffd@0: extern int getPack(Agraph_t *, int not_def, int dflt); wolffd@0: extern pack_mode getPackInfo(Agraph_t * g, pack_mode dflt, int dfltMargin, pack_info*); wolffd@0: extern pack_mode getPackModeInfo(Agraph_t * g, pack_mode dflt, pack_info*); wolffd@0: extern pack_mode parsePackModeInfo(char* p, pack_mode dflt, pack_info* pinfo); wolffd@0: wolffd@0: extern int isConnected(Agraph_t *); wolffd@0: extern Agraph_t **ccomps(Agraph_t *, int *, char *); wolffd@0: extern Agraph_t **pccomps(Agraph_t *, int *, char *, boolean *); wolffd@0: extern int nodeInduce(Agraph_t *); wolffd@0: #undef extern wolffd@0: #ifdef __cplusplus wolffd@0: } wolffd@0: #endif wolffd@0: #endif