How could I zoom in JavaFx without quality loss?

Viewed 75

Currently I zoom in and out using a ParallelCamera, but everything stays on the scene resolution when I zoom in. But if I scale the group itself, not the camera then it is extremely slow, sometimes freezes the entire application. What is the correct way of zooming? My group contains about 4,000 Polygons, nothing else.

Here's the current code:

double s = camera.getScaleX();
double d = e.getDeltaY();
double f = 1.2;

double x = e.getSceneX();
double y = e.getSceneY();

if (d < 0) {
    f = 1.1;
} else if (d > 0) {
    f = 0.9;
}

double ps = s;

if (s * f > 1) {
    camera.setScaleX(1);
    camera.setScaleY(1);
    camera.setScaleZ(1);
    camera.setTranslateX(0);
    camera.setTranslateY(0);
    return;
}

camera.setScaleX(s * f);
camera.setScaleY(s * f);
camera.setScaleZ(s * f);

s = camera.getScaleX();

double dx = ps * (1 - f) * x;
double dy = ps * (1 - f) * y;

double width = primaryScene.getWidth();
double height = primaryScene.getHeight();

if (camera.getTranslateX() + s * width + dx > width) {
    camera.setTranslateX(width - s * width);
} else if ((camera.getTranslateX() + dx < 0)) {
    camera.setTranslateX(0);
} else {
    camera.setTranslateX(camera.getTranslateX() + dx);
}

if (camera.getTranslateY() + s * height + dy > height) {
    camera.setTranslateY(height - s * height);
} else if ((camera.getTranslateY() + dy < 0)) {
    camera.setTranslateY(0);
} else {
    camera.setTranslateY(camera.getTranslateY() + dy);
}
0 Answers
Related