fprintf(stderr, "%d (%.3g, %.3g), (%.3g, %.3g)\n", bi,
pp->boxes[bi].LL.x, pp->boxes[bi].LL.y,
pp->boxes[bi].UR.x, pp->boxes[bi].UR.y);
- fprintf(stderr, "start port: (%d, %d), tangent angle: %.3f, %s\n",
+ fprintf(stderr, "start port: (%.3g, %.3g), tangent angle: %.3g, %s\n",
pp->start.p.x, pp->start.p.y, pp->start.theta,
pp->start.constrained ? "constrained" : "not constrained");
- fprintf(stderr, "end port: (%d, %d), tangent angle: %.3f, %s\n",
+ fprintf(stderr, "end port: (%.3g, %.3g), tangent angle: %.3g, %s\n",
pp->end.p.x, pp->end.p.y, pp->end.theta,
pp->end.constrained ? "constrained" : "not constrained");
}
{
int side, mask;
node_t *n;
+ pointf np;
int (*pboxfn) (node_t*, port*, int, boxf*, int*);
n = e->tail;
pboxfn = ND_shape(n)->fns->pboxfn;
else
pboxfn = NULL;
- P->start.p = add_points(ND_coord_i(n), ED_tail_port(e).p);
+ P2PF(ND_coord_i(n), np);
+ P->start.p = add_pointfs(np, ED_tail_port(e).p);
if (merge) {
/*P->start.theta = - M_PI / 2; */
P->start.theta = conc_slope(e->tail);
{
int side, mask;
node_t *n;
+ pointf np;
int (*pboxfn) (node_t* n, port*, int, boxf*, int*);
n = e->head;
pboxfn = ND_shape(n)->fns->pboxfn;
else
pboxfn = NULL;
- P->end.p = add_points(ND_coord_i(n), ED_head_port(e).p);
+ P2PF(ND_coord_i(n), np);
+ P->end.p = add_pointfs(np, ED_head_port(e).p);
if (merge) {
/*P->end.theta = M_PI / 2; */
P->end.theta = conc_slope(e->head) + M_PI;
* significantly from rp and rq, but if the spline is degenerate (e.g.,
* the nodes overlap), we use rp and rq.
*/
-void addEdgeLabels(edge_t * e, point rp, point rq)
+void addEdgeLabels(edge_t * e, pointf rp, pointf rq)
{
int et = EDGE_TYPE (e->head->graph->root);
pointf p, q;
if (ED_label(e) && !ED_label(e)->set) {
endPoints(ED_spl(e), &p, &q);
+// FIXME - fp equality test
if ((p.x == q.x) && (p.y == q.y)) { /* degenerate spline */
- P2PF(rp, p);
- P2PF(rq, q);
+ p = rp;
+ q = rq;
spf = p;
}
else if (et == ET_SPLINE) {
typedef struct {
node_t *n1;
- point p1;
+ pointf p1;
node_t *n2;
- point p2;
+ pointf p2;
} edgeinfo;
typedef struct {
Dtlink_t link;
test.n1 = e->head;
test.p1 = ED_head_port(e).p;
} else {
- point hp = ED_head_port(e).p;
- point tp = ED_tail_port(e).p;
+ pointf hp = ED_head_port(e).p;
+ pointf tp = ED_tail_port(e).p;
if (tp.x < hp.x) {
test.p1 = tp;
test.p2 = hp;
node_t *head = e->head;
int e_cnt = ED_count(e);
pointf perp;
- point del, P, Q;
+ pointf del;
edge_t *e0;
int i, j, xstep, dx;
double l_perp;
if (e_cnt == 1) {
clip_and_install(e, e->head, dumb, 4, &sinfo);
- PF2P(p, P);
- PF2P(q, Q);
- addEdgeLabels(e, P, Q);
+ addEdgeLabels(e, p, q);
return;
}
e0 = e;
perp.x = dumb[0].y - dumb[3].y;
perp.y = dumb[3].x - dumb[0].x;
+// FIXME - fp equality test
if ((perp.x == 0) && (perp.y == 0)) {
/* degenerate case */
dumb[1] = dumb[0];
else
clip_and_install(e0, e0->head, dumber, 4, &sinfo);
- PF2P(p, P);
- PF2P(q, Q);
- addEdgeLabels(e0, P, Q);
+ addEdgeLabels(e0, p, q);
e0 = ED_to_virt(e0);
dumb[1].x += del.x;
dumb[1].y += del.y;
Ppolyline_t line;
int pp, qp;
Ppoint_t p, q;
- point p1, q1;
+ pointf tp, hp;
- p1 = add_points(ND_coord_i(e->tail), ED_tail_port(e).p);
- q1 = add_points(ND_coord_i(e->head), ED_head_port(e).p);
- P2PF(p1, p);
- P2PF(q1, q);
+ P2PF(ND_coord_i(e->tail), tp);
+ p = add_pointfs(tp, ED_tail_port(e).p);
+ P2PF(ND_coord_i(e->head), hp);
+ q = add_pointfs(hp, ED_head_port(e).p);
/* determine the polygons (if any) that contain the endpoints */
pp = qp = POLYID_NONE;
makePolyline(edge_t * e)
{
Ppolyline_t spl, line = ED_path(e);
- point p1, q1;
Ppoint_t p0, q0;
p0 = line.ps[0];
if (Verbose > 1)
fprintf(stderr, "polyline %s %s\n", e->tail->name, e->head->name);
clip_and_install(e, e->head, spl.ps, spl.pn, &sinfo);
- PF2P(p0, p1);
- PF2P(q0, q1);
- addEdgeLabels(e, p1, q1);
+ addEdgeLabels(e, p0, q0);
}
/* makeSpline:
int pp, qp;
Ppoint_t p, q;
Pedge_t *barriers;
- point p1, q1;
line = ED_path(e);
p = line.ps[0];
fprintf(stderr, "spline %s %s\n", e->tail->name, e->head->name);
clip_and_install(e, e->head, spline.ps, spline.pn, &sinfo);
free(barriers);
- PF2P(p, p1);
- PF2P(q, q1);
- addEdgeLabels(e, p1, q1);
+ addEdgeLabels(e, p, q);
}
/* True if either head or tail has a port on its boundary */
/* fprintf (stderr, "%s -- %s %d\n", e->tail->name, e->head->name, ED_count(e)); */
node_t *head = e->head;
if (useEdges && ED_spl(e)) {
+ pointf np, hp;
+ P2PF(ND_coord_i(n), np);
+ P2PF(ND_coord_i(head), hp);
addEdgeLabels(e,
- add_points(ND_coord_i(n), ED_tail_port(e).p),
- add_points(ND_coord_i(head),
- ED_head_port(e).p));
+ add_pointfs(np, ED_tail_port(e).p),
+ add_pointfs(hp, ED_head_port(e).p));
}
else if (ED_count(e) == 0) continue; /* only do representative */
else if (n == head) { /* self arc */