Я изо всех сил пытаюсь найти способ выбрать, а затем повернуть или изменить размеры геометрических фигур, нарисованных на холсте (используя функцию GraphicsContext), эта функция должна быть частью приложения, такого как MS Paint. Для рисования фигур я использую многоуровневую систему Canvas, чтобы разрешить функцию Undo / Redo. Моя первоначальная идея заключалась в том, чтобы использовать функцию моментального снимка для выполнения этой операции, но я не совсем уверен, как реализовать ее и является ли наилучшим способом сделать это.
UPDATE:
Я сейчас работаю над этим кодом
public class Sandbox extends Application {
@Override
public void start(Stage primaryStage) {
AnchorPane pane = new AnchorPane();
Scene scene = new Scene(pane, 600, 400);
Canvas canvas = new Canvas(600, 400);
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.strokeOval(20, 20, 100, 150);
gc.setStroke(Color.BLACK);
pane.getChildren().add(canvas);
primaryStage.setTitle("Prova");
primaryStage.setScene(scene);
primaryStage.show();
ImageView imageView = new ImageView();
canvas.setOnMousePressed(event -> {
int x1 = (int) event.getX();
int y1 = (int) event.getX();
canvas.setOnMouseReleased(e -> {
int x2 = (int) e.getX();
int y2 = (int) e.getY();
Rectangle2D rect = new Rectangle2D(x1, y1, x2, y2);
SnapshotParameters params = new SnapshotParameters();
params.setViewport(rect);
params.setTransform(new Scale(0.5, 0.5));
WritableImage write = new WritableImage(x1 + x2, y1 + y2);
Image image = canvas.snapshot(params, write);
imageView.setImage(image);
gc.clearRect(x1, y1, x2, y2);
gc.drawImage(image, x1, y1);
});
});
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}}
Из этого в качестве начальной точки есть способ:
- Сделать выбор без немедленного выполнения преобразования
- Способ выделения выделения