Graphviz 12.0.1~dev.20240716.0800
Loading...
Searching...
No Matches
dotsplines.c File Reference
#include <assert.h>
#include <cgraph/agxbuf.h>
#include <cgraph/alloc.h>
#include <cgraph/list.h>
#include <common/boxes.h>
#include <dotgen/dot.h>
#include <math.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
Include dependency graph for dotsplines.c:

Go to the source code of this file.

Data Structures

struct  spline_info_t
 
struct  attr_state_t
 

Macros

#define NSUB   9 /* number of subdivisions, re-aiming splines */
 
#define CHUNK   128 /* in building list of edges */
 
#define MINW   16 /* minimum width of a box in the edge path */
 
#define HALFMINW   8
 
#define FWDEDGE   16
 
#define BWDEDGE   32
 
#define MAINGRAPH   64
 
#define AUXGRAPH   128
 
#define GRAPHTYPEMASK   192 /* the OR of the above */
 
#define MAKEFWDEDGE(new, old)
 
#define GROWEDGES
 
#define LBL_SPACE   6 /* space between labels, in points */
 
#define REAL_CLUSTER(n)   (ND_clust(n)==g?NULL:ND_clust(n))
 
#define FUDGE   4
 

Functions

static void adjustregularpath (path *, size_t, size_t)
 
static Agedge_tbot_bound (Agedge_t *, int)
 
static bool pathscross (Agnode_t *, Agnode_t *, Agedge_t *, Agedge_t *)
 
static Agraph_tcl_bound (graph_t *, Agnode_t *, Agnode_t *)
 
static bool cl_vninside (Agraph_t *, Agnode_t *)
 
static void completeregularpath (path *, Agedge_t *, Agedge_t *, pathend_t *, pathend_t *, const boxes_t *)
 
static int edgecmp (const void *, const void *)
 
static void make_flat_edge (graph_t *, spline_info_t *, path *, Agedge_t **, unsigned, unsigned, int)
 
static void make_regular_edge (graph_t *g, spline_info_t *, path *, Agedge_t **, unsigned, unsigned, int)
 
static boxf makeregularend (boxf, int, double)
 
static boxf maximal_bbox (graph_t *g, spline_info_t *, Agnode_t *, Agedge_t *, Agedge_t *)
 
static Agnode_tneighbor (graph_t *, Agnode_t *, Agedge_t *, Agedge_t *, int)
 
static void place_vnlabel (Agnode_t *)
 
static boxf rank_box (spline_info_t *sp, Agraph_t *, int)
 
static void recover_slack (Agedge_t *, path *)
 
static void resize_vn (Agnode_t *, double, double, double)
 
static void setflags (Agedge_t *, int, int, int)
 
static int straight_len (Agnode_t *)
 
static Agedge_tstraight_path (Agedge_t *, int, points_t *)
 
static Agedge_ttop_bound (Agedge_t *, int)
 
static edge_tgetmainedge (edge_t *e)
 
static bool spline_merge (node_t *n)
 
static bool swap_ends_p (edge_t *e)
 
int portcmp (port p0, port p1)
 
static void swap_bezier (bezier *b)
 
static void swap_spline (splines *s)
 
static void edge_normalize (graph_t *g)
 
static void resetRW (graph_t *g)
 
static void setEdgeLabelPos (graph_t *g)
 
static void dot_splines_ (graph_t *g, int normalize)
 
void dot_splines (graph_t *g)
 
static void setState (graph_t *auxg, attr_state_t *attr_state)
 
static graph_tcloneGraph (graph_t *g, attr_state_t *attr_state)
 
static void cleanupCloneGraph (graph_t *g, attr_state_t *attr_state)
 
static node_tcloneNode (graph_t *g, node_t *orign)
 
static edge_tcloneEdge (graph_t *g, node_t *tn, node_t *hn, edge_t *orig)
 
static pointf transformf (pointf p, pointf del, int flip)
 
static int edgelblcmpfn (const void *x, const void *y)
 
static void makeSimpleFlatLabels (node_t *tn, node_t *hn, edge_t **edges, unsigned ind, unsigned cnt, int et, unsigned n_lbls)
 
static void makeSimpleFlat (node_t *tn, node_t *hn, edge_t **edges, unsigned ind, unsigned cnt, int et)
 
