1 package org.simantics.debug.graphical.model;
3 import java.awt.Graphics2D;
4 import java.awt.geom.AffineTransform;
5 import java.awt.geom.Line2D;
6 import java.awt.geom.Path2D;
7 import java.awt.geom.Point2D;
10 private static final double ARROW_LENGTH = 10.0;
11 private static final double ARROW_MIDDLE_LENGTH = 8.0;
12 private static final double ARROW_RADIUS = 4.0;
18 public Edge(Node a, Node b) {
31 public void setContent(Content content) {
32 this.content = content;
35 public void render(Graphics2D g) {
36 Point2D pa = a.clipLineFromCenter(b.x, b.y);
37 Point2D pb = b.clipLineFromCenter(a.x, a.y);
42 Path2D path = new Path2D.Double();
48 l = Math.sqrt(dx*dx + dy*dy);
56 path.lineTo(x+ARROW_LENGTH*dx+ARROW_RADIUS*dy, y+ARROW_LENGTH*dy-ARROW_RADIUS*dx);
57 path.lineTo(x+ARROW_MIDDLE_LENGTH*dx, y+ARROW_MIDDLE_LENGTH*dy);
58 path.lineTo(x+ARROW_LENGTH*dx-ARROW_RADIUS*dy, y+ARROW_LENGTH*dy+ARROW_RADIUS*dx);
63 pb.setLocation(pb.getX()+dx*ARROW_MIDDLE_LENGTH,
64 pb.getY()+dy*ARROW_MIDDLE_LENGTH);
67 g.draw(new Line2D.Double(pa, pb));
70 if(l < content.radiusX*2.1) {
71 /*double ss = - Math.abs(dy)*content.radiusX + Math.abs(dx)*content.radiusY + 3.0;
72 double tx = 0.5*(pa.getX() + pb.getX()) - dy*ss;
73 double ty = 0.5*(pa.getY() + pb.getY()) + dx*ss;
75 double tx = 0.5*(pa.getX() + pb.getX()) + Math.signum(dy) * content.radiusX;
76 double ty = 0.5*(pa.getY() + pb.getY()) - Math.signum(dx) * content.radiusY;
78 content.render(g, tx, ty);
81 double ss = content.radiusY*0.5+1.0;
82 double tx = 0.5*(pa.getX() + pb.getX()) - dy*ss;
83 double ty = 0.5*(pa.getY() + pb.getY()) + dx*ss;
85 content.render(g, new AffineTransform(-dx, -dy, dy, -dx, tx, ty));