* ElementPainter.
*/
public static interface ISelectionProvider {
- public void init(final IElement e, final G2DParentNode parentNode, final String nodeId,
+ public void init(int selectionId, final IElement e, final G2DParentNode parentNode, final String nodeId,
final AffineTransform transform, final Rectangle2D bounds, final Color color);
}
continue;
if (NodeUtil.needSelectionPaint(elementNode))
- paintSelectionFrame(elementNode, selectionNode, el, color);
+ paintSelectionFrame(selectionId, elementNode, selectionNode, el, color);
nodesUpdated = true;
}
createSelectionReference(selectionsNode, elementNode);
if (NodeUtil.needSelectionPaint(elementNode))
- paintSelectionFrame(en, selectionNode, e, color);
+ paintSelectionFrame(selectionId, en, selectionNode, e, color);
} else {
if (elementNode != null) {
return result;
}
- public void paintSelectionFrame(G2DParentNode elementNode, G2DParentNode selectionNode, final IElement e, Color color) {
+ public void paintSelectionFrame(int selectionId, G2DParentNode elementNode, G2DParentNode selectionNode, final IElement e, Color color) {
// The element node already has the correct transform.
AffineTransform selectionTransform = ElementUtils.getTransform(e);// no it doesnt ... new AffineTransform();
Shape shape = ElementUtils.getElementShapeOrBounds(e);
ISelectionProvider provider = this.getContext().getDefaultHintContext().getHint(KEY_SELECTION_PROVIDER);
if (provider != null) {
- provider.init(e, selectionNode, getNodeId("shape", e), selectionTransform, bounds, color);
+ provider.init(selectionId, e, selectionNode, getNodeId("shape", e), selectionTransform, bounds, color);
} else {
SelectionNode s = selectionNode.getOrCreateNode(getNodeId("shape", e), SelectionNode.class);
- s.init(selectionTransform, bounds, color);
+ s.init(selectionId, selectionTransform, bounds, color);
Double paddingFactor = diagram.getHint(DiagramHints.SELECTION_PADDING_SCALE_FACTOR);
if (paddingFactor != null)
s.setPaddingFactor(paddingFactor);
static class GalleryItemPainter extends ElementPainter {
@Override
- public void paintSelectionFrame(G2DParentNode elementNode, G2DParentNode selectionNode, IElement e, Color color) {
+ public void paintSelectionFrame(int selectionId, G2DParentNode elementNode, G2DParentNode selectionNode, IElement e, Color color) {
final Shape outline = ElementUtils.getElementBoundsOnDiagram(e);
Rectangle2D bounds = outline.getBounds2D();
GeometryUtils.expandRectangle(bounds, 2, 2, 2, 2);
parentBuilder.append(SELECTION_SECTION, "\n</g>");
parentBuilder.append(MAIN_SECTION, "\n</g>");
- } else if (node instanceof SelectionNode) {
+ } else if (isSelection0(node)) {
SelectionNode n = (SelectionNode)node;
SingleElementNode parentSEN = (SingleElementNode)NodeUtil.getNearestParentOfType(node, SingleElementNode.class);
parentBuilder2.append(SELECTION_MASK_SECTION,"\n</g>");
}
+ } else if (node instanceof SelectionNode) {
+
+ Element doc = renderSVGNode(svgGenerator, (IG2DNode)node);
+ String svg = printSVGDocument(doc);
+ parentBuilder.append(MAIN_SECTION, "<g>");
+ parentBuilder.append(MAIN_SECTION, svg);
+ parentBuilder.append(MAIN_SECTION, "\n</g>");
+
} else if (node instanceof SVGNode) {
SVGNode svg = (SVGNode)node;
parentBuilder.append(MAIN_SECTION, svg.getSVGText());
}
+ private boolean isSelection0(IG2DNode node) {
+
+ if(node instanceof SelectionNode) {
+ SelectionNode sn = (SelectionNode)node;
+ return sn.getSelectionId() == 0;
+ } else {
+ return false;
+ }
+
+ }
+
private RenderSVGContext getParentBuilder(IG2DNode node) {
INode parentSEN = NodeUtil.getNearestParentOfType(node, SingleElementNode.class);
*******************************************************************************/
package org.simantics.scenegraph.g2d.nodes;
+import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
+import java.awt.Composite;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
protected transient Rectangle2D rect;
protected transient BasicStroke scaledStroke;
protected transient double previousScaleRecip = Double.NaN;
- private boolean ignore = false;
- private double paddingFactor = 5.0;
+ protected boolean ignore = false;
+ protected double paddingFactor = 5.0;
+ protected int selectionId;
+ public int getSelectionId() {
+ return selectionId;
+ }
+
public void setIgnore(boolean value) {
ignore = value;
}
}
@SyncField({"transform", "bounds", "color"})
- public void init(AffineTransform transform, Rectangle2D bounds, Color color) {
+ public void init(int selectionId, AffineTransform transform, Rectangle2D bounds, Color color) {
+ this.selectionId = selectionId;
this.transform = transform;
this.bounds = bounds;
this.color = color;
}
+ public void init(AffineTransform transform, Rectangle2D bounds, Color color) {
+ init(0, transform, bounds, color);
+ }
+
@Override
public void render(Graphics2D g) {
if (bounds == null) return;