From bd611bf33305f89d83ab60d44e599def27be80a8 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Mon, 27 May 2019 14:54:44 +0300 Subject: [PATCH] Refactor class VPlaceLabelItem. Store more info about a placelabel. --HG-- branch : develop --- src/libs/vgeometry/vgeometrydef.h | 5 +++++ src/libs/vgeometry/vplacelabelitem.cpp | 21 +++++++++++++++++---- src/libs/vgeometry/vplacelabelitem.h | 3 +++ src/libs/vlayout/vlayoutpiece.cpp | 2 ++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/libs/vgeometry/vgeometrydef.h b/src/libs/vgeometry/vgeometrydef.h index 2132d4838..a63c20fc9 100644 --- a/src/libs/vgeometry/vgeometrydef.h +++ b/src/libs/vgeometry/vgeometrydef.h @@ -31,6 +31,9 @@ #include #include +#include + +#include "../ifc/ifcdef.h" enum class GOType : char { @@ -74,6 +77,8 @@ struct VLayoutPlaceLabel QPointF center; PlaceLabelType type; PlaceLabelImg shape; + QTransform rotationMatrix{}; + QRectF box{}; }; #endif // VGEOMETRYDEF_H diff --git a/src/libs/vgeometry/vplacelabelitem.cpp b/src/libs/vgeometry/vplacelabelitem.cpp index 3ff9c25d1..ba58a5063 100644 --- a/src/libs/vgeometry/vplacelabelitem.cpp +++ b/src/libs/vgeometry/vplacelabelitem.cpp @@ -197,6 +197,22 @@ void VPlaceLabelItem::SetLabelType(PlaceLabelType type) d->type = type; } +//--------------------------------------------------------------------------------------------------------------------- +QTransform VPlaceLabelItem::RotationMatrix() const +{ + QTransform t; + t.translate(x(), y()); + t.rotate(-d->aValue-d->correctionAngle); + t.translate(-x(), -y()); + return t; +} + +//--------------------------------------------------------------------------------------------------------------------- +QRectF VPlaceLabelItem::Box() const +{ + return QRectF(0, 0, d->wValue, d->hValue); +} + //--------------------------------------------------------------------------------------------------------------------- VPlaceLabelItem &VPlaceLabelItem::operator=(const VPlaceLabelItem &item) { @@ -212,10 +228,7 @@ VPlaceLabelItem &VPlaceLabelItem::operator=(const VPlaceLabelItem &item) //--------------------------------------------------------------------------------------------------------------------- PlaceLabelImg VPlaceLabelItem::LabelShape() const { - QTransform t; - t.translate(x(), y()); - t.rotate(-d->aValue-d->correctionAngle); - t.translate(-x(), -y()); + QTransform t = RotationMatrix(); auto SegmentShape = [t, this]() { diff --git a/src/libs/vgeometry/vplacelabelitem.h b/src/libs/vgeometry/vplacelabelitem.h index 2a6a50adb..11d7c30a3 100644 --- a/src/libs/vgeometry/vplacelabelitem.h +++ b/src/libs/vgeometry/vplacelabelitem.h @@ -83,6 +83,9 @@ public: PlaceLabelType GetLabelType() const; void SetLabelType(PlaceLabelType type); + QTransform RotationMatrix() const; + QRectF Box() const; + PlaceLabelImg LabelShape() const; QPainterPath LabelShapePath() const; diff --git a/src/libs/vlayout/vlayoutpiece.cpp b/src/libs/vlayout/vlayoutpiece.cpp index 2c4c2ad23..a4cbb42a9 100644 --- a/src/libs/vlayout/vlayoutpiece.cpp +++ b/src/libs/vlayout/vlayoutpiece.cpp @@ -218,6 +218,8 @@ QVector ConvertPlaceLabels(const VPiece &piece, const VContai { VLayoutPlaceLabel layoutLabel; layoutLabel.shape = label->LabelShape(); + layoutLabel.rotationMatrix = label->RotationMatrix(); + layoutLabel.box = label->Box(); layoutLabel.center = label->toQPointF(); layoutLabel.type = label->GetLabelType(); labels.append(layoutLabel);