Qpainter.rotate () вопрос - qgis - PullRequest
1 голос
/ 09 мая 2009

Я настраиваю QuantumGIS, который использует Qt Qpainter для рисования и рисования ...

Я пытаюсь нарисовать ломаную линию на холсте, который приходит в виде обновления через очереди сообщений ... рисование очень хорошо ... но в полилинии или объектах многоугольника, которые я получаю в качестве обновления, также есть поле угла это должно быть использовано для вращения объекта. Проблема заключается в том, что когда я пытаюсь повернуть линию непосредственно перед тем, как ломаная нарисована qpainter с помощью метода painter.rotate (), линия поворачивается нормально, но положение нарисованной линии меняется ... и она меняется при каждом увеличении сковорода холста Qgis .. Перед установкой painter.rotate () я сохраняю состояние рисовальщика и после рисования снова восстанавливаю его состояние, которое, по моему мнению, аналогично функциям push / popMatrix в OpenGL. Работают ли функции восстановления в Qpainter аналогично функциям push / popMatrix в opengl ??

Вот фрагмент кода:

p->save();
  //p->rotate(45);
  p->scale( 1.0 / rasterScaleFactor, 1.0 / rasterScaleFactor );
  p->drawPolyline( pa );
  p->restore();

Помощь приветствуется. Спасибо.

Ответы [ 2 ]

1 голос
/ 28 мая 2009

Прочтите документацию , и вы увидите, что только QPainter :: save () "Сохраняет текущее состояние рисовальщика". Это не сбрасывает преобразование. Ваша проблема была в том, что исходная матрица преобразования смешалась с вашим собственным масштабом или поворотом. Ваш фрагмент кода слишком минимален, чтобы понять контекст рисования, но я считаю, что вам нужно соответствующим образом сбросить или изменить преобразование перед рисованием полилинии, возможно, используя QPainter :: setTransform () .

Я рекомендую также прочитать раздел Преобразования координат в документации QPainter , а также попробовать связанный с пример .

0 голосов
/ 09 мая 2009

Лучше всего задать этот вопрос в Списке рассылки QGIS

...