Scale at pivot point in an already scaled node

后端 未结 4 1919
北荒
北荒 2020-12-05 01:19

I\'m trying to create an application with a zoomable/pannable canvas.

Features:

  • zoom in/out with mouse wheel at pivot points
4条回答
  •  一个人的身影
    2020-12-05 01:43

    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);
    
            }
    

提交回复
热议问题