From e2f4859d4884b180199955722fe786ac86dc03b7 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 25 Nov 2020 08:44:05 +0200 Subject: [PATCH 01/15] Fix curve names in property browser. --- .../toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp | 2 +- .../toolsinglepoint/vtoolpointofintersectioncurves.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp index 662185787..91cdefdd2 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp @@ -222,7 +222,7 @@ void VToolCurveIntersectAxis::SetFormulaAngle(const VFormula &value) //--------------------------------------------------------------------------------------------------------------------- QString VToolCurveIntersectAxis::CurveName() const { - return VAbstractTool::data.GetGObject(curveId)->name(); + return VAbstractTool::data.GetGObject(curveId)->ObjectName(); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp index 0a8e0cc5d..95a2ce7a5 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp @@ -283,13 +283,13 @@ bool VToolPointOfIntersectionCurves::FindPoint(const QVector &curve1Poi //--------------------------------------------------------------------------------------------------------------------- QString VToolPointOfIntersectionCurves::FirstCurveName() const { - return VAbstractTool::data.GetGObject(firstCurveId)->name(); + return VAbstractTool::data.GetGObject(firstCurveId)->ObjectName(); } //--------------------------------------------------------------------------------------------------------------------- QString VToolPointOfIntersectionCurves::SecondCurveName() const { - return VAbstractTool::data.GetGObject(secondCurveId)->name(); + return VAbstractTool::data.GetGObject(secondCurveId)->ObjectName(); } //--------------------------------------------------------------------------------------------------------------------- From e8b69bbb882eb6739deb7e45be2f55068075415d Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 25 Nov 2020 08:47:01 +0200 Subject: [PATCH 02/15] Refactoring. Remove unused argument. --- src/libs/vtools/tools/vtoolseamallowance.cpp | 9 ++++----- src/libs/vtools/tools/vtoolseamallowance.h | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index db6f8e333..28ea6b6db 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -259,7 +259,7 @@ void VToolSeamAllowance::InsertNode(const QVector &nodes, quint32 pi VToolSeamAllowance *saTool = qobject_cast(VAbstractPattern::getTool(pieceId)); SCASSERT(saTool != nullptr); - InitNode(node, scene, data, doc, saTool); + InitNode(node, scene, doc, saTool); } qApp->getUndoStack()->push(new SavePieceOptions(oldDet, newDet, doc, pieceId)); @@ -1744,16 +1744,15 @@ void VToolSeamAllowance::InitNodes(const VPiece &detail, VMainGraphicsScene *sce { for (int i = 0; i< detail.GetPath().CountNodes(); ++i) { - InitNode(detail.GetPath().at(i), scene, &(VAbstractTool::data), doc, this); + InitNode(detail.GetPath().at(i), scene, doc, this); } } //--------------------------------------------------------------------------------------------------------------------- -void VToolSeamAllowance::InitNode(const VPieceNode &node, VMainGraphicsScene *scene, VContainer *data, - VAbstractPattern *doc, VToolSeamAllowance *parent) +void VToolSeamAllowance::InitNode(const VPieceNode &node, VMainGraphicsScene *scene, VAbstractPattern *doc, + VToolSeamAllowance *parent) { SCASSERT(scene != nullptr) - SCASSERT(data != nullptr) SCASSERT(doc != nullptr) SCASSERT(parent != nullptr) diff --git a/src/libs/vtools/tools/vtoolseamallowance.h b/src/libs/vtools/tools/vtoolseamallowance.h index 64022a839..de40a1222 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.h +++ b/src/libs/vtools/tools/vtoolseamallowance.h @@ -202,7 +202,7 @@ private: qreal &rotationAngle, QPointF &pos); void InitNodes(const VPiece &detail, VMainGraphicsScene *scene); - static void InitNode(const VPieceNode &node, VMainGraphicsScene *scene, VContainer *data, VAbstractPattern *doc, + static void InitNode(const VPieceNode &node, VMainGraphicsScene *scene, VAbstractPattern *doc, VToolSeamAllowance *parent); void InitCSAPaths(const VPiece &detail) const; void InitInternalPaths(const VPiece &detail); From 1e960e2f8a316c68a12bef318e4002d2e43d923d Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 25 Nov 2020 09:59:36 +0200 Subject: [PATCH 03/15] Refactoring. Remove unused argument. --- src/libs/vtools/tools/vtoolseamallowance.cpp | 8 +++----- src/libs/vtools/tools/vtoolseamallowance.h | 3 +-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index 28ea6b6db..68d12044c 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -259,7 +259,7 @@ void VToolSeamAllowance::InsertNode(const QVector &nodes, quint32 pi VToolSeamAllowance *saTool = qobject_cast(VAbstractPattern::getTool(pieceId)); SCASSERT(saTool != nullptr); - InitNode(node, scene, doc, saTool); + InitNode(node, scene, saTool); } qApp->getUndoStack()->push(new SavePieceOptions(oldDet, newDet, doc, pieceId)); @@ -1744,16 +1744,14 @@ void VToolSeamAllowance::InitNodes(const VPiece &detail, VMainGraphicsScene *sce { for (int i = 0; i< detail.GetPath().CountNodes(); ++i) { - InitNode(detail.GetPath().at(i), scene, doc, this); + InitNode(detail.GetPath().at(i), scene, this); } } //--------------------------------------------------------------------------------------------------------------------- -void VToolSeamAllowance::InitNode(const VPieceNode &node, VMainGraphicsScene *scene, VAbstractPattern *doc, - VToolSeamAllowance *parent) +void VToolSeamAllowance::InitNode(const VPieceNode &node, VMainGraphicsScene *scene, VToolSeamAllowance *parent) { SCASSERT(scene != nullptr) - SCASSERT(doc != nullptr) SCASSERT(parent != nullptr) switch (node.GetTypeTool()) diff --git a/src/libs/vtools/tools/vtoolseamallowance.h b/src/libs/vtools/tools/vtoolseamallowance.h index de40a1222..557aaf3c8 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.h +++ b/src/libs/vtools/tools/vtoolseamallowance.h @@ -202,8 +202,7 @@ private: qreal &rotationAngle, QPointF &pos); void InitNodes(const VPiece &detail, VMainGraphicsScene *scene); - static void InitNode(const VPieceNode &node, VMainGraphicsScene *scene, VAbstractPattern *doc, - VToolSeamAllowance *parent); + static void InitNode(const VPieceNode &node, VMainGraphicsScene *scene, VToolSeamAllowance *parent); void InitCSAPaths(const VPiece &detail) const; void InitInternalPaths(const VPiece &detail); void InitSpecialPoints(const QVector &points) const; From bccc85293176fa24826704dcf67de036c9abc4d4 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 26 Nov 2020 13:08:48 +0200 Subject: [PATCH 04/15] Fix arc names in property browser. --- .../toolsinglepoint/vtoolpointofintersectionarcs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp index 33069a0b1..9f9c44d4f 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp @@ -250,13 +250,13 @@ bool VToolPointOfIntersectionArcs::FindPoint(const VArc *arc1, const VArc *arc2, //--------------------------------------------------------------------------------------------------------------------- QString VToolPointOfIntersectionArcs::FirstArcName() const { - return VAbstractTool::data.GetGObject(firstArcId)->name(); + return VAbstractTool::data.GetGObject(firstArcId)->ObjectName(); } //--------------------------------------------------------------------------------------------------------------------- QString VToolPointOfIntersectionArcs::SecondArcName() const { - return VAbstractTool::data.GetGObject(secondArcId)->name(); + return VAbstractTool::data.GetGObject(secondArcId)->ObjectName(); } //--------------------------------------------------------------------------------------------------------------------- From 4041f9e154141f51f867154e5c80687723723ba4 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 26 Nov 2020 19:10:09 +0200 Subject: [PATCH 05/15] Restore layout debug system. --- src/app/valentina/mainwindowsnogui.cpp | 11 +- src/libs/vlayout/vlayoutdef.h | 22 +++ src/libs/vlayout/vlayoutpaper.cpp | 28 +++- src/libs/vlayout/vlayoutpaper.h | 7 +- src/libs/vlayout/vposition.cpp | 198 +++++++++++++++++++++++++ src/libs/vlayout/vposition.h | 13 ++ 6 files changed, 276 insertions(+), 3 deletions(-) diff --git a/src/app/valentina/mainwindowsnogui.cpp b/src/app/valentina/mainwindowsnogui.cpp index 5333b149c..1dd20d403 100644 --- a/src/app/valentina/mainwindowsnogui.cpp +++ b/src/app/valentina/mainwindowsnogui.cpp @@ -293,6 +293,13 @@ bool MainWindowsNoGUI::GenerateLayout(VLayoutGenerator& lGenerator) QCoreApplication::processEvents(); +#ifdef LAYOUT_DEBUG + const QString path = QDir::homePath()+QStringLiteral("/LayoutDebug"); + QDir debugDir(path); + debugDir.removeRecursively(); + debugDir.mkpath(path); +#endif + forever { if (IsTimeout()) @@ -307,7 +314,9 @@ bool MainWindowsNoGUI::GenerateLayout(VLayoutGenerator& lGenerator) break; } - switch (lGenerator.State()) + nestingState = lGenerator.State(); + + switch (nestingState) { case LayoutErrors::NoError: if (lGenerator.PapersCount() <= papersCount) diff --git a/src/libs/vlayout/vlayoutdef.h b/src/libs/vlayout/vlayoutdef.h index cd213cacb..81049cf3b 100644 --- a/src/libs/vlayout/vlayoutdef.h +++ b/src/libs/vlayout/vlayoutdef.h @@ -115,4 +115,26 @@ struct VCachedPositions QPainterPath layoutAllowancePath{}; }; +/* 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 + */ +//#define LAYOUT_DEBUG // Enable debug mode + +// This block help rule debug mode. Don't turn all options at the same time! +#ifdef LAYOUT_DEBUG +// Nice looking +# define SHOW_VERTICES // Show contour vertices +# define SHOW_DIRECTION // Show contour direction +# define ARRANGED_DETAILS // Show already arranged details +# define SHOW_SHEET // Show sheet rect +# define SHOW_CANDIDATE // Show each position + +// Debugging +//# define SHOW_ROTATION // For each position show rotation part +//# define SHOW_COMBINE // For each position show edge combine part +//# define SHOW_MIRROR // For each position show mirror part +//# define SHOW_CANDIDATE_BEST // For only correct positions that pass checks +# define SHOW_BEST // Show only best position for workpiece +#endif//LAYOUT_DEBUG + #endif // VLAYOUTDEF_H diff --git a/src/libs/vlayout/vlayoutpaper.cpp b/src/libs/vlayout/vlayoutpaper.cpp index 364436c14..59761af8e 100644 --- a/src/libs/vlayout/vlayoutpaper.cpp +++ b/src/libs/vlayout/vlayoutpaper.cpp @@ -43,6 +43,10 @@ #include #include +#ifdef LAYOUT_DEBUG +#include +#endif + #include "vbestsquare.h" #include "vcontour.h" #include "vlayoutpiece.h" @@ -239,6 +243,10 @@ bool VLayoutPaper::ArrangeDetail(const VLayoutPiece &detail, std::atomic_bool &s d->localRotationNumber = d->globalRotationNumber; } +#ifdef LAYOUT_DEBUG + QMutex mutex; +#endif + VPositionData data; data.gContour = d->globalContour; data.detail = detail; @@ -247,9 +255,17 @@ bool VLayoutPaper::ArrangeDetail(const VLayoutPiece &detail, std::atomic_bool &s data.followGrainline = d->followGrainline; data.positionsCache = d->positionsCache; data.isOriginPaperOrientationPortrait = d->originPaperOrientation; +#ifdef LAYOUT_DEBUG + data.details = d->details; + data.mutex = &mutex; +#endif const VBestSquare result = VPosition::ArrangeDetail(data, &stop, d->saveLength); +#ifdef LAYOUT_DEBUG + return SaveResult(result, detail, &mutex); +#else return SaveResult(result, detail); +#endif } //--------------------------------------------------------------------------------------------------------------------- @@ -259,7 +275,11 @@ int VLayoutPaper::Count() const } //--------------------------------------------------------------------------------------------------------------------- -bool VLayoutPaper::SaveResult(const VBestSquare &bestResult, const VLayoutPiece &detail) +bool VLayoutPaper::SaveResult(const VBestSquare &bestResult, const VLayoutPiece &detail +#ifdef LAYOUT_DEBUG + , QMutex *mutex +#endif + ) { if (bestResult.HasValidResult()) { @@ -287,6 +307,12 @@ bool VLayoutPaper::SaveResult(const VBestSquare &bestResult, const VLayoutPiece positionChache.boundingRect = VLayoutPiece::BoundingRect(layoutPoints); positionChache.layoutAllowancePath = VLayoutPiece::PainterPath(layoutPoints); d->positionsCache.append(positionChache); + +#ifdef LAYOUT_DEBUG +# ifdef SHOW_BEST + VPosition::DumpFrame(d->globalContour, workDetail, mutex, d->details); +# endif +#endif } else if (bestResult.IsTerminatedByException()) { diff --git a/src/libs/vlayout/vlayoutpaper.h b/src/libs/vlayout/vlayoutpaper.h index d913bcf1c..1e77ee890 100644 --- a/src/libs/vlayout/vlayoutpaper.h +++ b/src/libs/vlayout/vlayoutpaper.h @@ -44,6 +44,7 @@ class VLayoutPiece; class QGraphicsRectItem; class QRectF; class QGraphicsItem; +class QMutex; template class QList; template class QVector; @@ -107,7 +108,11 @@ public: private: QSharedDataPointer d; - bool SaveResult(const VBestSquare &bestResult, const VLayoutPiece &detail); + bool SaveResult(const VBestSquare &bestResult, const VLayoutPiece &detail +#ifdef LAYOUT_DEBUG + , QMutex *mutex +#endif + ); }; diff --git a/src/libs/vlayout/vposition.cpp b/src/libs/vlayout/vposition.cpp index b1cfd6f50..9947d3451 100644 --- a/src/libs/vlayout/vposition.cpp +++ b/src/libs/vlayout/vposition.cpp @@ -61,6 +61,85 @@ #include #endif +namespace +{ +#ifdef LAYOUT_DEBUG +//--------------------------------------------------------------------------------------------------------------------- +QPainterPath ShowDirection(const QLineF &edge) +{ + const int arrowLength = 14; + QPainterPath path; + if (edge.length()/arrowLength < 5) + { + return path; + } + + QLineF arrow = edge; + arrow.setLength(edge.length()/2.0); + + //Reverse line because we want start arrow from this point + arrow = QLineF(arrow.p2(), arrow.p1()); + const qreal angle = arrow.angle();//we each time change line angle, better save original angle value + arrow.setLength(arrowLength);//arrow length in pixels + + arrow.setAngle(angle-35); + path.moveTo(arrow.p1()); + path.lineTo(arrow.p2()); + + arrow.setAngle(angle+35); + path.moveTo(arrow.p1()); + path.lineTo(arrow.p2()); + return path; +} + +//--------------------------------------------------------------------------------------------------------------------- +QPainterPath DumpContour(const QVector &points) +{ + QPainterPath path; + path.setFillRule(Qt::WindingFill); + if (points.count() >= 2) + { + for (qint32 i = 0; i < points.count()-1; ++i) + { + path.moveTo(points.at(i)); + path.lineTo(points.at(i+1)); + } + path.lineTo(points.at(0)); + +#ifdef SHOW_DIRECTION + for (qint32 i = 0; i < points.count()-1; ++i) + { + path.addPath(ShowDirection(QLineF(points.at(i), points.at(i+1)))); + } +#endif + +#ifdef SHOW_VERTICES + for (qint32 i = 0; i < points.count(); ++i) + { + path.addRect(points.at(i).x()-3, points.at(i).y()-3, 6, 6); + } +#endif + } + return path; +} + +//--------------------------------------------------------------------------------------------------------------------- +QPainterPath DumpDetails(const QVector &details) +{ + QPainterPath path; + path.setFillRule(Qt::WindingFill); + if (details.count() > 0) + { + for (auto &detail : details) + { + path.addPath(detail.ContourPath()); + } + } + return path; +} +#endif +} //anonymous namespace + //--------------------------------------------------------------------------------------------------------------------- VPosition::VPosition() {} @@ -246,6 +325,12 @@ bool VPosition::CheckCombineEdges(VLayoutPiece &detail, int j, int &dEdge) CombineEdges(detail, globalEdge, dEdge); +#ifdef LAYOUT_DEBUG +# ifdef SHOW_COMBINE + DumpFrame(m_data.gContour, detail, m_data.mutex, m_data.details); +# endif +#endif + CrossingType type = CrossingType::Intersection; if (not detail.IsForceFlipping() && SheetContains(detail.DetailBoundingRect())) { @@ -276,6 +361,12 @@ bool VPosition::CheckCombineEdges(VLayoutPiece &detail, int j, int &dEdge) if (flagMirror && not detail.IsForbidFlipping()) { +#ifdef LAYOUT_DEBUG +# ifdef SHOW_MIRROR + DumpFrame(m_data.gContour, detail, m_data.mutex, m_data.details); +# endif +#endif + dEdge = detail.LayoutEdgeByPoint(globalEdge.p2()); if (dEdge <= 0) @@ -319,6 +410,12 @@ bool VPosition::CheckRotationEdges(VLayoutPiece &detail, int j, int dEdge, qreal RotateEdges(detail, globalEdge, dEdge, angle); +#ifdef LAYOUT_DEBUG +# ifdef SHOW_ROTATION + DumpFrame(m_data.gContour, detail, m_data.mutex, m_data.details); +# endif +#endif + CrossingType type = CrossingType::Intersection; if (SheetContains(detail.DetailBoundingRect())) { @@ -349,6 +446,12 @@ void VPosition::RotateOnAngle(qreal angle) if (CheckRotationEdges(workDetail, m_data.j, m_data.i, angle)) { +#ifdef LAYOUT_DEBUG +# ifdef SHOW_CANDIDATE_BEST + DumpFrame(m_data.gContour, workDetail, m_data.mutex, m_data.details); +# endif +#endif + SaveCandidate(m_bestResult, workDetail, m_data.j, m_data.i, BestFrom::Rotation); } } @@ -497,6 +600,12 @@ void VPosition::FindBestPosition() int dEdge = m_data.i;// For mirror detail edge will be different if (CheckCombineEdges(workDetail, m_data.j, dEdge)) { +#ifdef LAYOUT_DEBUG +# ifdef SHOW_CANDIDATE_BEST + DumpFrame(m_data.gContour, workDetail, m_data.mutex, m_data.details); +# endif +#endif + SaveCandidate(m_bestResult, workDetail, m_data.j, dEdge, BestFrom::Combine); } @@ -515,3 +624,92 @@ void VPosition::FindBestPosition() FollowGrainline(); } } + +#ifdef LAYOUT_DEBUG +//--------------------------------------------------------------------------------------------------------------------- +void VPosition::DumpFrame(const VContour &contour, const VLayoutPiece &detail, QMutex *mutex, + const QVector &details = QVector()) +{ + auto Bias = [](int length, int maxLength) + { + return length < maxLength && length*2 < maxLength ? length : maxLength-length; + }; + + const int biasWidth = Bias(contour.GetWidth(), QIMAGE_MAX); + const int biasHeight = Bias(contour.GetHeight(), QIMAGE_MAX); + + QPicture picture; + QPainter paint; + paint.begin(&picture); + + paint.setPen(QPen(Qt::black, 6, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); + QPainterPath p; + if (contour.GetContour().isEmpty()) + { + p = DumpContour(contour.CutEmptySheetEdge()); + p.translate(biasWidth/2, biasHeight/2); + paint.drawPath(p); + } + else + { + p = DumpContour(contour.GetContour()); + p.translate(biasWidth/2, biasHeight/2); + paint.drawPath(p); + } + +#ifdef SHOW_CANDIDATE + paint.setPen(QPen(Qt::darkGreen, 6, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); + p = DumpContour(detail.GetLayoutAllowancePoints()); + p.translate(biasWidth/2, biasHeight/2); + paint.drawPath(p); +#else + Q_UNUSED(detail) + Q_UNUSED(details) +#endif + +#ifdef ARRANGED_DETAILS + paint.setPen(QPen(Qt::blue, 2, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); + p = DumpDetails(details); + p.translate(biasWidth/2, biasHeight/2); + paint.drawPath(p); +#else + Q_UNUSED(details) +#endif + + // Calculate bounding rect before draw sheet rect + const QRect pictureRect = picture.boundingRect(); + + // Sheet +#ifdef SHOW_SHEET + paint.setPen(QPen(Qt::darkRed, 15, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); + paint.drawRect(QRectF(biasWidth/2, biasHeight/2, contour.GetWidth(), contour.GetHeight())); +#endif + + paint.end(); + + // Dump frame to image + // Note. If program was build with Address Sanitizer possible crashes. Address Sanitizer doesn't support big + // allocations. See page https://bitbucket.org/dismine/valentina/wiki/developers/Address_Sanitizer + QImage frameImage(pictureRect.width()+biasWidth, pictureRect.height()+biasHeight, QImage::Format_RGB32); + + if (frameImage.isNull()) + { + return; + } + + frameImage.fill(Qt::white); + + QPainter paintFrameImage; + paintFrameImage.begin(&frameImage); + paintFrameImage.drawPicture(0, 0, picture); + paintFrameImage.end(); + + QMutexLocker locker(mutex); + + static int frame = 0; + ++frame; + + const QString path = QDir::homePath()+QStringLiteral("/LayoutDebug/%1.png").arg(frame); + frameImage.save (path); +} +#endif diff --git a/src/libs/vlayout/vposition.h b/src/libs/vlayout/vposition.h index b3db55370..2f80199e2 100644 --- a/src/libs/vlayout/vposition.h +++ b/src/libs/vlayout/vposition.h @@ -35,6 +35,10 @@ #include #include +#ifdef LAYOUT_DEBUG +#include +#endif + #include "vbestsquare.h" #include "vcontour.h" #include "vlayoutdef.h" @@ -51,6 +55,10 @@ struct VPositionData bool followGrainline{false}; QVector positionsCache{}; bool isOriginPaperOrientationPortrait{true}; +#ifdef LAYOUT_DEBUG + QVector details{}; + QMutex *mutex{nullptr}; +#endif }; QT_WARNING_PUSH @@ -72,6 +80,11 @@ public: static VBestSquare ArrangeDetail(const VPositionData &data, std::atomic_bool *stop, bool saveLength); +#ifdef LAYOUT_DEBUG + static void DumpFrame(const VContour &contour, const VLayoutPiece &detail, QMutex *mutex, + const QVector &details); +#endif + private: bool m_isValid{false}; VBestSquare m_bestResult{}; From f4f6ba9989ea9c9476acd38cad578d8f32ae5776 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 26 Nov 2020 19:11:42 +0200 Subject: [PATCH 06/15] Improve canceling nesting. --- ChangeLog.txt | 1 + src/libs/vlayout/vposition.cpp | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/ChangeLog.txt b/ChangeLog.txt index 2a4a53921..5a3d9b9e5 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,5 +1,6 @@ # Version 0.7.41 (unreleased) - Bug fixes. +- Improve canceling nesting. # Version 0.7.40 Nov 23, 2020 - New function Warning. diff --git a/src/libs/vlayout/vposition.cpp b/src/libs/vlayout/vposition.cpp index 9947d3451..542b8c14e 100644 --- a/src/libs/vlayout/vposition.cpp +++ b/src/libs/vlayout/vposition.cpp @@ -446,6 +446,11 @@ void VPosition::RotateOnAngle(qreal angle) if (CheckRotationEdges(workDetail, m_data.j, m_data.i, angle)) { + if (stop->load()) + { + return; + } + #ifdef LAYOUT_DEBUG # ifdef SHOW_CANDIDATE_BEST DumpFrame(m_data.gContour, workDetail, m_data.mutex, m_data.details); @@ -592,6 +597,11 @@ void VPosition::FollowGrainline() //--------------------------------------------------------------------------------------------------------------------- void VPosition::FindBestPosition() { + if (stop->load()) + { + return; + } + if (not m_data.followGrainline || not m_data.detail.IsGrainlineEnabled()) { // We should use copy of the detail. @@ -600,6 +610,11 @@ void VPosition::FindBestPosition() int dEdge = m_data.i;// For mirror detail edge will be different if (CheckCombineEdges(workDetail, m_data.j, dEdge)) { + if (stop->load()) + { + return; + } + #ifdef LAYOUT_DEBUG # ifdef SHOW_CANDIDATE_BEST DumpFrame(m_data.gContour, workDetail, m_data.mutex, m_data.details); From a6437dbb3b83fb1884a7ed6a1c52973b36b904d8 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 26 Nov 2020 19:12:59 +0200 Subject: [PATCH 07/15] Fix incorrect nesting status for valid cases. --- ChangeLog.txt | 1 + src/libs/vlayout/vbank.cpp | 8 ++++---- src/libs/vlayout/vbank.h | 2 +- src/libs/vlayout/vlayoutgenerator.cpp | 5 +++++ 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 5a3d9b9e5..d4d8088c0 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,6 +1,7 @@ # Version 0.7.41 (unreleased) - Bug fixes. - Improve canceling nesting. +- Fix incorrect nesting status for valid cases. # Version 0.7.40 Nov 23, 2020 - New function Warning. diff --git a/src/libs/vlayout/vbank.cpp b/src/libs/vlayout/vbank.cpp index 8931bec50..23c70c9f6 100644 --- a/src/libs/vlayout/vbank.cpp +++ b/src/libs/vlayout/vbank.cpp @@ -438,15 +438,15 @@ int VBank::LeftToArrange() const } //--------------------------------------------------------------------------------------------------------------------- -qreal VBank::GetBiggestDiagonal() const +int VBank::FailedToArrange() const { - return diagonal; + return CountDetails(unsorted); } //--------------------------------------------------------------------------------------------------------------------- -int VBank::ArrangedCount() const +qreal VBank::GetBiggestDiagonal() const { - return details.size() - AllDetailsCount(); + return diagonal; } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vlayout/vbank.h b/src/libs/vlayout/vbank.h index 37b821e72..976c28f41 100644 --- a/src/libs/vlayout/vbank.h +++ b/src/libs/vlayout/vbank.h @@ -80,7 +80,7 @@ public: int AllDetailsCount() const; int LeftToArrange() const; - int ArrangedCount() const; + int FailedToArrange() const; qreal GetBiggestDiagonal() const; diff --git a/src/libs/vlayout/vlayoutgenerator.cpp b/src/libs/vlayout/vlayoutgenerator.cpp index c34d403c3..a2e0efe86 100644 --- a/src/libs/vlayout/vlayoutgenerator.cpp +++ b/src/libs/vlayout/vlayoutgenerator.cpp @@ -267,6 +267,11 @@ void VLayoutGenerator::Generate(const QElapsedTimer &timer, qint64 timeout, Layo { UnitePages(); } + + if (bank->FailedToArrange() == 0) + { + state = LayoutErrors::NoError; + } } //--------------------------------------------------------------------------------------------------------------------- From 27fe4b15fd61755c51b46a158f38d1c9836ab3cc Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 26 Nov 2020 19:39:18 +0200 Subject: [PATCH 08/15] Fix regression. Regression after commit 1539abaf4d905653cb746cd9919640990c3196ab. --- src/libs/vtools/tools/vtoolseamallowance.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index 68d12044c..023686d53 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -1744,7 +1744,9 @@ void VToolSeamAllowance::InitNodes(const VPiece &detail, VMainGraphicsScene *sce { for (int i = 0; i< detail.GetPath().CountNodes(); ++i) { - InitNode(detail.GetPath().at(i), scene, this); + const VPieceNode &node = detail.GetPath().at(i); + InitNode(node, scene, this); + doc->IncrementReferens(VAbstractTool::data.GetGObject(node.GetId())->getIdTool()); } } From f2624692e38df455921f70afb5401df1f86a9cf8 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 26 Nov 2020 19:39:55 +0200 Subject: [PATCH 09/15] Refactoring. Rename the function to better reflect its purpose. --- src/app/valentina/mainwindow.cpp | 2 +- src/libs/vtools/tools/vtoolseamallowance.cpp | 4 ++-- src/libs/vtools/tools/vtoolseamallowance.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index 5474a6324..d883cf8f6 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -1336,7 +1336,7 @@ void MainWindow::ClosedDialogInsertNode(int result) { const QPointer dTool = qobject_cast(dialogTool); SCASSERT(not dTool.isNull()) - VToolSeamAllowance::InsertNode(dTool->GetNodes(), dTool->GetPieceId(), sceneDetails, pattern, doc); + VToolSeamAllowance::InsertNodes(dTool->GetNodes(), dTool->GetPieceId(), sceneDetails, pattern, doc); } ArrowTool(true); doc->LiteParseTree(Document::LiteParse); diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index 023686d53..c20bb4cf0 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -223,8 +223,8 @@ void VToolSeamAllowance::RemoveWithConfirm(bool ask) } //--------------------------------------------------------------------------------------------------------------------- -void VToolSeamAllowance::InsertNode(const QVector &nodes, quint32 pieceId, VMainGraphicsScene *scene, - VContainer *data, VAbstractPattern *doc) +void VToolSeamAllowance::InsertNodes(const QVector &nodes, quint32 pieceId, VMainGraphicsScene *scene, + VContainer *data, VAbstractPattern *doc) { SCASSERT(scene != nullptr) SCASSERT(data != nullptr) diff --git a/src/libs/vtools/tools/vtoolseamallowance.h b/src/libs/vtools/tools/vtoolseamallowance.h index 557aaf3c8..bea05f8d6 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.h +++ b/src/libs/vtools/tools/vtoolseamallowance.h @@ -91,7 +91,7 @@ public: void RemoveWithConfirm(bool ask); - static void InsertNode(const QVector &nodes, quint32 pieceId, VMainGraphicsScene *scene, + static void InsertNodes(const QVector &nodes, quint32 pieceId, VMainGraphicsScene *scene, VContainer *data, VAbstractPattern *doc); static void AddAttributes(VAbstractPattern *doc, QDomElement &domElement, quint32 id, const VPiece &piece); From 3ce704d039d6ddca4386367600ecb703601f49f9 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 26 Nov 2020 19:55:02 +0200 Subject: [PATCH 10/15] Improve crossing check for the layout algorithm. --- ChangeLog.txt | 1 + src/libs/vlayout/vposition.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index d4d8088c0..efb8159f3 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -2,6 +2,7 @@ - Bug fixes. - Improve canceling nesting. - Fix incorrect nesting status for valid cases. +- Improve crossing check for the layout algorithm. # Version 0.7.40 Nov 23, 2020 - New function Warning. diff --git a/src/libs/vlayout/vposition.cpp b/src/libs/vlayout/vposition.cpp index 542b8c14e..4570d8ab0 100644 --- a/src/libs/vlayout/vposition.cpp +++ b/src/libs/vlayout/vposition.cpp @@ -480,10 +480,11 @@ VPosition::CrossingType VPosition::Crossing(const VLayoutPiece &detail) const for(auto &position : m_data.positionsCache) { - if (position.boundingRect.intersects(layoutBoundingRect) || position.boundingRect.contains(detailBoundingRect)) + if (position.boundingRect.intersects(layoutBoundingRect) || position.boundingRect.contains(detailBoundingRect) + || detailBoundingRect.contains(position.boundingRect)) { - if (position.layoutAllowancePath.contains(contourPath) || - position.layoutAllowancePath.intersects(layoutAllowancePath)) + if (position.layoutAllowancePath.contains(contourPath) || contourPath.contains(position.layoutAllowancePath) + || position.layoutAllowancePath.intersects(layoutAllowancePath)) { return CrossingType::Intersection; } From 53f686e919b3631ceaf5c270c4b32449efe5cef6 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 27 Nov 2020 10:34:23 +0200 Subject: [PATCH 11/15] Fix crash after creating an elliptical arc. --- ChangeLog.txt | 1 + src/app/valentina/core/vtooloptionspropertybrowser.cpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/ChangeLog.txt b/ChangeLog.txt index efb8159f3..045473ba3 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -3,6 +3,7 @@ - Improve canceling nesting. - Fix incorrect nesting status for valid cases. - Improve crossing check for the layout algorithm. +- Fix crash after creating an elliptical arc. # Version 0.7.40 Nov 23, 2020 - New function Warning. diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.cpp b/src/app/valentina/core/vtooloptionspropertybrowser.cpp index 392172920..55576123c 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.cpp +++ b/src/app/valentina/core/vtooloptionspropertybrowser.cpp @@ -2473,6 +2473,9 @@ void VToolOptionsPropertyBrowser::ChangeDataToolEllipticalArc(VPE::VProperty *pr switch (PropertiesList().indexOf(id)) { + case 0: // AttrName + Q_UNREACHABLE();//The attribute is read only + break; case 40://AttrRadius1 SetFormulaRadius1(property); break; @@ -3067,6 +3070,7 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolEllipticalArc(QGraphicsItem *it i->ShowVisualization(true); formView->setTitle(tr("Elliptical arc")); + AddPropertyObjectName(i, tr("Name:"), true); AddPropertyParentPointName(i->CenterPointName(), tr("Center point:"), AttrCenter); AddPropertyFormula(tr("Radius:"), i->GetFormulaRadius1(), AttrRadius1); AddPropertyFormula(tr("Radius:"), i->GetFormulaRadius2(), AttrRadius2); From 8877ce463073f182a69e9165a6dce717628a6e71 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 27 Nov 2020 10:42:00 +0200 Subject: [PATCH 12/15] Fix arc name in property browser. --- .../toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp index a7536d80b..34df55804 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp @@ -234,7 +234,7 @@ QString VToolPointFromArcAndTangent::TangentPointName() const //--------------------------------------------------------------------------------------------------------------------- QString VToolPointFromArcAndTangent::ArcName() const { - return VAbstractTool::data.GetGObject(arcId)->name(); + return VAbstractTool::data.GetGObject(arcId)->ObjectName(); } //--------------------------------------------------------------------------------------------------------------------- From c4234b305093eff8ef8b4ac1ea0246e6cfae825b Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 27 Nov 2020 10:57:11 +0200 Subject: [PATCH 13/15] Refactoring. --- .../line/vistoolpointfromarcandtangent.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libs/vtools/visualization/line/vistoolpointfromarcandtangent.cpp b/src/libs/vtools/visualization/line/vistoolpointfromarcandtangent.cpp index 7ddce1671..c6c159ce1 100644 --- a/src/libs/vtools/visualization/line/vistoolpointfromarcandtangent.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointfromarcandtangent.cpp @@ -98,16 +98,16 @@ void VisToolPointFromArcAndTangent::FindRays(const QPointF &p, const VArc *arc) const qreal radius = arc->GetRadius(); const int res = VGObject::ContactPoints (p, center, radius, p1, p2); - QLineF r1Arc(center, p1); - r1Arc.setLength(radius+10); - - QLineF r2Arc(center, p2); - r2Arc.setLength(radius+10); - switch(res) { case 2: { + QLineF r1Arc(center, p1); + r1Arc.setLength(radius+10); + + QLineF r2Arc(center, p2); + r2Arc.setLength(radius+10); + int localRes = 0; bool flagP1 = false; From d7600dff148a4086788e761344b12b1e349da478 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 27 Nov 2020 10:57:51 +0200 Subject: [PATCH 14/15] Unify a tool name for the tool Point of intersection circle and segment. --- src/app/valentina/core/vtooloptionspropertybrowser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.cpp b/src/app/valentina/core/vtooloptionspropertybrowser.cpp index 55576123c..bf71188c2 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.cpp +++ b/src/app/valentina/core/vtooloptionspropertybrowser.cpp @@ -2752,7 +2752,7 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolPointOfContact(QGraphicsItem *i { auto *i = qgraphicsitem_cast(item); i->ShowVisualization(true); - formView->setTitle(tr("Point at intersection of arc and line")); + formView->setTitle(tr("Point of intersection circle and segment")); AddPropertyObjectName(i, tr("Point label:")); AddPropertyParentPointName(i->ArcCenterPointName(), tr("Center of arc:"), AttrCenter); From 2a5d6c6aa9e27c802bea24f0a9f17f029a61f8dc Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 27 Nov 2020 11:03:08 +0200 Subject: [PATCH 15/15] Lupdate. --- share/translations/valentina.ts | 6 +++++- share/translations/valentina_cs_CZ.ts | 6 +++++- share/translations/valentina_de_DE.ts | 6 +++++- share/translations/valentina_el_GR.ts | 6 +++++- share/translations/valentina_en_CA.ts | 6 +++++- share/translations/valentina_en_IN.ts | 6 +++++- share/translations/valentina_en_US.ts | 6 +++++- share/translations/valentina_es_ES.ts | 6 +++++- share/translations/valentina_fi_FI.ts | 6 +++++- share/translations/valentina_fr_FR.ts | 6 +++++- share/translations/valentina_he_IL.ts | 8 ++++---- share/translations/valentina_id_ID.ts | 8 ++++---- share/translations/valentina_it_IT.ts | 6 +++++- share/translations/valentina_nl_NL.ts | 20 ++++++++++++-------- share/translations/valentina_pl_PL.ts | 8 ++++---- share/translations/valentina_pt_BR.ts | 6 +++++- share/translations/valentina_ro_RO.ts | 8 ++++---- share/translations/valentina_ru_RU.ts | 6 +++++- share/translations/valentina_uk_UA.ts | 6 +++++- share/translations/valentina_zh_CN.ts | 8 ++++---- 20 files changed, 102 insertions(+), 42 deletions(-) diff --git a/share/translations/valentina.ts b/share/translations/valentina.ts index a3594891f..e66163bea 100644 --- a/share/translations/valentina.ts +++ b/share/translations/valentina.ts @@ -15110,7 +15110,7 @@ Do you want to save your changes? Point at intersection of arc and line - Point at intersection of arc and line + Point at intersection of arc and line Tool to make point from x & y of two other points @@ -15572,6 +15572,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_cs_CZ.ts b/share/translations/valentina_cs_CZ.ts index 1dc68efd4..f3474211d 100644 --- a/share/translations/valentina_cs_CZ.ts +++ b/share/translations/valentina_cs_CZ.ts @@ -14668,7 +14668,7 @@ Chcete uložit změny? Point at intersection of arc and line - Bod v průsečíku oblouku a čáry + Bod v průsečíku oblouku a čáry Tool to make point from x & y of two other points @@ -15130,6 +15130,10 @@ Chcete uložit změny? Alias2: + + Point of intersection circle and segment + Průsečík kruhu a části + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_de_DE.ts b/share/translations/valentina_de_DE.ts index 3fe121b9a..ff79e4dd5 100644 --- a/share/translations/valentina_de_DE.ts +++ b/share/translations/valentina_de_DE.ts @@ -14634,7 +14634,7 @@ Do you want to save your changes? Point at intersection of arc and line - Laufender Schnittpunkt auf Kreisbogen + Laufender Schnittpunkt auf Kreisbogen Tool to make point from x & y of two other points @@ -15088,6 +15088,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + Punkt am Schnittpunkt von Kreis und Abschnitt + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_el_GR.ts b/share/translations/valentina_el_GR.ts index f35b5e882..7f861a189 100644 --- a/share/translations/valentina_el_GR.ts +++ b/share/translations/valentina_el_GR.ts @@ -14191,7 +14191,7 @@ Do you want to save your changes? Point at intersection of arc and line - Σημείο στην τομή τόξου και γραμμής + Σημείο στην τομή τόξου και γραμμής Tool to make point from x & y of two other points @@ -14649,6 +14649,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_en_CA.ts b/share/translations/valentina_en_CA.ts index d5af7c07c..11fba5c88 100644 --- a/share/translations/valentina_en_CA.ts +++ b/share/translations/valentina_en_CA.ts @@ -14659,7 +14659,7 @@ Do you want to save your changes? Point at intersection of arc and line - Point at intersection of arc and line + Point at intersection of arc and line Tool to make point from x & y of two other points @@ -15121,6 +15121,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_en_IN.ts b/share/translations/valentina_en_IN.ts index 876e12338..421016a01 100644 --- a/share/translations/valentina_en_IN.ts +++ b/share/translations/valentina_en_IN.ts @@ -14659,7 +14659,7 @@ Do you want to save your changes? Point at intersection of arc and line - Point at intersection of arc and line + Point at intersection of arc and line Tool to make point from x & y of two other points @@ -15121,6 +15121,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_en_US.ts b/share/translations/valentina_en_US.ts index a53b50993..bae286416 100644 --- a/share/translations/valentina_en_US.ts +++ b/share/translations/valentina_en_US.ts @@ -14659,7 +14659,7 @@ Do you want to save your changes? Point at intersection of arc and line - Point at intersection of arc and line + Point at intersection of arc and line Tool to make point from x & y of two other points @@ -15121,6 +15121,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_es_ES.ts b/share/translations/valentina_es_ES.ts index 1d8fabc46..b4aaf5c7c 100644 --- a/share/translations/valentina_es_ES.ts +++ b/share/translations/valentina_es_ES.ts @@ -14666,7 +14666,7 @@ Quieres guardar los cambios? Point at intersection of arc and line - Punto de intersección del arco y la línea + Punto de intersección del arco y la línea Tool to make point from x & y of two other points @@ -15128,6 +15128,10 @@ Quieres guardar los cambios? Alias2: + + Point of intersection circle and segment + Punto de intersección circulo y segmento + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_fi_FI.ts b/share/translations/valentina_fi_FI.ts index dd37a34e8..0557f20cf 100644 --- a/share/translations/valentina_fi_FI.ts +++ b/share/translations/valentina_fi_FI.ts @@ -13109,7 +13109,7 @@ Do you want to save your changes? Point at intersection of arc and line - Kaaren ja viivan leikkauspiste + Kaaren ja viivan leikkauspiste Tool to make point from x & y of two other points @@ -13511,6 +13511,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_fr_FR.ts b/share/translations/valentina_fr_FR.ts index 1c5b61071..4260f879d 100644 --- a/share/translations/valentina_fr_FR.ts +++ b/share/translations/valentina_fr_FR.ts @@ -14622,7 +14622,7 @@ Voulez-vous enregistrer les changements? Point at intersection of arc and line - Point à l'intersection d'un arc et d'une ligne + Point à l'intersection d'un arc et d'une ligne Tool to make point from x & y of two other points @@ -15080,6 +15080,10 @@ Voulez-vous enregistrer les changements? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_he_IL.ts b/share/translations/valentina_he_IL.ts index a984c2e62..61912f7eb 100644 --- a/share/translations/valentina_he_IL.ts +++ b/share/translations/valentina_he_IL.ts @@ -11789,10 +11789,6 @@ Do you want to save your changes? Point along perpendicular - - Point at intersection of arc and line - - Tool to make point from x & y of two other points @@ -12181,6 +12177,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_id_ID.ts b/share/translations/valentina_id_ID.ts index a6f3cfa77..6ff38ce7a 100644 --- a/share/translations/valentina_id_ID.ts +++ b/share/translations/valentina_id_ID.ts @@ -12185,10 +12185,6 @@ Do you want to save your changes? Point along perpendicular - - Point at intersection of arc and line - - Tool to make point from x & y of two other points @@ -12577,6 +12573,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_it_IT.ts b/share/translations/valentina_it_IT.ts index a21d248cf..50133b77f 100644 --- a/share/translations/valentina_it_IT.ts +++ b/share/translations/valentina_it_IT.ts @@ -14571,7 +14571,7 @@ Vuoi salvare le tue modifiche? Point at intersection of arc and line - Punto di intersezione tra arco e linea + Punto di intersezione tra arco e linea Tool to make point from x & y of two other points @@ -15025,6 +15025,10 @@ Vuoi salvare le tue modifiche? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_nl_NL.ts b/share/translations/valentina_nl_NL.ts index b8796e3fb..5c95733b9 100644 --- a/share/translations/valentina_nl_NL.ts +++ b/share/translations/valentina_nl_NL.ts @@ -3369,7 +3369,7 @@ Insert nodes - + Knooppunt invoegen Delete @@ -4737,7 +4737,7 @@ Toch de instellingen aanpassen? untitled - zonder titel + naamloos Path: @@ -7650,7 +7650,7 @@ Toch de instellingen aanpassen? New %1 test version is now available. Would you like to download it now? - + Nieuwe %1 test versie is beschikbaar. Wens je die nu te downloaden? @@ -8254,7 +8254,7 @@ Toch de instellingen aanpassen? untitled.val - zonder titel.val + naamloos.val The pattern has been modified. @@ -10981,7 +10981,7 @@ Deze optie wordt actief na een herstart.. untitled %1 - zonder titel %1 + naamloos %1 This file already opened in another window. @@ -11053,7 +11053,7 @@ Deze optie wordt actief na een herstart.. untitled - zonder titel + naamloos <Empty> @@ -14665,7 +14665,7 @@ Wil je deze veranderingen opslaan? Point at intersection of arc and line - Kruispunt van boog en lijn + Kruispunt van boog en lijn Tool to make point from x & y of two other points @@ -15127,6 +15127,10 @@ Wil je deze veranderingen opslaan? Alias2: Alias2: + + Point of intersection circle and segment + Kruispunt van cirkel en segment + VToolPointFromArcAndTangent @@ -17169,7 +17173,7 @@ Deze wijziging opslaan? untitled.vwm - untitled.vwm + naamloos.vwm Confirm format rewriting diff --git a/share/translations/valentina_pl_PL.ts b/share/translations/valentina_pl_PL.ts index f2e2c0459..78c410684 100644 --- a/share/translations/valentina_pl_PL.ts +++ b/share/translations/valentina_pl_PL.ts @@ -13256,10 +13256,6 @@ Do you want to save your changes? Point along perpendicular Dodaj punkt prostopadły - - Point at intersection of arc and line - - Tool to make point from x & y of two other points @@ -13660,6 +13656,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_pt_BR.ts b/share/translations/valentina_pt_BR.ts index b5dd48dd2..9238ec4a2 100644 --- a/share/translations/valentina_pt_BR.ts +++ b/share/translations/valentina_pt_BR.ts @@ -14590,7 +14590,7 @@ Deseja salvar suas mudanças? Point at intersection of arc and line - Ponto de interseção entre arco e linha + Ponto de interseção entre arco e linha Tool to make point from x & y of two other points @@ -15052,6 +15052,10 @@ Deseja salvar suas mudanças? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_ro_RO.ts b/share/translations/valentina_ro_RO.ts index 047f1fedc..9ee276396 100644 --- a/share/translations/valentina_ro_RO.ts +++ b/share/translations/valentina_ro_RO.ts @@ -12958,10 +12958,6 @@ Do you want to save your changes? Additional angle degrees Grade de unghi suplimentare - - Point at intersection of arc and line - - Tool to make point from x & y of two other points @@ -13358,6 +13354,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_ru_RU.ts b/share/translations/valentina_ru_RU.ts index ce7d48c7e..a260eacc1 100644 --- a/share/translations/valentina_ru_RU.ts +++ b/share/translations/valentina_ru_RU.ts @@ -14667,7 +14667,7 @@ Do you want to save your changes? Point at intersection of arc and line - Точка на пересечении дуги и линии + Точка на пересечении дуги и линии Tool to make point from x & y of two other points @@ -15129,6 +15129,10 @@ Do you want to save your changes? Alias2: Псевдоним 2: + + Point of intersection circle and segment + Точка пересечения окружности и отрезка + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_uk_UA.ts b/share/translations/valentina_uk_UA.ts index 578ca754c..c2c4c9580 100644 --- a/share/translations/valentina_uk_UA.ts +++ b/share/translations/valentina_uk_UA.ts @@ -14658,7 +14658,7 @@ Do you want to save your changes? Point at intersection of arc and line - Точка на перетині дуги та лінії + Точка на перетині дуги та лінії Tool to make point from x & y of two other points @@ -15120,6 +15120,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent diff --git a/share/translations/valentina_zh_CN.ts b/share/translations/valentina_zh_CN.ts index a4417e12a..f14ac728d 100644 --- a/share/translations/valentina_zh_CN.ts +++ b/share/translations/valentina_zh_CN.ts @@ -11990,10 +11990,6 @@ Do you want to save your changes? Point along perpendicular - - Point at intersection of arc and line - - Tool to make point from x & y of two other points @@ -12390,6 +12386,10 @@ Do you want to save your changes? Alias2: + + Point of intersection circle and segment + + VToolPointFromArcAndTangent