import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
-import java.awt.geom.Line2D;
import java.awt.geom.Path2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import org.simantics.district.network.ModelledCRS;
import org.simantics.district.network.ui.DistrictNetworkEdge;
+import org.simantics.district.network.ui.adapters.DistrictNetworkEdgeElementFactory;
+import org.simantics.maps.MapScalingTransform;
import org.simantics.scenegraph.INode;
import org.simantics.scenegraph.ISelectionPainterNode;
import org.simantics.scenegraph.g2d.G2DNode;
private DistrictNetworkEdge edge;
private Rectangle2D bounds;
- private transient Line2D path;
+ private transient Path2D path;
private boolean scaleStroke = true;
private Color color;
} else {
bs = STROKE;
}
-
- path = calculateLine(edge, path);
+ int zoomLevel = MapScalingTransform.zoomLevel(ot);
+ path = calculatePath(edge, path, zoomLevel > 15);
if (isSelected()) {
g2d.setColor(SELECTION_COLOR);
return centerPoint;
}
- public static Line2D calculateLine(DistrictNetworkEdge edge, Line2D result) {
- // 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
-
- if (result == null)
- result = new Line2D.Double();
- result.setLine(startX, startY, endX, endY);
- return result;
- }
-
- public static Path2D calculatePath(DistrictNetworkEdge edge, Path2D result) {
+// public static Line2D calculateLine(DistrictNetworkEdge edge, Line2D result) {
+// // 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
+//
+// if (result == null)
+// result = new Line2D.Double();
+// result.setLine(startX, startY, endX, endY);
+// return result;
+// }
+
+ public static Path2D calculatePath(DistrictNetworkEdge edge, Path2D result, boolean detailed) {
// Convert to screen coordinates
double startX = ModelledCRS.longitudeToX(edge.getStartPoint().getX());
double startY = ModelledCRS.latitudeToY(-edge.getStartPoint().getY()); // Invert for Simantics
result.reset();
}
result.moveTo(startX, startY);
+ if (detailed) {
+ double[] detailedGeometry = edge.getGeometry();
+ if (detailedGeometry != null && !DistrictNetworkEdgeElementFactory.EMPTY.equals(detailedGeometry)) {
+ // ok, lets do this
+
+ for (int i = 0; i < detailedGeometry.length; i += 2) {
+ double x = ModelledCRS.longitudeToX(detailedGeometry[i]);
+ double y = ModelledCRS.latitudeToY(-detailedGeometry[i+1]);// Invert for Simantics
+ result.lineTo(x, y);
+ }
+ }
+ }
result.lineTo(endX, endY);
return result;
}
}
private Rectangle2D calculateBounds(Rectangle2D rect) {
- return calculatePath(edge, null).getBounds2D();
+ return calculatePath(edge, null, false).getBounds2D();
}
public void setDNEdge(DistrictNetworkEdge edge) {