package org.simantics.district.network.ui.nodes;
+import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import org.simantics.district.network.ModelledCRS;
import org.simantics.district.network.ui.adapters.DistrictNetworkVertex;
+import org.simantics.scenegraph.ISelectionPainterNode;
import org.simantics.scenegraph.g2d.G2DNode;
import org.simantics.scenegraph.utils.GeometryUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.simantics.scenegraph.utils.NodeUtil;
-public class DistrictNetworkVertexNode extends G2DNode {
+public class DistrictNetworkVertexNode extends G2DNode implements ISelectionPainterNode {
- private static final Logger LOGGER = LoggerFactory.getLogger(DistrictNetworkVertexNode.class);
+ //private static final Logger LOGGER = LoggerFactory.getLogger(DistrictNetworkVertexNode.class);
private static final long serialVersionUID = -2641639101400236719L;
- private DistrictNetworkVertex vertex;
+
+ private static final BasicStroke STROKE = new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
+ private static final Color SELECTION_COLOR = new Color(255, 0, 255, 96);
private static final double left = -0.25;
private static final double top = -0.25;
private static final Rectangle2D NORMAL = new Rectangle2D.Double(left, top, width, height);
private static final Rectangle2D HOVERED = new Rectangle2D.Double(left * 3, top * 3, width * 3, height * 3);
+ private DistrictNetworkVertex vertex;
+
private boolean scaleStroke = true;
private boolean hover;
private Color color;
+ private transient Color dynamicColor;
private Rectangle2D bounds;
}
Color oldColor = g2d.getColor();
- g2d.setColor(color);
double scaleRecip = 1;
if (scaleStroke) {
} else {
toDraw = new Rectangle2D.Double(res.getX() - (NORMAL.getWidth() / 2 * scaleRecip), res.getY() - (NORMAL.getHeight() / 2 * scaleRecip), NORMAL.getWidth() * scaleRecip, NORMAL.getHeight() * scaleRecip);
}
+
+ if (NodeUtil.isSelected(this, 1)) {
+ g2d.setColor(SELECTION_COLOR);
+ BasicStroke ss = GeometryUtils.scaleStroke(STROKE, (float) scaleRecip*2);
+ g2d.setStroke(ss);
+ g2d.draw(toDraw);
+ }
+
// render
+ g2d.setColor(dynamicColor != null ? dynamicColor : color);
g2d.fill(toDraw);
// Reset settings
updateBounds();
}
+ @PropertySetter(value = "dynamicColor")
+ public void setDynamicColor(Color color) {
+ this.dynamicColor = color;
+ }
+
}