Validate a piece when import raw layout or read the layout format.

This commit is contained in:
Roman Telezhynskyi 2021-08-30 20:00:10 +03:00
parent b877009d90
commit 0944ea968a
6 changed files with 48 additions and 33 deletions

View File

@ -428,3 +428,29 @@ auto VPPiece::PathsSuperposition(const QVector<QPointF> &path1, const QVector<QP
return false; return false;
} }
//---------------------------------------------------------------------------------------------------------------------
auto VPPiece::IsValid() const -> bool
{
if (not IsHideMainPath() && GetContourPoints().isEmpty())
{
return false;
}
if (IsSeamAllowance() && IsSeamAllowanceBuiltIn() && GetContourPoints().isEmpty())
{
return false;
}
if (IsSeamAllowance() && not IsSeamAllowanceBuiltIn() && GetSeamAllowancePoints().isEmpty())
{
return false;
}
if (IsGrainlineEnabled() && GetGrainline().isEmpty())
{
return false;
}
return true;
}

View File

@ -116,6 +116,8 @@ public:
static auto PathsSuperposition(const QVector<QPointF> &path1, const QVector<QPointF> &path2) -> bool; static auto PathsSuperposition(const QVector<QPointF> &path1, const QVector<QPointF> &path2) -> bool;
auto IsValid() const -> bool;
private: private:
Q_DISABLE_COPY(VPPiece) Q_DISABLE_COPY(VPPiece)

View File

@ -582,7 +582,7 @@ void VPGraphicsPiece::GroupMove(const QPointF &pos)
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
QColor VPGraphicsPiece::PieceColor() const auto VPGraphicsPiece::PieceColor() const -> QColor
{ {
VPPiecePtr piece = m_piece.toStrongRef(); VPPiecePtr piece = m_piece.toStrongRef();
if (piece.isNull()) if (piece.isNull())

View File

@ -371,15 +371,20 @@ void VPMainWindow::ImportRawLayouts(const QStringList &rawLayouts)
{ {
for (const auto& rawPiece : data.pieces) for (const auto& rawPiece : data.pieces)
{ {
// TODO / FIXME: make a few tests, on the data to check for validity. If not
//
// If seam allowance enabled, but the path is empty — invalid.
// If seam line path not hidden, but the path is empty — invalid.
// If seam allowance is built-in, but the seam line path is empty — invalid.
// TODO for feature "Update piece" : CreateOrUpdate() function indstead of CreatePiece() // TODO for feature "Update piece" : CreateOrUpdate() function indstead of CreatePiece()
VPPiecePtr piece(CreatePiece(rawPiece)); VPPiecePtr piece(new VPPiece(rawPiece));
if (not piece->IsValid())
{
qCCritical(pWindow) << qPrintable(tr("Piece %1 invalid.").arg(piece->GetName()));
if (m_cmd != nullptr && not m_cmd->IsGuiEnabled())
{
QGuiApplication::exit(V_EX_DATAERR);
return;
}
}
piece->SetSheet(nullptr); // just in case piece->SetSheet(nullptr); // just in case
VPLayout::AddPiece(m_layout, piece); VPLayout::AddPiece(m_layout, piece);
} }
@ -408,24 +413,6 @@ void VPMainWindow::InitZoom()
} }
} }
//---------------------------------------------------------------------------------------------------------------------
VPPiece* VPMainWindow::CreatePiece(const VLayoutPiece &rawPiece)
{
auto *piece = new VPPiece(rawPiece);
// cutting line : GetMappedSeamAllowancePoints();
// seamline : GetMappedContourPoints();
// rawPiece.IsGrainlineEnabled() , GrainlineAngle , GetGrainline
// TODO : set all the information we need for the piece!
return piece;
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VPMainWindow::SetupMenu() void VPMainWindow::SetupMenu()
{ {

View File

@ -324,12 +324,6 @@ private:
Unit m_oldPieceTranslationUnit{Unit::Mm}; Unit m_oldPieceTranslationUnit{Unit::Mm};
Unit m_oldLayoutUnit{Unit::Mm}; Unit m_oldLayoutUnit{Unit::Mm};
/**
* @brief CreatePiece creates a piece from the given VLayoutPiece data
* @param rawPiece the raw piece data
*/
Q_REQUIRED_RESULT VPPiece* CreatePiece(const VLayoutPiece &rawPiece);
/** /**
* @brief InitMenuBar Inits the menu bar (File, Edit, Help ...) * @brief InitMenuBar Inits the menu bar (File, Edit, Help ...)
*/ */

View File

@ -410,6 +410,12 @@ void VPLayoutFileReader::ReadPieces(const VPLayoutPtr &layout, const VPSheetPtr
{ {
VPPiecePtr piece(new VPPiece()); VPPiecePtr piece(new VPPiece());
ReadPiece(piece); ReadPiece(piece);
if (not piece->IsValid())
{
throw VException(tr("Piece %1 invalid.").arg(piece->GetName()));
}
piece->SetSheet(sheet); piece->SetSheet(sheet);
VPLayout::AddPiece(layout, piece); VPLayout::AddPiece(layout, piece);
} }