1
0
mirror of https://github.com/octoleo/plantuml.git synced 2024-11-24 13:57:33 +00:00

fix: change GraphViz strategy

https://github.com/plantuml/plantuml/issues/1491
This commit is contained in:
Arnaud Roques 2023-07-26 19:12:10 +02:00
parent 44ba32d053
commit 74bcd0f668
49 changed files with 422 additions and 281 deletions

View File

@ -1,4 +1,4 @@
# Warning, "version" should be the same in gradle.properties and Version.java
# Any idea anyone how to magically synchronize those :-) ?
version = 1.2023.11beta1
version = 1.2023.11beta2
org.gradle.workers.max = 3

View File

@ -96,8 +96,8 @@ public class Link extends WithLinkType implements Hideable, Removeable {
private Url url;
public LinkStrategy getLinkStrategy() {
return LinkStrategy.LEGACY;
// return LinkStrategy.SIMPLIER;
// return LinkStrategy.LEGACY;
return LinkStrategy.SIMPLIER;
}
public String idCommentForSvg() {

View File

@ -104,7 +104,7 @@ public enum LinkDecor {
public ExtremityFactory getExtremityFactoryComplete(HColor backgroundColor) {
if (this == EXTENDS)
return new ExtremityFactoryTriangle(backgroundColor, 16, 6);
return new ExtremityFactoryTriangle(null, 18, 6, 18);
return getExtremityFactoryLegacy(backgroundColor);
}
@ -120,7 +120,7 @@ public enum LinkDecor {
case HALF_ARROW:
return new ExtremityFactoryHalfArrow();
case ARROW_TRIANGLE:
return new ExtremityFactoryTriangle(null, 8, 3);
return new ExtremityFactoryTriangle(null, 8, 3, 8);
case CROWFOOT:
return new ExtremityFactoryCrowfoot();
case CIRCLE_CROWFOOT:

View File

@ -49,6 +49,12 @@ public class XCubicCurve2D {
}
public double getLength() {
final double dx = this.x2 - this.x1;
final double dy = this.y2 - this.y1;
return Math.sqrt(dx * dx + dy * dy);
}
public void setCurve(XCubicCurve2D other) {
setCurve(other.x1, other.y1, other.ctrlx1, other.ctrly1, other.ctrlx2, other.ctrly2, other.ctrlx2,
other.ctrly2);

View File

@ -51,12 +51,12 @@ import net.sourceforge.plantuml.klimt.UPath;
import net.sourceforge.plantuml.klimt.UShape;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.geom.BezierUtils;
import net.sourceforge.plantuml.klimt.geom.RectangleArea;
import net.sourceforge.plantuml.klimt.geom.EnsureVisible;
import net.sourceforge.plantuml.klimt.geom.MinFinder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.Moveable;
import net.sourceforge.plantuml.klimt.geom.PointAndAngle;
import net.sourceforge.plantuml.klimt.geom.RectangleArea;
import net.sourceforge.plantuml.klimt.geom.USegmentType;
import net.sourceforge.plantuml.klimt.geom.XCubicCurve2D;
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
@ -187,12 +187,12 @@ public class DotPath implements UShape, Moveable {
return pt.distanceSq(start) + pt.distanceSq(end);
}
public void forceStartPoint(double x, double y) {
beziers.get(0).x1 = x;
beziers.get(0).y1 = y;
beziers.get(0).ctrlx1 = x;
beziers.get(0).ctrly1 = y;
}
// public void forceStartPoint(double x, double y) {
// beziers.get(0).x1 = x;
// beziers.get(0).y1 = y;
// beziers.get(0).ctrlx1 = x;
// beziers.get(0).ctrly1 = y;
// }
public void moveStartPoint(UTranslate move) {
moveStartPoint(move.getDx(), move.getDy());
@ -203,6 +203,11 @@ public class DotPath implements UShape, Moveable {
}
public void moveStartPoint(double dx, double dy) {
if (beziers.size() > 1 && Math.sqrt(dx * dx + dy * dy) >= beziers.get(0).getLength()) {
dx -= beziers.get(1).x1 - beziers.get(0).x1;
dy -= beziers.get(1).y1 - beziers.get(0).y1;
beziers.remove(0);
}
beziers.get(0).x1 += dx;
beziers.get(0).y1 += dy;
beziers.get(0).ctrlx1 += dx;
@ -213,12 +218,12 @@ public class DotPath implements UShape, Moveable {
return beziers.get(beziers.size() - 1).getP2();
}
public void forceEndPoint(double x, double y) {
beziers.get(beziers.size() - 1).x2 = x;
beziers.get(beziers.size() - 1).y2 = y;
beziers.get(beziers.size() - 1).ctrlx2 = x;
beziers.get(beziers.size() - 1).ctrly2 = y;
}
// public void forceEndPoint(double x, double y) {
// beziers.get(beziers.size() - 1).x2 = x;
// beziers.get(beziers.size() - 1).y2 = y;
// beziers.get(beziers.size() - 1).ctrlx2 = x;
// beziers.get(beziers.size() - 1).ctrly2 = y;
// }
public void moveEndPoint(double dx, double dy) {
beziers.get(beziers.size() - 1).x2 += dx;

View File

@ -42,6 +42,7 @@ import h.ST_pointf;
import h.ST_splines;
import h.ST_textlabel_t;
import net.sourceforge.plantuml.abel.Link;
import net.sourceforge.plantuml.abel.LinkStrategy;
import net.sourceforge.plantuml.cucadiagram.ICucaDiagram;
import net.sourceforge.plantuml.decoration.LinkType;
import net.sourceforge.plantuml.klimt.UStroke;
@ -62,6 +63,7 @@ import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.style.StyleSignatureBasic;
import net.sourceforge.plantuml.svek.Bibliotekon;
import net.sourceforge.plantuml.svek.Cluster;
import net.sourceforge.plantuml.svek.extremity.Extremity;
import net.sourceforge.plantuml.svek.extremity.ExtremityFactory;
import net.sourceforge.plantuml.url.Url;
@ -88,6 +90,10 @@ public class SmetanaPath implements UDrawable {
this.headLabel = headLabel;
}
private LinkStrategy getLinkStrategy() {
return link.getLinkStrategy();
}
public void drawU(UGraphic ug) {
if (link.isHidden())
@ -131,9 +137,9 @@ public class SmetanaPath implements UDrawable {
if (url != null)
ug.startUrl(url);
ug.apply(stroke).apply(color).draw(dotPath);
printExtremityAtStart(dotPath, ug.apply(color));
printExtremityAtEnd(dotPath, ug.apply(color));
ug.apply(stroke).apply(color).draw(dotPath);
if (url != null)
ug.closeUrl();
@ -186,9 +192,14 @@ public class SmetanaPath implements UDrawable {
final double startAngle = dotPath.getStartAngle() + Math.PI;
try {
final UDrawable extremity2 = extremityFactory2.createUDrawable(p0, startAngle, null);
if (extremity2 != null)
final Extremity extremity2 = (Extremity) extremityFactory2.createUDrawable(p0, startAngle, null);
if (extremity2 != null) {
if (getLinkStrategy() == LinkStrategy.SIMPLIER) {
final double decorationLength = extremity2.getDecorationLength();
dotPath.moveStartPoint(new UTranslate(decorationLength, 0).rotate(startAngle - Math.PI));
}
extremity2.drawU(ug);
}
} catch (UnsupportedOperationException e) {
e.printStackTrace();
@ -206,9 +217,14 @@ public class SmetanaPath implements UDrawable {
final double endAngle = dotPath.getEndAngle();
try {
final UDrawable extremity1 = extremityFactory1.createUDrawable(p0, endAngle, null);
if (extremity1 != null)
final Extremity extremity1 = (Extremity) extremityFactory1.createUDrawable(p0, endAngle, null);
if (extremity1 != null) {
if (getLinkStrategy() == LinkStrategy.SIMPLIER) {
final double decorationLength = extremity1.getDecorationLength();
dotPath.moveEndPoint(new UTranslate(decorationLength, 0).rotate(endAngle - Math.PI));
}
extremity1.drawU(ug);
}
} catch (UnsupportedOperationException e) {
e.printStackTrace();
@ -266,16 +282,16 @@ public class SmetanaPath implements UDrawable {
return ymirror.getMirrored(UTranslate.point(boxInfo.getLowerLeft()));
}
private DotPath dotPath;
// private DotPath dotPath;
private DotPath getDotPathInternal() {
if (dotPath != null)
return dotPath;
// if (dotPath != null)
// return dotPath;
final ST_Agedgeinfo_t data = (ST_Agedgeinfo_t) edge.data;
final ST_splines splines = data.spl;
dotPath = new DotPath();
DotPath dotPath = new DotPath();
final ST_bezier beziers = (ST_bezier) splines.list.get__(0);
final XPoint2D pt1 = getPoint(splines, 0);
final XPoint2D pt2 = getPoint(splines, 1);

View File

@ -64,6 +64,21 @@ public class Kal implements UDrawable {
private final Entity entity;
private final Link link;
public UTranslate getTranslateForDecoration() {
switch (position) {
case RIGHT:
return UTranslate.dx(dim.getWidth());
case LEFT:
return UTranslate.dx(-dim.getWidth());
case DOWN:
return UTranslate.dy(dim.getHeight());
case UP:
return UTranslate.dy(-dim.getHeight());
default:
throw new IllegalStateException();
}
}
public Kal(SvekLine svekLine, String text, FontConfiguration font, ISkinParam skinParam, Entity entity, Link link,
StringBounder stringBounder) {
this.svekLine = svekLine;
@ -87,7 +102,7 @@ public class Kal implements UDrawable {
} else if (link.getEntity2() == entity) {
this.position = Direction.UP;
entity.ensureMargins(new Margins(0, 0, dim.getHeight(),0 ));
entity.ensureMargins(new Margins(0, 0, dim.getHeight(), 0));
} else {
throw new IllegalStateException();
@ -144,11 +159,11 @@ public class Kal implements UDrawable {
public void setTranslate(UTranslate translate, UDrawable decoration) {
this.translate = translate;
if (decoration instanceof Extremity) {
final Extremity extremity = (Extremity) decoration;
final UTranslate deltaForKal = extremity.getDeltaForKal();
// this.translate = this.translate.compose(deltaForKal);
}
// if (decoration instanceof Extremity) {
// final Extremity extremity = (Extremity) decoration;
// final UTranslate deltaForKal = extremity.getDeltaForKal();
// // this.translate = this.translate.compose(deltaForKal);
// }
}
public double overlapx(Kal other) {

View File

@ -135,6 +135,7 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
private final Bibliotekon bibliotekon;
private DotPath dotPath;
private DotPath dotPathInit;
private Positionable startTailLabelXY;
private Positionable endHeadLabelXY;
@ -165,7 +166,7 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
return super.toString() + " color=" + lineColor;
}
public LinkStrategy getLinkStrategy() {
private LinkStrategy getLinkStrategy() {
return link.getLinkStrategy();
}
@ -502,8 +503,7 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
}
private UDrawable getExtremitySimplier(XPoint2D center, ExtremityFactory extremityFactory, double angle,
Cluster cluster, SvekNode nodeContact, boolean isStart) {
System.err.println("extremityFactory=" + extremityFactory + " " + isStart);
Cluster cluster, SvekNode nodeContact, boolean isStart, Kal kal) {
if (extremityFactory == null)
return null;
@ -511,15 +511,23 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
if (nodeContact != null)
side = nodeContact.getRectangleArea().getClosestSide(center);
final Extremity extremity = (Extremity) extremityFactory.createUDrawable(center, angle, null);
final double decorationLength = extremity.getDecorationLength();
System.err.println("decorationLength=" + decorationLength);
if (isStart) {
dotPath.moveStartPoint(new UTranslate(decorationLength, 0).rotate(angle - Math.PI));
final UTranslate translateForKal;
if (kal == null) {
translateForKal = new UTranslate(0, 0);
} else {
dotPath.moveEndPoint(new UTranslate(decorationLength, 0).rotate(angle - Math.PI));
translateForKal = kal.getTranslateForDecoration();
center = translateForKal.getTranslated(center);
}
return extremityFactory.createUDrawable(center, angle, side);
final Extremity extremity = (Extremity) extremityFactory.createUDrawable(center, angle, side);
final double decorationLength = extremity.getDecorationLength();
if (isStart)
dotPath.moveStartPoint(
translateForKal.compose(new UTranslate(decorationLength, 0).rotate(angle - Math.PI)));
else
dotPath.moveEndPoint(translateForKal.compose(new UTranslate(decorationLength, 0).rotate(angle - Math.PI)));
return extremity;
}
private UDrawable getExtremity(final XPoint2D center, LinkDecor decor, PointListIterator pointListIterator,
@ -552,7 +560,7 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
if (nodeContact != null)
side = nodeContact.getRectangleArea().getClosestSide(p1);
return extremityFactory.createUDrawable(p0, p1, p2, side);
return extremityFactory.createTBRDrawableLegacy(p0, p1, p2, side);
} else if (decor == LinkDecor.NONE) {
final UPolygon sh = new UPolygon(pointListIterator.cloneMe().next());
final XPoint2D contact = sh.checkMiddleContactForSpecificTriangle(center);
@ -594,6 +602,27 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
dotPath = path.toDotPath();
final XPoint2D tmpStartPoint = dotPath.getStartPoint();
final XPoint2D tmpEndPoint = dotPath.getEndPoint();
final SvekNode svekNode1 = getSvekNode1();
final SvekNode svekNode2 = getSvekNode2();
if (svekNode1 != null && svekNode2 != null) {
final XPoint2D tmpPos1 = svekNode1.getRectangleArea().getPointCenter();
final XPoint2D tmpPos2 = svekNode2.getRectangleArea().getPointCenter();
final double normal = tmpStartPoint.distance(tmpPos1) + tmpEndPoint.distance(tmpPos2);
final double inversed = tmpStartPoint.distance(tmpPos2) + tmpEndPoint.distance(tmpPos1);
// Sometime, GraphViz inverses the result line.
if (inversed < normal)
// So we reverse the inversion...
dotPath = dotPath.reverse();
}
// Used for Kal
dotPathInit = dotPath.copy();
if (projectionCluster != null) {
// System.err.println("Line::solveLine1 projectionCluster=" +
// projectionCluster.getClusterPosition());
@ -614,16 +643,12 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
final LinkType linkType = link.getType();
if (getLinkStrategy() == LinkStrategy.SIMPLIER) {
// dotPath.moveStartPoint(0, 5);
// dotPath.moveEndPoint(0, -15);
this.extremity1 = getExtremitySimplier(dotPath.getStartPoint(),
linkType.getDecor2().getExtremityFactoryComplete(backgroundColor),
dotPath.getStartAngle() + Math.PI, ltail, getSvekNode1(), true);
dotPath.getStartAngle() + Math.PI, ltail, svekNode1, true, kal1);
this.extremity2 = getExtremitySimplier(dotPath.getEndPoint(),
linkType.getDecor1().getExtremityFactoryComplete(backgroundColor), dotPath.getEndAngle(), lhead,
getSvekNode2(), false);
svekNode2, false, kal2);
} else {
pointListIterator = lineSvg.getPointsWithThisColor(lineColor);
if (link.getLength() == 1 && isThereTwo(linkType) && count(pointListIterator.cloneMe()) == 2) {
@ -641,22 +666,22 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
endPoint = p1;
this.extremity1 = getExtremitySpecial(startPoint, linkType.getDecor2(),
dotPath.getStartAngle() + Math.PI, ltail, getSvekNode1());
dotPath.getStartAngle() + Math.PI, ltail, svekNode1);
this.extremity2 = getExtremitySpecial(endPoint, linkType.getDecor1(), dotPath.getEndAngle(), lhead,
getSvekNode2());
svekNode2);
} else {
this.extremity1 = getExtremity(dotPath.getStartPoint(), linkType.getDecor2(), pointListIterator,
dotPath.getStartAngle() + Math.PI, ltail, getSvekNode1());
dotPath.getStartAngle() + Math.PI, ltail, svekNode1);
this.extremity2 = getExtremity(dotPath.getEndPoint(), linkType.getDecor1(), pointListIterator,
dotPath.getEndAngle(), lhead, getSvekNode2());
dotPath.getEndAngle(), lhead, svekNode2);
}
}
if (link.getEntity1().getLeafType() == LeafType.LOLLIPOP_HALF)
getSvekNode1().addImpact(dotPath.getStartAngle() + Math.PI);
svekNode1.addImpact(dotPath.getStartAngle() + Math.PI);
if (link.getEntity2().getLeafType() == LeafType.LOLLIPOP_HALF)
getSvekNode2().addImpact(dotPath.getEndAngle());
svekNode2.addImpact(dotPath.getEndAngle());
if (getLinkStrategy() == LinkStrategy.LEGACY && extremity1 instanceof Extremity
&& extremity2 instanceof Extremity) {
@ -671,9 +696,9 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
if (dist1start > dist1end && dist2end > dist2start) {
pointListIterator = lineSvg.getPointsWithThisColor(lineColor);
this.extremity2 = getExtremity(dotPath.getEndPoint(), linkType.getDecor1(), pointListIterator,
dotPath.getEndAngle(), lhead, getSvekNode2());
dotPath.getEndAngle(), lhead, svekNode2);
this.extremity1 = getExtremity(dotPath.getStartPoint(), linkType.getDecor2(), pointListIterator,
dotPath.getStartAngle() + Math.PI, ltail, getSvekNode1());
dotPath.getStartAngle() + Math.PI, ltail, svekNode1);
}
}
@ -806,7 +831,6 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
stroke = link.getColors().getSpecificLineStroke();
ug = ug.apply(stroke);
// double moveEndY = 0;
DotPath todraw = dotPath.copy();
@ -824,32 +848,6 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
todraw.moveEndPoint(magneticForce2);
}
// final MagneticBorder magneticBorder2 = getSvekNode2().getMagneticBorder();
// if (link.getEntity2().isGroup() && link.getEntity2().getUSymbol() instanceof USymbolFolder) {
// final Cluster endCluster = bibliotekon.getCluster((Entity) link.getEntity2());
// if (endCluster != null) {
// final double deltaFolderH = endCluster.checkFolderPosition(dotPath.getEndPoint(),
// ug.getStringBounder());
// todraw = dotPath.copy();
// todraw.moveEndPoint(0, deltaFolderH);
// // moveEndY = deltaFolderH;
// }
// }
// if (extremity1 instanceof Extremity && extremity2 instanceof Extremity) {
// // http://forum.plantuml.net/9421/arrow-inversion-with-skinparam-linetype-ortho-missing-arrow
// final XPoint2D p1 = ((Extremity) extremity1)
// .isTooSmallSoGiveThePointCloserToThisOne(todraw.getStartPoint());
// if (p1 != null)
// todraw.forceStartPoint(p1.getX(), p1.getY());
//
// final XPoint2D p2 = ((Extremity) extremity2).isTooSmallSoGiveThePointCloserToThisOne(todraw.getEndPoint());
// if (p2 != null)
// todraw.forceEndPoint(p2.getX(), p2.getY());
//
// }
final String comment = link.idCommentForSvg();
final String tmp = uniq(ids, comment);
todraw.setCommentAndCodeLine(tmp, link.getCodeLine());
@ -910,11 +908,11 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
public void computeKal() {
if (kal1 != null) {
final UTranslate tr = UTranslate.point(dotPath.getStartPoint()).compose(new UTranslate(dx, dy));
final UTranslate tr = UTranslate.point(dotPathInit.getStartPoint()).compose(new UTranslate(dx, dy));
kal1.setTranslate(tr, extremity1);
}
if (kal2 != null) {
final UTranslate tr = UTranslate.point(dotPath.getEndPoint()).compose(new UTranslate(dx, dy));
final UTranslate tr = UTranslate.point(dotPathInit.getEndPoint()).compose(new UTranslate(dx, dy));
kal2.setTranslate(tr, extremity2);
}
}
@ -1144,7 +1142,8 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
}
private XPoint2D moveDelta(XPoint2D pt) {
return new XPoint2D(pt.getX() + dx, pt.getY() + dy);
return new UTranslate(dx, dy).getTranslated(pt);
// return new XPoint2D(pt.getX() + dx, pt.getY() + dy);
}
public boolean isLink(Link link) {
@ -1158,7 +1157,8 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
if (start == null)
return null;
return new XPoint2D(dx + start.getX(), dy + start.getY());
return new UTranslate(dx, dy).getTranslated(start);
// return new XPoint2D(dx + start.getX(), dy + start.getY());
}
public XPoint2D getEndContactPoint() {
@ -1166,16 +1166,10 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
if (end == null)
return null;
return new XPoint2D(dx + end.getX(), dy + end.getY());
return new UTranslate(dx, dy).getTranslated(end);
// 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 StyleBuilder getCurrentStyleBuilder() {
return link.getStyleBuilder();
}
@ -1186,10 +1180,12 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
public void moveStartPoint(double dx, double dy) {
dotPath.moveStartPoint(dx, dy);
dotPathInit.moveStartPoint(dx, dy);
}
public void moveEndPoint(double dx, double dy) {
dotPath.moveEndPoint(dx, dy);
dotPathInit.moveEndPoint(dx, dy);
}
}

View File

@ -78,8 +78,18 @@ public abstract class Extremity implements UDrawable {
return UTranslate.none();
}
// public abstract double getDecorationLength();
public double getDecorationLength() {
return 15;
return 8;
}
// public double getDecorationLength() {
// // return 15;
// System.err.println("CLASS=" + getClass().getName());
// Thread.dumpStack();
// System.exit(0);
// throw new UnsupportedOperationException(getClass().getName());
//}
}

View File

@ -57,7 +57,7 @@ class ExtremityArrowAndCircle extends Extremity {
return contact;
}
public ExtremityArrowAndCircle(XPoint2D p1, double angle, XPoint2D center, HColor backgroundColor) {
public ExtremityArrowAndCircle(XPoint2D p1, double angle, HColor backgroundColor) {
angle = manageround(angle);
polygon.addPoint(0, 0);
this.backgroundColor = backgroundColor;

View File

@ -82,5 +82,10 @@ class ExtremityCircle extends Extremity {
ug = ug.apply(new UTranslate(dest.getX() - radius, dest.getY() - radius));
ug.draw(UEllipse.build(radius * 2, radius * 2));
}
@Override
public double getDecorationLength() {
return 12;
}
}

View File

@ -73,6 +73,11 @@ class ExtremityCircleConnect extends Extremity {
final UEllipse arc1 = new UEllipse(2 * radius2, 2 * radius2, deg, 90);
ug.apply(new UTranslate(dest.getX() - radius2, dest.getY() - radius2)).draw(arc1);
}
@Override
public double getDecorationLength() {
return 10;
}
// private XPoint2D getPointOnCircle(double angle) {
// final double x = px + radius + radius2 * Math.cos(angle);

View File

@ -86,5 +86,10 @@ class ExtremityCircleCrowfoot extends Extremity {
final double dy = p2.getY() - p1.getY();
ug.apply(new UTranslate(x + p1.getX(), y + p1.getY())).draw(new ULine(dx, dy));
}
@Override
public double getDecorationLength() {
return 18;
}
}

View File

@ -89,5 +89,10 @@ class ExtremityCircleLine extends Extremity {
final double dy = p2.getY() - p1.getY();
ug.apply(new UTranslate(x + p1.getX(), y + p1.getY())).draw(new ULine(dx, dy));
}
@Override
public double getDecorationLength() {
return 15;
}
}

View File

@ -82,6 +82,11 @@ class ExtremityDiamond extends Extremity {
ug.draw(polygon);
}
@Override
public double getDecorationLength() {
return 12;
}
// @Override
// public XPoint2D isTooSmallSoGiveThePointCloserToThisOne(XPoint2D pt) {

View File

@ -80,6 +80,11 @@ class ExtremityDoubleLine extends Extremity {
drawLine(ug, contact.getX(), contact.getY(), secondLineTop, secondLineBottom);
drawLine(ug, contact.getX(), contact.getY(), base, middle);
}
@Override
public double getDecorationLength() {
return 8;
}
static private void drawLine(UGraphic ug, double x, double y, XPoint2D p1, XPoint2D p2) {
final double dx = p2.getX() - p1.getX();

View File

@ -69,5 +69,11 @@ class ExtremityExtends extends Extremity {
ug = ug.apply(fill.bg());
ug.draw(polygon);
}
@Override
public double getDecorationLength() {
return 18;
}
}

View File

@ -169,5 +169,10 @@ abstract class ExtremityExtendsLike extends Extremity {
public void drawU(UGraphic ug) {
ug.apply(back).draw(trig);
}
@Override
public double getDecorationLength() {
return 18;
}
}

View File

@ -41,7 +41,7 @@ import net.sourceforge.plantuml.klimt.shape.UDrawable;
public interface ExtremityFactory {
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side);
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side);
public UDrawable createUDrawable(XPoint2D p0, double angle, Side side);

View File

@ -48,7 +48,7 @@ public class ExtremityFactoryArrow extends AbstractExtremityFactory implements E
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
final XPoint2D center = new XPoint2D((p0.getX() + p2.getX()) / 2, (p0.getY() + p2.getY()) / 2);
return new ExtremityArrow(p1, ortho, center);

View File

@ -49,9 +49,13 @@ public class ExtremityFactoryArrowAndCircle extends AbstractExtremityFactory imp
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
final XPoint2D center = new XPoint2D((p0.getX() + p2.getX()) / 2, (p0.getY() + p2.getY()) / 2);
return new ExtremityArrowAndCircle(p1, ortho, center, backgroundColor);
return new ExtremityArrowAndCircle(p1, ortho, backgroundColor);
}
@Override
public UDrawable createUDrawable(XPoint2D p0, double angle, Side side) {
return new ExtremityArrowAndCircle(p0, angle - Math.PI / 2, backgroundColor);
}
}

View File

@ -58,7 +58,7 @@ public class ExtremityFactoryCircle extends AbstractExtremityFactory implements
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
return ExtremityCircle.create(p1, fill, ortho, backgroundColor);
}

View File

@ -56,7 +56,7 @@ public class ExtremityFactoryCircleConnect extends AbstractExtremityFactory impl
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
return new ExtremityCircleConnect(p1, ortho, backgroundColor);
}

View File

@ -50,9 +50,13 @@ public class ExtremityFactoryCircleCross extends AbstractExtremityFactory implem
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
// final double ortho = atan2(p0, p2);
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
return new ExtremityCircleCross(p1, backgroundColor);
}
@Override
public UDrawable createUDrawable(XPoint2D p0, double angle, Side side) {
return new ExtremityCircleCross(p0, backgroundColor);
}
}

View File

@ -49,7 +49,7 @@ public class ExtremityFactoryCircleCrowfoot extends AbstractExtremityFactory imp
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
return new ExtremityCircleCrowfoot(p1, ortho);
}

View File

@ -49,7 +49,7 @@ public class ExtremityFactoryCircleLine extends AbstractExtremityFactory impleme
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
return new ExtremityCircleLine(p1, ortho);
}

