element-editor: fix rotation, add mirror, add flip for graphical primitives

Now that the problem with the translations of keyboard shortcuts has been resolved and rotation using the space bar works reliably in principle, I took a closer look at the rotation function itself in the element editor.

I noticed, for example, that arcs can be rotated at an angle of 15°. This doesn't really make sense, as the “arc” part doesn't have the “rotation” property. There is only width and height.
And somehow rotating arcs didn't work well: start- and span-angles weren't adjusted.

Lines and polygons can be rotated in 15° increments, which doesn't make much sense, if other parts that can only be rotated in 90° increments are selected at the same time.

To make a long story short:
I reworked the rotation functions of the graphical parts so that now all parts are rotated in 90° steps around the origin! This means that it is now possible to mark several parts and rotate them around the same point at the same time!

In addition, the functions for mirroring graphic parts at y-axis (shortcut "M") and flipping at x-axis (shortcut "F") have been implemented.

I have saved the text elements for later!
(or someone else)
This commit is contained in:
plc-user
2025-02-14 20:31:03 +01:00
parent fc286cca22
commit bd3b39cea3
74 changed files with 4932 additions and 4558 deletions

View File

@@ -27,7 +27,7 @@ class QPropertyUndoCommand;
This class represents an ellipse primitive which may be used to compose the
drawing of an electrical element within the element editor.
*/
class PartEllipse : public AbstractPartEllipse
class PartEllipse : public AbstractPartEllipse
{
Q_OBJECT
@@ -39,6 +39,9 @@ class PartEllipse : public AbstractPartEllipse
private:
PartEllipse(const PartEllipse &);
signals:
void rotationChanged();
// methods
public:
enum { Type = UserType + 1103 };
@@ -57,6 +60,10 @@ class PartEllipse : public AbstractPartEllipse
QPainterPath shape() const override;
QPainterPath shadowShape() const override;
void setRect(const QRectF &rect) override {AbstractPartEllipse::setRect(rect); adjustHandlerPos();}
void setRotation(qreal angle);
qreal rotation() const;
void flip();
void mirror();
void addHandler() override;
void removeHandler() override;
@@ -77,5 +84,6 @@ class PartEllipse : public AbstractPartEllipse
QPropertyUndoCommand *m_undo_command;
int m_resize_mode = 1,
m_vector_index = -1;
qreal m_rot = 0;
};
#endif