static void make_flat_adj_edges (graph_t *g, edge_t **edges, unsigned ind, unsigned cnt, edge_t *e0, int et)
 
static void makeFlatEnd (graph_t *g, spline_info_t *sp, path *P, node_t *n, edge_t *e, pathend_t *endp, bool isBegin)
 
static void makeBottomFlatEnd (graph_t *g, spline_info_t *sp, path *P, node_t *n, edge_t *e, pathend_t *endp, bool isBegin)
 
static void make_flat_labeled_edge (graph_t *g, spline_info_t *sp, path *P, edge_t *e, int et)
 
static void make_flat_bottom_edges (graph_t *g, spline_info_t *sp, path *P, edge_t **edges, unsigned ind, unsigned cnt, edge_t *e, bool use_splines)
 
static bool leftOf (pointf p1, pointf p2, pointf p3)
 Return true if p3 is to left of ray p1->p2.
 
static int makeLineEdge (graph_t *g, edge_t *fe, points_t *points, node_t **hp)
 

Variables

static splineInfo sinfo
 

Macro Definition Documentation

◆ AUXGRAPH

#define AUXGRAPH   128

Definition at line 42 of file dotsplines.c.

◆ BWDEDGE

#define BWDEDGE   32

Definition at line 39 of file dotsplines.c.

◆ CHUNK

#define CHUNK   128 /* in building list of edges */

Definition at line 33 of file dotsplines.c.

◆ FUDGE

#define FUDGE   4

Definition at line 2237 of file dotsplines.c.

◆ FWDEDGE

#define FWDEDGE   16

Definition at line 38 of file dotsplines.c.

◆ GRAPHTYPEMASK

#define GRAPHTYPEMASK   192 /* the OR of the above */

Definition at line 43 of file dotsplines.c.

◆ GROWEDGES

#define GROWEDGES
Value:
do { \
edges = gv_recalloc(edges, n_edges, n_edges + CHUNK, sizeof(edge_t *)); \
} while (0)
static void * gv_recalloc(void *ptr, size_t old_nmemb, size_t new_nmemb, size_t size)
Definition alloc.h:73
#define CHUNK
Definition dotsplines.c:33

Definition at line 95 of file dotsplines.c.

◆ HALFMINW

#define HALFMINW   8

Definition at line 36 of file dotsplines.c.

◆ LBL_SPACE

#define LBL_SPACE   6 /* space between labels, in points */

Definition at line 1002 of file dotsplines.c.

◆ MAINGRAPH

#define MAINGRAPH   64

Definition at line 41 of file dotsplines.c.

◆ MAKEFWDEDGE

#define MAKEFWDEDGE (   new,
  old 
)
Value:
{ \
edge_t *newp; \
newp = new; \
info = (Agedgeinfo_t*)newp->base.data; \
*info = *(Agedgeinfo_t*)old->base.data; \
*newp = *old; \
newp->base.data = (Agrec_t*)info; \
AGTAIL(newp) = AGHEAD(old); \
AGHEAD(newp) = AGTAIL(old); \
ED_tail_port(newp) = ED_head_port(old); \
ED_head_port(newp) = ED_tail_port(old); \
ED_edge_type(newp) = VIRTUAL; \
ED_to_orig(newp) = old; \
}
#define VIRTUAL
Definition const.h:25
#define AGTAIL(e)
Definition cgraph.h:885
#define ED_head_port(e)
Definition types.h:588
#define ED_tail_port(e)
Definition types.h:597
#define AGHEAD(e)
Definition cgraph.h:886
Agobj_t base
Definition cgraph.h:269
Agrec_t * data
stores programmer-defined data, access with AGDATA
Definition cgraph.h:212
implementation of Agrec_t
Definition cgraph.h:172

Definition at line 45 of file dotsplines.c.

◆ MINW

#define MINW   16 /* minimum width of a box in the edge path */

Definition at line 35 of file dotsplines.c.

◆ NSUB

#define NSUB   9 /* number of subdivisions, re-aiming splines */

Definition at line 32 of file dotsplines.c.

◆ REAL_CLUSTER

#define REAL_CLUSTER (   n)    (ND_clust(n)==g?NULL:ND_clust(n))

Definition at line 2194 of file dotsplines.c.

Function Documentation

◆ adjustregularpath()

static void adjustregularpath ( path P,
size_t  fb,
size_t  lb 
)
static

