private static SNode loadNode(Elem root) throws Exception { u.p("loading SVG element: " + root.name()); if ("g".equals(root.name())) { SGroup g = new SGroup(); for (Elem n : root.xpath("./*")) { SNode nn = loadNode(n); if (nn != null) g.addAll(false, nn); } g.normalize(); return g; } if ("rect".equals(root.name())) { SRect rect = new SRect(); rect.setX(Double.parseDouble(root.attr("x"))); rect.setY(Double.parseDouble(root.attr("y"))); parseFill(rect, root); parseStroke(rect, root); rect.setWidth(Double.parseDouble(root.attr("width"))); rect.setHeight(Double.parseDouble(root.attr("height"))); return rect; } if ("line".equals(root.name())) { SPoly poly = new SPoly(); double x1 = Double.parseDouble(root.attr("x1")); double y1 = Double.parseDouble(root.attr("y1")); double x2 = Double.parseDouble(root.attr("x2")); double y2 = Double.parseDouble(root.attr("y2")); poly.addPoint(new Point2D.Double(x1, y1)); poly.addPoint(new Point2D.Double(x2, y2)); poly.setClosed(false); parseFill(poly, root); parseStroke(poly, root); return poly; } if ("polygon".equals(root.name()) || "polyline".equals(root.name())) { String pointsString = root.attr("points"); String[] points = pointsString.split("\\s"); SPoly poly = new SPoly(); for (String pt : points) { if (pt != null && pt.trim().equals("")) continue; String[] xy = pt.split(","); poly.addPoint(new Point2D.Double(Double.parseDouble(xy[0]), Double.parseDouble(xy[1]))); } // the polygon is closed, poly lines aren't poly.setClosed("polygon".equals(root.name())); parseFill(poly, root); parseStroke(poly, root); return poly; } if ("path".equals(root.name())) { return parsePathNode(root); } Exception ex = new Exception("unrecognized SVG element: " + root.name()); u.p(ex); return null; }