2010-10-04 3 views
0

У меня есть 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.

Я предполагаю, что эта функция должна включать любой предыдущий перевод объекта, но я не знаю, как это сделать.

Пожалуйста, помогите мне!

Большое спасибо,

Carlos.

ответ

0

Я зафиксировал это путем перерасчета точки поворота:

QPointF поворот = PivotPoint-позы();

Также путем вычисления новой матрицы и mutiply предыдущего * нового.

QTransform tmpTransform = QTransform().translate(pivot.x(), pivot.y()) 
       .rotate(rotation) 
       .scale(xFactor, yFactor) 
       .translate(-pivot.x(), -pivot.y()); 


    tmpPolygon->setTransform(this->transform() * tmpTransform); //Multiplies the previous matrix * the temporary 

Carlos