Definition at line 2030 of file dotsplines.c.

References path::boxes, HALFMINW, boxf::LL, MINW, path::nbox, boxf::UR, and pointf_s::x.

Referenced by completeregularpath().

Here is the caller graph for this function:

◆ bot_bound()

static edge_t * bot_bound ( Agedge_t e,
int  side 
)
static

Definition at line 2164 of file dotsplines.c.

References aghead, agtail, ED_spl, ED_to_orig, ND_in, ND_order, and NULL.

Referenced by completeregularpath().

Here is the caller graph for this function:

◆ cl_bound()

static Agraph_t * cl_bound ( graph_t g,
Agnode_t n,
Agnode_t adj 
)
static

Definition at line 2198 of file dotsplines.c.

References aghead, agtail, cl_vninside(), ED_to_orig, ND_clust, ND_node_type, ND_out, NORMAL, NULL, and REAL_CLUSTER.

Referenced by maximal_bbox().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cl_vninside()

static bool cl_vninside ( Agraph_t cl,
Agnode_t n 
)
static

Definition at line 2184 of file dotsplines.c.

References BETWEEN, GD_bb, and ND_coord.

Referenced by cl_bound().

Here is the caller graph for this function:

◆ cleanupCloneGraph()

static void cleanupCloneGraph ( graph_t g,
attr_state_t attr_state 
)
static

Definition at line 871 of file dotsplines.c.

References agclose(), dot_cleanup(), E_constr, attr_state_t::E_constr, E_fontcolor, attr_state_t::E_fontcolor, E_fontname, attr_state_t::E_fontname, E_fontsize, attr_state_t::E_fontsize, E_headclip, attr_state_t::E_headclip, E_headlabel, attr_state_t::E_headlabel, E_label, attr_state_t::E_label, E_label_float, attr_state_t::E_label_float, E_labelfontcolor, attr_state_t::E_labelfontcolor, E_labelfontname, attr_state_t::E_labelfontname, E_labelfontsize, attr_state_t::E_labelfontsize, E_minlen, attr_state_t::E_minlen, E_samehead, attr_state_t::E_samehead, E_sametail, attr_state_t::E_sametail, E_tailclip, attr_state_t::E_tailclip, E_taillabel, attr_state_t::E_taillabel, E_weight, attr_state_t::E_weight, E_xlabel, attr_state_t::E_xlabel, G_ordering, attr_state_t::G_ordering, N_distortion, attr_state_t::N_distortion, N_fixed, attr_state_t::N_fixed, N_fontcolor, attr_state_t::N_fontcolor, N_fontname, attr_state_t::N_fontname, N_fontsize, attr_state_t::N_fontsize, N_group, attr_state_t::N_group, N_height, attr_state_t::N_height, N_label, attr_state_t::N_label, N_nojustify, attr_state_t::N_nojustify, N_ordering, attr_state_t::N_ordering, N_orientation, attr_state_t::N_orientation, N_peripheries, attr_state_t::N_peripheries, N_shape, attr_state_t::N_shape, N_showboxes, attr_state_t::N_showboxes, N_sides, attr_state_t::N_sides, N_skew, attr_state_t::N_skew, N_style, attr_state_t::N_style, N_width, attr_state_t::N_width, N_xlabel, attr_state_t::N_xlabel, State, and attr_state_t::State.

Referenced by make_flat_adj_edges().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cloneEdge()

static edge_t * cloneEdge ( graph_t g,
node_t tn,
node_t hn,
edge_t orig 
)
static

Definition at line 937 of file dotsplines.c.

References agbindrec(), agcopyattr(), agedge(), and NULL.

Referenced by make_flat_adj_edges().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cloneGraph()

static graph_t * cloneGraph ( graph_t g,
attr_state_t attr_state 
)
static

Definition at line 828 of file dotsplines.c.

References agattr(), agbindrec(), Agdirected, AGEDGE, agisdirected(), AGNODE, agnxtattr(), agopen(), AGRAPH, agroot(), Agundirected, Agsym_s::defval, GD_charset, GD_drawing, GD_flip, GD_nodesep, GD_ranksep, gv_alloc(), Agsym_s::name, NULL, RANKDIR_LR, RANKDIR_TB, SET_RANKDIR, and setState().

Referenced by make_flat_adj_edges().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cloneNode()

static node_t * cloneNode ( graph_t g,
node_t orign 
)
static

