2016-11-16 5 views
1

Я столкнулся с странной проблемой с классом многоугольника от javafx (java 8). Когда я применяю набор, перевод, поворот или масштабирование на экземпляре многоугольника, он правильно перемещает многоугольник вокруг моей формы. Проблема в том, что точки в методе getPoints() остаются неизменными. Я начал теперь создавать свои собственные методы и перемещаться по точкам и перезагружать их, методы делают то, что должны, но правильно ли это?Перевод, поворот, масштабирование и его точки трансляции JavaFX Polygon

Вот пример:

private void translatePoints(double translateX, double translateY) { 
    List<Double> newPoints = new ArrayList<>(); 
    for (int i = 0; i < getPoints().size(); i += 2) { 
     newPoints.add(getPoints().get(i) + translateX); 
     newPoints.add(getPoints().get(i + 1) + translateY); 
    } 
    getPoints().clear(); 
    getPoints().addAll(newPoints); 
} 

Есть ли способ, чтобы получить переведенные, вращать и масштабировать точки после нескольких операций?

Или я должен выполнять их все отдельно?

ответ

2

Посмотрите на подклассов Transform (Affine, Rotate, Scale, Shear и Translate). Они позволяют преобразовывать точки, хранящиеся в массиве double[], используя метод transform2DPoints.

double[] points = new double[] { 
    0, 0, 
    0, 1, 
    1, 1, 
    1, 0 
}; 
Rotate rot = new Rotate(45, 0.5, 0.5); 
Translate t = new Translate(5, 7); 
Scale sc = new Scale(3, 3); 

for (Transform transform : Arrays.asList(rot, t, sc)) { 
    transform.transform2DPoints(points, 0, points, 0, 4); 
} 

System.out.println(Arrays.toString(points)); 

таким образом, вы должны заботиться об определении точки поворота преобразований, когда это имеет отношение по своему усмотрению.

Вы также можете получить результирующее преобразование для узла, используя Node.getLocalToParentTransform.

double[] points = polygon.getPoints().stream().mapToDouble(Number::doubleValue).toArray(); 
polygon.getLocalToParentTransform().transform2DPoints(points, 0, points, 0, points.length/2); 
System.out.println(Arrays.toString(points)); 
+0

thx, это было правильной рекомендацией. работает на меня – user2699706

Смежные вопросы