diff --git a/src/net/sourceforge/plantuml/ebnf/ETileOptional.java b/src/net/sourceforge/plantuml/ebnf/ETileOptional.java index 2b70e97676c..506ecad0453 100644 --- a/src/net/sourceforge/plantuml/ebnf/ETileOptional.java +++ b/src/net/sourceforge/plantuml/ebnf/ETileOptional.java @@ -49,6 +49,7 @@ import net.sourceforge.plantuml.style.ISkinParam; import net.sourceforge.plantuml.style.SName; +@Deprecated() public class ETileOptional extends ETile { private final double deltax; diff --git a/src/net/sourceforge/plantuml/ebnf/ETileOptional2.java b/src/net/sourceforge/plantuml/ebnf/ETileOptional2.java index 832d2e75555..5aea2bbaaeb 100644 --- a/src/net/sourceforge/plantuml/ebnf/ETileOptional2.java +++ b/src/net/sourceforge/plantuml/ebnf/ETileOptional2.java @@ -51,7 +51,7 @@ public class ETileOptional2 extends ETile { - private final double deltax = 25; + private final double deltax = 24; private final double deltay = 20; private final ETile orig; private final ISkinParam skinParam; @@ -96,19 +96,12 @@ public void drawU(UGraphic ug) { final double linePos = getH1(stringBounder); drawHlineDirected(ug, linePos, 0, dim.getWidth(), 0.4, 25); - final double corner = 12; + final double corner = 12; // deltax/2 - CornerCurved.createNE(corner).drawU(ug.apply(new UTranslate(corner, linePos))); - CornerCurved.createSW(corner) - .drawU(ug.apply(new UTranslate(corner, getDeltaY(stringBounder) + orig.getH1(stringBounder)))); - drawVline(ug, corner, linePos + corner, getDeltaY(stringBounder) + orig.getH1(stringBounder) - corner); + final Zigzag zigzag = new Zigzag(9, 2 * corner, getDeltaY(stringBounder) + orig.getH1(stringBounder) - linePos); - final double posB = dim.getWidth() - corner; - - CornerCurved.createNW(corner).drawU(ug.apply(new UTranslate(posB, linePos))); - CornerCurved.createSE(corner) - .drawU(ug.apply(new UTranslate(posB, getDeltaY(stringBounder) + orig.getH1(stringBounder)))); - drawVline(ug, posB, linePos + corner, getDeltaY(stringBounder) + orig.getH1(stringBounder) - corner); + ug.apply(new UTranslate(0, linePos)).draw(zigzag.pathDown()); + ug.apply(new UTranslate(dim.getWidth() - 2 * corner, linePos)).draw(zigzag.pathUp()); orig.drawU(ug.apply(new UTranslate(deltax, getDeltaY(stringBounder)))); diff --git a/src/net/sourceforge/plantuml/klimt/Zigzag.java b/src/net/sourceforge/plantuml/klimt/Zigzag.java new file mode 100644 index 00000000000..71445186956 --- /dev/null +++ b/src/net/sourceforge/plantuml/klimt/Zigzag.java @@ -0,0 +1,96 @@ +/* ======================================================================== + * PlantUML : a free UML diagram generator + * ======================================================================== + * + * (C) Copyright 2009-2020, Arnaud Roques + * + * Project Info: https://plantuml.com + * + * If you like this project or if you find it useful, you can support us at: + * + * https://plantuml.com/patreon (only 1$ per month!) + * https://plantuml.com/paypal + * + * This file is part of PlantUML. + * + * PlantUML is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PlantUML distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + * License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + * + * + * Original Author: Arnaud Roques + * + * + */ +package net.sourceforge.plantuml.ebnf; + +import net.sourceforge.plantuml.klimt.UPath; + +public class Zigzag { + + private final double width; + private final double height; + private final double ctrl; + + public Zigzag(double ctrl, double width, double height) { + this.ctrl = ctrl; + this.width = width; + this.height = height; + } + + public UPath pathDown() { + final UPath path = UPath.none(); + final double xm = width / 2; + final double ym = height / 2; + + path.moveTo(0, 0); + + final double cp1x1 = ctrl; + final double cp1y1 = 0; + final double cp1x2 = xm; + final double cp1y2 = ym - ctrl; + path.cubicTo(cp1x1, cp1y1, cp1x2, cp1y2, xm, ym); + + final double cp2x1 = xm; + final double cp2y1 = ym + ctrl; + final double cp2x2 = width - ctrl; + final double cp2y2 = height; + path.cubicTo(cp2x1, cp2y1, cp2x2, cp2y2, width, height); + + return path; + } + + public UPath pathUp() { + final UPath path = UPath.none(); + final double xm = width / 2; + final double ym = height / 2; + + path.moveTo(0, height); + + final double cp1x1 = ctrl; + final double cp1y1 = height; + final double cp1x2 = xm; + final double cp1y2 = ym + ctrl; + path.cubicTo(cp1x1, cp1y1, cp1x2, cp1y2, xm, ym); + + final double cp2x1 = xm; + final double cp2y1 = ym - ctrl; + final double cp2x2 = width - ctrl; + final double cp2y2 = 0; + path.cubicTo(cp2x1, cp2y1, cp2x2, cp2y2, width, 0); + + return path; + } + +}