public static boolean areEqual(SVGRect rect1, SVGRect rect2) { if (rect1 == rect2) { return true; } else if ( rect1 == null || rect2 == null) { return false; } else { return rect1.getX() == rect2.getX() && rect1.getY() == rect2.getY() && rect1.getWidth() == rect2.getWidth() && rect1.getHeight() == rect2.getHeight(); } }
/** public static SVGRect getMaxBBox(SVGLocatableElement elem) { SVGRect bBox = elem.getBBox(); SceneManager.log(Level.SEVERE, "Null BBox for element:" + elem); //NOI18N ModelNode child = ((ModelNode) elem).getFirstChildNode(); while (child != null) { if (child instanceof SVGLocatableElement) { SceneManager.log(Level.SEVERE, " element:" + child); //NOI18N bBox = calculateMaxBBox(bBox, getMaxBBox((SVGLocatableElement) child)); child = child.getNextSiblingNode(); } } return bBox; } */ private static SVGRect calculateMaxBBox(SVGRect bBox, SVGRect tmpBBox) { if (bBox == null) { bBox = tmpBBox; } else if (tmpBBox != null) { float x1 = Math.min(bBox.getX(), tmpBBox.getX()); float y1 = Math.min(bBox.getY(), tmpBBox.getY()); float x2 = Math.max(bBox.getWidth() + bBox.getX(), tmpBBox.getWidth() + tmpBBox.getX()); float y2 = Math.max(bBox.getHeight() + bBox.getY(), tmpBBox.getHeight() + tmpBBox.getY()); bBox.setX(x1); bBox.setY(y1); bBox.setWidth(x2 - x1); bBox.setHeight(y2 - y1); } return bBox; }
private Map<DocumentElement, String[]> changeViewBox(boolean isLandscape) { SVGSVGElement svg = getSceneManager().getPerseusController().getSVGRootElement(); SVGRect rect = svg.getRectTrait(SVGConstants.SVG_VIEW_BOX_ATTRIBUTE); if (getScreenManager().isLandscapeMode() != isLandscape){ // exchange width and height float w = rect.getWidth(); float h = rect.getHeight(); rect.setHeight(w); rect.setWidth(h); DocumentElement svgRoot = getModel().getSVGRoot(getModel().getModel()); String[] attributes = new String[]{ SVGConstants.SVG_VIEW_BOX_ATTRIBUTE, rect.getX() + " " + rect.getY() + " " + rect.getWidth() + " " + rect.getHeight(),//NOI18N SVGConstants.SVG_WIDTH_ATTRIBUTE, String.valueOf(rect.getWidth()), SVGConstants.SVG_HEIGHT_ATTRIBUTE, String.valueOf(rect.getHeight()) }; Map<DocumentElement, String[]> textChanges = new HashMap<DocumentElement, String[]>(); textChanges.put(svgRoot, attributes); return textChanges; } return null; }
/** * <b>DOM</b>: Implements {@link SVGRect#getWidth()}. */ public float getWidth() { if (hasAnimVal) { return super.getWidth(); } return getBaseVal().getWidth(); }
/** * <b>DOM</b>: Implements {@link SVGRect#getX()}. */ public float getX() { if (hasAnimVal) { return super.getX(); } return getBaseVal().getX(); }
/** * <b>DOM</b>: Implements {@link SVGRect#getY()}. */ public float getY() { if (hasAnimVal) { return super.getY(); } return getBaseVal().getY(); }
/** * <b>DOM</b>: Implements {@link SVGRect#getHeight()}. */ public float getHeight() { if (hasAnimVal) { return super.getHeight(); } return getBaseVal().getHeight(); }
private Map<String, String[]> rotateElements() { SceneManager m_sceneMgr = getSceneManager(); int angle = rotateRight ? 90 : -90; SVGSVGElement svgRoot = m_sceneMgr.getPerseusController().getSVGRootElement(); SVGRect viewBoxRect = svgRoot.getRectTrait(SVGConstants.SVG_VIEW_BOX_ATTRIBUTE); float translateH = viewBoxRect != null ? viewBoxRect.getHeight() : 0f; float translateW = viewBoxRect != null ? viewBoxRect.getWidth() : 0f; float[] translate = rotateRight ? new float[]{ translateH, 0f} : new float[]{ 0f, translateW}; SVGElement elem = (SVGElement) svgRoot.getFirstElementChild(); Rectangle bBox = new Rectangle(); Map<String, String[]> textChanges = new HashMap<String, String[]>(); while (elem != null) { // process rotateElement(elem, angle, translate, textChanges, bBox); // get next elem = (SVGElement) elem.getNextElementSibling(); } //getModel().setAttributes(textChanges); m_sceneMgr.getScreenManager().repaint(bBox, SVGObjectOutline.SELECTOR_OVERLAP); m_sceneMgr.getScreenManager().refresh(); return textChanges; }
/** * <b>DOM</b>: Implements {@link SVGRect#getWidth()}. */ public float getWidth() { if (hasAnimVal) { return super.getWidth(); } return getBaseVal().getWidth(); }
/** * <b>DOM</b>: Implements {@link SVGRect#getX()}. */ public float getX() { if (hasAnimVal) { return super.getX(); } return getBaseVal().getX(); }
/** * <b>DOM</b>: Implements {@link SVGRect#getY()}. */ public float getY() { if (hasAnimVal) { return super.getY(); } return getBaseVal().getY(); }
/** * <b>DOM</b>: Implements {@link SVGRect#getHeight()}. */ public float getHeight() { if (hasAnimVal) { return super.getHeight(); } return getBaseVal().getHeight(); }
/** * <b>DOM</b>: Implements {@link SVGRect#getWidth()}. */ public float getWidth() { if (hasAnimVal) { return super.getWidth(); } return getBaseVal().getWidth(); }
/** * <b>DOM</b>: Implements {@link SVGRect#getX()}. */ public float getX() { if (hasAnimVal) { return super.getX(); } return getBaseVal().getX(); }
/** * <b>DOM</b>: Implements {@link SVGRect#getY()}. */ public float getY() { if (hasAnimVal) { return super.getY(); } return getBaseVal().getY(); }
/** * <b>DOM</b>: Implements {@link SVGRect#getHeight()}. */ public float getHeight() { if (hasAnimVal) { return super.getHeight(); } return getBaseVal().getHeight(); }
public static float [][] transformRectangle( SVGRect rect, Transform txf, float [][] coords) { float x = rect.getX(), y = rect.getY(), w = rect.getWidth(), h = rect.getHeight(); float [][] points = new float[][] { {x, y}, {x+w, y}, {x+w, y+h}, {x, y+h} }; assert coords.length == 4; for (int i = 0; i < 4; i++) { txf.transformPoint(points[i], coords[i]); } return coords; } }