Definition at line 922 of file dotsplines.c.

References agbindrec(), agcopyattr(), agnameof(), agnode(), agset(), agxbfree(), agxbprint(), agxbuse(), ND_label, SH_RECORD, and shapeOf().

Referenced by make_flat_adj_edges().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ completeregularpath()

static void completeregularpath ( path P,
Agedge_t first,
Agedge_t last,
pathend_t tendp,
pathend_t hendp,
const boxes_t *  boxes 
)
static

Definition at line 1969 of file dotsplines.c.

References add_box(), adjustregularpath(), bot_bound(), pathend_t::boxes, pathend_t::boxn, getsplinepoints(), last, path::nbox, NULL, and top_bound().

Referenced by make_regular_edge().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dot_splines()

void dot_splines ( graph_t g)

Definition at line 516 of file dotsplines.c.

References dot_splines_().

Referenced by dotLayout().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dot_splines_()

static void dot_splines_ ( graph_t g,
int  normalize 
)
static

Main spline routing code. The normalize parameter allows this function to be called by the recursive call in make_flat_edge without normalization occurring, so that the edge will only be normalized once in the top level call of dot_splines.

Definition at line 261 of file dotsplines.c.

References agfstin(), agfstnode(), agfstout(), aghead, AGMKOUT, agnxtin(), agnxtnode(), agnxtout(), agtail, agwarningf(), AUXGRAPH, Agedge_s::base, path::boxes, BWDEDGE, CHUNK, cnt(), Agobj_s::data, E_headlabel, E_labelangle, E_labeldistance, E_taillabel, ED_adjacent, ED_edge_type, ED_head_label, ED_head_port, ED_label, ED_tail_label, ED_tail_port, ED_tree_index, EDGE_LABEL, edge_normalize(), EDGE_TYPE, edgecmp(), EdgeLabelsDone, EDGETYPE_CURVED, EDGETYPE_LINE, EDGETYPE_NONE, EDGETYPE_ORTHO, EDGETYPEMASK, FLATEDGE, FLATORDER, free(), FWDEDGE, GD_has_labels, GD_maxrank, GD_minrank, GD_nlist, GD_nodesep, GD_rank, getmainedge(), GROWEDGES, gv_calloc(), GVSPLINES, IGNORED, spline_info_t::LeftBound, MAINGRAPH, make_flat_edge(), make_regular_edge(), MAKEFWDEDGE, makeSelfEdge(), makeStraightEdges(), mark_lowclusters(), MAX, MIN, MINW, spline_info_t::Multisep, ND_alg, ND_coord, ND_flat_out, ND_ht, ND_label, ND_lw, ND_mval, ND_next, ND_node_type, ND_other, ND_out, ND_rank, ND_rw, NORMAL, normalize(), NSUB, NULL, orthoEdges(), Agedgepair_s::out, place_portlabel(), place_vnlabel(), portcmp(), spline_info_t::Rank_box, REGULAREDGE, resetRW(), spline_info_t::RightBound, Agraph_s::root, routesplinesinit(), routesplinesterm(), setEdgeLabelPos(), setflags(), sinfo, splineInfo::splineMerge, spline_info_t::Splinesep, State, updateBB(), and VIRTUAL.

Referenced by dot_splines(), and make_flat_adj_edges().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ edge_normalize()

static void edge_normalize ( graph_t g)
static

Definition at line 193 of file dotsplines.c.

References agfstnode(), agfstout(), agnxtnode(), agnxtout(), ED_spl, sinfo, swap_spline(), and splineInfo::swapEnds.

Referenced by dot_splines_().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ edgecmp()

static int edgecmp ( const void *  x,
const void *  y 
)
static

Definition at line 583 of file dotsplines.c.

References aghead, AGSEQ, agtail, Agedge_s::base, BWDEDGE, Agobj_s::data, ED_head_port, ED_label, ED_tail_port, ED_tree_index, EDGETYPEMASK, FLATEDGE, getmainedge(), GRAPHTYPEMASK, MAKEFWDEDGE, ND_coord, ND_rank, Agedgepair_s::out, and portcmp().

Referenced by dot_splines_().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ edgelblcmpfn()

static int edgelblcmpfn ( const void *  x,
const void *  y 
)
static

Definition at line 966 of file dotsplines.c.

