package com.mxgraph.io.vdx; import com.mxgraph.util.mxPoint; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * This class is a wrapper for a shape element contained in a Master element.<br/> * If a property is not found in the shape Element but it may be found in a stylesheet * the property is searched in such stylesheet. */ public class mxMasterShape extends mxDelegateShape { public mxMasterShape(Element s) { super(s); } /** * Returns the points of a vertex shape. * @param parentHeight Height of the parent cell of the vertex. * @return array of mxPoint whith the vertex's points */ public mxPoint[] getVertexPoints(double parentHeight) { NodeList childrens = shape.getChildNodes(); mxPoint origin = this.getOriginPoint(parentHeight); mxPoint dimentions = this.getDimentions(); Element geom = mxVdxUtils.nodeListTag(childrens, mxVdxConstants.GEOM); NodeList lineToList = geom.getElementsByTagName(mxVdxConstants.LINE_TO); int length = lineToList.getLength(); mxPoint[] points = new mxPoint[length]; for (int i = 0; i < length; i++) { Element lineTo = (Element) lineToList.item(i); points[i] = getLineToXY(lineTo); points[i].setX(points[i].getX() + origin.getX()); points[i] .setY(points[i].getY() + origin.getY() + dimentions.getY()); } return points; } /** * Return the co-ordinates of the top left corner of the Shape. * @param parentHeight Height of the parent cell of the vertex. * @return mxPoint that represents the co-ordinates. */ public mxPoint getOriginPoint(double parentHeight) { double px = 0; double py = 0; double lpy = 0; double lpx = 0; double h = 0; //Defines PinX if (this.hasPinX()) { px = this.getPinX(); } //Defines PinY if (this.hasPinY()) { py = this.getPinY(); } //Defines LocPinX if (this.hasLocPinX()) { lpx = this.getLocPinX(); } //Defines LocPinY if (this.hasLocPinY()) { lpy = this.getLocPinY(); } //Defines Height if (this.hasHeight()) { h = this.getHeight(); } double x = (px) - (lpx); double y = parentHeight - ((py) + (h - lpy)); return new mxPoint(x, y); } /** * Return the width and height of the Shape expressed like a mxPoint. * x = width * y = height * @return mxPoint that represents the dimentions of the shape */ public mxPoint getDimentions() { double w = 0; double h = 0; //Defines Width if (this.hasWidth()) { w = this.getWidth(); } //Defines Height if (this.hasHeight()) { w = this.getHeight(); } return new mxPoint(w, h); } }