Make full serialization/deserialization for class VLayoutPiece.
--HG-- branch : develop
This commit is contained in:
parent
35eb1cecff
commit
4ab84bce38
|
@ -42,6 +42,9 @@
|
|||
#include <QPainterPath>
|
||||
#include <QTemporaryFile>
|
||||
|
||||
const quint32 VAbstractPieceData::streamHeader = 0x05CDD73A; // CRC-32Q string "VAbstractPieceData"
|
||||
const quint16 VAbstractPieceData::classVersion = 1;
|
||||
|
||||
const qreal maxL = 2.5;
|
||||
|
||||
const qreal VSAPoint::passmarkFactor = 0.5;
|
||||
|
@ -767,6 +770,21 @@ QT_WARNING_POP
|
|||
#endif
|
||||
}
|
||||
|
||||
// Friend functions
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QDataStream &operator<<(QDataStream &dataStream, const VAbstractPiece &piece)
|
||||
{
|
||||
dataStream << *piece.d;
|
||||
return dataStream;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QDataStream &operator>>(QDataStream &dataStream, VAbstractPiece &piece)
|
||||
{
|
||||
dataStream >> *piece.d;
|
||||
return dataStream;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
VAbstractPiece::VAbstractPiece()
|
||||
: d(new VAbstractPieceData)
|
||||
|
|
|
@ -231,6 +231,9 @@ public:
|
|||
static QVector<QPointF> GrainlinePoints(const VGrainlineData &geom, const VContainer *pattern,
|
||||
const QRectF &boundingRect, qreal &dAng);
|
||||
|
||||
friend QDataStream& operator<< (QDataStream& dataStream, const VAbstractPiece& piece);
|
||||
friend QDataStream& operator>> (QDataStream& dataStream, VAbstractPiece& piece);
|
||||
|
||||
protected:
|
||||
template <class T>
|
||||
static QVector<T> RemoveDublicates(const QVector<T> &points, bool removeFirstAndLast = true);
|
||||
|
|
|
@ -34,7 +34,9 @@
|
|||
#include <QCoreApplication>
|
||||
|
||||
#include "../vmisc/diagnostic.h"
|
||||
#include "../vmisc/vdatastreamenum.h"
|
||||
#include "../vmisc/defglobal.h"
|
||||
#include "../ifc/exception/vexception.h"
|
||||
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_GCC("-Weffc++")
|
||||
|
@ -71,6 +73,9 @@ public:
|
|||
|
||||
~VAbstractPieceData() Q_DECL_EQ_DEFAULT;
|
||||
|
||||
friend QDataStream& operator<<(QDataStream& dataStream, const VAbstractPieceData& piece);
|
||||
friend QDataStream& operator>>(QDataStream& dataStream, VAbstractPieceData& piece);
|
||||
|
||||
QString m_name;
|
||||
/** @brief forbidFlipping forbid piece be mirrored in a layout. */
|
||||
bool m_forbidFlipping;
|
||||
|
@ -84,9 +89,78 @@ public:
|
|||
|
||||
private:
|
||||
Q_DISABLE_ASSIGN(VAbstractPieceData)
|
||||
|
||||
static const quint32 streamHeader;
|
||||
static const quint16 classVersion;
|
||||
};
|
||||
|
||||
QT_WARNING_POP
|
||||
|
||||
// Friend functions
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline QDataStream &operator<<(QDataStream &dataStream, const VAbstractPieceData &piece)
|
||||
{
|
||||
dataStream << VAbstractPieceData::streamHeader << VAbstractPieceData::classVersion;
|
||||
|
||||
// Added in classVersion = 1
|
||||
dataStream << piece.m_name;
|
||||
dataStream << piece.m_forbidFlipping;
|
||||
dataStream << piece.m_forceFlipping;
|
||||
dataStream << piece.m_seamAllowance;
|
||||
dataStream << piece.m_seamAllowanceBuiltIn;
|
||||
dataStream << piece.m_hideMainPath;
|
||||
dataStream << piece.m_width;
|
||||
dataStream << piece.m_mx;
|
||||
dataStream << piece.m_my;
|
||||
|
||||
// Added in classVersion = 2
|
||||
|
||||
return dataStream;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline QDataStream &operator>>(QDataStream &dataStream, VAbstractPieceData &piece)
|
||||
{
|
||||
quint32 actualStreamHeader = 0;
|
||||
dataStream >> actualStreamHeader;
|
||||
|
||||
if (actualStreamHeader != VAbstractPieceData::streamHeader)
|
||||
{
|
||||
QString message = QCoreApplication::tr("VAbstractPieceData prefix mismatch error: actualStreamHeader = 0x%1 "
|
||||
"and streamHeader = 0x%2")
|
||||
.arg(actualStreamHeader, 8, 0x10, QChar('0'))
|
||||
.arg(VAbstractPieceData::streamHeader, 8, 0x10, QChar('0'));
|
||||
throw VException(message);
|
||||
}
|
||||
|
||||
quint16 actualClassVersion = 0;
|
||||
dataStream >> actualClassVersion;
|
||||
|
||||
if (actualClassVersion > VAbstractPieceData::classVersion)
|
||||
{
|
||||
QString message = QCoreApplication::tr("VAbstractPieceData compatibility error: actualClassVersion = %1 and "
|
||||
"classVersion = %2")
|
||||
.arg(actualClassVersion).arg(VAbstractPieceData::classVersion);
|
||||
throw VException(message);
|
||||
}
|
||||
|
||||
dataStream >> piece.m_name;
|
||||
dataStream >> piece.m_forbidFlipping;
|
||||
dataStream >> piece.m_forceFlipping;
|
||||
dataStream >> piece.m_seamAllowance;
|
||||
dataStream >> piece.m_seamAllowanceBuiltIn;
|
||||
dataStream >> piece.m_hideMainPath;
|
||||
dataStream >> piece.m_width;
|
||||
dataStream >> piece.m_mx;
|
||||
dataStream >> piece.m_my;
|
||||
|
||||
// if (actualClassVersion >= 2)
|
||||
// {
|
||||
|
||||
// }
|
||||
|
||||
return dataStream;
|
||||
}
|
||||
|
||||
#endif // VABSTRACTPIECE_P_H
|
||||
|
||||
|
|
|
@ -363,6 +363,7 @@ QVector<VLayoutPassmark> ConvertPassmarks(const VPiece &piece, const VContainer
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QDataStream &operator<<(QDataStream &dataStream, const VLayoutPiece &piece)
|
||||
{
|
||||
dataStream << static_cast<VAbstractPiece>(piece);
|
||||
dataStream << *piece.d;
|
||||
return dataStream;
|
||||
}
|
||||
|
@ -370,6 +371,7 @@ QDataStream &operator<<(QDataStream &dataStream, const VLayoutPiece &piece)
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QDataStream &operator>>(QDataStream &dataStream, VLayoutPiece &piece)
|
||||
{
|
||||
dataStream >> static_cast<VAbstractPiece &>(piece);
|
||||
dataStream >> *piece.d;
|
||||
return dataStream;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user