У меня есть QGraphicsPolygonItem, определенный как:
myShape << QPointF(-50, -50) << QPointF(50, -50)
<< QPointF(50, 50) << QPointF(-50, 50)
<< QPointF(-50, -50);
mypolygon.setPolygon(myShape);
Его исходная матрица является тождественной:
|---|---|---|
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |
|---|---|---|
Когда я расширяю форму, чтобы удвоить ее размер с TransformationPivotVector = (-50, 0) Я получаю следующую матрицу:
Матрица по шкале:
|----|---|---|
| 2 | 0 | 0 |
| 0 | 1 | 0 |
| 50 | 0 | 1 |
|----|---|---|
Это означает, что центр фигуры был переведен на 50 единиц вдоль оси X.
Теперь, учитывая, что фигура в настоящее время имеет матрицу после масштабирования, когда я намереваюсь сжать фигуру с помощью TransformationPivotVector = (50,0), перевод автоматически становится отрицательным, см., Например, когда я сокращаю только 0,01 фигуры:
|-------|---|---|
| 1.99 | 0 | 0 |
| 0 | 1 | 0 |
| -49.5 | 0 | 1 |
|-------|---|---|
Я использую следующую функцию для получения общей матрицы преобразования:
myShape->setTransform(QTransform().translate(transPivotVector.x(), transPivotVector.y()).rotate(rotation).scale(xFactor, yFactor).translate(-transPivotVector.x(),-transPivotVector.y()));
Функция в основном получает окончательную матрицу из: translate * rotate * scale * -translate.
Я полагаю, что эта функция должна включать любой предыдущий перевод объекта, но я не знаю, как.
Пожалуйста, помогите мне !!
Большое спасибо взаранее,
Карлос.