References ED_label, pointf_s::x, and pointf_s::y.

Referenced by makeSimpleFlatLabels().

Here is the caller graph for this function:

◆ getmainedge()

static edge_t * getmainedge ( edge_t e)
static

Definition at line 101 of file dotsplines.c.

References ED_to_orig, ED_to_virt, and le.

Referenced by dot_splines_(), edgecmp(), and make_regular_edge().

Here is the caller graph for this function:

◆ leftOf()

static bool leftOf ( pointf  p1,
pointf  p2,
pointf  p3 
)
static

Definition at line 1670 of file dotsplines.c.

References pointf_s::x, and pointf_s::y.

Referenced by edgesIntersect(), and makeLineEdge().

Here is the caller graph for this function:

◆ make_flat_adj_edges()

static void make_flat_adj_edges ( graph_t g,
edge_t **  edges,
unsigned  ind,
unsigned  cnt,
edge_t e0,
int  et 
)
static

Definition at line 1217 of file dotsplines.c.

References agbindrec(), agedge(), agerr(), aghead, agisdirected(), agnameof(), AGPREV, agset(), agsubg(), agtail, agwarningf(), agxset(), cleanupCloneGraph(), cloneEdge(), cloneGraph(), cloneNode(), cnt(), del(), dot_init_node_edge(), dot_mincross(), dot_position(), dot_rank(), dot_sameports(), dot_splines_(), dotneato_postprocess(), E_weight, ED_alg, ED_edge_type, ED_head_port, ED_label, ED_spl, ED_tail_port, ED_to_orig, bezier::eflag, bezier::ep, GD_bb, GD_dotroot, GD_flip, GD_gvc, GD_nlist, bezier::list, makeSimpleFlat(), makeSimpleFlatLabels(), ND_coord, ND_lw, ND_next, ND_rw, new_spline(), NORMAL, NULL, setEdgeType(), bezier::sflag, SH_RECORD, shapeOf(), bezier::size, bezier::sp, transformf(), update_bb_bz(), and updateBB().

Referenced by make_flat_edge().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ make_flat_bottom_edges()

static void make_flat_bottom_edges ( graph_t g,
spline_info_t sp,
path P,
edge_t **  edges,
unsigned  ind,
unsigned  cnt,
edge_t e,
bool  use_splines 
)
static

Definition at line 1475 of file dotsplines.c.

References add_box(), aghead, agtail, pathend_t::boxes, pathend_t::boxn, clip_and_install(), cnt(), free(), GD_maxrank, GD_rank, GD_ranksep, boxf::LL, makeBottomFlatEnd(), spline_info_t::Multisep, path::nbox, ND_coord, ND_rank, NULL, rank_t::pht1, rank_t::pht2, ps, routepolylines(), routesplines(), sinfo, boxf::UR, rank_t::v, pointf_s::x, and pointf_s::y.

Referenced by make_flat_edge().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ make_flat_edge()

static void make_flat_edge ( graph_t g,
spline_info_t sp,
path P,
Agedge_t **  edges,
unsigned  ind,
unsigned  cnt,
int  et 
)
static

Definition at line 1554 of file dotsplines.c.

References add_box(), aghead, agtail, Agedge_s::base, BOTTOM, pathend_t::boxes, pathend_t::boxn, BWDEDGE, clip_and_install(), cnt(), Agobj_s::data, ED_adjacent, ED_head_port, ED_label, ED_tail_port, ED_tree_index, EDGE_LABEL, EDGETYPE_LINE, EDGETYPE_SPLINE, free(), GD_has_labels, GD_rank, GD_ranksep, rank_t::ht1, boxf::LL, make_flat_adj_edges(), make_flat_bottom_edges(), make_flat_labeled_edge(), makeFlatEnd(), MAKEFWDEDGE, makeSimpleFlat(), spline_info_t::Multisep, path::nbox, ND_coord, ND_rank, NULL, Agedgepair_s::out, ps, Agraph_s::root, routepolylines(), routesplines(), sinfo, TOP, boxf::UR, rank_t::v, pointf_s::x, and pointf_s::y.

Referenced by dot_splines_().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ make_flat_labeled_edge()

static void make_flat_labeled_edge ( graph_t g,
spline_info_t sp,
path P,
edge_t e,
int  et 
)
static

Definition at line 1401 of file dotsplines.c.

