public static AbstractCanvasObject createShape(Element elt, Map<Location, Instance> pins) { String name = elt.getTagName(); if (name.equals("circ-anchor") || name.equals("circ-origin")) { Location loc = getLocation(elt); AbstractCanvasObject ret = new AppearanceAnchor(loc); if (elt.hasAttribute("facing")) { Direction facing = Direction.parse(elt.getAttribute("facing")); ret.setValue(AppearanceAnchor.FACING, facing); } return ret; } else if (name.equals("circ-port")) { Location loc = getLocation(elt); String[] pinStr = elt.getAttribute("pin").split(","); Location pinLoc = Location.create(Integer.parseInt(pinStr[0].trim()), Integer.parseInt(pinStr[1].trim())); Instance pin = pins.get(pinLoc); if (pin == null) { return null; } else { return new AppearancePort(loc, pin); } } else { return SvgReader.createShape(elt); } }
private static AbstractCanvasObject createRectangle(Element elt) { int x = Integer.parseInt(elt.getAttribute("x")); int y = Integer.parseInt(elt.getAttribute("y")); int w = Integer.parseInt(elt.getAttribute("width")); int h = Integer.parseInt(elt.getAttribute("height")); if (elt.hasAttribute("rx")) { AbstractCanvasObject ret = new RoundRectangle(x, y, w, h); int rx = Integer.parseInt(elt.getAttribute("rx")); ret.setValue(DrawAttr.CORNER_RADIUS, Integer.valueOf(rx)); return ret; } else { return new Rectangle(x, y, w, h); } }
public static AbstractCanvasObject createShape(Element elt) { String name = elt.getTagName(); AbstractCanvasObject ret; if (name.equals("ellipse")) { ret = createOval(elt); } else if (name.equals("line")) { ret = createLine(elt); } else if (name.equals("path")) { ret = createPath(elt); } else if (name.equals("polyline")) { ret = createPolyline(elt); } else if (name.equals("polygon")) { ret = createPolygon(elt); } else if (name.equals("rect")) { ret = createRectangle(elt); } else if (name.equals("text")) { ret = createText(elt); } else { return null; } List<Attribute<?>> attrs = ret.getAttributes(); if (attrs.contains(DrawAttr.PAINT_TYPE)) { String stroke = elt.getAttribute("stroke"); String fill = elt.getAttribute("fill"); if (stroke.equals("") || stroke.equals("none")) { ret.setValue(DrawAttr.PAINT_TYPE, DrawAttr.PAINT_FILL); } else if (fill.equals("none")) { ret.setValue(DrawAttr.PAINT_TYPE, DrawAttr.PAINT_STROKE); } else { ret.setValue(DrawAttr.PAINT_TYPE, DrawAttr.PAINT_STROKE_FILL); } } attrs = ret.getAttributes(); // since changing paintType could change it if (attrs.contains(DrawAttr.STROKE_WIDTH) && elt.hasAttribute("stroke-width")) { Integer width = Integer.valueOf(elt.getAttribute("stroke-width")); ret.setValue(DrawAttr.STROKE_WIDTH, width); } if (attrs.contains(DrawAttr.STROKE_COLOR)) { String color = elt.getAttribute("stroke"); String opacity = elt.getAttribute("stroke-opacity"); if (!color.equals("none")) { ret.setValue(DrawAttr.STROKE_COLOR, getColor(color, opacity)); } } if (attrs.contains(DrawAttr.FILL_COLOR)) { String color = elt.getAttribute("fill"); if (color.equals("")) color = "#000000"; String opacity = elt.getAttribute("fill-opacity"); if (!color.equals("none")) { ret.setValue(DrawAttr.FILL_COLOR, getColor(color, opacity)); } } return ret; }