- IG2DNodeVisitor visitor = new IG2DNodeVisitor() {
-
- int indent = 0;
-
- HashMap<SingleElementNode,StringBuilder> senBuilders = new HashMap<>();
-
- @Override
- public void enter(IG2DNode node) {
-
- StringBuilder parentBuilder = getParentBuilder(node);
-
- indent++;
- if(node instanceof ConnectionNode) {
-
- for(RouteGraphNode n : NodeUtil.collectNodes(node, RouteGraphNode.class)) {
- n.setIgnoreSelection(true);
- }
-
- String key = ((ConnectionNode)node).getKey().toString();
-
- parentBuilder.append("\n<g class=\"connection\" id=\"" + key + "\">");
- Element doc = renderSVGNode((IG2DNode)node);
- String svg = printSVGDocument(doc);
- parentBuilder.append(svg);
-
- for(RouteGraphNode n : NodeUtil.collectNodes(node, RouteGraphNode.class)) {
- n.setIgnoreSelection(false);
- }
-
- parentBuilder.append("\n<g style=\"visibility:hidden\" class=\"selection\" id=\"" + key + "\">");
- doc = renderSVGNode((IG2DNode)node);
- svg = printSVGDocument(doc);
- parentBuilder.append(svg);
- parentBuilder.append("\n</g>");
-
- BasicStroke bs = new BasicStroke(5f);
-
- for(RouteGraphNode n : NodeUtil.collectNodes(node, RouteGraphNode.class)) {
- n.setDynamicStroke(bs);
- }
-
- parentBuilder.append("\n<g class=\"selectionMask\" opacity=\"0.001\" id=\"" + key + "\">");
- doc = renderSVGNode((IG2DNode)node);
- svg = printSVGDocument(doc);
- parentBuilder.append(svg);
- parentBuilder.append("\n</g>");
-
- parentBuilder.append("\n</g>");
-
- } else if (node instanceof SelectionNode) {
-
- SelectionNode n = (SelectionNode)node;
- SingleElementNode parentSEN = (SingleElementNode)NodeUtil.getNearestParentOfType(node, SingleElementNode.class);
- if(parentSEN != null && parentSEN.getKey() != null) {
-
- StringBuilder parentBuilder2 = getParentBuilder(parentSEN);
-
- String key = parentSEN.getKey().toString();
- Element doc = renderSVGNode((IG2DNode)node);
- String svg = printSVGDocument(doc);
- parentBuilder2.append("\n<g style=\"visibility:hidden\" class=\"selection\" id=\"" + key + "\">");
- parentBuilder2.append(svg);
- parentBuilder2.append("\n</g>");
- parentBuilder2.append("\n<g class=\"selectionMask\" id=\"" + key + "\">");
- Rectangle2D rect = n.getRect();
- parentBuilder2.append("<rect style=\"fill:#fff\" opacity=\"0.001\"");
- parentBuilder2.append(" x=\"" + rect.getX() + "\" y=\"" + rect.getY() + "\"");
- parentBuilder2.append(" width=\"" + rect.getWidth() + "\" height=\"" + rect.getHeight() + "\"");
- parentBuilder2.append("></rect>");
- parentBuilder2.append("\n</g>");
- }
- } else if (node instanceof SVGNode) {
- SVGNode svg = (SVGNode)node;
- parentBuilder.append(svg.getSVGText());
- } else if (node instanceof G2DParentNode) {
- AffineTransform at = node.getTransform();
- if(node instanceof SingleElementNode) {
- SingleElementNode sen = (SingleElementNode)node;
- if(sen.getKey() != null) {
- String key = sen.getKey().toString();
- parentBuilder.append("\n<g class=\"definedElement\" id=\"" + key + "\">");
- }
- senBuilders.put(sen, new StringBuilder());
- }
- if(!at.isIdentity()) {
- if(at.getScaleX() == 1.0 && at.getScaleY() == 1.0 && at.getShearX() == 0.0 && at.getShearY() == 0.0) {
- String m = "translate(" + at.getTranslateX() + " " + at.getTranslateY() + ")";
- parentBuilder.append("\n<g transform=\"" + m + "\">");
- } else {
- double[] ds = new double[6];
- at.getMatrix(ds);
- String m = "matrix(" + ds[0] + " " + ds[1] + " " + ds[2] + " " + ds[3] + " " + ds[4] + " " + ds[5] + ")";
- parentBuilder.append("\n<g transform=\"" + m + "\">");
- }
- }
- }
-
- //enters.put(node, b.length());
-
- }
-
- private StringBuilder getParentBuilder(IG2DNode node) {
-
- INode parentSEN = NodeUtil.getNearestParentOfType(node, SingleElementNode.class);
- if(parentSEN instanceof G2DSceneGraph) return result;
-
- StringBuilder parentBuilder = senBuilders.get(parentSEN);
- if(parentBuilder == null) return result;
-
- return parentBuilder;
-
- }
-
- @Override
- public void leave(IG2DNode node) {
-
- if(node instanceof ConnectionNode || node instanceof SVGNode) {
- // We are done
- } else if (node instanceof G2DParentNode) {
-
- StringBuilder parentBuilder = getParentBuilder(node);
-
- if(node instanceof SingleElementNode) {
- SingleElementNode sen = (SingleElementNode)node;
-// if(sen.getKey() != null) {
- StringBuilder b = senBuilders.get(sen);
- String content = b.toString();
- if(content.isEmpty()) {
- if(sen.getKey() != null) {
-
- for(SelectionNode n : NodeUtil.collectNodes(node, SelectionNode.class)) {
- n.setIgnore(true);
- }
-
- Element doc = renderSVGNode((IG2DNode)node);
- String svg = printSVGDocument(doc);
- parentBuilder.append(svg);
- }
- } else {
- parentBuilder.append(content);
- }
-// }
- }
-
-
- AffineTransform at = node.getTransform();
- if(!at.isIdentity()) {
- parentBuilder.append("</g>");
- }
- if(node instanceof SingleElementNode) {
- SingleElementNode sen = (SingleElementNode)node;
- if(sen.getKey() != null) {
- parentBuilder.append("</g>");
- }
- }
- }
- indent --;
- }