I\'m trying to create an application with a zoomable/pannable canvas.
Features:
With this approach you can zoom in position with transformed, rotated nodes.
public static void zoom(Node node, double factor, ScrollEvent event) {
double oldScale = node.getScaleX();
double scale = oldScale*factor;
if (scale < MIN_ZOOM) scale = MIN_ZOOM;
if (scale > MAX_ZOOM) scale = MAX_ZOOM;
double x = event.getX();
double y = event.getY();
Point2D p0 = node.localToScene(x, y);
node.setScaleX(scale);
node.setScaleY(scale);
Point2D p1 = node.localToScene(x, y);
double deltaX = p1.getX() - p0.getX();
double deltaY = p1.getY() - p0.getY();
node.setTranslateX(node.getTranslateX() - deltaX);
node.setTranslateY(node.getTranslateY() - deltaY);
}