Graphviz 12.1.1~dev.20240814.0213
Loading...
Searching...
No Matches
render.h
Go to the documentation of this file.
1
5/*************************************************************************
6 * Copyright (c) 2011 AT&T Intellectual Property
7 * All rights reserved. This program and the accompanying materials
8 * are made available under the terms of the Eclipse Public License v1.0
9 * which accompanies this distribution, and is available at
10 * https://www.eclipse.org/legal/epl-v10.html
11 *
12 * Contributors: Details at https://graphviz.org
13 *************************************************************************/
14
15#pragma once
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21#include "config.h"
22
23#ifdef HAVE_SYS_TYPES_H
24#include <sys/types.h>
25#endif
26#include <stdbool.h>
27#include <stdint.h>
28#include <stdlib.h>
29#include <string.h>
30
31#include <inttypes.h>
32
33#include "types.h"
34#include "macros.h"
35#include "const.h"
36#include "globals.h"
37#include "colorprocs.h" /* must follow color.h (in types.h) */
38#include "geomprocs.h" /* must follow geom.h (in types.h) */
39#include "agxbuf.h"
40#include "utils.h" /* must follow types.h and agxbuf.h */
41#include "gvplugin.h" /* must follow gvcext.h (in types.h) */
42#include "gvcjob.h" /* must follow gvcext.h (in types.h) */
43#include "gvcint.h" /* must follow gvcext.h (in types.h) */
44#include "gvcproc.h" /* must follow gvcext.h (in types.h) */
45
46 typedef struct epsf_s {
50
51#ifdef GVDLL
52#ifdef GVC_EXPORTS
53#define RENDER_API __declspec(dllexport)
54#else
55#define RENDER_API __declspec(dllimport)
56#endif
57#endif
58
59#ifndef RENDER_API
60#define RENDER_API /* nothing */
61#endif
62
63 RENDER_API void add_box(path *, boxf);
64 RENDER_API void arrow_flags(Agedge_t *e, uint32_t *sflag, uint32_t *eflag);
65 RENDER_API boxf arrow_bb(pointf p, pointf u, double arrowsize);
66 RENDER_API void arrow_gen(GVJ_t * job, emit_state_t emit_state, pointf p, pointf u,
67 double arrowsize, double penwidth, uint32_t flag);
68 RENDER_API size_t arrowEndClip(edge_t*, pointf*, size_t, size_t, bezier*,
69 uint32_t eflag);
70 RENDER_API size_t arrowStartClip(edge_t*, pointf *ps, size_t, size_t,
71 bezier*, uint32_t sflag);
72 RENDER_API void arrowOrthoClip(edge_t*, pointf *ps, size_t, size_t, bezier*,
73 uint32_t sflag, uint32_t eflag);
74 RENDER_API void beginpath(path *, Agedge_t *, int, pathend_t *, bool);
75 RENDER_API void bezier_clip(inside_t * inside_context,
76 bool(*insidefn) (inside_t * inside_context,
77 pointf p), pointf * sp, bool left_inside);
78 RENDER_API shape_desc *bind_shape(char *name, node_t *);
79 RENDER_API void makeStraightEdge(graph_t * g, edge_t * e, int edgetype, splineInfo * info);
80 RENDER_API void makeStraightEdges(graph_t *g, edge_t **edges, size_t e_cnt,
81 int et, splineInfo* sinfo);
82 RENDER_API void clip_and_install(edge_t * fe, node_t * hn,
83 pointf *ps, size_t pn, splineInfo *info);
84 RENDER_API char* charsetToStr (int c);
85 RENDER_API pointf coord(node_t * n);
86 RENDER_API void do_graph_label(graph_t * sg);
87 RENDER_API void graph_init(graph_t * g, bool use_rankdir);
88 RENDER_API void graph_cleanup(graph_t * g);
89 RENDER_API int dotneato_args_initialize(GVC_t * gvc, int, char **);
90 RENDER_API int dotneato_usage(int);
91 RENDER_API void dotneato_postprocess(Agraph_t *);
92 RENDER_API void gv_postprocess(Agraph_t *, int);
93 RENDER_API Ppolyline_t* ellipticWedge (pointf ctr, double major, double minor, double angle0, double angle1);
94 RENDER_API void emit_clusters(GVJ_t * job, Agraph_t * g, int flags);
95 RENDER_API char* getObjId (GVJ_t* job, void* obj, agxbuf* xb);
96 RENDER_API void emit_graph(GVJ_t * job, graph_t * g);
97 RENDER_API void emit_label(GVJ_t * job, emit_state_t emit_state, textlabel_t *);
98 RENDER_API bool emit_once(char *message);
99 RENDER_API void emit_once_reset(void);
100 RENDER_API void emit_map_rect(GVJ_t *job, boxf b);
101 RENDER_API void endpath(path *, Agedge_t *, int, pathend_t *, bool);
102 RENDER_API void epsf_init(node_t * n);
103 RENDER_API void epsf_free(node_t * n);
104 RENDER_API shape_desc *find_user_shape(const char *);
105 RENDER_API void free_label(textlabel_t *);
106 RENDER_API void free_textspan(textspan_t *tl, size_t);
107 RENDER_API void getdouble(graph_t * g, char *name, double *result);
108 RENDER_API splines *getsplinepoints(edge_t * e);
109 RENDER_API void gv_fixLocale (int set);
110 RENDER_API void gv_free_splines(edge_t * e);
111 RENDER_API void gv_cleanup_edge(Agedge_t * e);
112 RENDER_API void gv_cleanup_node(Agnode_t * n);
113 RENDER_API void* init_xdot (Agraph_t* g);
114 RENDER_API int initMapData (GVJ_t*, char*, char*, char*, char*, char*, void*);
115 RENDER_API bool isPolygon(node_t *);
116 RENDER_API void makeSelfEdge(edge_t *edges[], size_t ind, size_t cnt,
117 double sizex, double sizey, splineInfo * sinfo);
118 RENDER_API textlabel_t *make_label(void *obj, char *str, int kind, double fontsize, char *fontname, char *fontcolor);
119 RENDER_API bezier *new_spline(edge_t *e, size_t sz);
120 RENDER_API char **parse_style(char *s);
121 RENDER_API void place_graph_label(Agraph_t *);
122 RENDER_API int place_portlabel(edge_t * e, bool head_p);
123 RENDER_API void makePortLabels(edge_t * e);
124 RENDER_API pointf edgeMidpoint(graph_t* g, edge_t * e);
125 RENDER_API void addEdgeLabels(edge_t *e);
126 RENDER_API void pop_obj_state(GVJ_t *job);
127 RENDER_API obj_state_t* push_obj_state(GVJ_t *job);
128 RENDER_API int rank(graph_t * g, int balance, int maxiter);
129 RENDER_API int rank2(graph_t * g, int balance, int maxiter, int search_size);
130 RENDER_API port resolvePort(node_t* n, node_t* other, port* oldport);
131 RENDER_API void resolvePorts (edge_t* e);
132 RENDER_API void round_corners(GVJ_t *job, pointf *AF, size_t sides,
133 graphviz_polygon_style_t style, int filled);
134 RENDER_API int routesplinesinit(void);
135 RENDER_API pointf *routesplines(path *, size_t *);
136 RENDER_API void routesplinesterm(void);
137 RENDER_API pointf* simpleSplineRoute(pointf, pointf, Ppoly_t, size_t *, int);
138 RENDER_API pointf *routepolylines(path* pp, size_t* npoints);
139 RENDER_API double selfRightSpace(edge_t *e);
140 RENDER_API shape_kind shapeOf(node_t *);
141 RENDER_API void shape_clip(node_t * n, pointf curve[4]);
142 RENDER_API void make_simple_label (GVC_t * gvc, textlabel_t* rv);
143 RENDER_API int stripedBox(GVJ_t *job, pointf *AF, const char *clrs,
144 int rotate);
145 RENDER_API stroke_t taper (bezier*, double (*radfunc_t)(double,double,double), double initwid);
146 RENDER_API pointf textspan_size(GVC_t * gvc, textspan_t * span);
147 RENDER_API void textfont_dict_open(GVC_t *gvc);
148 RENDER_API void textfont_dict_close(GVC_t *gvc);
149 RENDER_API void translate_bb(Agraph_t *, int);
150 RENDER_API int wedgedEllipse(GVJ_t *job, pointf *pf, const char *clrs);
151 RENDER_API void update_bb_bz(boxf *bb, pointf *cp);
152 RENDER_API boxf xdotBB (graph_t* g);
153
154#undef RENDER_API
155
156#ifdef __cplusplus
157}
158#endif
static splineInfo sinfo
Definition dotsplines.c:130
double(* radfunc_t)(double, double, double)
Definition emit.c:2124
static int flags
Definition gc.c:61
geometric functions (e.g. on points and boxes)
static int cnt(Dict_t *d, Dtlink_t **set)
Definition graph.c:199
emit_state_t
Definition gvcjob.h:173
static double penwidth[]
GVC_t * gvc
Definition htmlparse.c:99
agxbuf * str
Definition htmlparse.c:97
static int * ps
Definition lu.c:51
bezier * new_spline(edge_t *e, size_t sz)
Definition splines.c:215
void make_simple_label(GVC_t *gvc, textlabel_t *rv)
Definition labels.c:54
void emit_label(GVJ_t *job, emit_state_t emit_state, textlabel_t *)
Definition labels.c:212
void gv_cleanup_edge(Agedge_t *e)
Definition utils.c:1528
void emit_clusters(GVJ_t *job, Agraph_t *g, int flags)
Definition emit.c:3474
void epsf_free(node_t *n)
int stripedBox(GVJ_t *job, pointf *AF, const char *clrs, int rotate)
Definition emit.c:588
int dotneato_usage(int)
Definition input.c:76
void makePortLabels(edge_t *e)
Definition splines.c:1217
shape_desc * find_user_shape(const char *)
Definition shapes.c:3972
splines * getsplinepoints(edge_t *e)
Definition splines.c:1392
int rank(graph_t *g, int balance, int maxiter)
Definition ns.c:997
void gv_fixLocale(int set)
Definition emit.c:3876
void clip_and_install(edge_t *fe, node_t *hn, pointf *ps, size_t pn, splineInfo *info)
Definition splines.c:238
pointf * simpleSplineRoute(pointf, pointf, Ppoly_t, size_t *, int)
Given a simple (ccw) polygon, route an edge from tp to hp.
Definition routespl.c:173
void gv_free_splines(edge_t *e)
Definition utils.c:1518
double selfRightSpace(edge_t *e)
Definition splines.c:1148
void resolvePorts(edge_t *e)
Definition shapes.c:4367
void gv_cleanup_node(Agnode_t *n)
Definition utils.c:1540
int routesplinesinit(void)
Definition routespl.c:220
void shape_clip(node_t *n, pointf curve[4])
Definition splines.c:194
size_t arrowStartClip(edge_t *, pointf *ps, size_t, size_t, bezier *, uint32_t sflag)
Definition arrows.c:320
boxf arrow_bb(pointf p, pointf u, double arrowsize)
Definition arrows.c:1117
void round_corners(GVJ_t *job, pointf *AF, size_t sides, graphviz_polygon_style_t style, int filled)
Handle some special graphical cases, such as rounding the shape, adding diagonals at corners,...
Definition shapes.c:706
int dotneato_args_initialize(GVC_t *gvc, int, char **)
Definition input.c:217
void translate_bb(Agraph_t *, int)
Definition postproc.c:123
pointf textspan_size(GVC_t *gvc, textspan_t *span)
Estimates size of a textspan, in points.
Definition textspan.c:79
bool isPolygon(node_t *)
Definition shapes.c:1922
size_t arrowEndClip(edge_t *, pointf *, size_t, size_t, bezier *, uint32_t eflag)
Definition arrows.c:289
shape_kind shapeOf(node_t *)
Definition shapes.c:1902
void makeStraightEdge(graph_t *g, edge_t *e, int edgetype, splineInfo *info)
Definition routespl.c:934
char * charsetToStr(int c)
Given an internal charset value, return a canonical string representation.
Definition input.c:814
bool emit_once(char *message)
Definition emit.c:3437
Ppolyline_t * ellipticWedge(pointf ctr, double major, double minor, double angle0, double angle1)
Definition ellipse.c:298
void textfont_dict_close(GVC_t *gvc)
Definition textspan.c:165
textlabel_t * make_label(void *obj, char *str, int kind, double fontsize, char *fontname, char *fontcolor)
Definition labels.c:108
shape_desc * bind_shape(char *name, node_t *)
Definition shapes.c:4004
void add_box(path *, boxf)
Definition splines.c:348
void graph_init(graph_t *g, bool use_rankdir)
Definition input.c:597
pointf coord(node_t *n)
Definition utils.c:152
void epsf_init(node_t *n)
Definition psusershape.c:96
void bezier_clip(inside_t *inside_context, bool(*insidefn)(inside_t *inside_context, pointf p), pointf *sp, bool left_inside)
Definition splines.c:106
void * init_xdot(Agraph_t *g)
Definition emit.c:57
void place_graph_label(Agraph_t *)
Definition postproc.c:736
void beginpath(path *, Agedge_t *, int, pathend_t *, bool)
Definition splines.c:389
void addEdgeLabels(edge_t *e)
Definition splines.c:1328
obj_state_t * push_obj_state(GVJ_t *job)
Definition emit.c:97
char ** parse_style(char *s)
Definition emit.c:3709
void textfont_dict_open(GVC_t *gvc)
Definition textspan.c:160
void emit_once_reset(void)
Definition emit.c:3447
void gv_postprocess(Agraph_t *, int)
Definition postproc.c:601
void emit_map_rect(GVJ_t *job, boxf b)
Definition emit.c:633
void graph_cleanup(graph_t *g)
Definition input.c:798
pointf edgeMidpoint(graph_t *g, edge_t *e)
Definition splines.c:1299
void arrow_flags(Agedge_t *e, uint32_t *sflag, uint32_t *eflag)
Definition arrows.c:217
pointf * routesplines(path *, size_t *)
Definition routespl.c:566
struct epsf_s epsf_t
int wedgedEllipse(GVJ_t *job, pointf *pf, const char *clrs)
Definition emit.c:542
void getdouble(graph_t *g, char *name, double *result)
Definition input.c:495
void dotneato_postprocess(Agraph_t *)
Definition postproc.c:693
void free_label(textlabel_t *)
Definition labels.c:199
void routesplinesterm(void)
Definition routespl.c:233
void pop_obj_state(GVJ_t *job)
Definition emit.c:121
void makeSelfEdge(edge_t *edges[], size_t ind, size_t cnt, double sizex, double sizey, splineInfo *sinfo)
Definition splines.c:1174
port resolvePort(node_t *n, node_t *other, port *oldport)
Definition shapes.c:4355
stroke_t taper(bezier *, double(*radfunc_t)(double, double, double), double initwid)
Definition taper.c:181
char * getObjId(GVJ_t *job, void *obj, agxbuf *xb)
Use id of root graph if any, plus kind and internal id of object.
Definition emit.c:200
void arrowOrthoClip(edge_t *, pointf *ps, size_t, size_t, bezier *, uint32_t sflag, uint32_t eflag)
Definition arrows.c:360
void endpath(path *, Agedge_t *, int, pathend_t *, bool)
Definition splines.c:586
void update_bb_bz(boxf *bb, pointf *cp)
Definition emit.c:747
pointf * routepolylines(path *pp, size_t *npoints)
Definition routespl.c:570
void free_textspan(textspan_t *tl, size_t)
Definition labels.c:186
boxf xdotBB(graph_t *g)
Definition emit.c:2845
void do_graph_label(graph_t *sg)
Set characteristics of graph label if it exists.
Definition input.c:837
void arrow_gen(GVJ_t *job, emit_state_t emit_state, pointf p, pointf u, double arrowsize, double penwidth, uint32_t flag)
Definition arrows.c:1155
int place_portlabel(edge_t *e, bool head_p)
Definition splines.c:1340
int rank2(graph_t *g, int balance, int maxiter, int search_size)
Definition ns.c:919
void emit_graph(GVJ_t *job, graph_t *g)
Definition emit.c:3378
int initMapData(GVJ_t *, char *, char *, char *, char *, char *, void *)
Definition emit.c:153
void makeStraightEdges(graph_t *g, edge_t **edges, size_t e_cnt, int et, splineInfo *sinfo)
Definition routespl.c:953
static void rotate(int n, int dim, double *x, double angle)
graph or subgraph
Definition cgraph.h:425
Definition gvcint.h:80
Definition types.h:89
Definition geom.h:41
pointf offset
Definition render.h:48
int macro_id
Definition render.h:47
Definition types.h:81
Definition types.h:48
graphs, nodes and edges info: Agraphinfo_t, Agnodeinfo_t and Agedgeinfo_t
shape_kind
Definition types.h:187
Definition grammar.c:94
int(* pf)(void *, char *,...)
Definition xdot.c:405