Keep original scale from raw layout data.
This commit is contained in:
parent
84cf53f612
commit
a3e5948167
|
@ -171,13 +171,19 @@ QString VPPiece::GetUniqueID() const
|
||||||
void VPPiece::ClearTransformations()
|
void VPPiece::ClearTransformations()
|
||||||
{
|
{
|
||||||
// Reset the piece position to the default state
|
// Reset the piece position to the default state
|
||||||
QTransform matrix;
|
SetMatrix(QTransform());
|
||||||
|
|
||||||
|
// restore original size
|
||||||
|
QTransform m;
|
||||||
|
m.scale(GetXScale(), GetYScale());
|
||||||
|
QTransform matrix = GetMatrix();
|
||||||
|
matrix *= m;
|
||||||
SetMatrix(matrix);
|
SetMatrix(matrix);
|
||||||
|
|
||||||
// translate the piece so that the top left corner of the bouding rect of the piece is at the position
|
// translate the piece so that the top left corner of the bouding rect of the piece is at the position
|
||||||
// (0,0) in the sheet coordinate system
|
// (0,0) in the sheet coordinate system
|
||||||
const QPointF offset = MappedDetailBoundingRect().topLeft();
|
const QPointF offset = MappedDetailBoundingRect().topLeft();
|
||||||
matrix.translate(-offset.x() ,-offset.y());
|
Translate(-offset.x(), -offset.y());
|
||||||
SetMatrix(matrix);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -461,6 +461,8 @@ void VPLayoutFileReader::ReadPiece(const VPPiecePtr &piece)
|
||||||
piece->SetName(ReadAttributeEmptyString(attribs, ML::AttrGradationLabel));
|
piece->SetName(ReadAttributeEmptyString(attribs, ML::AttrGradationLabel));
|
||||||
piece->SetCopyNumber(static_cast<quint16>(ReadAttributeUInt(attribs, ML::AttrCopyNumber, QChar('1'))));
|
piece->SetCopyNumber(static_cast<quint16>(ReadAttributeUInt(attribs, ML::AttrCopyNumber, QChar('1'))));
|
||||||
piece->SetHideMainPath(not ReadAttributeBool(attribs, ML::AttrShowSeamline, trueStr));
|
piece->SetHideMainPath(not ReadAttributeBool(attribs, ML::AttrShowSeamline, trueStr));
|
||||||
|
piece->SetXScale(ReadAttributeDouble(attribs, ML::AttrXScale, QChar('1')));
|
||||||
|
piece->SetYScale(ReadAttributeDouble(attribs, ML::AttrYScale, QChar('1')));
|
||||||
|
|
||||||
bool pieceMirrored = ReadAttributeBool(attribs, ML::AttrMirrored, falseStr);
|
bool pieceMirrored = ReadAttributeBool(attribs, ML::AttrMirrored, falseStr);
|
||||||
piece->SetMirror(pieceMirrored);
|
piece->SetMirror(pieceMirrored);
|
||||||
|
@ -817,7 +819,7 @@ auto VPLayoutFileReader::ReadLabelLine() -> TextLine
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
QMarginsF VPLayoutFileReader::ReadLayoutMargins(const VPLayoutPtr &layout)
|
void VPLayoutFileReader::ReadLayoutMargins(const VPLayoutPtr &layout)
|
||||||
{
|
{
|
||||||
QXmlStreamAttributes attribs = attributes();
|
QXmlStreamAttributes attribs = attributes();
|
||||||
|
|
||||||
|
@ -834,7 +836,7 @@ QMarginsF VPLayoutFileReader::ReadLayoutMargins(const VPLayoutPtr &layout)
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
auto VPLayoutFileReader::ReadSheetMargins(const VPSheetPtr &sheet) -> QMarginsF
|
void VPLayoutFileReader::ReadSheetMargins(const VPSheetPtr &sheet)
|
||||||
{
|
{
|
||||||
QXmlStreamAttributes attribs = attributes();
|
QXmlStreamAttributes attribs = attributes();
|
||||||
|
|
||||||
|
|
|
@ -76,8 +76,8 @@ private:
|
||||||
auto ReadLabelLines() -> VTextManager;
|
auto ReadLabelLines() -> VTextManager;
|
||||||
auto ReadLabelLine() -> TextLine;
|
auto ReadLabelLine() -> TextLine;
|
||||||
|
|
||||||
auto ReadLayoutMargins(const VPLayoutPtr &layout) -> QMarginsF;
|
void ReadLayoutMargins(const VPLayoutPtr &layout);
|
||||||
auto ReadSheetMargins(const VPSheetPtr &sheet) -> QMarginsF;
|
void ReadSheetMargins(const VPSheetPtr &sheet);
|
||||||
auto ReadSize() -> QSizeF;
|
auto ReadSize() -> QSizeF;
|
||||||
|
|
||||||
void AssertRootTag(const QString &tag) const;
|
void AssertRootTag(const QString &tag) const;
|
||||||
|
|
|
@ -260,6 +260,10 @@ void VPLayoutFileWriter::WritePiece(const VPPiecePtr &piece)
|
||||||
[](const QString &label){return label.isEmpty();});
|
[](const QString &label){return label.isEmpty();});
|
||||||
SetAttribute(ML::AttrCopyNumber, piece->CopyNumber());
|
SetAttribute(ML::AttrCopyNumber, piece->CopyNumber());
|
||||||
SetAttributeOrRemoveIf<bool>(ML::AttrShowSeamline, not piece->IsHideMainPath(), [](bool show){return show;});
|
SetAttributeOrRemoveIf<bool>(ML::AttrShowSeamline, not piece->IsHideMainPath(), [](bool show){return show;});
|
||||||
|
SetAttributeOrRemoveIf<qreal>(ML::AttrXScale, piece->GetXScale(),
|
||||||
|
[](qreal xs){return VFuzzyComparePossibleNulls(xs, 1.0);});
|
||||||
|
SetAttributeOrRemoveIf<qreal>(ML::AttrYScale, piece->GetYScale(),
|
||||||
|
[](qreal ys){return VFuzzyComparePossibleNulls(ys, 1.0);});
|
||||||
|
|
||||||
writeStartElement(ML::TagSeamLine);
|
writeStartElement(ML::TagSeamLine);
|
||||||
writeCharacters(PathToString(piece->GetContourPoints()));
|
writeCharacters(PathToString(piece->GetContourPoints()));
|
||||||
|
|
|
@ -189,7 +189,9 @@
|
||||||
<xs:attribute type="Transformation" name="transform"/>
|
<xs:attribute type="Transformation" name="transform"/>
|
||||||
<xs:attribute type="xs:string" name="gradationLabel"/>
|
<xs:attribute type="xs:string" name="gradationLabel"/>
|
||||||
<xs:attribute type="xs:unsignedInt" name="copyNumber"/>
|
<xs:attribute type="xs:unsignedInt" name="copyNumber"/>
|
||||||
<xs:attribute type="xs:boolean" name="showSeamline"/>
|
<xs:attribute type="xs:boolean" name="showSeamline"/>
|
||||||
|
<xs:attribute type="xs:float" name="xScale"/>
|
||||||
|
<xs:attribute type="xs:float" name="yScale"/>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
|
@ -357,7 +359,9 @@
|
||||||
<xs:attribute type="Transformation" name="transform"/>
|
<xs:attribute type="Transformation" name="transform"/>
|
||||||
<xs:attribute type="xs:string" name="gradationLabel"/>
|
<xs:attribute type="xs:string" name="gradationLabel"/>
|
||||||
<xs:attribute type="xs:unsignedInt" name="copyNumber"/>
|
<xs:attribute type="xs:unsignedInt" name="copyNumber"/>
|
||||||
<xs:attribute type="xs:boolean" name="showSeamline"/>
|
<xs:attribute type="xs:boolean" name="showSeamline"/>
|
||||||
|
<xs:attribute type="xs:float" name="xScale"/>
|
||||||
|
<xs:attribute type="xs:float" name="yScale"/>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
|
|
|
@ -314,13 +314,17 @@ void VLayoutExporter::ExportToASTMDXF(const QVector<VLayoutPiece> &details) cons
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void VLayoutExporter::ExportToRLD(const QVector<VLayoutPiece> &details) const
|
void VLayoutExporter::ExportToRLD(const QVector<VLayoutPiece> &details) const
|
||||||
{
|
{
|
||||||
|
QVector<VLayoutPiece> scaledPieces;
|
||||||
|
scaledPieces.reserve(details.size());
|
||||||
|
|
||||||
for(auto detail : details)
|
for(auto detail : details)
|
||||||
{
|
{
|
||||||
detail.Scale(m_xScale, m_yScale);
|
detail.Scale(m_xScale, m_yScale);
|
||||||
|
scaledPieces.append(detail);
|
||||||
}
|
}
|
||||||
|
|
||||||
VRawLayoutData layoutData;
|
VRawLayoutData layoutData;
|
||||||
layoutData.pieces = details;
|
layoutData.pieces = scaledPieces;
|
||||||
|
|
||||||
VRawLayout generator;
|
VRawLayout generator;
|
||||||
if (not generator.WriteFile(m_fileName, layoutData))
|
if (not generator.WriteFile(m_fileName, layoutData))
|
||||||
|
|
|
@ -1058,6 +1058,9 @@ void VLayoutPiece::Translate(const QPointF &p)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void VLayoutPiece::Scale(qreal sx, qreal sy)
|
void VLayoutPiece::Scale(qreal sx, qreal sy)
|
||||||
{
|
{
|
||||||
|
d->m_xScale *= sx;
|
||||||
|
d->m_yScale *= sy;
|
||||||
|
|
||||||
QTransform m;
|
QTransform m;
|
||||||
m.scale(sx, sy);
|
m.scale(sx, sy);
|
||||||
d->matrix *= m;
|
d->matrix *= m;
|
||||||
|
@ -1680,6 +1683,30 @@ auto VLayoutPiece::GetGradationId() const -> QString
|
||||||
return d->m_gradationId;
|
return d->m_gradationId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
auto VLayoutPiece::GetXScale() const -> qreal
|
||||||
|
{
|
||||||
|
return d->m_xScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void VLayoutPiece::SetXScale(qreal xs)
|
||||||
|
{
|
||||||
|
d->m_xScale = xs;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
auto VLayoutPiece::GetYScale() const -> qreal
|
||||||
|
{
|
||||||
|
return d->m_yScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void VLayoutPiece::SetYScale(qreal ys)
|
||||||
|
{
|
||||||
|
d->m_yScale = ys;
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
QLineF VLayoutPiece::Edge(const QVector<QPointF> &path, int i) const
|
QLineF VLayoutPiece::Edge(const QVector<QPointF> &path, int i) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -137,6 +137,12 @@ public:
|
||||||
void SetGradationId(const QString &id);
|
void SetGradationId(const QString &id);
|
||||||
auto GetGradationId() const -> QString;
|
auto GetGradationId() const -> QString;
|
||||||
|
|
||||||
|
auto GetXScale() const -> qreal;
|
||||||
|
void SetXScale(qreal xs);
|
||||||
|
|
||||||
|
auto GetYScale() const -> qreal;
|
||||||
|
void SetYScale(qreal ys);
|
||||||
|
|
||||||
void Translate(const QPointF &p);
|
void Translate(const QPointF &p);
|
||||||
void Translate(qreal dx, qreal dy);
|
void Translate(qreal dx, qreal dy);
|
||||||
void Scale(qreal sx, qreal sy);
|
void Scale(qreal sx, qreal sy);
|
||||||
|
|
|
@ -78,7 +78,9 @@ public:
|
||||||
m_square(detail.m_square),
|
m_square(detail.m_square),
|
||||||
m_quantity(detail.m_quantity),
|
m_quantity(detail.m_quantity),
|
||||||
m_id(detail.m_id),
|
m_id(detail.m_id),
|
||||||
m_gradationId(detail.m_gradationId)
|
m_gradationId(detail.m_gradationId),
|
||||||
|
m_xScale(detail.m_xScale),
|
||||||
|
m_yScale(detail.m_yScale)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
~VLayoutPieceData() Q_DECL_EQ_DEFAULT;
|
~VLayoutPieceData() Q_DECL_EQ_DEFAULT;
|
||||||
|
@ -140,6 +142,9 @@ public:
|
||||||
|
|
||||||
QString m_gradationId{};
|
QString m_gradationId{};
|
||||||
|
|
||||||
|
qreal m_xScale{1.0};
|
||||||
|
qreal m_yScale{1.0};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Q_DISABLE_ASSIGN(VLayoutPieceData)
|
Q_DISABLE_ASSIGN(VLayoutPieceData)
|
||||||
|
|
||||||
|
@ -179,6 +184,8 @@ inline QDataStream &operator<<(QDataStream &dataStream, const VLayoutPieceData &
|
||||||
dataStream << piece.m_tmDetail;
|
dataStream << piece.m_tmDetail;
|
||||||
dataStream << piece.m_tmPattern;
|
dataStream << piece.m_tmPattern;
|
||||||
dataStream << piece.m_gradationId;
|
dataStream << piece.m_gradationId;
|
||||||
|
dataStream << piece.m_xScale;
|
||||||
|
dataStream << piece.m_yScale;
|
||||||
|
|
||||||
return dataStream;
|
return dataStream;
|
||||||
}
|
}
|
||||||
|
@ -237,6 +244,8 @@ inline QDataStream &operator>>(QDataStream &dataStream, VLayoutPieceData &piece)
|
||||||
dataStream >> piece.m_tmDetail;
|
dataStream >> piece.m_tmDetail;
|
||||||
dataStream >> piece.m_tmPattern;
|
dataStream >> piece.m_tmPattern;
|
||||||
dataStream >> piece.m_gradationId;
|
dataStream >> piece.m_gradationId;
|
||||||
|
dataStream >> piece.m_xScale;
|
||||||
|
dataStream >> piece.m_yScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
return dataStream;
|
return dataStream;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user