import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.geom.AffineTransform;
+import java.awt.geom.Path2D;
import java.awt.geom.Rectangle2D;
+import org.simantics.district.network.ModelledCRS;
import org.simantics.district.network.ui.DistrictNetworkEdge;
import org.simantics.scenegraph.g2d.G2DNode;
import org.simantics.scenegraph.utils.GeometryUtils;
private static final Stroke STROKE = new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
private boolean scaleStroke = true;
+ private Color color;
+
+ private Double stroke;
+
@Override
public void init() {
-
}
@Override
// g2d.fill(selectionShape);
// }
//
- g2d.setColor(Color.BLUE);
+ g2d.setColor(color);
if (STROKE != null) {
if (scaleStroke && STROKE instanceof BasicStroke) {
- BasicStroke bs = GeometryUtils.scaleStroke(STROKE, (float) (1.0 / GeometryUtils.getScale(g2d.getTransform())));
+ double str;
+ if (stroke != null)
+ str = Math.abs(stroke);
+ else
+ str = 1.0;
+ BasicStroke bs = GeometryUtils.scaleStroke(STROKE, (float) (str / GeometryUtils.getScale(g2d.getTransform())));
g2d.setStroke(bs);
} else {
g2d.setStroke(STROKE);
}
}
- // render
- g2d.draw(edge.getPath());
+
+ g2d.draw(calculatePath(edge));
// Reset
g2d.setStroke(oldStroke);
if (ot != null)
g2d.setTransform(ot);
}
+
+ public static Path2D calculatePath(DistrictNetworkEdge edge) {
+ // Convert to screen coordinates
+ double startX = ModelledCRS.longitudeToX(edge.getStartPoint().getX());
+ double startY = ModelledCRS.latitudeToY(-edge.getStartPoint().getY()); // Invert for Simantics
+ double endX = ModelledCRS.longitudeToX(edge.getEndPoint().getX());
+ double endY = ModelledCRS.latitudeToY(-edge.getEndPoint().getY());// Invert for Simantics
+
+ // render
+ Path2D path = new Path2D.Double();
+ path.moveTo(startX, startY);
+ path.lineTo(endX, endY);
+ return path;
+ }
private boolean isSelected() {
return NodeUtil.isSelected(this, 1);
}
private Rectangle2D calculateBounds(Rectangle2D rect) {
- return edge.getBounds(rect);
+ return calculatePath(edge).getBounds2D();
}
public void setDNEdge(DistrictNetworkEdge edge) {
updateBounds();
}
+ public void setColor(Color color) {
+ this.color = color;
+ }
+
+ public Color getColor() {
+ return color;
+ }
+
+ @PropertySetter(value = "stroke")
+ public void setStroke(Double stroke) {
+ this.stroke = stroke;
+ }
+
}