+ private static float tryParseFloat(String s, float def) {
+ try {
+ return Float.parseFloat(s);
+ } catch (NumberFormatException e) {
+ LOGGER.error("Could not parse '" + s + "' into float.");
+ return def;
+ }
+ }
+
+ /*
+ * 1.0 BUTT MITER 1.0 0.0
+ */
+ private static Stroke parseStroke(String definition) {
+
+ float width = 1.0f;
+ int cap = BasicStroke.CAP_BUTT;
+ int join = BasicStroke.JOIN_MITER;
+ float miterLimit = 1.0f;
+ float[] dash = { 1, 0};
+ float dash_phase = 0;
+
+ String[] parts = definition.split(" ");
+
+ if(parts.length > 0) {
+ width = tryParseFloat(parts[0], width);
+ }
+ if(parts.length > 1) {
+ if("BUTT".equals(parts[1])) cap = BasicStroke.CAP_BUTT;
+ else if("ROUND".equals(parts[1])) cap = BasicStroke.CAP_ROUND;
+ else if("SQUARE".equals(parts[1])) cap = BasicStroke.CAP_SQUARE;
+ }
+ if(parts.length > 2) {
+ if("BEVEL".equals(parts[2])) cap = BasicStroke.JOIN_BEVEL;
+ else if("MITER".equals(parts[2])) cap = BasicStroke.JOIN_MITER;
+ else if("ROUND".equals(parts[2])) cap = BasicStroke.JOIN_ROUND;
+ }
+ if(parts.length > 3) {
+ miterLimit = tryParseFloat(parts[3], miterLimit);
+ }
+ if(parts.length > 4) {
+ dash_phase = tryParseFloat(parts[4], dash_phase);
+ }
+ if(parts.length > 6) {
+ dash = new float[parts.length - 5];
+ for(int i=5;i<parts.length;i++) {
+ dash[i-5] = tryParseFloat(parts[i], 1.0f);
+ }
+ }
+
+
+ try {
+ return new BasicStroke(width, cap, join, miterLimit, dash, dash_phase);
+ } catch (IllegalArgumentException e) {
+ return new BasicStroke();
+ }
+
+ }
+
+ public void setAssignments(List<SVGNodeAssignment> assignments) {
+ for(SVGNodeAssignment ass : assignments) {
+ if("dynamicColor".equals(ass.elementId)) {
+ setDynamicColor(ColorUtil.hexColor(ass.value));
+ } else if("dynamicStroke".equals(ass.elementId)) {
+ setDynamicStroke(parseStroke(ass.value));
+ }
+ }
+ }
+
+ public void setIgnoreSelection(boolean value) {
+ ignoreSelection = value;
+ }
+
+ public boolean getIgnoreSelection() {
+ return ignoreSelection;
+ }
+