References add_box(), add_pointf(), aghead, agtail, pathend_t::boxes, pathend_t::boxn, clip_and_install(), ED_head_port, ED_label, ED_tail_port, ED_to_virt, EDGETYPE_LINE, EDGETYPE_SPLINE, free(), GD_rank, boxf::LL, makeFlatEnd(), MAX, ND_coord, ND_ht, ND_lw, ND_rank, ND_rw, points, ps, routepolylines(), routesplines(), sinfo, boxf::UR, pointf_s::x, and pointf_s::y.

Referenced by make_flat_edge().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ make_regular_edge()

static void make_regular_edge ( graph_t g,
spline_info_t sp,
path P,
Agedge_t **  edges,
unsigned  ind,
unsigned  cnt,
int  et 
)
static

◆ makeBottomFlatEnd()

static void makeBottomFlatEnd ( graph_t g,
spline_info_t sp,
path P,
node_t n,
edge_t e,
pathend_t endp,
bool  isBegin 
)
static

Definition at line 1384 of file dotsplines.c.

References beginpath(), BOTTOM, pathend_t::boxes, pathend_t::boxn, endpath(), FLATEDGE, GD_rank, boxf::LL, makeregularend(), maximal_bbox(), pathend_t::nb, ND_coord, ND_rank, NULL, pathend_t::sidemask, boxf::UR, pointf_s::x, and pointf_s::y.

Referenced by make_flat_bottom_edges().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ makeFlatEnd()

static void makeFlatEnd ( graph_t g,
spline_info_t sp,
path P,
node_t n,
edge_t e,
pathend_t endp,
bool  isBegin 
)
static

Definition at line 1367 of file dotsplines.c.

References beginpath(), pathend_t::boxes, pathend_t::boxn, endpath(), FLATEDGE, GD_rank, boxf::LL, makeregularend(), maximal_bbox(), pathend_t::nb, ND_coord, ND_rank, NULL, pathend_t::sidemask, TOP, boxf::UR, pointf_s::x, and pointf_s::y.

Referenced by make_flat_edge(), and make_flat_labeled_edge().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ makeLineEdge()

static int makeLineEdge ( graph_t g,
edge_t fe,
points_t *  points,
node_t **  hp 
)
static

Definition at line 1689 of file dotsplines.c.

References add_pointf(), aghead, agraphof(), agtail, ED_edge_type, ED_head_port, ED_label, ED_tail_port, ED_to_orig, EDGE_LABEL, GD_flip, GD_has_labels, leftOf(), ND_coord, ND_rank, NORMAL, points, Agraph_s::root, pointf_s::x, and pointf_s::y.

Referenced by make_regular_edge().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ makeregularend()

static boxf makeregularend ( boxf  b,
int  side,
double  y 
)
static

Definition at line 2006 of file dotsplines.c.

References BOTTOM, boxf::LL, TOP, boxf::UR, pointf_s::x, and pointf_s::y.

Referenced by make_regular_edge(), makeBottomFlatEnd(), and makeFlatEnd().

Here is the caller graph for this function:

◆ makeSimpleFlat()

static void makeSimpleFlat ( node_t tn,
node_t hn,
edge_t **  edges,
unsigned  ind,
unsigned  cnt,
int  et 
)
static

Definition at line 1170 of file dotsplines.c.

References add_pointf(), aghead, clip_and_install(), cnt(), dy, ED_head_port, ED_tail_port, EDGETYPE_LINE, EDGETYPE_SPLINE, ND_coord, ND_ht, points, sinfo, pointf_s::x, and pointf_s::y.

Referenced by make_flat_adj_edges(), and make_flat_edge().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ makeSimpleFlatLabels()

static void makeSimpleFlatLabels ( node_t tn,
node_t hn,
edge_t **  edges,
unsigned  ind,
unsigned  cnt,
int  et,
unsigned  n_lbls 
)
static

Definition at line 1010 of file dotsplines.c.

References add_pointf(), aghead, clip_and_install(), cnt(), ED_head_port, ED_label, ED_tail_port, edgelblcmpfn(), EDGETYPE_PLINE, free(), gv_calloc(), LBL_SPACE, ND_coord, ND_lw, ND_rw, NULL, points, ps, simpleSplineRoute(), sinfo, pointf_s::x, and pointf_s::y.

Referenced by make_flat_adj_edges().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ maximal_bbox()

