diff --git a/src/h/ST_Agedge_s.java b/src/h/ST_Agedge_s.java index d7ee9d906..57a9df6d4 100644 --- a/src/h/ST_Agedge_s.java +++ b/src/h/ST_Agedge_s.java @@ -61,10 +61,10 @@ final public class ST_Agedge_s extends ST_Agobj_s { public String NAME; - @Override - public String toString() { - return NAME; - } +// @Override +// public String toString() { +// return NAME; +// } @Override public void ___(__struct__ arg) { diff --git a/src/h/ST_Agnode_s.java b/src/h/ST_Agnode_s.java index d7df63173..db58e1edf 100644 --- a/src/h/ST_Agnode_s.java +++ b/src/h/ST_Agnode_s.java @@ -59,14 +59,14 @@ final public class ST_Agnode_s extends ST_Agobj_s { public String NAME; - @Override - public String toString() { - try { - return NAME + " rank=" + ND_rank(this) + " order=" + ND_order(this); - } catch (Exception e) { - return NAME; - } - } +// @Override +// public String toString() { +// try { +// return NAME + " rank=" + ND_rank(this) + " order=" + ND_order(this); +// } catch (Exception e) { +// return NAME; +// } +// } @Override public void ___(__struct__ arg) { diff --git a/src/h/ST_Agraph_s.java b/src/h/ST_Agraph_s.java index e087fea00..dd96456f3 100644 --- a/src/h/ST_Agraph_s.java +++ b/src/h/ST_Agraph_s.java @@ -68,10 +68,10 @@ final public class ST_Agraph_s extends ST_Agobj_s { public String NAME; private static int CPT = 0; - @Override - public String toString() { - return super.toString() + " " + NAME; - } +// @Override +// public String toString() { +// return super.toString() + " " + NAME; +// } public ST_Agraph_s() { this.NAME = "G" + CPT; diff --git a/src/net/sourceforge/plantuml/abel/Link.java b/src/net/sourceforge/plantuml/abel/Link.java index 11dc3679a..f3aab4670 100644 --- a/src/net/sourceforge/plantuml/abel/Link.java +++ b/src/net/sourceforge/plantuml/abel/Link.java @@ -541,4 +541,8 @@ public class Link extends WithLinkType implements Hideable, Removeable { return getLinkArg().getVisibilityModifier(); } + public final boolean isOpale() { + return opale; + } + } diff --git a/src/net/sourceforge/plantuml/sdot/CucaDiagramFileMakerSmetana.java b/src/net/sourceforge/plantuml/sdot/CucaDiagramFileMakerSmetana.java index 615d93f20..f010164e5 100644 --- a/src/net/sourceforge/plantuml/sdot/CucaDiagramFileMakerSmetana.java +++ b/src/net/sourceforge/plantuml/sdot/CucaDiagramFileMakerSmetana.java @@ -50,6 +50,7 @@ import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -100,6 +101,7 @@ import net.sourceforge.plantuml.svek.GeneralImageBuilder; import net.sourceforge.plantuml.svek.GraphvizCrash; import net.sourceforge.plantuml.svek.IEntityImage; import net.sourceforge.plantuml.svek.SvekNode; +import net.sourceforge.plantuml.svek.image.EntityImageNote; import net.sourceforge.plantuml.svek.image.EntityImageNoteLink; import net.sourceforge.plantuml.utils.Position; import smetana.core.CString; @@ -117,6 +119,7 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { private final Map nodes = new LinkedHashMap(); private final Map coreNodes = new LinkedHashMap(); private final Map edges = new LinkedHashMap(); + private final Map smetanaPathes = new LinkedHashMap(); private final Map clusters = new LinkedHashMap(); private final DotStringFactory dotStringFactory; @@ -155,8 +158,22 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { } public void drawU(UGraphic ug) { + + smetanaPathes.clear(); + ug = ug.apply(new UTranslate(6, 6 - minMax.getMinY())); + for (Map.Entry ent : edges.entrySet()) { + final Link link = ent.getKey(); + if (link.isInvis()) + continue; + + final ST_Agedge_s edge = ent.getValue(); + final SmetanaPath smetanaPath = new SmetanaPath(link, edge, ymirror, diagram, getLabel(link), + getQuantifier(link, 1), getQuantifier(link, 2), dotStringFactory.getBibliotekon()); + smetanaPathes.put(link, smetanaPath); + } + for (Map.Entry ent : clusters.entrySet()) drawGroup(ug, ymirror, ent.getKey(), ent.getValue()); @@ -166,19 +183,16 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { final XPoint2D corner = getCorner(agnode); final SvekNode node = dotStringFactory.getBibliotekon().getNode(leaf); + node.resetMoveSvek(); + node.moveSvek(corner.getX(), corner.getY()); final IEntityImage image = node.getImage(); image.drawU(ug.apply(UTranslate.point(corner))); } - for (Map.Entry ent : edges.entrySet()) { - final Link link = ent.getKey(); - if (link.isInvis()) - continue; + for (Entry ent : smetanaPathes.entrySet()) + if (ent.getKey().isOpale() == false) + ent.getValue().drawU(ug); - final ST_Agedge_s edge = ent.getValue(); - new SmetanaPath(link, edge, ymirror, diagram, getLabel(link), getQuantifier(link, 1), - getQuantifier(link, 2), dotStringFactory.getBibliotekon()).drawU(ug); - } } public XDimension2D calculateDimension(StringBounder stringBounder) { @@ -205,6 +219,59 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { printAllSubgroups(diagram.getRootGroup()); printEntities(getUnpackagedEntities()); + for (Link link : diagram.getLinks()) { + if (link.isRemoved()) + continue; + + if (isOpalisable(link.getEntity1())) { + final SvekNode node = dotStringFactory.getBibliotekon().getNode(link.getEntity1()); + final SvekNode other = dotStringFactory.getBibliotekon().getNode(link.getEntity2()); + if (other != null) { + ((EntityImageNote) node.getImage()).setOpaleLink(link, node, other, smetanaPathes); + link.setOpale(true); + } + } else if (isOpalisable(link.getEntity2())) { + final SvekNode node = dotStringFactory.getBibliotekon().getNode(link.getEntity2()); + final SvekNode other = dotStringFactory.getBibliotekon().getNode(link.getEntity1()); + if (other != null) { + ((EntityImageNote) node.getImage()).setOpaleLink(link, node, other, smetanaPathes); + link.setOpale(true); + } + } + + } + + } + + // Duplicate GeneralImageBuilder + private boolean isOpalisable(Entity entity) { + if (entity.isGroup()) + return false; + + if (entity.getLeafType() != LeafType.NOTE) + return false; + + final Link single = onlyOneLink(entity); + if (single == null) + return false; + + return single.getOther(entity).getLeafType() != LeafType.NOTE; + } + + // Duplicate GeneralImageBuilder + private Link onlyOneLink(Entity ent) { + Link single = null; + for (Link link : diagram.getLinks()) { + if (link.isInvis()) + continue; + if (link.contains(ent) == false) + continue; + + if (single != null) + return null; + single = link; + } + return single; } private void drawGroup(UGraphic ug, YMirror ymirror, Entity group, ST_Agraph_s gr) { @@ -240,7 +307,6 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { if (diagram.isEmpty(g) && g.getGroupType() == GroupType.PACKAGE) { g.muteToType(LeafType.EMPTY_PACKAGE); - printEntityNew(g); } else { printSingleGroup(g); } @@ -307,7 +373,7 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { System.err.println("CANNOT FIND NODE"); return; } - // System.err.println("exportEntity " + leaf); + System.err.println("exportEntity " + leaf); final ST_Agnode_s agnode = agnode(zz, cluster, new CString(node.getUid()), true); agsafeset(zz, agnode, new CString("shape"), new CString("box"), new CString("")); final XDimension2D dim = getDim(node); @@ -337,19 +403,6 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { return result; } -// private void printCluster(Globals zz, ST_Agraph_s g, Cluster cluster) { -// for (SvekNode node : cluster.getNodes()) { -// final ST_Agnode_s agnode = agnode(zz, g, new CString(node.getUid()), true); -// agsafeset(zz, agnode, new CString("shape"), new CString("box"), new CString("")); -// final String width = "" + (node.getWidth() / 72); -// final String height = "" + (node.getHeight() / 72); -// agsafeset(zz, agnode, new CString("width"), new CString(width), new CString("")); -// agsafeset(zz, agnode, new CString("height"), new CString(height), new CString("")); -// final Entity leaf = dotStringFactory.getBibliotekon().getLeaf(node); -// nodes.put(leaf, agnode); -// } -// } - private static final Lock lock = new ReentrantLock(); public ImageData createFile(OutputStream os, List dotStrings, FileFormatOption fileFormatOption) @@ -364,9 +417,6 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { @Override public void createOneGraphic(UGraphic ug) { - for (Entity leaf : diagram.getEntityFactory().leafs()) - printEntityNew(leaf); - final Globals zz = Globals.open(); try { final TextBlock textBlock = getTextBlock(zz); @@ -381,9 +431,6 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { private ImageData createFileLocked(OutputStream os, List dotStrings, FileFormatOption fileFormatOption) throws IOException { - for (Entity leaf : diagram.getEntityFactory().leafs()) - printEntityNew(leaf); - final Globals zz = Globals.open(); try { final TextBlock drawable = getTextBlock(zz); @@ -544,7 +591,8 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { node2 = getAgnodeFromLeaf(link.getEntity2()); if (node1 == null || node2 == null) - throw new IllegalStateException(); + return null; + // throw new IllegalStateException(); final ST_Agedge_s e = agedge(zz, g, node1, node2, null, true); agsafeset(zz, e, new CString("arrowtail"), new CString("none"), new CString("")); @@ -591,17 +639,6 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { return strings; } - private void printEntityNew(Entity ent) { - if (ent.isRemoved()) { - System.err.println("Jdot STRANGE: entity is removed"); - return; - } - final IEntityImage image = printEntityInternal(ent); - final SvekNode shape = getBibliotekon().createNode(ent, image, dotStringFactory.getColorSequence(), - stringBounder); - // dotStringFactory.addShape(shape); - } - private Bibliotekon getBibliotekon() { return dotStringFactory.getBibliotekon(); } @@ -619,8 +656,11 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { // skinParam = new SkinParamSameClassWidth(dotData.getSkinParam(), width); } - return GeneralImageBuilder.createEntityImageBlock(ent, skinParam, diagram.isHideEmptyDescriptionForState(), - diagram, getBibliotekon(), null, diagram.getUmlDiagramType(), diagram.getLinks()); + final IEntityImage result = GeneralImageBuilder.createEntityImageBlock(ent, skinParam, + diagram.isHideEmptyDescriptionForState(), diagram, getBibliotekon(), null, + diagram.getUmlDiagramType(), diagram.getLinks()); + ent.setSvekImage(result); + return result; } return ent.getSvekImage(); } diff --git a/src/net/sourceforge/plantuml/sdot/SmetanaPath.java b/src/net/sourceforge/plantuml/sdot/SmetanaPath.java index 4d8fc5131..ff9c15d40 100644 --- a/src/net/sourceforge/plantuml/sdot/SmetanaPath.java +++ b/src/net/sourceforge/plantuml/sdot/SmetanaPath.java @@ -101,7 +101,7 @@ public class SmetanaPath implements UDrawable { } else if (this.link.getSpecificColor() != null) color = this.link.getSpecificColor(); - DotPath dotPath = getDotPath(); + DotPath dotPath = getDotPathInternal(); if (ymirror != null && dotPath != null) dotPath = ymirror.getMirrored(dotPath); @@ -142,15 +142,33 @@ public class SmetanaPath implements UDrawable { .getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder()); } + public XPoint2D getStartPoint() { + final DotPath dotPath = getDotPathInternal(); + XPoint2D pt = dotPath.getStartPoint(); + if (ymirror != null) + pt = ymirror.getMirrored(pt); + + return pt; + } + + public XPoint2D getEndPoint() { + final DotPath dotPath = getDotPathInternal(); + XPoint2D pt = dotPath.getEndPoint(); + if (ymirror != null) + pt = ymirror.getMirrored(pt); + + return pt; + } + private void printExtremityAtStart(UGraphic ug) { final ExtremityFactory extremityFactory2 = link.getType().getDecor2() .getExtremityFactoryComplete(diagram.getSkinParam().getBackgroundColor()); if (extremityFactory2 == null) return; - DotPath s = getDotPath(); - XPoint2D p0 = s.getStartPoint(); - double startAngle = s.getStartAngle(); + final DotPath dotPath = getDotPathInternal(); + XPoint2D p0 = dotPath.getStartPoint(); + double startAngle = dotPath.getStartAngle(); if (ymirror != null) { p0 = ymirror.getMirrored(p0); startAngle = -startAngle + Math.PI; @@ -172,9 +190,9 @@ public class SmetanaPath implements UDrawable { if (extremityFactory1 == null) return; - DotPath s = getDotPath(); - XPoint2D p0 = s.getEndPoint(); - double endAngle = s.getEndAngle(); + final DotPath dotPath = getDotPathInternal(); + XPoint2D p0 = dotPath.getEndPoint(); + double endAngle = dotPath.getEndAngle(); if (ymirror != null) { p0 = ymirror.getMirrored(p0); endAngle = -endAngle; @@ -242,7 +260,7 @@ public class SmetanaPath implements UDrawable { private DotPath dotPath; - private DotPath getDotPath() { + private DotPath getDotPathInternal() { if (dotPath != null) return dotPath; @@ -267,7 +285,8 @@ public class SmetanaPath implements UDrawable { if (link.getEntity2().isGroup()) { final Cluster cluster2 = bibliotekon.getCluster(link.getEntity2()); // System.err.println("WARNING: a group " + cluster2.getRectangleArea()); - // dotPath = dotPath.simulateCompound(cluster2.getRectangleArea(), cluster2.getRectangleArea()); + // dotPath = dotPath.simulateCompound(cluster2.getRectangleArea(), + // cluster2.getRectangleArea()); } return dotPath; } diff --git a/src/net/sourceforge/plantuml/svek/AbstractEntityImage.java b/src/net/sourceforge/plantuml/svek/AbstractEntityImage.java index 325ebecd0..194df1945 100644 --- a/src/net/sourceforge/plantuml/svek/AbstractEntityImage.java +++ b/src/net/sourceforge/plantuml/svek/AbstractEntityImage.java @@ -40,8 +40,6 @@ import java.util.Objects; import net.sourceforge.plantuml.abel.Entity; import net.sourceforge.plantuml.klimt.color.HColor; import net.sourceforge.plantuml.klimt.font.StringBounder; -import net.sourceforge.plantuml.klimt.geom.MagneticBorder; -import net.sourceforge.plantuml.klimt.geom.MagneticBorderNone; import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock; import net.sourceforge.plantuml.stereo.Stereotype; import net.sourceforge.plantuml.style.ISkinParam; diff --git a/src/net/sourceforge/plantuml/svek/Bibliotekon.java b/src/net/sourceforge/plantuml/svek/Bibliotekon.java index fab63953e..170f35774 100644 --- a/src/net/sourceforge/plantuml/svek/Bibliotekon.java +++ b/src/net/sourceforge/plantuml/svek/Bibliotekon.java @@ -57,6 +57,12 @@ public class Bibliotekon { private final List lines1 = new ArrayList<>(); private final List allLines = new ArrayList<>(); + private final Collection links; + + public Bibliotekon(Collection links) { + this.links = links; + } + public SvekNode createNode(Entity ent, IEntityImage image, ColorSequence colorSequence, StringBounder stringBounder) { final SvekNode node = new SvekNode(ent, image, colorSequence, stringBounder); @@ -190,12 +196,13 @@ public class Bibliotekon { } public Entity getOnlyOther(Entity entity) { - for (SvekLine line : allLines) { - final Entity other = line.getOther(entity); - if (other != null) - return other; + for (Link link : links) + if (link.contains(entity)) { + final Entity other = link.getOther(entity); + if (other != null) + return other; - } + } return null; } diff --git a/src/net/sourceforge/plantuml/svek/DotStringFactory.java b/src/net/sourceforge/plantuml/svek/DotStringFactory.java index 0315b89a6..239a61254 100644 --- a/src/net/sourceforge/plantuml/svek/DotStringFactory.java +++ b/src/net/sourceforge/plantuml/svek/DotStringFactory.java @@ -69,7 +69,7 @@ import net.sourceforge.plantuml.vizjs.GraphvizJsRuntimeException; public class DotStringFactory implements Moveable { - private final Bibliotekon bibliotekon = new Bibliotekon(); + private final Bibliotekon bibliotekon; private final ColorSequence colorSequence; private final Cluster root; @@ -92,6 +92,7 @@ public class DotStringFactory implements Moveable { this.root = new Cluster(dotData.getEntityFactory().getDiagram(), colorSequence, skinParam, dotData.getRootGroup()); this.current = root; + this.bibliotekon = new Bibliotekon(dotData.getLinks()); } public DotStringFactory(StringBounder stringBounder, ICucaDiagram diagram) { @@ -103,6 +104,7 @@ public class DotStringFactory implements Moveable { this.stringBounder = stringBounder; this.root = new Cluster(diagram, colorSequence, skinParam, diagram.getEntityFactory().getRootGroup()); this.current = root; + this.bibliotekon = new Bibliotekon(diagram.getLinks()); } public void addNode(SvekNode node) { diff --git a/src/net/sourceforge/plantuml/svek/SvekLine.java b/src/net/sourceforge/plantuml/svek/SvekLine.java index f2e4b2765..6b51c3bde 100644 --- a/src/net/sourceforge/plantuml/svek/SvekLine.java +++ b/src/net/sourceforge/plantuml/svek/SvekLine.java @@ -1084,12 +1084,12 @@ public class SvekLine implements Moveable, Hideable, GuideLine { return new XPoint2D(dx + end.getX(), dy + end.getY()); } - public Entity getOther(Entity entity) { - if (link.contains(entity)) - return link.getOther(entity); - - return null; - } +// public Entity getOther(Entity entity) { +// if (link.contains(entity)) +// return link.getOther(entity); +// +// return null; +// } public StyleBuilder getCurrentStyleBuilder() { return link.getStyleBuilder(); diff --git a/src/net/sourceforge/plantuml/svek/SvekNode.java b/src/net/sourceforge/plantuml/svek/SvekNode.java index 8d96df61a..183245c88 100644 --- a/src/net/sourceforge/plantuml/svek/SvekNode.java +++ b/src/net/sourceforge/plantuml/svek/SvekNode.java @@ -378,6 +378,11 @@ public class SvekNode implements Positionable, Hideable { return shield().isZero() == false; } + public void resetMoveSvek() { + this.minX = 0; + this.minY = 0; + } + public void moveSvek(double deltaX, double deltaY) { this.minX += deltaX; this.minY += deltaY; diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java b/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java index 085c60fc9..43547749d 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java @@ -40,6 +40,7 @@ import java.util.Map; import java.util.Objects; import net.sourceforge.plantuml.abel.Entity; +import net.sourceforge.plantuml.abel.Link; import net.sourceforge.plantuml.cucadiagram.BodyFactory; import net.sourceforge.plantuml.klimt.UGroupType; import net.sourceforge.plantuml.klimt.UPath; @@ -61,6 +62,7 @@ import net.sourceforge.plantuml.klimt.geom.XPoint2D; import net.sourceforge.plantuml.klimt.shape.DotPath; import net.sourceforge.plantuml.klimt.shape.TextBlock; import net.sourceforge.plantuml.klimt.shape.TextBlockEmpty; +import net.sourceforge.plantuml.sdot.SmetanaPath; import net.sourceforge.plantuml.skin.ColorParam; import net.sourceforge.plantuml.skin.CornerParam; import net.sourceforge.plantuml.skin.SkinParamBackcolored; @@ -201,7 +203,37 @@ public class EntityImageNote extends AbstractEntityImage implements Stencil { ug.startUrl(url); final UGraphic ug2 = UGraphicStencil.create(ug, this, UStroke.simple()); - if (opaleLine == null || opaleLine.isOpale() == false) { + if (opaleLink != null) { + final StringBounder stringBounder = ug.getStringBounder(); + + final SmetanaPath smetanaEdged = smetanaPathes.get(opaleLink); + final UTranslate move = new UTranslate(-node.getMinX(), -node.getMinY()); + + final XPoint2D startPoint = move.getTranslated(smetanaEdged.getStartPoint()); + final XPoint2D endPoint = move.getTranslated(smetanaEdged.getEndPoint()); + + final UTranslate force1 = getMagneticBorder().getForceAt(stringBounder, smetanaEdged.getStartPoint()); + final UTranslate force2 = other.getMagneticBorder().getForceAt(stringBounder, smetanaEdged.getEndPoint()); + + final double textWidth = getTextWidth(stringBounder); + final double textHeight = getTextHeight(stringBounder); + final XPoint2D center = new XPoint2D(textWidth / 2, textHeight / 2); + + XPoint2D pp1 = force2.getTranslated(startPoint); + XPoint2D pp2 = force1.getTranslated(endPoint); + if (pp1.distance(center) < pp2.distance(center)) { + pp1 = force1.getTranslated(endPoint); + pp2 = force2.getTranslated(startPoint); + } + + final Direction strategy = getOpaleStrategy(textWidth, textHeight, pp2); + final Opale opale = new Opale(shadowing, borderColor, noteBackgroundColor, textBlock, true, getStroke()); + opale.setRoundCorner(getRoundCorner()); + opale.setOpale(strategy, pp2, pp1); + final UGraphic stroked = applyStroke(ug2); + opale.drawU(Colors.applyStroke(stroked, getEntity().getColors())); + + } else if (opaleLine == null || opaleLine.isOpale() == false) { drawNormal(ug2); } else { final StringBounder stringBounder = ug.getStringBounder(); @@ -306,8 +338,10 @@ public class EntityImageNote extends AbstractEntityImage implements Stencil { } private SvekLine opaleLine; + private Link opaleLink; private SvekNode node; private SvekNode other; + private Map smetanaPathes; public void setOpaleLine(SvekLine line, SvekNode node, SvekNode other) { this.opaleLine = line; @@ -315,6 +349,13 @@ public class EntityImageNote extends AbstractEntityImage implements Stencil { this.other = Objects.requireNonNull(other); } + public void setOpaleLink(Link link, SvekNode node, SvekNode other, Map edges) { + this.opaleLink = link; + this.node = node; + this.other = Objects.requireNonNull(other); + this.smetanaPathes = edges; + } + public double getStartingX(StringBounder stringBounder, double y) { return 0; } diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java b/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java index 4fb4c1b92..cd0f21aa0 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java @@ -125,19 +125,24 @@ public class EntityImageTips extends AbstractEntityImage { public void drawU(UGraphic ug) { final StringBounder stringBounder = ug.getStringBounder(); - final Entity other = bibliotekon.getOnlyOther(getEntity()); + final Entity tmp = getEntity(); + final Entity other = bibliotekon.getOnlyOther(tmp); + if (other == null) { + System.err.println("Error1 in EntityImageTips"); + return; + } final SvekNode nodeMe = bibliotekon.getNode(getEntity()); final SvekNode nodeOther = bibliotekon.getNode(other); - final XPoint2D positionMe = nodeMe.getPosition(); if (nodeOther == null) { - System.err.println("Error in EntityImageTips"); + System.err.println("Error2 in EntityImageTips"); return; } final XPoint2D positionOther = nodeOther.getPosition(); bibliotekon.getNode(getEntity()); final Position position = getPosition(); Direction direction = position.reverseDirection(); + final XPoint2D positionMe = nodeMe.getPosition(); double height = 0; for (Map.Entry ent : getEntity().getTips().entrySet()) { final Display display = ent.getValue(); diff --git a/src/net/sourceforge/plantuml/version/Version.java b/src/net/sourceforge/plantuml/version/Version.java index 8ce489c96..3957d9577 100644 --- a/src/net/sourceforge/plantuml/version/Version.java +++ b/src/net/sourceforge/plantuml/version/Version.java @@ -82,7 +82,7 @@ public class Version { } public static int beta() { - final int beta = 5; + final int beta = 6; return beta; }