View File

@ -43,7 +43,7 @@ import net.sourceforge.plantuml.svek.AbstractExtremityFactory;
public class ExtremityFactoryCrowfoot extends AbstractExtremityFactory implements ExtremityFactory {
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
return new ExtremityCrowfoot(p1, ortho, side);
}

View File

@ -54,7 +54,7 @@ public class ExtremityFactoryDiamond extends AbstractExtremityFactory implements
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
return new ExtremityDiamond(p1, ortho, fill);
}

View File

@ -49,7 +49,7 @@ public class ExtremityFactoryDoubleLine extends AbstractExtremityFactory impleme
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
return new ExtremityDoubleLine(p1, ortho);
}

View File

@ -55,7 +55,7 @@ public class ExtremityFactoryExtends extends AbstractExtremityFactory implements
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
throw new UnsupportedOperationException();
// final double ortho = atan2(p0, p2);
// return new ExtremityExtends(p1, ortho, true);

View File

@ -61,7 +61,7 @@ public class ExtremityFactoryExtendsLike extends AbstractExtremityFactory implem
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2) + (Math.PI / 2.0);
if (definedBy) {
return new ExtremityExtendsLike.DefinedBy(p1, ortho, backgroundColor);

View File

@ -48,7 +48,7 @@ public class ExtremityFactoryHalfArrow extends AbstractExtremityFactory implemen
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
final XPoint2D center = new XPoint2D((p0.getX() + p2.getX()) / 2, (p0.getY() + p2.getY()) / 2);
return new ExtremityHalfArrow(p1, ortho, center);

View File

@ -49,7 +49,7 @@ public class ExtremityFactoryLineCrowfoot extends AbstractExtremityFactory imple
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
return new ExtremityLineCrowfoot(p1, ortho);
}

