static Point perp(Point from, Point to, double distOnLine, double distFromLine) { final Point on = PointUtil.on(from, to, distOnLine); final Point unit = PointUtil.unit(from, to); return new Point( on.x + -unit.y * distFromLine, on.y + unit.x * distFromLine); }
static Point on(Connection<?> conn, double dist) { return PointUtil.on(conn.from(), conn.to(), dist); }
void drawArrow(Point from, Point to, int width, int height) { final double w = vp.get().invScale(width); final double h = vp.get().invScale(height); final Point left = PointUtil.perp(to, from, h, w / 2d); final Point right = PointUtil.perp(to, from, h, -w / 2d); drawLine(from, PointUtil.on(from, to, h)); fillPolygon(left, right, to); }
@Override public void renderDynamic(GC gc, ViewPort vp, long time) { helper.adapt(gc, vp); if (showRelativeSpeedDynamic) { final Set<Connection<? extends ConnectionData>> set = ImmutableSet.copyOf(updatedConnections); for (final Connection<? extends ConnectionData> e : set) { final double dist = Point.distance(e.from(), e.to()); final Point f = PointUtil.on(e, dist * ARROW_REL_FROM_TO.x); final Point t = PointUtil.on(e, dist * ARROW_REL_FROM_TO.y); final MultiAttributeData data = (MultiAttributeData) e.data().get(); final double ratio = data.getMaxSpeed().get() / Double.parseDouble((String) data.getAttributes().get("ts")); final Color color = new Color(gc.getDevice(), (int) Math.max(Math.min(-510 * ratio + 510, 255), 0), (int) Math.max(Math.min(510 * ratio, 255), 0), 0); helper.setBackgroundSysCol(color); helper.drawArrow(f, t, ARROW_HEAD_SIZE, ARROW_HEAD_SIZE); color.dispose(); } // updatedConnections.clear(); } }
void drawArrow(Point from, Point to, double width, double height) { final Point left = PointUtil.perp(to, from, height, width / 2d); final Point right = PointUtil.perp(to, from, height, -width / 2d); drawLine(from, PointUtil.on(from, to, height)); fillPolygon(left, right, to); }
final Point start1 = PointUtil.on(e, vehicleLength); final Point end1 = PointUtil.on(e, vehicleLength + arrowDimensions.y * 2); adapter.drawArrow(start1, end1, arrowDimensions.x, arrowDimensions.y); final Point start2 = PointUtil.on(e.to(), e.from(), vehicleLength + arrowDimensions.y * 2); final Point end2 = PointUtil.on(e.to(), e.from(), vehicleLength); adapter.drawArrow(start2, end2, arrowDimensions.x, arrowDimensions.y); } else { final double center = PointUtil.length(e) / 2d; final Point start1 = PointUtil.on(e, center - arrowDimensions.y); final Point end1 = PointUtil.on(e, center + arrowDimensions.y); adapter.drawArrow(start1, end1, arrowDimensions.x, arrowDimensions.y);
final Point f = PointUtil.on(e, dist * ARROW_REL_FROM_TO.x); final Point t = PointUtil.on(e, dist * ARROW_REL_FROM_TO.y); helper.setBackgroundSysCol(SWT.COLOR_GRAY); helper.drawArrow(f, t, ARROW_HEAD_SIZE, ARROW_HEAD_SIZE); final Point f = PointUtil.on(e, dist * ARROW_REL_FROM_TO.x); final Point t = PointUtil.on(e, dist * ARROW_REL_FROM_TO.y); final MultiAttributeData data = (MultiAttributeData) e.data().get(); final double ratio =