Reduce repeated argument scaling and add vector scaling to shapes

pull/35/head
James Ball 2020-10-28 17:05:15 +00:00
rodzic af70109e4f
commit 6c1a09fb3e
6 zmienionych plików z 36 dodań i 11 usunięć

Wyświetl plik

@ -205,13 +205,17 @@ public class SvgParser extends FileParser {
return shapes;
}
private Vector2 scaledArguments(float arg1, float arg2) {
return new Vector2(arg1 / width, arg2 / height);
}
// Parses moveto commands (M and m commands)
private List<? extends Shape> parseMoveTo(List<Float> args, boolean isAbsolute) {
if (args.size() % 2 != 0 || args.size() < 2) {
throw new IllegalArgumentException("SVG moveto command has incorrect number of arguments.");
}
Vector2 vec = new Vector2(args.get(0) / width, args.get(1) / height);
Vector2 vec = scaledArguments(args.get(0), args.get(1));
if (isAbsolute) {
currPoint = vec;
@ -259,9 +263,9 @@ public class SvgParser extends FileParser {
Vector2 newPoint;
if (expectedArgs == 1) {
newPoint = new Vector2(args.get(i) / width, args.get(i) / height);
newPoint = scaledArguments(args.get(i), args.get(i));
} else {
newPoint = new Vector2(args.get(i) / width, args.get(i + 1) / height);
newPoint = scaledArguments(args.get(i), args.get(i + 1));
}
if (isHorizontal && !isVertical) {
@ -312,15 +316,14 @@ public class SvgParser extends FileParser {
: prevQuadraticControlPoint.reflectRelativeToVector(currPoint);
}
} else {
controlPoint1 = new Vector2(args.get(i) / width, args.get(i + 1) / height);
controlPoint1 = scaledArguments(args.get(i), args.get(i + 1));
}
if (isCubic) {
controlPoint2 = new Vector2(args.get(i + 2) / width, args.get(i + 3) / height);
controlPoint2 = scaledArguments(args.get(i + 2), args.get(i + 3));
}
Vector2 newPoint = new Vector2(args.get(i + expectedArgs - 2) / width,
args.get(i + expectedArgs - 1) / height);
Vector2 newPoint = scaledArguments(args.get(i + expectedArgs - 2), args.get(i + expectedArgs - 1));
if (!isAbsolute) {
controlPoint1 = currPoint.translate(controlPoint1);

Wyświetl plik

@ -52,22 +52,27 @@ public class CubicBezierCurve extends Shape {
}
@Override
public Shape rotate(double theta) {
public CubicBezierCurve rotate(double theta) {
return this;
}
@Override
public Shape scale(double factor) {
public CubicBezierCurve scale(double factor) {
return new CubicBezierCurve(p0, p1, p2, p3, weight, factor, translation);
}
@Override
public Shape translate(Vector2 vector) {
public CubicBezierCurve scale(Vector2 vector) {
return new CubicBezierCurve(p0.scale(vector), p1.scale(vector), p2.scale(vector), p3.scale(vector), weight, translation);
}
@Override
public CubicBezierCurve translate(Vector2 vector) {
return new CubicBezierCurve(p0, p1, p2, p3, weight, factor, translation.translate(vector));
}
@Override
public Shape setWeight(double weight) {
public CubicBezierCurve setWeight(double weight) {
return new CubicBezierCurve(p0, p1, p2, p3, weight, factor, translation);
}
}

Wyświetl plik

@ -53,6 +53,11 @@ public final class Ellipse extends Shape {
return new Ellipse(a * factor, b * factor, weight, rotation, position.scale(factor));
}
@Override
public Ellipse scale(Vector2 vector) {
return new Ellipse(a * vector.getX(), b * vector.getY(), weight, rotation, position.scale(vector));
}
@Override
public Ellipse translate(Vector2 vector) {
return new Ellipse(a, b, weight, rotation, position.translate(vector));

Wyświetl plik

@ -46,6 +46,11 @@ public final class Line extends Shape {
return new Line(a.scale(factor), b.scale(factor), weight);
}
@Override
public Line scale(Vector2 vector) {
return new Line(a.scale(vector), b.scale(vector), weight);
}
public Line copy() {
return new Line(a.copy(), b.copy(), weight);
}

Wyświetl plik

@ -15,6 +15,8 @@ public abstract class Shape {
public abstract Shape scale(double factor);
public abstract Shape scale(Vector2 vector);
public abstract Shape translate(Vector2 vector);
public abstract Shape setWeight(double weight);

Wyświetl plik

@ -76,6 +76,11 @@ public final class Vector2 extends Shape {
return new Vector2(getX() * factor, getY() * factor);
}
@Override
public Vector2 scale(Vector2 vector) {
return new Vector2(getX() * vector.getX(), getY() * vector.getY());
}
@Override
public Vector2 translate(Vector2 vector) {
return new Vector2(getX() + vector.getX(), getY() + vector.getY());