Fix bug with nesting a descending group.

Together with "Nest quantity" and limited space Valentina removes all
duplicates except first for each next paper sheet.

--HG--
branch : develop
This commit is contained in:
Roman Telezhynskyi 2019-07-27 09:02:41 +03:00
parent ba69759634
commit 5978df2629
2 changed files with 24 additions and 36 deletions

View File

@ -32,7 +32,6 @@
#include "../vmisc/diagnostic.h" #include "../vmisc/diagnostic.h"
#include "../vmisc/vabstractapplication.h" #include "../vmisc/vabstractapplication.h"
#include "vlayoutpiece.h"
#include "vlayoutdef.h" #include "vlayoutdef.h"
#include "../ifc/exception/vexception.h" #include "../ifc/exception/vexception.h"
#include "../vpatterndb/floatItemData/floatitemdef.h" #include "../vpatterndb/floatItemData/floatitemdef.h"
@ -95,7 +94,8 @@ int CountDetails(const T &container)
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
bool NotArrangedDetail(QMap<uint, QHash<int, qint64>> &container, QMap<uint, QHash<int, qint64>> &unsorted, int i) bool NotArrangedDetail(QMap<uint, QHash<int, qint64>> &container, QMap<uint, QHash<int, qint64>> &unsorted,
int i)
{ {
QMutableMapIterator<uint, QHash<int, qint64>> iterator(container); QMutableMapIterator<uint, QHash<int, qint64>> iterator(container);
while (iterator.hasNext()) while (iterator.hasNext())
@ -122,19 +122,20 @@ bool NotArrangedDetail(QMap<uint, QHash<int, qint64>> &container, QMap<uint, QHa
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
bool NotArrangedDetail(QMap<uint, QMultiMap<qint64, int>> &container, QMap<uint, QHash<int, qint64>> &unsorted, int i) bool NotArrangedDetail(QMap<uint, QMultiMap<qint64, int>> &container, QMap<uint, QHash<int, qint64>> &unsorted,
int i)
{ {
QMutableMapIterator<uint, QMultiMap<qint64, int>> iterator(container); QMutableMapIterator<uint, QMultiMap<qint64, int>> iterator(container);
while (iterator.hasNext()) while (iterator.hasNext())
{ {
iterator.next(); iterator.next();
auto containerGroup = container.value(iterator.key()); auto containerGroup = container.value(iterator.key());
auto detailIterator = std::find(containerGroup.cbegin(), containerGroup.cend(), i); auto detailIterator = std::find(containerGroup.begin(), containerGroup.end(), i);
if (detailIterator != containerGroup.cend()) if (detailIterator != containerGroup.end())
{ {
Insert(unsorted, iterator.key(), i, detailIterator.key()); Insert(unsorted, iterator.key(), i, detailIterator.key());
containerGroup.erase(detailIterator);
containerGroup.remove(detailIterator.key());
if (not containerGroup.isEmpty()) if (not containerGroup.isEmpty())
{ {
container.insert(iterator.key(), containerGroup); container.insert(iterator.key(), containerGroup);
@ -165,18 +166,6 @@ int TakeFirstForPriority(const QMap<uint, QHash<int, qint64>> &container, uint p
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VBank::VBank() VBank::VBank()
: details(),
unsorted(),
big(),
middle(),
small(),
desc(),
groups(),
arranged(),
layoutWidth(0),
caseType(Cases::CaseDesc),
prepare(false),
diagonal(0)
{} {}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -622,7 +611,7 @@ void VBank::SqMaxMin(qint64 &sMax, qint64 &sMin, uint priority) const
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
bool VBank::ArrangedDetail(QMap<uint, QHash<int, qint64>> &container, int i) bool VBank::ArrangedDetail(QMap<uint, QHash<int, qint64> > &container, int i)
{ {
QMutableMapIterator<uint, QHash<int, qint64>> iterator(container); QMutableMapIterator<uint, QHash<int, qint64>> iterator(container);
while (iterator.hasNext()) while (iterator.hasNext())
@ -655,11 +644,11 @@ bool VBank::ArrangedDetail(QMap<uint, QMultiMap<qint64, int>> &container, int i)
{ {
iterator.next(); iterator.next();
auto containerGroup = container.value(iterator.key()); auto containerGroup = container.value(iterator.key());
auto detailIterator = std::find(containerGroup.cbegin(), containerGroup.cend(), i); auto detailIterator = std::find(containerGroup.begin(), containerGroup.end(), i);
if (detailIterator != containerGroup.cend()) if (detailIterator != containerGroup.end())
{ {
arranged.append(details.at(detailIterator.value()).GetId()); arranged.append(details.at(detailIterator.value()).GetId());
containerGroup.remove(detailIterator.key(), detailIterator.value()); containerGroup.erase(detailIterator);
if (not containerGroup.isEmpty()) if (not containerGroup.isEmpty())
{ {

View File

@ -37,6 +37,7 @@
#include <QLoggingCategory> #include <QLoggingCategory>
#include "../vmisc/typedef.h" #include "../vmisc/typedef.h"
#include "vlayoutpiece.h"
// An annoying char define, from the Windows team in <rpcndr.h> // An annoying char define, from the Windows team in <rpcndr.h>
// #define small char // #define small char
@ -48,8 +49,6 @@
Q_DECLARE_LOGGING_CATEGORY(lBank) Q_DECLARE_LOGGING_CATEGORY(lBank)
class VLayoutPiece;
enum class Cases : char { CaseThreeGroup = 0, CaseTwoGroup, CaseDesc, UnknownCase}; enum class Cases : char { CaseThreeGroup = 0, CaseTwoGroup, CaseDesc, UnknownCase};
class VBank class VBank
@ -88,22 +87,22 @@ public:
private: private:
Q_DISABLE_COPY(VBank) Q_DISABLE_COPY(VBank)
QVector<VLayoutPiece> details; QVector<VLayoutPiece> details{};
QMap<uint, QHash<int, qint64>> unsorted; QMap<uint, QHash<int, qint64>> unsorted{};
QMap<uint, QHash<int, qint64>> big; QMap<uint, QHash<int, qint64>> big{};
QMap<uint, QHash<int, qint64>> middle; QMap<uint, QHash<int, qint64>> middle{};
QMap<uint, QHash<int, qint64>> small; QMap<uint, QHash<int, qint64>> small{};
QMap<uint, QMultiMap<qint64, int>> desc; QMap<uint, QMultiMap<qint64, int>> desc{};
QVector<uint> groups; QVector<uint> groups{};
QVector<vidtype> arranged; QVector<vidtype> arranged{};
qreal layoutWidth; qreal layoutWidth{0};
Cases caseType; Cases caseType{Cases::CaseDesc};
bool prepare; bool prepare{false};
qreal diagonal; qreal diagonal{0};
bool m_nestQuantity{false}; bool m_nestQuantity{false};
bool m_manualPriority{false}; bool m_manualPriority{false};