package uk.co.flyingsquirrels.rendering;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.Shape;
import org.newdawn.slick.geom.Transform;
import org.newdawn.slick.svg.InkscapeLoader;
public class ShapeFactory {
public static Shape loadFromSvg(String filename, float xLength,
float transX, float transY) {
try {
Shape shape = InkscapeLoader.load(filename).getFigure(0).getShape();
float minX = Float.MAX_VALUE;
float minY = Float.MAX_VALUE;
float maxX = Float.MIN_VALUE;
float maxY = Float.MIN_VALUE;
for (int i = 0; i < shape.getPointCount(); i++) {
float[] point = shape.getPoint(i);
if (point[0] < minX) {
minX = point[0];
}
if (point[0] > maxX) {
maxX = point[0];
}
if (point[1] < minY) {
minY = point[1];
}
if (point[1] > maxY) {
maxY = point[1];
}
}
float scale = xLength / (maxX - minX);
float midX = (minX + maxX) / 2;
float midY = (minY + maxY) / 2;
Transform scaleTransform = Transform.createScaleTransform(scale,
-scale);
Transform translateTransform = Transform.createTranslateTransform(
-midX + transX, -midY + transY);
Transform transform = scaleTransform
.concatenate(translateTransform);
return shape.transform(transform);
} catch (SlickException e) {
throw new RuntimeException(e);
}
}
}