Refactoring.

Code style.
This commit is contained in:
Roman Telezhynskyi 2023-07-07 12:16:49 +03:00
parent c39c5b884e
commit 1e2f1f7708
12 changed files with 181 additions and 149 deletions

View file

@ -67,7 +67,7 @@ auto CutEdge(const QLineF &edge) -> QVector<QPointF>
} }
else else
{ {
const int n = qFloor(edge.length()/stickyShift); const int n = qFloor(edge.length() / stickyShift);
if (n <= 0) if (n <= 0)
{ {
@ -77,11 +77,11 @@ auto CutEdge(const QLineF &edge) -> QVector<QPointF>
else else
{ {
points.reserve(n); points.reserve(n);
const qreal nShift = edge.length()/n; const qreal nShift = edge.length() / n;
for (int i = 1; i <= n+1; ++i) for (int i = 1; i <= n + 1; ++i)
{ {
QLineF l1 = edge; QLineF l1 = edge;
l1.setLength(nShift*(i-1)); l1.setLength(nShift * (i - 1));
points.append(l1.p2()); points.append(l1.p2());
} }
} }
@ -99,9 +99,9 @@ auto PrepareStickyPath(const QVector<QPointF> &path) -> QVector<QPointF>
QVector<QPointF> stickyPath; QVector<QPointF> stickyPath;
for (int i=0; i<path.size(); ++i) for (int i = 0; i < path.size(); ++i)
{ {
stickyPath += CutEdge(QLineF(path.at(i), path.at(i < path.size()-1 ? i+1 : 0))); stickyPath += CutEdge(QLineF(path.at(i), path.at(i < path.size() - 1 ? i + 1 : 0)));
} }
return stickyPath; return stickyPath;
@ -128,11 +128,11 @@ auto ClosestDistance(const QVector<QPointF> &path1, const QVector<QPointF> &path
return closestDistance; return closestDistance;
} }
} // namespace } // namespace
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VPPiece::VPPiece(const VLayoutPiece &layoutPiece) VPPiece::VPPiece(const VLayoutPiece &layoutPiece)
: VLayoutPiece(layoutPiece) : VLayoutPiece(layoutPiece)
{ {
ClearTransformations(); ClearTransformations();
@ -375,14 +375,14 @@ auto VPPiece::StickyPosition(qreal &dx, qreal &dy) const -> bool
QVector<QPointF> path; QVector<QPointF> path;
CastTo(GetMappedExternalContourPoints(), path); CastTo(GetMappedExternalContourPoints(), path);
QRectF boundingRect = VLayoutPiece::BoundingRect(path); QRectF boundingRect = VLayoutPiece::BoundingRect(path);
const qreal stickyDistance = pieceGap+minStickyDistance; const qreal stickyDistance = pieceGap + minStickyDistance;
QRectF stickyZone = QRectF(boundingRect.topLeft().x()-stickyDistance, boundingRect.topLeft().y()-stickyDistance, QRectF stickyZone = QRectF(boundingRect.topLeft().x() - stickyDistance, boundingRect.topLeft().y() - stickyDistance,
boundingRect.width()+stickyDistance*2, boundingRect.height()+stickyDistance*2); boundingRect.width() + stickyDistance * 2, boundingRect.height() + stickyDistance * 2);
QVector<QPointF> stickyPath = PrepareStickyPath(path); QVector<QPointF> stickyPath = PrepareStickyPath(path);
QLineF closestDistance; QLineF closestDistance;
for (const auto& piece : allPieces) for (const auto &piece : allPieces)
{ {
if (piece.isNull() || piece->GetUniqueID() == GetUniqueID()) if (piece.isNull() || piece->GetUniqueID() == GetUniqueID())
{ {
@ -394,7 +394,7 @@ auto VPPiece::StickyPosition(qreal &dx, qreal &dy) const -> bool
QRectF pieceBoundingRect = VLayoutPiece::BoundingRect(piecePath); QRectF pieceBoundingRect = VLayoutPiece::BoundingRect(piecePath);
if (stickyZone.intersects(pieceBoundingRect) || pieceBoundingRect.contains(stickyZone) || if (stickyZone.intersects(pieceBoundingRect) || pieceBoundingRect.contains(stickyZone) ||
stickyZone.contains(pieceBoundingRect)) stickyZone.contains(pieceBoundingRect))
{ {
if (not VPPiece::PathsSuperposition(path, piecePath)) if (not VPPiece::PathsSuperposition(path, piecePath))
{ {

View file

@ -28,13 +28,13 @@
#ifndef VPPIECE_H #ifndef VPPIECE_H
#define VPPIECE_H #define VPPIECE_H
#include <QUuid>
#include <QVector>
#include <QPoint> #include <QPoint>
#include <QTransform> #include <QTransform>
#include <QUuid>
#include <QVector>
#include "../vlayout/vlayoutpiece.h"
#include "../layout/layoutdef.h" #include "../layout/layoutdef.h"
#include "../vlayout/vlayoutpiece.h"
#include "vpiecegrainline.h" #include "vpiecegrainline.h"
#if QT_VERSION < QT_VERSION_CHECK(5, 13, 0) #if QT_VERSION < QT_VERSION_CHECK(5, 13, 0)
@ -47,6 +47,7 @@ class VPSheet;
class VPPiece : public VLayoutPiece class VPPiece : public VLayoutPiece
{ {
Q_DECLARE_TR_FUNCTIONS(VPPiece) // NOLINT Q_DECLARE_TR_FUNCTIONS(VPPiece) // NOLINT
public: public:
VPPiece() = default; VPPiece() = default;
explicit VPPiece(const VLayoutPiece &layoutPiece); explicit VPPiece(const VLayoutPiece &layoutPiece);

View file

@ -497,7 +497,7 @@ void MainWindowsNoGUI::ExportData(const QVector<VLayoutPiece> &listDetails)
QString::number(i + 1) + QString::number(i + 1) +
VLayoutExporter::ExportFormatSuffix(m_dialogSaveLayout->Format()); VLayoutExporter::ExportFormatSuffix(m_dialogSaveLayout->Format());
QGraphicsRectItem *paper = auto *paper =
qgraphicsitem_cast<QGraphicsRectItem *>(m_layoutSettings->LayoutPapers().at(i)); qgraphicsitem_cast<QGraphicsRectItem *>(m_layoutSettings->LayoutPapers().at(i));
SCASSERT(paper != nullptr) SCASSERT(paper != nullptr)

View file

@ -104,16 +104,11 @@ QT_WARNING_POP
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto PieceOutline(const VLayoutPiece &detail) -> QVector<VLayoutPoint> auto PieceOutline(const VLayoutPiece &detail) -> QVector<VLayoutPoint>
{ {
QVector<VLayoutPoint> outline;
if (detail.IsSeamAllowance() && not detail.IsSeamAllowanceBuiltIn()) if (detail.IsSeamAllowance() && not detail.IsSeamAllowanceBuiltIn())
{ {
outline = detail.GetMappedSeamAllowancePoints(); return detail.GetMappedSeamAllowancePoints();
} }
else return detail.GetMappedContourPoints();
{
outline = detail.GetMappedContourPoints();
}
return outline;
} }
} // namespace } // namespace

View file

@ -27,33 +27,34 @@
*************************************************************************/ *************************************************************************/
#include "vwatermark.h" #include "vwatermark.h"
#include "../vmisc/projectversion.h"
#include "../ifc/xml/vwatermarkconverter.h" #include "../ifc/xml/vwatermarkconverter.h"
#include "../vmisc/compatibility.h"
#include "../vmisc/projectversion.h"
const QString VWatermark::TagWatermark = QStringLiteral("watermark"); const QString VWatermark::TagWatermark = QStringLiteral("watermark");
const QString VWatermark::TagText = QStringLiteral("text"); const QString VWatermark::TagText = QStringLiteral("text");
const QString VWatermark::TagImage = QStringLiteral("image"); const QString VWatermark::TagImage = QStringLiteral("image");
const QString VWatermark::AttrOpacity = QStringLiteral("opacity"); const QString VWatermark::AttrOpacity = QStringLiteral("opacity");
const QString VWatermark::AttrRotation = QStringLiteral("rotation"); const QString VWatermark::AttrRotation = QStringLiteral("rotation");
const QString VWatermark::AttrFont = QStringLiteral("font"); const QString VWatermark::AttrFont = QStringLiteral("font");
const QString VWatermark::AttrPath = QStringLiteral("path"); const QString VWatermark::AttrPath = QStringLiteral("path");
const QString VWatermark::AttrGrayscale = QStringLiteral("grayscale"); const QString VWatermark::AttrGrayscale = QStringLiteral("grayscale");
const QString VWatermark::AttrShow = QStringLiteral("show"); const QString VWatermark::AttrShow = QStringLiteral("show");
namespace namespace
{ {
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto FileComment() -> QString auto FileComment() -> QString
{ {
return QString("Watermark created with Valentina v%1 (https://smart-pattern.com.ua/).") return QString("Watermark created with Valentina v%1 (https://smart-pattern.com.ua/).").arg(APP_VERSION_STR);
.arg(APP_VERSION_STR);
}
} }
} // namespace
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VWatermark::VWatermark() VWatermark::VWatermark()
{} {
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VWatermark::CreateEmptyWatermark() void VWatermark::CreateEmptyWatermark()
@ -67,8 +68,9 @@ void VWatermark::CreateEmptyWatermark()
wElement.appendChild(createElement(TagImage)); wElement.appendChild(createElement(TagImage));
appendChild(wElement); appendChild(wElement);
insertBefore(createProcessingInstruction(QStringLiteral("xml"), insertBefore(
QStringLiteral("version=\"1.0\" encoding=\"UTF-8\"")), this->firstChild()); createProcessingInstruction(QStringLiteral("xml"), QStringLiteral("version=\"1.0\" encoding=\"UTF-8\"")),
this->firstChild());
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -138,11 +140,11 @@ void VWatermark::SetWatermark(const VWatermarkData &data)
{ {
SetAttribute(text, AttrShow, data.showText); SetAttribute(text, AttrShow, data.showText);
SetAttributeOrRemoveIf<QString>(text, AttrText, data.text, SetAttributeOrRemoveIf<QString>(text, AttrText, data.text,
[](const QString &text) noexcept {return text.isEmpty();}); [](const QString &text) noexcept { return text.isEmpty(); });
SetAttributeOrRemoveIf<int>(text, AttrRotation, data.textRotation, SetAttributeOrRemoveIf<int>(text, AttrRotation, data.textRotation,
[](int textRotation) noexcept {return textRotation == 0;}); [](int textRotation) noexcept { return textRotation == 0; });
SetAttributeOrRemoveIf<QString>(text, AttrFont, data.font.toString(), SetAttributeOrRemoveIf<QString>(text, AttrFont, data.font.toString(),
[](const QString &fontString) noexcept {return fontString.isEmpty();}); [](const QString &fontString) noexcept { return fontString.isEmpty(); });
SetAttribute(text, AttrColor, data.textColor.name()); SetAttribute(text, AttrColor, data.textColor.name());
} }
@ -151,11 +153,11 @@ void VWatermark::SetWatermark(const VWatermarkData &data)
{ {
SetAttribute(image, AttrShow, data.showImage); SetAttribute(image, AttrShow, data.showImage);
SetAttributeOrRemoveIf<QString>(image, AttrPath, data.path, SetAttributeOrRemoveIf<QString>(image, AttrPath, data.path,
[](const QString &path) noexcept {return path.isEmpty();}); [](const QString &path) noexcept { return path.isEmpty(); });
SetAttributeOrRemoveIf<int>(image, AttrRotation, data.imageRotation, SetAttributeOrRemoveIf<int>(image, AttrRotation, data.imageRotation,
[](int imageRotation) noexcept {return imageRotation == 0;}); [](int imageRotation) noexcept { return imageRotation == 0; });
SetAttributeOrRemoveIf<bool>(image, AttrGrayscale, data.grayscale, SetAttributeOrRemoveIf<bool>(image, AttrGrayscale, data.grayscale,
[](bool grayscale) noexcept {return not grayscale;}); [](bool grayscale) noexcept { return not grayscale; });
} }
} }
} }

View file

@ -42,7 +42,7 @@
#include <QQueue> #include <QQueue>
#include <QScreen> #include <QScreen>
#include <QSettings> #include <QSettings>
#include <QStringLiteral> #include <QString>
#include <QTimer> #include <QTimer>
#include <QUrlQuery> #include <QUrlQuery>
#include <QUuid> #include <QUuid>

View file

@ -37,10 +37,11 @@
#include <QTransform> #include <QTransform>
#include <QtMath> #include <QtMath>
#include "../vmisc/def.h"
#include "../vmisc/compatibility.h" #include "../vmisc/compatibility.h"
#include "vgobject_p.h" #include "../vmisc/def.h"
#include "../vmisc/vabstractapplication.h" #include "../vmisc/vabstractapplication.h"
#include "vgeometry/vgeometrydef.h"
#include "vgobject_p.h"
namespace namespace
{ {
@ -82,15 +83,16 @@ auto GetEpsilon(const QPointF &t, QPointF p1, QPointF p2, qreal accuracy) -> dou
return qAbs(PerpDotProduct(p1, p2, line.p2())); return qAbs(PerpDotProduct(p1, p2, line.p2()));
} }
} // namespace } // namespace
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief VGObject default constructor. * @brief VGObject default constructor.
*/ */
VGObject::VGObject() VGObject::VGObject()
:d(new VGObjectData) : d(new VGObjectData)
{} {
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
@ -100,8 +102,9 @@ VGObject::VGObject()
* @param mode mode creation. Used in modeling mode. * @param mode mode creation. Used in modeling mode.
*/ */
VGObject::VGObject(const GOType &type, const quint32 &idObject, const Draw &mode) VGObject::VGObject(const GOType &type, const quint32 &idObject, const Draw &mode)
:d(new VGObjectData(type, idObject, mode)) : d(new VGObjectData(type, idObject, mode))
{} {
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
@ -109,8 +112,9 @@ VGObject::VGObject(const GOType &type, const quint32 &idObject, const Draw &mode
* @param obj object. * @param obj object.
*/ */
VGObject::VGObject(const VGObject &obj) // NOLINT(modernize-use-equals-default) VGObject::VGObject(const VGObject &obj) // NOLINT(modernize-use-equals-default)
:d (obj.d) : d(obj.d)
{} {
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
@ -120,7 +124,7 @@ VGObject::VGObject(const VGObject &obj) // NOLINT(modernize-use-equals-default)
*/ */
auto VGObject::operator=(const VGObject &obj) -> VGObject & auto VGObject::operator=(const VGObject &obj) -> VGObject &
{ {
if ( &obj == this ) if (&obj == this)
{ {
return *this; return *this;
} }
@ -130,12 +134,13 @@ auto VGObject::operator=(const VGObject &obj) -> VGObject &
#ifdef Q_COMPILER_RVALUE_REFS #ifdef Q_COMPILER_RVALUE_REFS
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VGObject::VGObject(VGObject &&obj) Q_DECL_NOTHROW VGObject::VGObject(VGObject &&obj) noexcept
:d (std::move(obj.d)) : d(std::move(obj.d))
{} {
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VGObject::operator=(VGObject &&obj) Q_DECL_NOTHROW -> VGObject & auto VGObject::operator=(VGObject &&obj) noexcept -> VGObject &
{ {
std::swap(d, obj.d); std::swap(d, obj.d);
return *this; return *this;
@ -144,7 +149,8 @@ auto VGObject::operator=(VGObject &&obj) Q_DECL_NOTHROW -> VGObject &
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VGObject::~VGObject() // NOLINT(modernize-use-equals-default) VGObject::~VGObject() // NOLINT(modernize-use-equals-default)
{} {
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
@ -293,8 +299,7 @@ auto VGObject::getIdTool() const -> quint32
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VGObject::ToJson() const -> QJsonObject auto VGObject::ToJson() const -> QJsonObject
{ {
QJsonObject object QJsonObject object{
{
{"id", static_cast<qint64>(id())}, {"id", static_cast<qint64>(id())},
{"type", static_cast<int>(getType())}, {"type", static_cast<int>(getType())},
}; };
@ -307,7 +312,7 @@ auto VGObject::BuildLine(const QPointF &p1, const qreal &length, const qreal &an
{ {
QLineF line = QLineF(); QLineF line = QLineF();
line.setP1(p1); line.setP1(p1);
line.setAngle(angle);// First set angle then length. Length can have negative value. line.setAngle(angle); // First set angle then length. Length can have negative value.
line.setLength(length); line.setLength(length);
return line; return line;
} }
@ -324,7 +329,8 @@ auto VGObject::BuildRay(const QPointF &firstPoint, const qreal &angle, const QRe
if (not rect.contains(firstPoint)) if (not rect.contains(firstPoint))
{ {
// If point outside of scene rect create one around point and unite two rects. // If point outside of scene rect create one around point and unite two rects.
QRectF rectangle(firstPoint.x()-rect.width()/2, firstPoint.y()-rect.height()/2, rect.width(), rect.height()); QRectF rectangle(firstPoint.x() - rect.width() / 2, firstPoint.y() - rect.height() / 2, rect.width(),
rect.height());
rect = rect.united(rectangle); rect = rect.united(rectangle);
} }
const qreal diagonal = qSqrt(pow(rect.height(), 2) + pow(rect.width(), 2)); const qreal diagonal = qSqrt(pow(rect.height(), 2) + pow(rect.width(), 2));
@ -336,7 +342,7 @@ auto VGObject::BuildRay(const QPointF &firstPoint, const qreal &angle, const QRe
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VGObject::BuildAxis(const QPointF &p, const qreal &angle, const QRectF &scRect) -> QLineF auto VGObject::BuildAxis(const QPointF &p, const qreal &angle, const QRectF &scRect) -> QLineF
{ {
const QPointF endP1 = BuildRay(p, angle+180, scRect); const QPointF endP1 = BuildRay(p, angle + 180, scRect);
const QPointF endP2 = BuildRay(p, angle, scRect); const QPointF endP2 = BuildRay(p, angle, scRect);
return {endP1, endP2}; return {endP1, endP2};
} }
@ -363,8 +369,8 @@ auto VGObject::ContactPoints(const QPointF &p, const QPointF &center, qreal radi
return 1; return 1;
} }
const double d = QLineF (p, center).length(); const double d = QLineF(p, center).length();
const double k = sqrt (d * d - radius * radius); const double k = sqrt(d * d - radius * radius);
return IntersectionCircles(p, k, center, radius, p1, p2); return IntersectionCircles(p, k, center, radius, p1, p2);
} }
@ -382,28 +388,28 @@ auto VGObject::LineIntersectRect(const QRectF &rec, const QLineF &line) -> QPoin
QPointF point; QPointF point;
QLineF::IntersectType type = Intersects(line, QLineF(QPointF(x1, y1), QPointF(x1, y2)), &point); QLineF::IntersectType type = Intersects(line, QLineF(QPointF(x1, y1), QPointF(x1, y2)), &point);
if ( type == QLineF::BoundedIntersection ) if (type == QLineF::BoundedIntersection)
{ {
return point; return point;
} }
type = Intersects(line, QLineF(QPointF(x1, y1), QPointF(x2, y1)), &point); type = Intersects(line, QLineF(QPointF(x1, y1), QPointF(x2, y1)), &point);
if ( type == QLineF::BoundedIntersection ) if (type == QLineF::BoundedIntersection)
{ {
return point; return point;
} }
type = Intersects(line, QLineF(QPointF(x1, y2), QPointF(x2, y2)), &point); type = Intersects(line, QLineF(QPointF(x1, y2), QPointF(x2, y2)), &point);
if ( type == QLineF::BoundedIntersection ) if (type == QLineF::BoundedIntersection)
{ {
return point; return point;
} }
type = Intersects(line, QLineF(QPointF(x2, y1), QPointF(x2, y2)), &point); type = Intersects(line, QLineF(QPointF(x2, y1), QPointF(x2, y2)), &point);
if ( type == QLineF::BoundedIntersection ) if (type == QLineF::BoundedIntersection)
{ {
return point; return point;
} }
@ -411,33 +417,34 @@ auto VGObject::LineIntersectRect(const QRectF &rec, const QLineF &line) -> QPoin
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VGObject::IntersectionCircles(const QPointF &c1, double r1, const QPointF &c2, double r2, QPointF &p1, QPointF &p2) -> int auto VGObject::IntersectionCircles(const QPointF &c1, double r1, const QPointF &c2, double r2, QPointF &p1, QPointF &p2)
-> int
{ {
if (VFuzzyComparePossibleNulls(c1.x(), c2.x()) && VFuzzyComparePossibleNulls(c1.y(), c2.y()) if (VFuzzyComparePossibleNulls(c1.x(), c2.x()) && VFuzzyComparePossibleNulls(c1.y(), c2.y()) &&
&& VFuzzyComparePossibleNulls(r1, r2)) VFuzzyComparePossibleNulls(r1, r2))
{ {
return 3;// Circles are equal return 3; // Circles are equal
} }
const double a = - 2.0 * (c2.x() - c1.x()); const double a = -2.0 * (c2.x() - c1.x());
const double b = - 2.0 * (c2.y() - c1.y()); const double b = -2.0 * (c2.y() - c1.y());
const double c = (c2.x() - c1.x())* (c2.x() - c1.x()) + (c2.y() - c1.y()) * (c2.y() - c1.y()) + r1 * r1 - r2 * r2; const double c = (c2.x() - c1.x()) * (c2.x() - c1.x()) + (c2.y() - c1.y()) * (c2.y() - c1.y()) + r1 * r1 - r2 * r2;
const double x0 = -a*c/(a*a+b*b); const double x0 = -a * c / (a * a + b * b);
const double y0 = -b*c/(a*a+b*b); const double y0 = -b * c / (a * a + b * b);
if (c*c > r1*r1*(a*a+b*b)) if (c * c > r1 * r1 * (a * a + b * b))
{ {
return 0; return 0;
} }
if (VFuzzyComparePossibleNulls(c*c, r1*r1*(a*a+b*b))) if (VFuzzyComparePossibleNulls(c * c, r1 * r1 * (a * a + b * b)))
{ {
p1 = QPointF(x0 + c1.x(), y0 + c1.y()); p1 = QPointF(x0 + c1.x(), y0 + c1.y());
return 1; return 1;
} }
const double d = r1*r1 - c*c/(a*a+b*b); const double d = r1 * r1 - c * c / (a * a + b * b);
const double mult = sqrt (d / (a*a+b*b)); const double mult = sqrt(d / (a * a + b * b));
const double ax = x0 + b * mult; const double ax = x0 + b * mult;
const double bx = x0 - b * mult; const double bx = x0 - b * mult;
@ -459,8 +466,8 @@ auto VGObject::IntersectionCircles(const QPointF &c1, double r1, const QPointF &
* @param p2 second intersection point. * @param p2 second intersection point.
* @return 0 - intersection doesn't exist, 1 - one intersection point, 2 - two intersection points. * @return 0 - intersection doesn't exist, 1 - one intersection point, 2 - two intersection points.
*/ */
auto VGObject::LineIntersectCircle(const QPointF &center, qreal radius, const QLineF &line, QPointF &p1, auto VGObject::LineIntersectCircle(const QPointF &center, qreal radius, const QLineF &line, QPointF &p1, QPointF &p2)
QPointF &p2) -> qint32 -> qint32
{ {
// Fix for issue #485. https://bitbucket.org/dismine/valentina/issues/485/error-when-drawing-a-curved-path // Fix for issue #485. https://bitbucket.org/dismine/valentina/issues/485/error-when-drawing-a-curved-path
if (qFuzzyIsNull(line.length())) if (qFuzzyIsNull(line.length()))
@ -468,14 +475,14 @@ auto VGObject::LineIntersectCircle(const QPointF &center, qreal radius, const QL
return 0; return 0;
} }
//coefficient for equation of segment // coefficient for equation of segment
qreal a = 0, b = 0, c = 0; qreal a = 0, b = 0, c = 0;
LineCoefficients(line, &a, &b, &c); LineCoefficients(line, &a, &b, &c);
// projection center of circle on to line // projection center of circle on to line
const QPointF p = ClosestPoint (line, center); const QPointF p = ClosestPoint(line, center);
// how many solutions? // how many solutions?
qint32 flag = 0; qint32 flag = 0;
const qreal d = QLineF (center, p).length(); const qreal d = QLineF(center, p).length();
if (VFuzzyComparePossibleNulls(d, radius)) if (VFuzzyComparePossibleNulls(d, radius))
{ {
flag = 1; flag = 1;
@ -492,11 +499,11 @@ auto VGObject::LineIntersectCircle(const QPointF &center, qreal radius, const QL
} }
} }
// find distance from projection to points of intersection // find distance from projection to points of intersection
const qreal k = qSqrt (qAbs(radius * radius - d * d)); const qreal k = qSqrt(qAbs(radius * radius - d * d));
const qreal t = QLineF (QPointF (0, 0), QPointF (b, - a)).length(); const qreal t = QLineF(QPointF(0, 0), QPointF(b, -a)).length();
// add to projection a vectors aimed to points of intersection // add to projection a vectors aimed to points of intersection
p1 = addVector (p, QPointF (0, 0), QPointF (- b, a), k / t); p1 = addVector(p, QPointF(0, 0), QPointF(-b, a), k / t);
p2 = addVector (p, QPointF (0, 0), QPointF (b, - a), k / t); p2 = addVector(p, QPointF(0, 0), QPointF(b, -a), k / t);
return flag; return flag;
} }
@ -512,7 +519,7 @@ auto VGObject::ClosestPoint(const QLineF &line, const QPointF &point) -> QPointF
LineCoefficients(line, &a, &b, &c); LineCoefficients(line, &a, &b, &c);
qreal x = point.x() + a; qreal x = point.x() + a;
qreal y = b + point.y(); qreal y = b + point.y();
QLineF lin (point, QPointF(x, y)); QLineF lin(point, QPointF(x, y));
QPointF p; QPointF p;
QLineF::IntersectType intersect = Intersects(line, lin, &p); QLineF::IntersectType intersect = Intersects(line, lin, &p);
@ -540,11 +547,11 @@ auto VGObject::addVector(const QPointF &p, const QPointF &p1, const QPointF &p2,
*/ */
void VGObject::LineCoefficients(const QLineF &line, qreal *a, qreal *b, qreal *c) void VGObject::LineCoefficients(const QLineF &line, qreal *a, qreal *b, qreal *c)
{ {
//coefficient for equation of segment // coefficient for equation of segment
QPointF p1 = line.p1(); QPointF p1 = line.p1();
*a = line.p2().y() - p1.y(); *a = line.p2().y() - p1.y();
*b = p1.x() - line.p2().x(); *b = p1.x() - line.p2().x();
*c = - *a * p1.x() - *b * p1.y(); *c = -*a * p1.x() - *b * p1.y();
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -572,33 +579,33 @@ auto VGObject::IsPointOnLineSegment(const QPointF &t, const QPointF &p1, const Q
// should be good enough for us. // should be good enough for us.
const qreal degrees = 90; const qreal degrees = 90;
QLineF edge(p1, p2); QLineF edge(p1, p2);
edge.setAngle(edge.angle()+degrees); edge.setAngle(edge.angle() + degrees);
edge.setLength(accuracy); edge.setLength(accuracy);
QPointF sP1 = edge.p2(); QPointF sP1 = edge.p2();
edge = QLineF(p2, p1); edge = QLineF(p2, p1);
edge.setAngle(edge.angle()-degrees); edge.setAngle(edge.angle() - degrees);
edge.setLength(accuracy); edge.setLength(accuracy);
QPointF sP2 = edge.p2(); QPointF sP2 = edge.p2();
edge = QLineF(p2, p1); edge = QLineF(p2, p1);
edge.setAngle(edge.angle()+degrees); edge.setAngle(edge.angle() + degrees);
edge.setLength(accuracy); edge.setLength(accuracy);
QPointF sP3 = edge.p2(); QPointF sP3 = edge.p2();
edge = QLineF(p1, p2); edge = QLineF(p1, p2);
edge.setAngle(edge.angle()-degrees); edge.setAngle(edge.angle() - degrees);
edge.setLength(accuracy); edge.setLength(accuracy);
QPointF sP4 = edge.p2(); QPointF sP4 = edge.p2();
QVector<QPointF> shape{sP1, sP2, sP3, sP4, sP1}; QVector<QPointF> shape{sP1, sP2, sP3, sP4, sP1};
for (int i=0; i < shape.size()-1; ++i) for (int i = 0; i < shape.size() - 1; ++i)
{ {
const QPointF &sp1 = shape.at(i); const QPointF &sp1 = shape.at(i);
const QPointF &sp2 = shape.at(i+1); const QPointF &sp2 = shape.at(i + 1);
// This formula helps to determine on which side of a vector lies a point. // This formula helps to determine on which side of a vector lies a point.
qreal position = (sp2.x()-sp1.x())*(t.y()-sp1.y())-(sp2.y()-sp1.y())*(t.x()-sp1.x()); qreal position = (sp2.x() - sp1.x()) * (t.y() - sp1.y()) - (sp2.y() - sp1.y()) * (t.x() - sp1.x());
if (position < 0) if (position < 0)
{ {
return false; return false;
@ -612,13 +619,13 @@ auto VGObject::IsPointOnLineSegment(const QPointF &t, const QPointF &p1, const Q
auto VGObject::IsLineSegmentOnLineSegment(const QLineF &seg1, const QLineF &seg2, qreal accuracy) -> bool auto VGObject::IsLineSegmentOnLineSegment(const QLineF &seg1, const QLineF &seg2, qreal accuracy) -> bool
{ {
const bool onLine = IsPointOnLineviaPDP(seg1.p1(), seg2.p1(), seg2.p2(), accuracy) && const bool onLine = IsPointOnLineviaPDP(seg1.p1(), seg2.p1(), seg2.p2(), accuracy) &&
IsPointOnLineviaPDP(seg1.p2(), seg2.p1(), seg2.p2(), accuracy); IsPointOnLineviaPDP(seg1.p2(), seg2.p1(), seg2.p2(), accuracy);
if (onLine) if (onLine)
{ {
return IsPointOnLineSegment(seg1.p1(), seg2.p1(), seg2.p2(), accuracy) || return IsPointOnLineSegment(seg1.p1(), seg2.p1(), seg2.p2(), accuracy) ||
IsPointOnLineSegment(seg1.p2(), seg2.p1(), seg2.p2(), accuracy) || IsPointOnLineSegment(seg1.p2(), seg2.p1(), seg2.p2(), accuracy) ||
IsPointOnLineSegment(seg2.p1(), seg1.p1(), seg1.p2(), accuracy) || IsPointOnLineSegment(seg2.p1(), seg1.p1(), seg1.p2(), accuracy) ||
IsPointOnLineSegment(seg2.p2(), seg1.p1(), seg1.p2(), accuracy); IsPointOnLineSegment(seg2.p2(), seg1.p1(), seg1.p2(), accuracy);
} }
return onLine; return onLine;
@ -654,7 +661,7 @@ auto VGObject::IsPointOnLineviaPDP(const QPointF &t, const QPointF &p1, const QP
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VGObject::PointInCircle(const QPointF &p, const QPointF &center, qreal radius) -> int auto VGObject::PointInCircle(const QPointF &p, const QPointF &center, qreal radius) -> int
{ {
const double d = QLineF (p, center).length(); const double d = QLineF(p, center).length();
if (VFuzzyComparePossibleNulls(radius, d)) if (VFuzzyComparePossibleNulls(radius, d))
{ {
return 1; // on circle return 1; // on circle
@ -681,9 +688,9 @@ auto VGObject::GetLengthContour(const QVector<QPointF> &contour, const QVector<Q
qreal length = 0; qreal length = 0;
QVector<QPointF> points; QVector<QPointF> points;
points << contour << newPoints; points << contour << newPoints;
for (qint32 i = 0; i < points.size()-1; ++i) for (qint32 i = 0; i < points.size() - 1; ++i)
{ {
QLineF line(points.at(i), points.at(i+1)); QLineF line(points.at(i), points.at(i + 1));
length += line.length(); length += line.length();
} }
return qFloor(length); return qFloor(length);
@ -712,13 +719,13 @@ auto VGObject::FlippingMatrix(const QLineF &axis) -> QTransform
m.reset(); m.reset();
m.translate(p2.x(), p2.y()); m.translate(p2.x(), p2.y());
m.scale(m.m11(), m.m22()*-1); m.scale(m.m11(), m.m22() * -1);
m.translate(-p2.x(), -p2.y()); m.translate(-p2.x(), -p2.y());
matrix *= m; matrix *= m;
m.reset(); m.reset();
m.translate(p2.x(), p2.y()); m.translate(p2.x(), p2.y());
m.rotate(-(360-angle)); m.rotate(-(360 - angle));
m.translate(-p2.x(), -p2.y()); m.translate(-p2.x(), -p2.y());
matrix *= m; matrix *= m;

View file

@ -29,9 +29,9 @@
#ifndef VLAYOUTDEF_H #ifndef VLAYOUTDEF_H
#define VLAYOUTDEF_H #define VLAYOUTDEF_H
#include <QPainterPath>
#include <QSize> #include <QSize>
#include <QTransform> #include <QTransform>
#include <QPainterPath>
#include <ciso646> #include <ciso646>
#include <climits> #include <climits>
@ -79,19 +79,19 @@ enum class BestFrom : qint8
struct VBestSquareResData struct VBestSquareResData
{ {
QSizeF bestSize{INT_MAX, INT_MAX}; QSizeF bestSize{INT_MAX, INT_MAX};
// cppcheck-suppress unusedStructMember // cppcheck-suppress unusedStructMember
int globalI{0}; // Edge of global contour int globalI{0}; // Edge of global contour
// cppcheck-suppress unusedStructMember // cppcheck-suppress unusedStructMember
int detJ{0}; // Edge of detail int detJ{0}; // Edge of detail
QTransform resMatrix{}; // Matrix for rotation and translation detail QTransform resMatrix{}; // Matrix for rotation and translation detail
// cppcheck-suppress unusedStructMember // cppcheck-suppress unusedStructMember
bool resMirror{false}; bool resMirror{false};
BestFrom type{BestFrom::Rotation}; BestFrom type{BestFrom::Rotation};
// cppcheck-suppress unusedStructMember // cppcheck-suppress unusedStructMember
qreal depthPosition{INT_MAX}; qreal depthPosition{INT_MAX};
// cppcheck-suppress unusedStructMember // cppcheck-suppress unusedStructMember
qreal sidePosition{0}; qreal sidePosition{0};
}; };
struct VCachedPositions struct VCachedPositions
@ -100,28 +100,34 @@ struct VCachedPositions
QPainterPath layoutAllowancePath{}; QPainterPath layoutAllowancePath{};
}; };
enum class Cases : qint8 { CaseThreeGroup = 0, CaseTwoGroup, CaseDesc, UnknownCase}; enum class Cases : qint8
{
CaseThreeGroup = 0,
CaseTwoGroup,
CaseDesc,
UnknownCase
};
/* Warning! Debugging doesn't work stable in debug mode. If you need big allocation use release mode. Or disable /* Warning! Debugging doesn't work stable in debug mode. If you need big allocation use release mode. Or disable
* Address Sanitizer. See page https://bitbucket.org/dismine/valentina/wiki/developers/Address_Sanitizer * Address Sanitizer. See page https://bitbucket.org/dismine/valentina/wiki/developers/Address_Sanitizer
*/ */
//#define LAYOUT_DEBUG // Enable debug mode // #define LAYOUT_DEBUG // Enable debug mode
// This block help rule debug mode. Don't turn all options at the same time! // This block help rule debug mode. Don't turn all options at the same time!
#ifdef LAYOUT_DEBUG #ifdef LAYOUT_DEBUG
// Nice looking // Nice looking
# define SHOW_VERTICES // Show contour vertices #define SHOW_VERTICES // Show contour vertices
# define SHOW_DIRECTION // Show contour direction #define SHOW_DIRECTION // Show contour direction
# define ARRANGED_DETAILS // Show already arranged details #define ARRANGED_DETAILS // Show already arranged details
# define SHOW_SHEET // Show sheet rect #define SHOW_SHEET // Show sheet rect
# define SHOW_CANDIDATE // Show each position #define SHOW_CANDIDATE // Show each position
// Debugging // Debugging
//# define SHOW_ROTATION // For each position show rotation part // # define SHOW_ROTATION // For each position show rotation part
//# define SHOW_COMBINE // For each position show edge combine part // # define SHOW_COMBINE // For each position show edge combine part
//# define SHOW_MIRROR // For each position show mirror part // # define SHOW_MIRROR // For each position show mirror part
//# define SHOW_CANDIDATE_BEST // For only correct positions that pass checks // # define SHOW_CANDIDATE_BEST // For only correct positions that pass checks
# define SHOW_BEST // Show only best position for workpiece #define SHOW_BEST // Show only best position for workpiece
#endif//LAYOUT_DEBUG #endif // LAYOUT_DEBUG
#endif // VLAYOUTDEF_H #endif // VLAYOUTDEF_H

View file

@ -34,6 +34,7 @@
#include <QFontMetrics> #include <QFontMetrics>
#include <QFuture> #include <QFuture>
#include <QGraphicsPathItem> #include <QGraphicsPathItem>
#include <QLine>
#include <QList> #include <QList>
#include <QMessageLogger> #include <QMessageLogger>
#include <QPainterPath> #include <QPainterPath>
@ -46,6 +47,8 @@
#include <QtDebug> #include <QtDebug>
#include <QtMath> #include <QtMath>
#include "../vformat/vsinglelineoutlinechar.h"
#include "../vgeometry/vgobject.h"
#include "../vgeometry/vlayoutplacelabel.h" #include "../vgeometry/vlayoutplacelabel.h"
#include "../vgeometry/vplacelabelitem.h" #include "../vgeometry/vplacelabelitem.h"
#include "../vgeometry/vpointf.h" #include "../vgeometry/vpointf.h"
@ -62,15 +65,10 @@
#include "../vpatterndb/vcontainer.h" #include "../vpatterndb/vcontainer.h"
#include "../vpatterndb/vpassmark.h" #include "../vpatterndb/vpassmark.h"
#include "../vpatterndb/vpiecenode.h" #include "../vpatterndb/vpiecenode.h"
#include "../vwidgets/global.h" #include "../vwidgets/vpiecegrainline.h"
#include "vgobject.h"
#include "vgraphicsfillitem.h" #include "vgraphicsfillitem.h"
#include "vlayoutpiece_p.h" #include "vlayoutpiece_p.h"
#include "vpiecegrainline.h"
#include "vsinglelineoutlinechar.h"
#include "vtextmanager.h" #include "vtextmanager.h"
#include <QLine>
#include <QPainterPath>
namespace namespace
{ {
@ -773,7 +771,7 @@ auto VLayoutPiece::Map(const GrainlineShape &shape) const -> GrainlineShape
GrainlineShape mappedShape; GrainlineShape mappedShape;
mappedShape.reserve(shape.size()); mappedShape.reserve(shape.size());
for (auto subShape : shape) for (const auto &subShape : shape)
{ {
mappedShape.append(Map(subShape)); mappedShape.append(Map(subShape));
} }

View file

@ -41,7 +41,6 @@
#include <QtGlobal> #include <QtGlobal>
#include "../vmisc/typedef.h" #include "../vmisc/typedef.h"
#include "../vpatterndb/floatItemData/floatitemdef.h"
#include "../vwidgets/vpiecegrainline.h" #include "../vwidgets/vpiecegrainline.h"
#include "qpainterpath.h" #include "qpainterpath.h"
#include "vabstractpiece.h" #include "vabstractpiece.h"

View file

@ -30,9 +30,9 @@
#define VLAYOUTPIECEPATH_H #define VLAYOUTPIECEPATH_H
#include "vlayoutpoint.h" #include "vlayoutpoint.h"
#include <QMetaType>
#include <QPointF> #include <QPointF>
#include <QSharedDataPointer> #include <QSharedDataPointer>
#include <QMetaType>
class VLayoutPiecePathData; class VLayoutPiecePathData;
class QPainterPath; class QPainterPath;
@ -48,17 +48,17 @@ public:
auto operator=(const VLayoutPiecePath &path) -> VLayoutPiecePath &; auto operator=(const VLayoutPiecePath &path) -> VLayoutPiecePath &;
#ifdef Q_COMPILER_RVALUE_REFS #ifdef Q_COMPILER_RVALUE_REFS
VLayoutPiecePath(VLayoutPiecePath &&path) Q_DECL_NOTHROW; VLayoutPiecePath(VLayoutPiecePath &&path) noexcept;
auto operator=(VLayoutPiecePath &&path) Q_DECL_NOTHROW->VLayoutPiecePath &; auto operator=(VLayoutPiecePath &&path) noexcept -> VLayoutPiecePath &;
#endif #endif
auto GetPainterPath() const -> QPainterPath; auto GetPainterPath() const -> QPainterPath;
auto Points() const -> QVector<VLayoutPoint>; auto Points() const -> QVector<VLayoutPoint>;
void SetPoints(const QVector<VLayoutPoint> &points); void SetPoints(const QVector<VLayoutPoint> &points);
auto PenStyle() const -> Qt::PenStyle; auto PenStyle() const -> Qt::PenStyle;
void SetPenStyle(const Qt::PenStyle &penStyle); void SetPenStyle(const Qt::PenStyle &penStyle);
auto IsCutPath() const -> bool; auto IsCutPath() const -> bool;
void SetCutPath(bool cut); void SetCutPath(bool cut);
@ -70,7 +70,7 @@ private:
QSharedDataPointer<VLayoutPiecePathData> d; QSharedDataPointer<VLayoutPiecePathData> d;
}; };
Q_DECLARE_METATYPE(VLayoutPiecePath) Q_DECLARE_METATYPE(VLayoutPiecePath) // NOLINT
Q_DECLARE_TYPEINFO(VLayoutPiecePath, Q_MOVABLE_TYPE); // NOLINT Q_DECLARE_TYPEINFO(VLayoutPiecePath, Q_MOVABLE_TYPE); // NOLINT
#endif // VLAYOUTPIECEPATH_H #endif // VLAYOUTPIECEPATH_H

View file

@ -483,14 +483,19 @@ const int userMaterialPlaceholdersQuantity = 20;
auto QPixmapFromCache(const QString &pixmapPath) -> QPixmap; auto QPixmapFromCache(const QString &pixmapPath) -> QPixmap;
void SetItemOverrideCursor(QGraphicsItem *item, const QString &pixmapPath, int hotX = -1, int hotY = -1); void SetItemOverrideCursor(QGraphicsItem *item, const QString &pixmapPath, int hotX = -1, int hotY = -1);
//---------------------------------------------------------------------------------------------------------------------
template <typename T> constexpr inline auto MmToPixel(T val) noexcept -> T template <typename T> constexpr inline auto MmToPixel(T val) noexcept -> T
{ {
return (val / 25.4) * PrintDPI; return (val / 25.4) * PrintDPI;
} }
//---------------------------------------------------------------------------------------------------------------------
template <typename T> constexpr inline auto CmToPixel(T val) noexcept -> T template <typename T> constexpr inline auto CmToPixel(T val) noexcept -> T
{ {
return ((val * 10.0) / 25.4) * PrintDPI; return ((val * 10.0) / 25.4) * PrintDPI;
} }
//---------------------------------------------------------------------------------------------------------------------
template <typename T> constexpr inline auto InchToPixel(T val) noexcept -> T template <typename T> constexpr inline auto InchToPixel(T val) noexcept -> T
{ {
return val * PrintDPI; return val * PrintDPI;
@ -515,14 +520,19 @@ Q_DECL_RELAXED_CONSTEXPR inline auto ToPixel(double val, const Unit &unit) -> do
return 0; return 0;
} }
//---------------------------------------------------------------------------------------------------------------------
template <typename T> constexpr inline auto PixelToInch(T pix) -> T template <typename T> constexpr inline auto PixelToInch(T pix) -> T
{ {
return pix / PrintDPI; return pix / PrintDPI;
} }
//---------------------------------------------------------------------------------------------------------------------
template <typename T> constexpr inline auto PixelToMm(T pix) -> T template <typename T> constexpr inline auto PixelToMm(T pix) -> T
{ {
return PixelToInch(pix) * 25.4; return PixelToInch(pix) * 25.4;
} }
//---------------------------------------------------------------------------------------------------------------------
template <typename T> constexpr inline auto PixelToCm(T pix) -> T template <typename T> constexpr inline auto PixelToCm(T pix) -> T
{ {
return PixelToInch(pix) * 2.54; return PixelToInch(pix) * 2.54;
@ -547,16 +557,23 @@ Q_DECL_RELAXED_CONSTEXPR inline auto FromPixel(double pix, const Unit &unit) ->
return 0; return 0;
} }
//---------------------------------------------------------------------------------------------------------------------
template <typename T> constexpr inline auto Inch2ToPixel2(T val) -> T template <typename T> constexpr inline auto Inch2ToPixel2(T val) -> T
{ {
return val * (PrintDPI * PrintDPI); return val * (PrintDPI * PrintDPI);
} }
//---------------------------------------------------------------------------------------------------------------------
template <typename T> constexpr inline auto Mm2ToPixel2(T val) -> T template <typename T> constexpr inline auto Mm2ToPixel2(T val) -> T
{ {
// There are 0.15500031 square inches in a square centimeter.
return Inch2ToPixel2(val * 0.001550031); return Inch2ToPixel2(val * 0.001550031);
} }
//---------------------------------------------------------------------------------------------------------------------
template <typename T> constexpr inline auto Cm2ToPixel2(T val) -> T template <typename T> constexpr inline auto Cm2ToPixel2(T val) -> T
{ {
// There are 0.15500031 square inches in a square centimeter.
return Inch2ToPixel2(val * 0.15500031); return Inch2ToPixel2(val * 0.15500031);
} }
@ -579,16 +596,23 @@ Q_DECL_RELAXED_CONSTEXPR inline auto ToPixel2(double val, const Unit &unit) -> d
return 0; return 0;
} }
//---------------------------------------------------------------------------------------------------------------------
template <typename T> constexpr inline auto Pixel2ToInch2(T pix) -> T template <typename T> constexpr inline auto Pixel2ToInch2(T pix) -> T
{ {
return pix / (PrintDPI * PrintDPI); return pix / (PrintDPI * PrintDPI);
} }
//---------------------------------------------------------------------------------------------------------------------
template <typename T> constexpr inline auto Pixel2ToMm2(T pix) -> T template <typename T> constexpr inline auto Pixel2ToMm2(T pix) -> T
{ {
// There are 0.15500031 square inches in a square centimeter.
return Pixel2ToInch2(pix) / 0.001550031; return Pixel2ToInch2(pix) / 0.001550031;
} }
//---------------------------------------------------------------------------------------------------------------------
template <typename T> constexpr inline auto Pixel2ToCm2(T pix) -> T template <typename T> constexpr inline auto Pixel2ToCm2(T pix) -> T
{ {
// There are 0.15500031 square inches in a square centimeter.
return Pixel2ToInch2(pix) / 0.15500031; return Pixel2ToInch2(pix) / 0.15500031;
} }