package org.freeplane.view.swing.map.cloud; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.QuadCurve2D; import org.freeplane.features.cloud.CloudModel; import org.freeplane.view.swing.map.NodeView; public class ArcCloudView extends CloudView { @Override protected double calcDistanceBetweenPoints() { final double distanceBetweenPoints; if (getIterativeLevel() > 4) { distanceBetweenPoints = 140 * getZoom(); /* flat */ } else{ distanceBetweenPoints = 6 * getDistanceToConvexHull(); } return distanceBetweenPoints; } ArcCloudView(CloudModel cloudModel, NodeView source) { super(cloudModel, source); } protected void paintDecoration(final Graphics2D g, final Graphics2D gstroke, final double x0, final double y0, final double x1, final double y1, double dx, double dy, double dxn, double dyn) { double xctrl; double yctrl; final double middleDistanceToConvexHull = getDistanceToConvexHull(); final double distanceToConvexHull = middleDistanceToConvexHull * 2.2 * random(0.7); xctrl = x0 + .5f * dx - distanceToConvexHull * dyn; yctrl = y0 + .5f * dy + distanceToConvexHull * dxn; final Shape shape = new QuadCurve2D.Double(x0, y0, xctrl, yctrl, x1, y1); g.fill(shape); gstroke.draw(shape); } }