2016-03-22 12 views
0

У меня есть полигон:Qt 5.5, как повернуть полигон вокруг позиции

QPolygon plyNeedle; 
    plyNeedle << QPoint(ptOrigin.x() - intNeedleHalfWidth, ptOrigin.y()) 
       << QPoint(ptOrigin.x(), ptOrigin.y() + intNeedleHalfWidth) 
       << QPoint(ptOrigin.x() + intRadius - intNeedleHalfWidth, ptOrigin.y()) 
       << QPoint(ptOrigin.x(), ptOrigin.y() - intNeedleHalfWidth); 

ptOrigin имеет тип QPoint и определяет точку поворота. intNeedleHalfWidth является целым числом и имеет значение 4. intRadius является целым числом и определяет длину иглы.

Я хочу повернуть многоугольник вокруг второго указателя многоугольника, но как?

(Edit) ... На пытающегося Ответ предложил Антон Савин, перед тем и трансформации:

ptOrigin (40, 250) 
    plyNeedle (36,250),(40,254),(287,250),(40,246) 

После выполнения:

plyNeedle = QTransform().translate(-ptOrigin.x(), -ptOrigin.y()) 
          .rotate(45) 
          .translate(ptOrigin.x(), ptOrigin.y()) 
          .map(plyNeedle); 

plyNeedle затем добавляют к QPainter:

QBrush brshArrow; 
    brshArrow.setColor(mcpszARGBneedle); 
    brshArrow.setStyle(Qt::SolidPattern); 
    objOffscrPainter.setPen(mcpszARGBneedle); 
    QPainterPath path; 
    path.addPolygon(plyNeedle); 
    objOffscrPainter.drawPolygon(plyNeedle); 
    objOffscrPainter.fillPath(path, brshArrow); 

Ничего не показано, при расследовании plyNeedle содержит:

plyNeedle (-340,157),(-340,163),(-162,335),(-334,157) 

ответ

0

Спасибо "Антон Савин", который получил меня на правильном пути, после того, как какой-то игры вокруг фактического решения было:

plyNeedle << QPoint(ptOrigin.x() - intNeedleHalfWidth, ptOrigin.y()) 
       << QPoint(ptOrigin.x(), ptOrigin.y() + intNeedleHalfWidth) 
       << QPoint(ptOrigin.x() + intRadius - intNeedleHalfWidth, ptOrigin.y()) 
       << QPoint(ptOrigin.x(), ptOrigin.y() - intNeedleHalfWidth); 
    plyNeedle = QTransform().translate(ptOrigin.x(), ptOrigin.y()) 
          .rotate(-mfltElevation) 
          .translate(-ptOrigin.x(), -ptOrigin.y()) 
          .map(plyNeedle); 

Теперь это работает отлично.

enter image description here

2

Что-то вроде этого:

QPoint origin = ...; 
plyNeedle = QTransform() 
    .translate(-origin.x, -origin.y) 
    .rotate(angle) 
    .translate(origin.x, origin.y) 
    .map(plyNeedle); 
+0

Не уверен, что случилось, но игла полностью исчезла, на обследование с отладчиком я могу видеть, X координаты массово отрицательный ... Я буду редактировать оригинальный пост, чтобы включить результаты. – SPlatten