kopia lustrzana https://github.com/jameshball/osci-render
Reduce repeated argument scaling and add vector scaling to shapes
rodzic
af70109e4f
commit
6c1a09fb3e
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
|
|
Ładowanie…
Reference in New Issue