static boxf maximal_bbox ( graph_t g,
spline_info_t sp,
Agnode_t vn,
Agedge_t ie,
Agedge_t oe 
)
static

Definition at line 2239 of file dotsplines.c.

References cl_bound(), FUDGE, GD_bb, GD_nodesep, GD_rank, left, spline_info_t::LeftBound, boxf::LL, ND_coord, ND_label, ND_lw, ND_mval, ND_node_type, ND_rank, ND_rw, neighbor, NORMAL, NULL, right, spline_info_t::RightBound, spline_info_t::Splinesep, boxf::UR, VIRTUAL, pointf_s::x, and pointf_s::y.

Referenced by make_regular_edge(), makeBottomFlatEnd(), and makeFlatEnd().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ neighbor()

static node_t * neighbor ( graph_t g,
Agnode_t vn,
Agedge_t ie,
Agedge_t oe,
int  dir 
)
static

Definition at line 2298 of file dotsplines.c.

References GD_rank, ND_label, ND_node_type, ND_order, ND_rank, NORMAL, NULL, pathscross(), rank(), and VIRTUAL.

Here is the call graph for this function:

◆ pathscross()

static bool pathscross ( Agnode_t n0,
Agnode_t n1,
Agedge_t ie1,
Agedge_t oe1 
)
static

Definition at line 2322 of file dotsplines.c.

References aghead, agtail, cnt(), ND_in, ND_node_type, ND_order, ND_out, and NORMAL.

Referenced by neighbor().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ place_vnlabel()

static void place_vnlabel ( Agnode_t n)
static

Definition at line 526 of file dotsplines.c.

References agraphof(), ED_edge_type, ED_label, ED_to_orig, GD_flip, ND_coord, ND_in, ND_out, NORMAL, pointf_s::x, and pointf_s::y.

Referenced by dot_splines_(), and setEdgeLabelPos().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ portcmp()

int portcmp ( port  p0,
port  p1 
)

Definition at line 133 of file dotsplines.c.

References port::defined, port::p, pointf_s::x, and pointf_s::y.

Referenced by bothdowncandidates(), bothupcandidates(), dot_splines_(), and edgecmp().

Here is the caller graph for this function:

◆ rank_box()

static boxf rank_box ( spline_info_t sp,
Agraph_t g,
int  r 
)
static

Definition at line 2066 of file dotsplines.c.

References GD_rank, spline_info_t::LeftBound, boxf::LL, ND_coord, spline_info_t::Rank_box, spline_info_t::RightBound, boxf::UR, pointf_s::x, and pointf_s::y.

Referenced by make_regular_edge().

Here is the caller graph for this function:

◆ recover_slack()

static void recover_slack ( Agedge_t e,
path p 
)
static

Definition at line 2116 of file dotsplines.c.

References aghead, path::boxes, boxf::LL, path::nbox, ND_coord, ND_label, ND_node_type, ND_out, ND_rw, resize_vn(), sinfo, splineInfo::splineMerge, boxf::UR, VIRTUAL, pointf_s::x, and pointf_s::y.

Referenced by make_regular_edge().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ resetRW()

static void resetRW ( graph_t g)
static

Definition at line 213 of file dotsplines.c.

References agfstnode(), agnxtnode(), ND_mval, ND_other, and ND_rw.

Referenced by dot_splines_().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ resize_vn()

static void resize_vn ( Agnode_t vn,
double  lx,
double  cx,
double  rx 
)
static

Definition at line 2140 of file dotsplines.c.

References ND_coord, ND_lw, and ND_rw.

Referenced by recover_slack().

Here is the caller graph for this function:

◆ setEdgeLabelPos()

static void setEdgeLabelPos ( graph_t g)
static

Definition at line 232 of file dotsplines.c.

References ED_label, GD_nlist, ND_alg, ND_coord, ND_label, ND_next, ND_node_type, place_vnlabel(), textlabel_t::pos, textlabel_t::set, updateBB(), and VIRTUAL.

Referenced by dot_splines_().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setflags()

static void setflags ( Agedge_t e,
int  hint1,
int  hint2,
int  f3 
)
static

Definition at line 543 of file dotsplines.c.

References aghead, agtail, BWDEDGE, ED_head_port, ED_tail_port, ED_tree_index, FLATEDGE, FWDEDGE, ND_order, ND_rank, REGULAREDGE, SELFNPEDGE, and SELFWPEDGE.

