我缩放后如何获得圆形的半径[JavaFX]

时间:2018-01-16 17:09:32

标签: javafx-8 shape geometry

在我缩放后,我试图获得圆形的半径。我不知道该怎么做。我正在开发一个软件(带有javaFX库),让用户将Shapes(Circle,Rectangle,Squares,...)添加到Panel中,只需简单地修改"他们,保存图纸并加载它。我通过在用户添加的节点中循环来管理保存/加载的东西(有一个按钮来创建Circle,Rectangle,......并将其添加到Panel中),获取我需要加载的属性它们(centerX,centerY,scaleX,scaleY,...),当按钮"保存"按下,将它们保存在txt文件中。 (stil正在加载,但我的想法是读取前面的txt文件并循环它以在相同的位置,比例,旋转的面板上重新创建Shapes。)

这里我写的代码是创建圆圈的代码部分:

 public Circle createCircle(double x, double y, double r, Color color) { 

        Circle circle = new Circle(x, y, r, color);
        circle.setCursor(Cursor.HAND);

        circle.setOnMousePressed((t) -> {
          orgSceneX = t.getSceneX();
          orgSceneY = t.getSceneY();

          Circle c = (Circle) (t.getSource());
          c.toFront();

        });
        circle.setOnMouseDragged((t) -> {
          double offsetX = t.getSceneX() - orgSceneX;
          double offsetY = t.getSceneY() - orgSceneY;

          Circle c = (Circle) (t.getSource());

          c.setCenterX(c.getCenterX() + offsetX);
          c.setCenterY(c.getCenterY() + offsetY);

          orgSceneX = t.getSceneX();
          orgSceneY = t.getSceneY();
        });

        return circle;
      } 

这是我用来扩展它的代码:

public void addMouseScrolling(Node node) {
   node.setOnScroll((ScrollEvent event) -> {
       // Adjust the zoom factor as per your requirement
       double zoomFactor = 1.05;
       double deltaY = event.getDeltaY();
       if (deltaY < 0){
           zoomFactor = 2.0 - zoomFactor;
       }
       node.setScaleX(node.getScaleX() * zoomFactor);
       node.setScaleY(node.getScaleY() * zoomFactor);
   });

}

这是保存按钮的代码:

Button btn2 = new Button("Save");
  btn2.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent event) {

             int i=0;
             for (Node node: root.getChildren()) i++;
             String stringa_salvataggio[] = new String[i];
             String stringa="";
             i=0;
             String scal_X_s, scal_Y_s, Lyt_X_s, Lyt_Y_s, width_s, height_s;
            for (Node node: root.getChildren()){
                String stringa_nodo = node.toString();  
                Double scal_X = node.getScaleX(); 
                scal_X_s = Double.toString(scal_X);
                Double scal_Y = node.getScaleY();
                scal_Y_s = Double.toString(scal_X);
                Double Lyt_X = node.getLayoutX(); 
                Lyt_X_s = Double.toString(scal_X);
                Double Lyt_Y = node.getLayoutY(); 
                Lyt_Y_s = Double.toString(scal_X);
                Double width = node.getLayoutBounds().getWidth();
                width_s = Double.toString(scal_X);
                Double height = node.getLayoutBounds().getHeight();
                height_s = Double.toString(scal_X);

                stringa = stringa + scal_X_s + scal_Y_s + "\n";
                stringa_salvataggio[i] = stringa; 
                System.out.println("-------");
                i++;
                System.out.println("Nodo " + i + ":");
                System.out.println("scalX:" + scal_X);
                System.out.println("scalY:" + scal_Y);
                System.out.println("LayoutX:" + Lyt_X);
                System.out.println("LayoutY:" + Lyt_Y);
                System.out.println("Width:" + width);
                System.out.println("Height:" + height);
                System.out.println(stringa_nodo);
                //save on .txt

            }
            System.out.println(stringa_salvataggio);
        }
});

正如我之前所说,我不知道如何获得Circle的半径以在加载时重新创建它。矩形和正方形不是问题,我可以把我需要的所有信息都拿走。 提前谢谢。

0 个答案:

没有答案