View File

@ -48,7 +48,7 @@ public class ExtremityFactoryNotNavigable extends AbstractExtremityFactory imple
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
return new ExtremityNotNavigable(p1, ortho);
}

View File

@ -49,7 +49,7 @@ public class ExtremityFactoryParenthesis extends AbstractExtremityFactory implem
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
if (OptionFlags.USE_INTERFACE_EYE2) {
final XPoint2D center = new XPoint2D((p0.getX() + p2.getX()) / 2, (p0.getY() + p2.getY()) / 2);

View File

@ -55,7 +55,7 @@ public class ExtremityFactoryPlus extends AbstractExtremityFactory implements Ex
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
return ExtremityPlus.create(p1, ortho, backgroundColor);
}

View File

@ -55,7 +55,7 @@ public class ExtremityFactorySquare extends AbstractExtremityFactory implements
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
// final double ortho = atan2(p0, p2);
return new ExtremitySquare(p1, backgroundColor);
}

View File

@ -46,22 +46,25 @@ public class ExtremityFactoryTriangle extends AbstractExtremityFactory implement
private final HColor backgroundColor;
private final int xWing;
private final int yAperture;
private final int decorationLength;
public ExtremityFactoryTriangle(HColor backgroundColor, int xWing, int yAperture) {
public ExtremityFactoryTriangle(HColor backgroundColor, int xWing, int yAperture, int decorationLength) {
this.backgroundColor = backgroundColor;
this.xWing = xWing;
this.yAperture = yAperture;
this.decorationLength = decorationLength;
}
@Override
public UDrawable createUDrawable(XPoint2D p0, double angle, Side side) {
return new ExtremityTriangle(p0, angle - Math.PI / 2, false, backgroundColor, xWing, yAperture);
return new ExtremityTriangle(p0, angle - Math.PI / 2, false, backgroundColor, xWing, yAperture,
decorationLength);
}
@Override
public UDrawable createUDrawable(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
public UDrawable createTBRDrawableLegacy(XPoint2D p0, XPoint2D p1, XPoint2D p2, Side side) {
final double ortho = atan2(p0, p2);
return new ExtremityTriangle(p1, ortho, true, backgroundColor, xWing, yAperture);
return new ExtremityTriangle(p1, ortho, true, backgroundColor, xWing, yAperture, decorationLength);
}
}

View File

@ -68,14 +68,25 @@ class ExtremityHalfArrow extends Extremity {
}
public ExtremityHalfArrow(XPoint2D p0, double angle) {
throw new UnsupportedOperationException();
angle = manageround(angle);
final int xWing = 9;
final int yAperture = 4;
this.contact = p0;
final XPoint2D other = new XPoint2D(-xWing, -yAperture).transform(AffineTransform.getRotateInstance(angle));
final XPoint2D other2 = new XPoint2D(-8, 0).transform(AffineTransform.getRotateInstance(angle));
this.line = new ULine(other.getX(), other.getY());
this.otherLine = new ULine(other2.getX(), other2.getY());
}
public void drawU(UGraphic ug) {
ug = ug.apply(HColors.changeBack(ug));
if (line != null && line.getLength() > 2) {
ug.apply(new UTranslate(contact.getX(), contact.getY())).draw(line);
ug.apply(new UTranslate(contact.getX(), contact.getY())).draw(otherLine);
final UTranslate position = UTranslate.point(contact);
ug.apply(position).draw(line);
ug.apply(position).draw(otherLine);
}
}

View File

@ -88,4 +88,9 @@ class ExtremityLineCrowfoot extends Extremity {
ug.apply(new UTranslate(x + p1.getX(), y + p1.getY())).draw(new ULine(dx, dy));
}
@Override
public double getDecorationLength() {
return 8;
}
}