Referenced by dot_splines_().

Here is the caller graph for this function:

◆ setState()

static void setState ( graph_t auxg,
attr_state_t attr_state 
)
static

Definition at line 735 of file dotsplines.c.

References agattr(), AGEDGE, agfindedgeattr, agfindgraphattr, agfindnodeattr, E_constr, attr_state_t::E_constr, E_fontcolor, attr_state_t::E_fontcolor, E_fontname, attr_state_t::E_fontname, E_fontsize, attr_state_t::E_fontsize, E_headclip, attr_state_t::E_headclip, E_headlabel, attr_state_t::E_headlabel, E_label, attr_state_t::E_label, E_label_float, attr_state_t::E_label_float, E_labelfontcolor, attr_state_t::E_labelfontcolor, E_labelfontname, attr_state_t::E_labelfontname, E_labelfontsize, attr_state_t::E_labelfontsize, E_minlen, attr_state_t::E_minlen, E_samehead, attr_state_t::E_samehead, E_sametail, attr_state_t::E_sametail, E_tailclip, attr_state_t::E_tailclip, E_taillabel, attr_state_t::E_taillabel, E_weight, attr_state_t::E_weight, E_xlabel, attr_state_t::E_xlabel, G_ordering, attr_state_t::G_ordering, N_distortion, attr_state_t::N_distortion, N_fixed, attr_state_t::N_fixed, N_fontcolor, attr_state_t::N_fontcolor, N_fontname, attr_state_t::N_fontname, N_fontsize, attr_state_t::N_fontsize, N_group, attr_state_t::N_group, N_height, attr_state_t::N_height, N_label, attr_state_t::N_label, N_nojustify, attr_state_t::N_nojustify, N_ordering, attr_state_t::N_ordering, N_orientation, attr_state_t::N_orientation, N_peripheries, attr_state_t::N_peripheries, N_shape, attr_state_t::N_shape, N_showboxes, attr_state_t::N_showboxes, N_sides, attr_state_t::N_sides, N_skew, attr_state_t::N_skew, N_style, attr_state_t::N_style, N_width, attr_state_t::N_width, N_xlabel, attr_state_t::N_xlabel, NULL, State, and attr_state_t::State.

Referenced by cloneGraph().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ spline_merge()

static bool spline_merge ( node_t n)
static

Definition at line 111 of file dotsplines.c.

References ND_in, ND_node_type, ND_out, and VIRTUAL.

Referenced by make_regular_edge().

Here is the caller graph for this function:

◆ straight_len()

static int straight_len ( Agnode_t n)
static

Definition at line 2085 of file dotsplines.c.

References aghead, cnt(), ND_coord, ND_in, ND_node_type, ND_out, and VIRTUAL.

Referenced by make_regular_edge().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ straight_path()

static edge_t * straight_path ( Agedge_t e,
int  cnt,
points_t *  plist 
)
static

Definition at line 2104 of file dotsplines.c.

References aghead, cnt(), and ND_out.

Referenced by make_regular_edge().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ swap_bezier()

static void swap_bezier ( bezier b)
static

Definition at line 150 of file dotsplines.c.

References bezier::eflag, bezier::ep, bezier::list, bezier::sflag, bezier::size, and bezier::sp.

Referenced by swap_spline().

Here is the caller graph for this function:

◆ swap_ends_p()

static bool swap_ends_p ( edge_t e)
static

Definition at line 117 of file dotsplines.c.

References aghead, agtail, ED_to_orig, ND_order, and ND_rank.

◆ swap_spline()

static void swap_spline ( splines s)
static

Definition at line 170 of file dotsplines.c.

References s::list, and swap_bezier().

Referenced by edge_normalize().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ top_bound()

static edge_t * top_bound ( Agedge_t e,
int  side 
)
static

Definition at line 2146 of file dotsplines.c.

References aghead, agtail, ED_spl, ED_to_orig, ND_order, ND_out, and NULL.

Referenced by completeregularpath().

Here is the caller graph for this function:

◆ transformf()

static pointf transformf ( pointf  p,
pointf  del,
int  flip 
)
static

Definition at line 950 of file dotsplines.c.

References add_pointf(), del(), pointf_s::x, and pointf_s::y.

Referenced by make_flat_adj_edges().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ sinfo