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;
|
return shapes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Vector2 scaledArguments(float arg1, float arg2) {
|
||||||
|
return new Vector2(arg1 / width, arg2 / height);
|
||||||
|
}
|
||||||
|
|
||||||
// Parses moveto commands (M and m commands)
|
// Parses moveto commands (M and m commands)
|
||||||
private List<? extends Shape> parseMoveTo(List<Float> args, boolean isAbsolute) {
|
private List<? extends Shape> parseMoveTo(List<Float> args, boolean isAbsolute) {
|
||||||
if (args.size() % 2 != 0 || args.size() < 2) {
|
if (args.size() % 2 != 0 || args.size() < 2) {
|
||||||
throw new IllegalArgumentException("SVG moveto command has incorrect number of arguments.");
|
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) {
|
if (isAbsolute) {
|
||||||
currPoint = vec;
|
currPoint = vec;
|
||||||
|
@ -259,9 +263,9 @@ public class SvgParser extends FileParser {
|
||||||
Vector2 newPoint;
|
Vector2 newPoint;
|
||||||
|
|
||||||
if (expectedArgs == 1) {
|
if (expectedArgs == 1) {
|
||||||
newPoint = new Vector2(args.get(i) / width, args.get(i) / height);
|
newPoint = scaledArguments(args.get(i), args.get(i));
|
||||||
} else {
|
} 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) {
|
if (isHorizontal && !isVertical) {
|
||||||
|
@ -312,15 +316,14 @@ public class SvgParser extends FileParser {
|
||||||
: prevQuadraticControlPoint.reflectRelativeToVector(currPoint);
|
: prevQuadraticControlPoint.reflectRelativeToVector(currPoint);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
controlPoint1 = new Vector2(args.get(i) / width, args.get(i + 1) / height);
|
controlPoint1 = scaledArguments(args.get(i), args.get(i + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isCubic) {
|
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,
|
Vector2 newPoint = scaledArguments(args.get(i + expectedArgs - 2), args.get(i + expectedArgs - 1));
|
||||||
args.get(i + expectedArgs - 1) / height);
|
|
||||||
|
|
||||||
if (!isAbsolute) {
|
if (!isAbsolute) {
|
||||||
controlPoint1 = currPoint.translate(controlPoint1);
|
controlPoint1 = currPoint.translate(controlPoint1);
|
||||||
|
|
|
@ -52,22 +52,27 @@ public class CubicBezierCurve extends Shape {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Shape rotate(double theta) {
|
public CubicBezierCurve rotate(double theta) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Shape scale(double factor) {
|
public CubicBezierCurve scale(double factor) {
|
||||||
return new CubicBezierCurve(p0, p1, p2, p3, weight, factor, translation);
|
return new CubicBezierCurve(p0, p1, p2, p3, weight, factor, translation);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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));
|
return new CubicBezierCurve(p0, p1, p2, p3, weight, factor, translation.translate(vector));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Shape setWeight(double weight) {
|
public CubicBezierCurve setWeight(double weight) {
|
||||||
return new CubicBezierCurve(p0, p1, p2, p3, weight, factor, translation);
|
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));
|
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
|
@Override
|
||||||
public Ellipse translate(Vector2 vector) {
|
public Ellipse translate(Vector2 vector) {
|
||||||
return new Ellipse(a, b, weight, rotation, position.translate(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);
|
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() {
|
public Line copy() {
|
||||||
return new Line(a.copy(), b.copy(), weight);
|
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(double factor);
|
||||||
|
|
||||||
|
public abstract Shape scale(Vector2 vector);
|
||||||
|
|
||||||
public abstract Shape translate(Vector2 vector);
|
public abstract Shape translate(Vector2 vector);
|
||||||
|
|
||||||
public abstract Shape setWeight(double weight);
|
public abstract Shape setWeight(double weight);
|
||||||
|
|
|
@ -76,6 +76,11 @@ public final class Vector2 extends Shape {
|
||||||
return new Vector2(getX() * factor, getY() * factor);
|
return new Vector2(getX() * factor, getY() * factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Vector2 scale(Vector2 vector) {
|
||||||
|
return new Vector2(getX() * vector.getX(), getY() * vector.getY());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Vector2 translate(Vector2 vector) {
|
public Vector2 translate(Vector2 vector) {
|
||||||
return new Vector2(getX() + vector.getX(), getY() + vector.getY());
|
return new Vector2(getX() + vector.getX(), getY() + vector.getY());
|
||||||
|
|
Ładowanie…
Reference in New Issue