mxCellState gatewayState = graph.getView().getState(gatewayVertex); mxPoint northPoint = new mxPoint(gatewayState.getX() + (gatewayState.getWidth()) / 2, gatewayState.getY()); mxPoint southPoint = new mxPoint(gatewayState.getX() + (gatewayState.getWidth()) / 2, gatewayState.getY() + gatewayState.getHeight()); mxPoint eastPoint = new mxPoint(gatewayState.getX() + gatewayState.getWidth(), gatewayState.getY() + (gatewayState.getHeight()) / 2); mxPoint westPoint = new mxPoint(gatewayState.getX(), gatewayState.getY() + (gatewayState.getHeight()) / 2); startPoint.setX(closestPoint.getX()); startPoint.setY(closestPoint.getY()); nextPoint.setY(closestPoint.getY());
/** * Rotates the given point by the given cos and sin. */ public static mxPoint getRotatedPoint(mxPoint pt, double cos, double sin, mxPoint c) { double x = pt.getX() - c.getX(); double y = pt.getY() - c.getY(); double x1 = x * cos - y * sin; double y1 = y * cos + x * sin; return new mxPoint(x1 + c.getX(), y1 + c.getY()); }
Line2D line = new Line2D.Double(p0.getPoint(), pe.getPoint()); double minDist = line.ptSegDistSq(x, y); pe = edgeState.getAbsolutePoint(i); line = new Line2D.Double(p0.getPoint(), pe.getPoint()); double dist = line.ptSegDistSq(x, y); pe = edgeState.getAbsolutePoint(index + 1); double x2 = p0.getX(); double y2 = p0.getY(); double x1 = pe.getX(); double y1 = pe.getY(); double yDistance = Line2D.ptLineDist(p0.getX(), p0.getY(), pe.getX(), pe.getY(), x, y); int direction = Line2D.relativeCCW(p0.getX(), p0.getY(), pe.getX(), pe.getY(), x, y); return new mxPoint( Math.round(((totalLength / 2 - length - projlen) / totalLength) * -2), Math.round(yDistance / scale)); return new mxPoint();
/** * Sets the scale and translation. Fires a "scaleAndTranslate" event after * calling revalidate. Revalidate is only called if isEventsEnabled. * * @param scale * Decimal value that specifies the new scale (1 is 100%). * @param dx * X-coordinate of the translation. * @param dy * Y-coordinate of the translation. */ public void scaleAndTranslate(double scale, double dx, double dy) { double previousScale = this.scale; Object previousTranslate = translate.clone(); if (scale != this.scale || dx != translate.getX() || dy != translate.getY()) { this.scale = scale; translate = new mxPoint(dx, dy); if (isEventsEnabled()) { revalidate(); } } fireEvent(new mxEventObject(mxEvent.SCALE_AND_TRANSLATE, "scale", scale, "previousScale", previousScale, "translate", translate, "previousTranslate", previousTranslate)); }
protected void handleBoundaryEvents() { for (BoundaryEvent boundaryEvent : boundaryEvents) { mxGeometry geometry = new mxGeometry(0.8, 1.0, eventSize, eventSize); geometry.setOffset(new mxPoint(-(eventSize / 2), -(eventSize / 2))); geometry.setRelative(true); mxCell boundaryPort = new mxCell(null, geometry, "shape=ellipse;perimter=ellipsePerimeter"); boundaryPort.setId("boundary-event-" + boundaryEvent.getId()); boundaryPort.setVertex(true); Object portParent = null; if (boundaryEvent.getAttachedToRefId() != null) { portParent = generatedVertices.get(boundaryEvent.getAttachedToRefId()); } else if (boundaryEvent.getAttachedToRef() != null) { portParent = generatedVertices.get(boundaryEvent.getAttachedToRef().getId()); } else { throw new RuntimeException("Could not generate DI: boundaryEvent '" + boundaryEvent.getId() + "' has no attachedToRef"); } graph.addCell(boundaryPort, portParent); generatedVertices.put(boundaryEvent.getId(), boundaryPort); } }
/** * Sets the current translation and invalidates the view. Fires a property * change event for "translate" after calling revalidate. Revalidate is only * called if isEventsEnabled. * * @param value * New translation to be used. */ public void setTranslate(mxPoint value) { Object previousTranslate = translate.clone(); if (value != null && (value.getX() != translate.getX() || value.getY() != translate .getY())) { translate = value; if (isEventsEnabled()) { revalidate(); } } fireEvent(new mxEventObject(mxEvent.TRANSLATE, "translate", translate, "previousTranslate", previousTranslate)); }
/** * */ protected Point[] createPoints(mxCellState s) { Point[] pts = new Point[s.getAbsolutePointCount()]; for (int i = 0; i < pts.length; i++) { pts[i] = s.getAbsolutePoint(i).getPoint(); } return pts; }
/** * Rotates the given point by the given cos and sin. */ public static mxPoint getRotatedPoint(mxPoint pt, double cos, double sin, mxPoint c) { double x = pt.getX() - c.getX(); double y = pt.getY() - c.getY(); double x1 = x * cos - y * sin; double y1 = y * cos + x * sin; return new mxPoint(x1 + c.getX(), y1 + c.getY()); }
protected List<mxPoint> optimizeEdgePoints(List<mxPoint> unoptimizedPointsList) { List<mxPoint> optimizedPointsList = new ArrayList<mxPoint>(); for (int i = 0; i < unoptimizedPointsList.size(); i++) { boolean keepPoint = true; mxPoint currentPoint = unoptimizedPointsList.get(i); // When three points are on the same x-axis with same y value, the // middle point can be removed if (i > 0 && i != unoptimizedPointsList.size() - 1) { mxPoint previousPoint = unoptimizedPointsList.get(i - 1); mxPoint nextPoint = unoptimizedPointsList.get(i + 1); if (currentPoint.getX() >= previousPoint.getX() && currentPoint.getX() <= nextPoint.getX() && currentPoint.getY() == previousPoint.getY() && currentPoint.getY() == nextPoint.getY()) { keepPoint = false; } else if (currentPoint.getY() >= previousPoint.getY() && currentPoint.getY() <= nextPoint.getY() && currentPoint.getX() == previousPoint.getX() && currentPoint.getX() == nextPoint.getX()) { keepPoint = false; } } if (keepPoint) { optimizedPointsList.add(currentPoint); } } return optimizedPointsList; }
double sin = Math.sin(rad); mxPoint cx = new mxPoint(rect.getX() + rect.getWidth() / 2, rect.getY() + rect.getHeight() / 2); mxPoint p1 = new mxPoint(rect.getX(), rect.getY()); mxPoint p2 = new mxPoint(rect.getX() + rect.getWidth(), rect.getY()); mxPoint p3 = new mxPoint(p2.getX(), rect.getY() + rect.getHeight()); mxPoint p4 = new mxPoint(rect.getX(), p3.getY()); p4 = getRotatedPoint(p4, cos, sin, cx); Rectangle tmp = new Rectangle((int) p1.getX(), (int) p1.getY(), 0, 0); tmp.add(p2.getPoint()); tmp.add(p3.getPoint()); tmp.add(p4.getPoint());
/** * Sets the scale and translation. Fires a "scaleAndTranslate" event after * calling revalidate. Revalidate is only called if isEventsEnabled. * * @param scale * Decimal value that specifies the new scale (1 is 100%). * @param dx * X-coordinate of the translation. * @param dy * Y-coordinate of the translation. */ public void scaleAndTranslate(double scale, double dx, double dy) { double previousScale = this.scale; Object previousTranslate = translate.clone(); if (scale != this.scale || dx != translate.getX() || dy != translate.getY()) { this.scale = scale; translate = new mxPoint(dx, dy); if (isEventsEnabled()) { revalidate(); } } fireEvent(new mxEventObject(mxEvent.SCALE_AND_TRANSLATE, "scale", scale, "previousScale", previousScale, "translate", translate, "previousTranslate", previousTranslate)); }
/** * Sets the current translate. */ public void setTranslate(double dx, double dy) { translate = new mxPoint(dx, dy); }
/** * Sets the current translation and invalidates the view. Fires a property * change event for "translate" after calling revalidate. Revalidate is only * called if isEventsEnabled. * * @param value * New translation to be used. */ public void setTranslate(mxPoint value) { Object previousTranslate = translate.clone(); if (value != null && (value.getX() != translate.getX() || value.getY() != translate .getY())) { translate = value; if (isEventsEnabled()) { revalidate(); } } fireEvent(new mxEventObject(mxEvent.TRANSLATE, "translate", translate, "previousTranslate", previousTranslate)); }