2016-03-22 7 views
0

Ich habe ein Polygon:Qt 5.5, wie Polygon um Position drehen

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 ist vom Typ QPoint und definiert den Punkt drehen. intNeedleHalfWidth ist eine Ganzzahl und hat den Wert 4. intRadius ist eine Ganzzahl und definiert die Länge der Nadel.

Ich möchte das Polygon um den 2. Index des Polygons drehen, aber wie?

(Edit) ... Beim Versuch Antwort vorgeschlagen von Anton Savin, vor und Transformation:

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

Nach der Durchführung:

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

plyNeedle wird dann an den QPainter hinzugefügt:

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

Es ist nichts gezeigt, zur Untersuchung von plyNeedle enthält:

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

Antwort

0

Vielen Dank an "Anton Savin", die auf dem richtigen Weg hat mich nach einiger Spiel um die eigentliche Lösung war:

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); 

Das funktioniert jetzt perfekt.

enter image description here

2

Etwas wie folgt aus:

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

nicht sicher, was passiert ist, aber die Nadel vollständig verschwunden, bei der Inspektion mit Debugger kann ich die X-Koordinaten sieht massiv negativ sind ... Ich werde den Original-Beitrag bearbeiten, um die Ergebnisse aufzunehmen. – SPlatten