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); } } }