View File

@ -67,5 +67,10 @@ class ExtremityNotNavigable extends Extremity {
public void drawU(UGraphic ug) {
ug.draw(path);
}
@Override
public double getDecorationLength() {
return 8;
}
}

View File

@ -65,5 +65,10 @@ class ExtremityParenthesis extends Extremity {
ug.apply(UStroke.withThickness(1.5)).apply(new UTranslate(dest.getX() - radius2, dest.getY() - radius2))
.draw(arc1);
}
@Override
public double getDecorationLength() {
return 10;
}
}

View File

@ -89,5 +89,10 @@ class ExtremityPlus extends Extremity {
ug.apply(new UTranslate(x + p1.getX(), y + p1.getY())).draw(new ULine(dx, dy));
}
@Override
public double getDecorationLength() {
return 16;
}
}

View File

@ -64,5 +64,10 @@ class ExtremitySquare extends Extremity {
.apply(new UTranslate(dest.getX() - radius, dest.getY() - radius))
.draw(URectangle.build(radius * 2, radius * 2));
}
@Override
public double getDecorationLength() {
return 5;
}
}

View File

@ -47,19 +47,19 @@ class ExtremityTriangle extends Extremity {
private final boolean fill;
private final HColor backgroundColor;
private final XPoint2D contact;
private final int xWing;
private final int decorationLength;
@Override
public XPoint2D somePoint() {
return contact;
}
public ExtremityTriangle(XPoint2D p1, double angle, boolean fill, HColor backgroundColor, int xWing,
int yAperture) {
public ExtremityTriangle(XPoint2D p1, double angle, boolean fill, HColor backgroundColor, int xWing, int yAperture,
int decorationLength) {
this.backgroundColor = backgroundColor;
this.fill = fill;
this.contact = new XPoint2D(p1.getX(), p1.getY());
this.xWing = xWing;
this.decorationLength = decorationLength;
angle = manageround(angle);
polygon.addPoint(0, 0);
@ -80,7 +80,7 @@ class ExtremityTriangle extends Extremity {
@Override
public double getDecorationLength() {
return xWing;
return decorationLength;
}
}

View File

@ -60,5 +60,10 @@ class MiddleCircle extends Extremity {
public void drawU(UGraphic ug) {
ug.apply(backColor.bg()).apply(UStroke.withThickness(1.5)).apply(new UTranslate(-radius, -radius)).draw(circle);
}
@Override
public double getDecorationLength() {
return radius;
}
}

View File

@ -46,7 +46,7 @@ public class Version {
// Warning, "version" should be the same in gradle.properties and Version.java
// Any idea anyone how to magically synchronize those :-) ?
private static final String version = "1.2023.11beta1";
private static final String version = "1.2023.11beta2";
public static String versionString() {
return version;

View File

@ -194,18 +194,6 @@ TEXT:
color: ff000000
extendedColor: NULL_COLOR
PATH:
- type: SEG_MOVETO
pt1: [ 142.0000 ; 30.2631 ]
- type: SEG_CUBICTO
pt1: [ 142.0000 ; 40.4562 ]
pt2: [ 142.0000 ; 55.5520 ]
pt3: [ 142.0000 ; 66.8097 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
POLYGON:
points:
- [ 148.0000 ; 72.8097 ]
@ -220,11 +208,11 @@ POLYGON:
PATH:
- type: SEG_MOVETO
pt1: [ 142.0000 ; 99.2505 ]
pt1: [ 142.0000 ; 30.2631 ]
- type: SEG_CUBICTO
pt1: [ 142.0000 ; 110.4667 ]
pt2: [ 142.0000 ; 125.4679 ]
pt3: [ 142.0000 ; 135.6413 ]
pt1: [ 142.0000 ; 40.4562 ]
pt2: [ 142.0000 ; 49.5520 ]
pt3: [ 142.0000 ; 60.8097 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
@ -242,6 +230,18 @@ POLYGON:
color: ff181818
backcolor: ff181818
PATH:
- type: SEG_MOVETO
pt1: [ 142.0000 ; 99.2505 ]
- type: SEG_CUBICTO
pt1: [ 142.0000 ; 110.4667 ]
pt2: [ 142.0000 ; 119.4679 ]
pt3: [ 142.0000 ; 129.6413 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
EMPTY:
pt1: [ 136.0000 ; 128.6413 ]
pt2: [ 148.4231 ; 141.6413 ]
@ -254,18 +254,6 @@ TEXT:
color: ff000000
extendedColor: NULL_COLOR
PATH:
- type: SEG_MOVETO
pt1: [ 129.7752 ; 158.1168 ]
- type: SEG_CUBICTO
pt1: [ 122.2145 ; 163.7553 ]
pt2: [ 112.3164 ; 171.1369 ]
pt3: [ 103.5732 ; 177.6573 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
POLYGON:
points:
- [ 109.5732 ; 183.6573 ]
@ -278,6 +266,18 @@ POLYGON:
color: ff181818
backcolor: ff181818
PATH:
- type: SEG_MOVETO
pt1: [ 129.7752 ; 158.1168 ]
- type: SEG_CUBICTO
pt1: [ 122.2145 ; 163.7553 ]
pt2: [ 117.1261 ; 167.5500 ]
pt3: [ 108.3830 ; 174.0703 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
EMPTY:
pt1: [ 32.1176 ; 160.5563 ]
pt2: [ 123.3348 ; 173.5563 ]
@ -290,26 +290,6 @@ TEXT:
color: ff000000
extendedColor: NULL_COLOR
PATH:
- type: SEG_MOVETO
pt1: [ 80.9376 ; 210.2651 ]
- type: SEG_CUBICTO
pt1: [ 78.8728 ; 226.8910 ]
pt2: [ 76.0000 ; 254.2842 ]
pt3: [ 76.0000 ; 278.0000 ]
- type: SEG_CUBICTO
pt1: [ 76.0000 ; 278.0000 ]
pt2: [ 76.0000 ; 278.0000 ]
pt3: [ 76.0000 ; 597.0000 ]
- type: SEG_CUBICTO
pt1: [ 76.0000 ; 624.0056 ]
pt2: [ 105.0341 ; 645.0259 ]
pt3: [ 120.9122 ; 654.5023 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
POLYGON:
points:
- [ 126.9122 ; 660.5023 ]
@ -324,15 +304,19 @@ POLYGON:
PATH:
- type: SEG_MOVETO
pt1: [ 154.0211 ; 159.3508 ]
pt1: [ 80.9376 ; 210.2651 ]
- type: SEG_CUBICTO
pt1: [ 160.3243 ; 164.8317 ]
pt2: [ 168.1405 ; 171.7127 ]
pt3: [ 175.0000 ; 178.0000 ]
pt1: [ 78.8728 ; 226.8910 ]
pt2: [ 76.0000 ; 254.2842 ]
pt3: [ 76.0000 ; 278.0000 ]
- type: SEG_CUBICTO
pt1: [ 193.2996 ; 194.7733 ]
pt2: [ 213.8411 ; 214.5434 ]
pt3: [ 227.5109 ; 227.8383 ]
pt1: [ 76.0000 ; 278.0000 ]
pt2: [ 76.0000 ; 278.0000 ]
pt3: [ 76.0000 ; 597.0000 ]
- type: SEG_CUBICTO
pt1: [ 76.0000 ; 624.0056 ]
pt2: [ 99.8820 ; 641.9510 ]
pt3: [ 115.7600 ; 651.4274 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
@ -350,6 +334,22 @@ POLYGON:
color: ff181818
backcolor: ff181818
PATH:
- type: SEG_MOVETO
pt1: [ 154.0211 ; 159.3508 ]
- type: SEG_CUBICTO
pt1: [ 160.3243 ; 164.8317 ]
pt2: [ 168.1405 ; 171.7127 ]
pt3: [ 175.0000 ; 178.0000 ]
- type: SEG_CUBICTO
pt1: [ 193.2996 ; 194.7733 ]
pt2: [ 209.5399 ; 210.3601 ]
pt3: [ 223.2097 ; 223.6550 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
EMPTY:
pt1: [ 215.0000 ; 193.5000 ]
pt2: [ 292.9440 ; 206.5000 ]
@ -362,18 +362,6 @@ TEXT:
color: ff000000
extendedColor: NULL_COLOR
PATH:
- type: SEG_MOVETO
pt1: [ 249.0518 ; 260.2505 ]
- type: SEG_CUBICTO
pt1: [ 253.5027 ; 271.4667 ]
pt2: [ 259.4555 ; 286.4679 ]
pt3: [ 263.4926 ; 296.6413 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
POLYGON:
points:
- [ 269.4926 ; 302.6413 ]
@ -388,11 +376,11 @@ POLYGON:
PATH:
- type: SEG_MOVETO
pt1: [ 268.0000 ; 321.0974 ]
pt1: [ 249.0518 ; 260.2505 ]
- type: SEG_CUBICTO
pt1: [ 268.0000 ; 331.6457 ]
pt2: [ 268.0000 ; 347.4205 ]
pt3: [ 268.0000 ; 357.9523 ]
pt1: [ 253.5027 ; 271.4667 ]
pt2: [ 257.2424 ; 280.8909 ]
pt3: [ 261.2795 ; 291.0644 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
@ -410,6 +398,18 @@ POLYGON:
color: ff181818
backcolor: ff181818
PATH:
- type: SEG_MOVETO
pt1: [ 268.0000 ; 321.0974 ]
- type: SEG_CUBICTO
pt1: [ 268.0000 ; 331.6457 ]
pt2: [ 268.0000 ; 341.4205 ]
pt3: [ 268.0000 ; 351.9523 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
EMPTY:
pt1: [ 262.0000 ; 350.9523 ]
pt2: [ 274.4231 ; 363.9523 ]
@ -422,22 +422,6 @@ TEXT:
color: ff000000
extendedColor: NULL_COLOR
PATH:
- type: SEG_MOVETO
pt1: [ 255.8218 ; 374.4963 ]
- type: SEG_CUBICTO
pt1: [ 215.5382 ; 386.6592 ]
pt2: [ 91.3580 ; 429.2712 ]
pt3: [ 131.0000 ; 482.0000 ]
- type: SEG_CUBICTO
pt1: [ 146.0983 ; 502.0826 ]
pt2: [ 212.5044 ; 516.4342 ]
pt3: [ 256.6136 ; 523.9570 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
POLYGON:
points:
- [ 262.6136 ; 529.9570 ]
@ -450,6 +434,22 @@ POLYGON:
color: ff181818
backcolor: ff181818
PATH:
- type: SEG_MOVETO
pt1: [ 255.8218 ; 374.4963 ]
- type: SEG_CUBICTO
pt1: [ 215.5382 ; 386.6592 ]
pt2: [ 91.3580 ; 429.2712 ]
pt3: [ 131.0000 ; 482.0000 ]
- type: SEG_CUBICTO
pt1: [ 146.0983 ; 502.0826 ]
pt2: [ 206.5898 ; 515.4255 ]
pt3: [ 250.6990 ; 522.9483 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
EMPTY:
pt1: [ 137.0000 ; 465.5000 ]
pt2: [ 252.5031 ; 478.5000 ]
@ -462,22 +462,6 @@ TEXT:
color: ff000000
extendedColor: NULL_COLOR
PATH:
- type: SEG_MOVETO
pt1: [ 265.1414 ; 382.3557 ]
- type: SEG_CUBICTO
pt1: [ 262.5349 ; 395.4258 ]
pt2: [ 260.3945 ; 417.0128 ]
pt3: [ 270.0000 ; 432.0000 ]
- type: SEG_CUBICTO
pt1: [ 274.7698 ; 439.4421 ]
pt2: [ 281.7630 ; 445.2698 ]
pt3: [ 289.4347 ; 449.8128 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
POLYGON:
points:
- [ 295.4347 ; 455.8128 ]
@ -490,6 +474,22 @@ POLYGON:
color: ff181818
backcolor: ff181818
PATH:
- type: SEG_MOVETO
pt1: [ 265.1414 ; 382.3557 ]
- type: SEG_CUBICTO
pt1: [ 262.5349 ; 395.4258 ]
pt2: [ 260.3945 ; 417.0128 ]
pt3: [ 270.0000 ; 432.0000 ]
- type: SEG_CUBICTO
pt1: [ 274.7698 ; 439.4421 ]
pt2: [ 276.6003 ; 442.2126 ]
pt3: [ 284.2720 ; 446.7556 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
EMPTY:
pt1: [ 276.0000 ; 415.5000 ]
pt2: [ 341.5080 ; 428.5000 ]
@ -502,18 +502,6 @@ TEXT:
color: ff000000
extendedColor: NULL_COLOR
PATH:
- type: SEG_MOVETO
pt1: [ 326.5592 ; 482.2505 ]
- type: SEG_CUBICTO
pt1: [ 319.6159 ; 493.4667 ]
pt2: [ 310.3294 ; 508.4679 ]
pt3: [ 304.0316 ; 518.6413 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
POLYGON:
points:
- [ 310.0316 ; 524.6413 ]
@ -528,11 +516,11 @@ POLYGON:
PATH:
- type: SEG_MOVETO
pt1: [ 286.2922 ; 321.0384 ]
pt1: [ 326.5592 ; 482.2505 ]
- type: SEG_CUBICTO
pt1: [ 317.6162 ; 339.9408 ]
pt2: [ 381.5657 ; 378.5310 ]
pt3: [ 416.9883 ; 399.9067 ]
pt1: [ 319.6159 ; 493.4667 ]
pt2: [ 313.4875 ; 503.3663 ]
pt3: [ 307.1897 ; 513.5397 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
@ -552,15 +540,11 @@ POLYGON:
PATH:
- type: SEG_MOVETO
pt1: [ 442.1322 ; 432.2570 ]
pt1: [ 286.2922 ; 321.0384 ]
- type: SEG_CUBICTO
pt1: [ 441.4486 ; 446.7451 ]
pt2: [ 438.2173 ; 468.2922 ]
pt3: [ 426.0000 ; 482.0000 ]
- type: SEG_CUBICTO
pt1: [ 403.3436 ; 507.4206 ]
pt2: [ 365.9396 ; 519.4137 ]
pt3: [ 337.2264 ; 525.0513 ]
pt1: [ 317.6162 ; 339.9408 ]
pt2: [ 376.4286 ; 375.4310 ]
pt3: [ 411.8512 ; 396.8067 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
@ -580,11 +564,15 @@ POLYGON:
PATH:
- type: SEG_MOVETO
pt1: [ 292.3517 ; 543.2631 ]
pt1: [ 442.1322 ; 432.2570 ]
- type: SEG_CUBICTO
pt1: [ 288.1451 ; 553.4562 ]
pt2: [ 281.9151 ; 568.5520 ]
pt3: [ 277.2690 ; 579.8097 ]
pt1: [ 441.4486 ; 446.7451 ]
pt2: [ 438.2173 ; 468.2922 ]
pt3: [ 426.0000 ; 482.0000 ]
- type: SEG_CUBICTO
pt1: [ 403.3436 ; 507.4206 ]
pt2: [ 371.8272 ; 518.2577 ]
pt3: [ 343.1140 ; 523.8953 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
@ -604,11 +592,11 @@ POLYGON:
PATH:
- type: SEG_MOVETO
pt1: [ 237.4665 ; 612.0901 ]
pt1: [ 292.3517 ; 543.2631 ]
- type: SEG_CUBICTO
pt1: [ 206.0796 ; 626.2142 ]
pt2: [ 161.1219 ; 646.4451 ]
pt3: [ 141.1865 ; 655.4161 ]
pt1: [ 288.1451 ; 553.4562 ]
pt2: [ 284.2040 ; 563.0057 ]
pt3: [ 279.5579 ; 574.2635 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
@ -626,5 +614,17 @@ POLYGON:
color: ff181818
backcolor: ff181818
PATH:
- type: SEG_MOVETO
pt1: [ 237.4665 ; 612.0901 ]
- type: SEG_CUBICTO
pt1: [ 206.0796 ; 626.2142 ]
pt2: [ 166.5934 ; 643.9829 ]
pt3: [ 146.6581 ; 652.9539 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
"""
*/

View File

@ -194,18 +194,6 @@ EMPTY:
pt1: [ 21.0468 ; 98.0000 ]
pt2: [ 33.0468 ; 106.0000 ]
PATH:
- type: SEG_MOVETO
pt1: [ 46.0000 ; 54.3837 ]
- type: SEG_CUBICTO
pt1: [ 46.0000 ; 65.1992 ]
pt2: [ 46.0000 ; 78.1811 ]
pt3: [ 46.0000 ; 89.7328 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
POLYGON:
points:
- [ 67.0468 ; 141.7328 ]
@ -218,6 +206,18 @@ POLYGON:
color: ff181818
backcolor: ff181818
PATH:
- type: SEG_MOVETO
pt1: [ 46.0000 ; 54.3837 ]
- type: SEG_CUBICTO
pt1: [ 46.0000 ; 65.1992 ]
pt2: [ 46.0000 ; 72.1811 ]
pt3: [ 46.0000 ; 83.7328 ]
stroke: 0.0-0.0-1.0
shadow: 0
color: ff181818
backcolor: NULL_COLOR
EMPTY:
pt1: [ 0.0000 ; 198.0000 ]
pt2: [ 128.0935 ; 247.0000 ]