From 4fe27f2dca3e744d6d45fb0ec0724ff2c0d8d4ac Mon Sep 17 00:00:00 2001 From: James Ball Date: Sun, 25 Oct 2020 17:41:00 +0000 Subject: [PATCH] Correct sub-path closing --- src/parser/SvgParser.java | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/parser/SvgParser.java b/src/parser/SvgParser.java index b5db85f8..278c7833 100644 --- a/src/parser/SvgParser.java +++ b/src/parser/SvgParser.java @@ -28,6 +28,7 @@ public class SvgParser extends FileParser { private final List shapes; private final Map, List>> commandMap; + private Vector2 currPoint; private Vector2 initialPoint; private Vector2 prevCubicControlPoint; @@ -91,9 +92,13 @@ public class SvgParser extends FileParser { } private List parseClosePath(List args) { - Line line = new Line(currPoint, initialPoint); - currPoint = initialPoint; - return List.of(line); + if (!currPoint.equals(initialPoint)) { + Line line = new Line(currPoint, initialPoint); + currPoint = initialPoint; + return List.of(line); + } else { + return List.of(); + } } private List parseLineTo(List args, boolean isAbsolute, @@ -266,16 +271,15 @@ public class SvgParser extends FileParser { for (String command : commands) { char commandChar = command.charAt(0); + List nums = null; - if (commandChar == 'z' || commandChar == 'Z') { - continue; + if (commandChar != 'z' && commandChar != 'Z') { + // Split the command into number strings and convert them into floats. + nums = Arrays.stream(command.substring(1).split(" ")) + .map(Float::parseFloat) + .collect(Collectors.toList()); } - // Split the command into number strings and convert them into floats. - List nums = Arrays.stream(command.substring(1).split(" ")) - .map(Float::parseFloat) - .collect(Collectors.toList()); - // Use the nums to get a list of shapes, using the first character in the command to specify // the function to use. shapes.addAll(commandMap.get(commandChar).apply(nums));