Merge branch 'dxf_compatibility' into develop
This commit is contained in:
commit
fbe81aac36
|
@ -6,6 +6,7 @@
|
|||
- Fix export measurement separator to CSV.
|
||||
- Fix option Hide labels.
|
||||
- Improve segmenting a curve for calculating a piece path.
|
||||
- [smart-pattern/valentina#184] Fix incorrect seam allowance.
|
||||
|
||||
# Valentina 0.7.52 September 12, 2022
|
||||
- Fix crash when default locale is ru.
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include "vplayout.h"
|
||||
#include "../vlayout/vtextmanager.h"
|
||||
#include "../vlayout/vlayoutpiecepath.h"
|
||||
#include "../vgeometry/vlayoutplacelabel.h"
|
||||
|
||||
#include <QIcon>
|
||||
#include <QLoggingCategory>
|
||||
|
@ -408,7 +409,8 @@ auto VPPiece::StickyPosition(qreal &dx, qreal &dy) const -> bool
|
|||
return false;
|
||||
}
|
||||
|
||||
QVector<QPointF> path = GetMappedExternalContourPoints();
|
||||
QVector<QPointF> path;
|
||||
CastTo(GetMappedExternalContourPoints(), path);
|
||||
QRectF boundingRect = VLayoutPiece::BoundingRect(path);
|
||||
const qreal stickyDistance = pieceGap+minStickyDistance;
|
||||
QRectF stickyZone = QRectF(boundingRect.topLeft().x()-stickyDistance, boundingRect.topLeft().y()-stickyDistance,
|
||||
|
@ -424,7 +426,8 @@ auto VPPiece::StickyPosition(qreal &dx, qreal &dy) const -> bool
|
|||
continue;
|
||||
}
|
||||
|
||||
QVector<QPointF> piecePath = piece->GetMappedExternalContourPoints();
|
||||
QVector<QPointF> piecePath;
|
||||
CastTo(piece->GetMappedExternalContourPoints(), piecePath);
|
||||
QRectF pieceBoundingRect = VLayoutPiece::BoundingRect(piecePath);
|
||||
|
||||
if (stickyZone.intersects(pieceBoundingRect) || pieceBoundingRect.contains(stickyZone) ||
|
||||
|
|
|
@ -507,7 +507,8 @@ void VPSheet::ValidateSuperpositionOfPieces() const
|
|||
}
|
||||
|
||||
const bool oldSuperpositionOfPieces = piece->HasSuperpositionWithPieces();
|
||||
QVector<QPointF> path1 = piece->GetMappedExternalContourPoints();
|
||||
QVector<QPointF> path1;
|
||||
CastTo(piece->GetMappedExternalContourPoints(), path1);
|
||||
bool hasSuperposition = false;
|
||||
|
||||
for (const auto &p : pieces)
|
||||
|
@ -517,7 +518,8 @@ void VPSheet::ValidateSuperpositionOfPieces() const
|
|||
continue;
|
||||
}
|
||||
|
||||
QVector<QPointF> path2 = p->GetMappedExternalContourPoints();
|
||||
QVector<QPointF> path2;
|
||||
CastTo(p->GetMappedExternalContourPoints(), path2);
|
||||
|
||||
bool superposition = VPPiece::PathsSuperposition(path1, path2);
|
||||
if (superposition)
|
||||
|
|
|
@ -42,14 +42,14 @@
|
|||
#include "../layout/vppiece.h"
|
||||
#include "../layout/vplayout.h"
|
||||
#include "../layout/vpsheet.h"
|
||||
|
||||
#include "../vlayout/vtextmanager.h"
|
||||
|
||||
#include "../vpapplication.h"
|
||||
|
||||
#include "compatibility.h"
|
||||
#include "vlayoutpiecepath.h"
|
||||
#include "vplacelabelitem.h"
|
||||
|
||||
#include "../vgeometry/vlayoutplacelabel.h"
|
||||
|
||||
#include "undocommands/vpundopiecemove.h"
|
||||
#include "undocommands/vpundomovepieceonsheet.h"
|
||||
|
@ -494,7 +494,7 @@ void VPGraphicsPiece::PaintSeamLine(QPainter *painter, const VPPiecePtr &piece)
|
|||
{
|
||||
if (not piece->IsHideMainPath() || not piece->IsSeamAllowance())
|
||||
{
|
||||
QVector<QPointF> seamLinePoints = piece->GetMappedContourPoints();
|
||||
QVector<VLayoutPoint> seamLinePoints = piece->GetMappedContourPoints();
|
||||
if(!seamLinePoints.isEmpty())
|
||||
{
|
||||
m_seamLine.moveTo(ConstFirst(seamLinePoints));
|
||||
|
@ -519,7 +519,7 @@ void VPGraphicsPiece::PaintCuttingLine(QPainter *painter, const VPPiecePtr &piec
|
|||
{
|
||||
if (piece->IsSeamAllowance() && not piece->IsSeamAllowanceBuiltIn())
|
||||
{
|
||||
QVector<QPointF> cuttingLinepoints = piece->GetMappedSeamAllowancePoints();
|
||||
QVector<VLayoutPoint> cuttingLinepoints = piece->GetMappedSeamAllowancePoints();
|
||||
if(!cuttingLinepoints.isEmpty())
|
||||
{
|
||||
m_cuttingLine.moveTo(ConstFirst(cuttingLinepoints));
|
||||
|
@ -617,10 +617,11 @@ void VPGraphicsPiece::PaintPassmarks(QPainter *painter, const VPPiecePtr &piece)
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VPGraphicsPiece::PaintPlaceLabels(QPainter *painter, const VPPiecePtr &piece)
|
||||
{
|
||||
QVector<VLayoutPlaceLabel> placeLabels = piece->GetMappedPlaceLabels();
|
||||
QVector<VLayoutPlaceLabel> placeLabels = piece->GetPlaceLabels();
|
||||
for(auto &placeLabel : placeLabels)
|
||||
{
|
||||
QPainterPath path = VPlaceLabelItem::LabelShapePath(placeLabel.shape);
|
||||
QPainterPath path =
|
||||
VAbstractPiece::LabelShapePath(piece->MapPlaceLabelShape(VAbstractPiece::PlaceLabelShape(placeLabel)));
|
||||
|
||||
if (painter != nullptr)
|
||||
{
|
||||
|
@ -708,7 +709,7 @@ void VPGraphicsPiece::GroupMove(const QPointF &pos)
|
|||
QVector<QPointF> path;
|
||||
if (not p.isNull() && p->StickyPosition(m_stickyTranslateX, m_stickyTranslateY))
|
||||
{
|
||||
path = p->GetMappedExternalContourPoints();
|
||||
CastTo(p->GetMappedExternalContourPoints(), path);
|
||||
QTransform m;
|
||||
m.translate(m_stickyTranslateX, m_stickyTranslateY);
|
||||
path = m.map(path);
|
||||
|
|
|
@ -521,7 +521,7 @@ void VPMainGraphicsView::TranslatePiecesOn(qreal dx, qreal dy)
|
|||
QVector<QPointF> path;
|
||||
if (not p.isNull() && p->StickyPosition(m_stickyTranslateX, m_stickyTranslateY))
|
||||
{
|
||||
path = p->GetMappedExternalContourPoints();
|
||||
CastTo(p->GetMappedExternalContourPoints(), path);
|
||||
QTransform m;
|
||||
m.translate(m_stickyTranslateX, m_stickyTranslateY);
|
||||
path = m.map(path);
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include "../ifc/exception/vexceptionconversionerror.h"
|
||||
#include "../vpatterndb/floatItemData/floatitemdef.h"
|
||||
#include "../vgeometry/vgeometrydef.h"
|
||||
#include "../vgeometry/vlayoutplacelabel.h"
|
||||
#include "../layout/vplayout.h"
|
||||
#include "../layout/vppiece.h"
|
||||
|
||||
|
@ -169,20 +170,6 @@ auto StringToRect(const QString &string) -> QRectF
|
|||
|
||||
return {};
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto StringToMarkerShape(const QString &string) -> PlaceLabelImg
|
||||
{
|
||||
PlaceLabelImg shape;
|
||||
QStringList paths = string.split(ML::itemsSep);
|
||||
shape.reserve(paths.size());
|
||||
for (const auto& path : paths)
|
||||
{
|
||||
shape.append(StringToPath(path));
|
||||
}
|
||||
|
||||
return shape;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -499,7 +486,7 @@ void VPLayoutFileReader::ReadPiece(const VPPiecePtr &piece)
|
|||
switch (tags.indexOf(name().toString()))
|
||||
{
|
||||
case 0: // seam line
|
||||
piece->SetCountourPoints(StringToPath(readElementText()));
|
||||
ReadSeamLine(piece);
|
||||
break;
|
||||
case 1: // seam allowance
|
||||
ReadSeamAllowance(piece);
|
||||
|
@ -527,6 +514,50 @@ void VPLayoutFileReader::ReadPiece(const VPPiecePtr &piece)
|
|||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
VLayoutPoint VPLayoutFileReader::ReadLayoutPoint()
|
||||
{
|
||||
AssertRootTag(ML::TagPoint);
|
||||
|
||||
VLayoutPoint point;
|
||||
|
||||
QXmlStreamAttributes attribs = attributes();
|
||||
point.setX(ReadAttributeDouble(attribs, ML::AttrX, QChar('0')));
|
||||
point.setY(ReadAttributeDouble(attribs, ML::AttrY, QChar('0')));
|
||||
point.SetTurnPoint(ReadAttributeBool(attribs, ML::AttrTurnPoint, falseStr));
|
||||
point.SetCurvePoint(ReadAttributeBool(attribs, ML::AttrCurvePoint, falseStr));
|
||||
|
||||
return point;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VPLayoutFileReader::ReadLayoutPoints() -> QVector<VLayoutPoint>
|
||||
{
|
||||
QVector<VLayoutPoint> points;
|
||||
|
||||
while (readNextStartElement())
|
||||
{
|
||||
if (name() == ML::TagPoint)
|
||||
{
|
||||
points.append(ReadLayoutPoint());
|
||||
}
|
||||
else
|
||||
{
|
||||
qCDebug(MLReader, "Ignoring tag %s", qUtf8Printable(name().toString()));
|
||||
skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
return points;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VPLayoutFileReader::ReadSeamLine(const VPPiecePtr &piece)
|
||||
{
|
||||
AssertRootTag(ML::TagSeamLine);
|
||||
piece->SetCountourPoints(ReadLayoutPoints());
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VPLayoutFileReader::ReadSeamAllowance(const VPPiecePtr &piece)
|
||||
{
|
||||
|
@ -537,18 +568,15 @@ void VPLayoutFileReader::ReadSeamAllowance(const VPPiecePtr &piece)
|
|||
piece->SetSeamAllowance(enabled);
|
||||
|
||||
bool builtIn = ReadAttributeBool(attribs, ML::AttrBuiltIn, falseStr);
|
||||
QVector<QPointF> path = StringToPath(readElementText());
|
||||
|
||||
if (enabled)
|
||||
if (enabled && not builtIn)
|
||||
{
|
||||
if (not builtIn)
|
||||
QVector<VLayoutPoint> path = ReadLayoutPoints();
|
||||
if (path.isEmpty())
|
||||
{
|
||||
if (path.isEmpty())
|
||||
{
|
||||
throw VException(tr("Error in line %1. Seam allowance is empty.").arg(lineNumber()));
|
||||
}
|
||||
piece->SetSeamAllowancePoints(path);
|
||||
throw VException(tr("Error in line %1. Seam allowance is empty.").arg(lineNumber()));
|
||||
}
|
||||
piece->SetSeamAllowancePoints(path);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -658,7 +686,7 @@ auto VPLayoutFileReader::ReadInternalPath() -> VLayoutPiecePath
|
|||
path.SetCutPath(ReadAttributeBool(attribs, ML::AttrCut, falseStr));
|
||||
path.SetPenStyle(LineStyleToPenStyle(ReadAttributeString(attribs, ML::AttrPenStyle, TypeLineLine)));
|
||||
|
||||
QVector<QPointF> shape = StringToPath(readElementText());
|
||||
QVector<VLayoutPoint> shape = ReadLayoutPoints();
|
||||
if (shape.isEmpty())
|
||||
{
|
||||
throw VException(tr("Error in line %1. Internal path shape is empty.").arg(lineNumber()));
|
||||
|
@ -705,19 +733,11 @@ auto VPLayoutFileReader::ReadMarker() -> VLayoutPlaceLabel
|
|||
QXmlStreamAttributes attribs = attributes();
|
||||
|
||||
QString matrix = ReadAttributeEmptyString(attribs, ML::AttrTransform);
|
||||
marker.rotationMatrix = StringToTransfrom(matrix);
|
||||
marker.SetRotationMatrix(StringToTransfrom(matrix));
|
||||
|
||||
marker.type = static_cast<PlaceLabelType>(ReadAttributeUInt(attribs, ML::AttrType, QChar('0')));
|
||||
marker.center = StringToPoint(ReadAttributeEmptyString(attribs, ML::AttrCenter));
|
||||
marker.box = StringToRect(ReadAttributeEmptyString(attribs, ML::AttrBox));
|
||||
|
||||
PlaceLabelImg shape = StringToMarkerShape(readElementText());
|
||||
if (shape.isEmpty())
|
||||
{
|
||||
throw VException(tr("Error in line %1. Marker shape is empty.").arg(lineNumber()));
|
||||
}
|
||||
|
||||
marker.shape = shape;
|
||||
marker.SetType(static_cast<PlaceLabelType>(ReadAttributeUInt(attribs, ML::AttrType, QChar('0'))));
|
||||
marker.SetCenter(StringToPoint(ReadAttributeEmptyString(attribs, ML::AttrCenter)));
|
||||
marker.SetBox(StringToRect(ReadAttributeEmptyString(attribs, ML::AttrBox)));
|
||||
|
||||
// cppcheck-suppress unknownMacro
|
||||
QT_WARNING_POP
|
||||
|
|
|
@ -43,6 +43,7 @@ struct VLayoutPassmark;
|
|||
struct VLayoutPlaceLabel;
|
||||
class VLayoutPiecePath;
|
||||
class VTextManager;
|
||||
class VLayoutPoint;
|
||||
|
||||
class VPLayoutFileReader : public QXmlStreamReader
|
||||
{
|
||||
|
@ -67,6 +68,9 @@ private:
|
|||
void ReadSheet(const VPLayoutPtr &layout);
|
||||
void ReadPieces(const VPLayoutPtr &layout, const VPSheetPtr &sheet=VPSheetPtr());
|
||||
void ReadPiece(const VPPiecePtr &piece);
|
||||
auto ReadLayoutPoint() -> VLayoutPoint;
|
||||
auto ReadLayoutPoints() -> QVector<VLayoutPoint>;
|
||||
void ReadSeamLine(const VPPiecePtr &piece);
|
||||
void ReadSeamAllowance(const VPPiecePtr &piece);
|
||||
void ReadGrainline(const VPPiecePtr &piece);
|
||||
void ReadNotches(const VPPiecePtr &piece);
|
||||
|
@ -82,6 +86,7 @@ private:
|
|||
auto ReadLabelLine() -> TextLine;
|
||||
void ReadWatermark(const VPLayoutPtr &layout);
|
||||
|
||||
|
||||
void ReadLayoutMargins(const VPLayoutPtr &layout);
|
||||
void ReadSheetMargins(const VPSheetPtr &sheet);
|
||||
auto ReadSize() -> QSizeF;
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include "../vmisc/projectversion.h"
|
||||
#include "../vlayout/vlayoutpiecepath.h"
|
||||
#include "../vlayout/vtextmanager.h"
|
||||
#include "../vgeometry/vlayoutplacelabel.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
|
@ -93,18 +94,6 @@ auto RectToString(const QRectF &r) -> QString
|
|||
NumberToString(r.height());
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto MarkerShapeToString(const PlaceLabelImg &shape) -> QString
|
||||
{
|
||||
QStringList s;
|
||||
s.reserve(shape.size());
|
||||
for (const auto& path : shape)
|
||||
{
|
||||
s.append(PathToString(path));
|
||||
}
|
||||
return s.join(ML::itemsSep);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto LineToString(const QLineF &line) -> QString
|
||||
{
|
||||
|
@ -284,7 +273,11 @@ void VPLayoutFileWriter::WritePiece(const VPPiecePtr &piece)
|
|||
[](qreal z) noexcept {return VFuzzyComparePossibleNulls(z, 1.0);});
|
||||
|
||||
writeStartElement(ML::TagSeamLine);
|
||||
writeCharacters(PathToString(piece->GetContourPoints()));
|
||||
QVector<VLayoutPoint> contourPoints = piece->GetContourPoints();
|
||||
for (auto &point : contourPoints)
|
||||
{
|
||||
WriteLayoutPoint(point);
|
||||
}
|
||||
writeEndElement();
|
||||
|
||||
writeStartElement(ML::TagSeamAllowance);
|
||||
|
@ -294,7 +287,11 @@ void VPLayoutFileWriter::WritePiece(const VPPiecePtr &piece)
|
|||
[](bool builtin) noexcept {return not builtin;});
|
||||
if (piece->IsSeamAllowance() && not piece->IsSeamAllowanceBuiltIn())
|
||||
{
|
||||
writeCharacters(PathToString(piece->GetSeamAllowancePoints()));
|
||||
QVector<VLayoutPoint> seamAllowancePoints = piece->GetSeamAllowancePoints();
|
||||
for (auto &point : seamAllowancePoints)
|
||||
{
|
||||
WriteLayoutPoint(point);
|
||||
}
|
||||
}
|
||||
writeEndElement();
|
||||
|
||||
|
@ -329,7 +326,13 @@ void VPLayoutFileWriter::WritePiece(const VPPiecePtr &piece)
|
|||
writeStartElement(ML::TagInternalPath);
|
||||
SetAttribute(ML::AttrCut, path.IsCutPath());
|
||||
SetAttribute(ML::AttrPenStyle, PenStyleToLineStyle(path.PenStyle()));
|
||||
writeCharacters(PathToString(path.Points()));
|
||||
|
||||
QVector<VLayoutPoint> points = path.Points();
|
||||
for (auto &point : points)
|
||||
{
|
||||
WriteLayoutPoint(point);
|
||||
}
|
||||
|
||||
writeEndElement();
|
||||
}
|
||||
writeEndElement();
|
||||
|
@ -339,12 +342,10 @@ void VPLayoutFileWriter::WritePiece(const VPPiecePtr &piece)
|
|||
for (const auto& label : placelabels)
|
||||
{
|
||||
writeStartElement(ML::TagMarker);
|
||||
SetAttribute(ML::AttrTransform, TransformToString(label.rotationMatrix));
|
||||
SetAttribute(ML::AttrType, static_cast<int>(label.type));
|
||||
SetAttribute(ML::AttrCenter, PointToString(label.center));
|
||||
SetAttribute(ML::AttrBox, RectToString(label.box));
|
||||
writeCharacters(MarkerShapeToString(label.shape));
|
||||
|
||||
SetAttribute(ML::AttrTransform, TransformToString(label.RotationMatrix()));
|
||||
SetAttribute(ML::AttrType, static_cast<int>(label.Type()));
|
||||
SetAttribute(ML::AttrCenter, PointToString(label.Center()));
|
||||
SetAttribute(ML::AttrBox, RectToString(label.Box()));
|
||||
writeEndElement();
|
||||
}
|
||||
writeEndElement();
|
||||
|
@ -425,3 +426,14 @@ void VPLayoutFileWriter::WriteSize(QSizeF size)
|
|||
SetAttribute(ML::AttrLength, length);
|
||||
writeEndElement(); // size
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VPLayoutFileWriter::WriteLayoutPoint(const VLayoutPoint &point) -> void
|
||||
{
|
||||
writeStartElement(ML::TagPoint);
|
||||
SetAttribute(ML::AttrX, point.x());
|
||||
SetAttribute(ML::AttrY, point.y());
|
||||
SetAttributeOrRemoveIf<bool>(ML::AttrTurnPoint, point.TurnPoint(), [](bool val) noexcept {return val;});
|
||||
SetAttributeOrRemoveIf<bool>(ML::AttrCurvePoint, point.CurvePoint(), [](bool val) noexcept {return val;});
|
||||
writeEndElement();
|
||||
}
|
||||
|
|
|
@ -46,6 +46,7 @@ class VPPiece;
|
|||
class QFile;
|
||||
class QMarginsF;
|
||||
class VTextManager;
|
||||
class VLayoutPoint;
|
||||
|
||||
class VPLayoutFileWriter : public QXmlStreamWriter
|
||||
{
|
||||
|
@ -68,6 +69,7 @@ private:
|
|||
void WritePiece(const VPPiecePtr &piece);
|
||||
void WriteLabel(const QVector<QPointF> &labelShape, const VTextManager &tm, const QString &tagName);
|
||||
void WriteLabelLines(const VTextManager &tm);
|
||||
auto WriteLayoutPoint(const VLayoutPoint &point) -> void;
|
||||
|
||||
void WriteMargins(const QMarginsF &margins, bool ignore);
|
||||
void WriteSize(QSizeF size);
|
||||
|
|
|
@ -60,6 +60,7 @@ const QString TagLines = QStringLiteral("lines"); // NOLINT(cert-e
|
|||
const QString TagLine = QStringLiteral("line"); // NOLINT(cert-err58-cpp)
|
||||
const QString TagScale = QStringLiteral("scale"); // NOLINT(cert-err58-cpp)
|
||||
const QString TagWatermark = QStringLiteral("watermark"); // NOLINT(cert-err58-cpp)
|
||||
const QString TagPoint = QStringLiteral("point"); // NOLINT(cert-err58-cpp)
|
||||
|
||||
const QString AttrWarningSuperposition = QStringLiteral("warningSuperposition"); // NOLINT(cert-err58-cpp)
|
||||
const QString AttrWarningOutOfBound = QStringLiteral("warningOutOfBound"); // NOLINT(cert-err58-cpp)
|
||||
|
@ -108,6 +109,10 @@ const QString AttrShowPreview = QStringLiteral("showPreview"); // NOLIN
|
|||
const QString AttrPrintScheme = QStringLiteral("printScheme"); // NOLINT(cert-err58-cpp)
|
||||
const QString AttrTileNumber = QStringLiteral("tileNumber"); // NOLINT(cert-err58-cpp)
|
||||
const QString AttrZValue = QStringLiteral("zValue"); // NOLINT(cert-err58-cpp)
|
||||
const QString AttrX = QStringLiteral("x"); // NOLINT(cert-err58-cpp)
|
||||
const QString AttrY = QStringLiteral("y"); // NOLINT(cert-err58-cpp)
|
||||
const QString AttrTurnPoint = QStringLiteral("turnPoint"); // NOLINT(cert-err58-cpp)
|
||||
const QString AttrCurvePoint = QStringLiteral("curvePoint"); // NOLINT(cert-err58-cpp)
|
||||
|
||||
const QString atFrontStr = QStringLiteral("atFront"); // NOLINT(cert-err58-cpp)
|
||||
const QString atRearStr = QStringLiteral("atRear"); // NOLINT(cert-err58-cpp)
|
||||
|
|
|
@ -65,6 +65,7 @@ extern const QString TagLines;
|
|||
extern const QString TagLine;
|
||||
extern const QString TagScale;
|
||||
extern const QString TagWatermark;
|
||||
extern const QString TagPoint;
|
||||
|
||||
extern const QString AttrWarningSuperposition;
|
||||
extern const QString AttrWarningOutOfBound;
|
||||
|
@ -113,6 +114,10 @@ extern const QString AttrShowPreview;
|
|||
extern const QString AttrPrintScheme;
|
||||
extern const QString AttrTileNumber;
|
||||
extern const QString AttrZValue;
|
||||
extern const QString AttrX;
|
||||
extern const QString AttrY;
|
||||
extern const QString AttrTurnPoint;
|
||||
extern const QString AttrCurvePoint;
|
||||
|
||||
extern const QString atFrontStr;
|
||||
extern const QString atRearStr;
|
||||
|
|
1387
src/app/share/collection/bugs/smart_pattern_#184_case1.val
Normal file
1387
src/app/share/collection/bugs/smart_pattern_#184_case1.val
Normal file
File diff suppressed because it is too large
Load Diff
47
src/app/share/collection/bugs/smart_pattern_#184_case1.vit
Normal file
47
src/app/share/collection/bugs/smart_pattern_#184_case1.vit
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<vit>
|
||||
<!--Measurements created with Valentina v0.7.50.0 (https://smart-pattern.com.ua/).-->
|
||||
<version>0.5.1</version>
|
||||
<read-only>false</read-only>
|
||||
<notes>Nach Messung wegen Büste am 16.03.2021
|
||||
Brustumfang : 88 -> 86
|
||||
Taille: 79 -> 76
|
||||
Hüfte: 92 -> 94
|
||||
Halsumfang: 39.5 -> 37</notes>
|
||||
<unit>cm</unit>
|
||||
<pm_system>998</pm_system>
|
||||
<personal>
|
||||
<customer>Ronan</customer>
|
||||
<birth-date>1987-04-03</birth-date>
|
||||
<gender>male</gender>
|
||||
<email/>
|
||||
</personal>
|
||||
<body-measurements>
|
||||
<m name="waist_natural_circ" value="82"/>
|
||||
<m name="waist_to_hip_b" value="21"/>
|
||||
<m name="neck_back_to_waist_b" value="43"/>
|
||||
<m name="across_chest_f" value="35"/>
|
||||
<m name="across_back_b" value="35"/>
|
||||
<m name="neck_back_to_bust_b" value="22.5"/>
|
||||
<m name="hip_circ" value="94"/>
|
||||
<m name="hand_circ" value="22"/>
|
||||
<m name="leg_waist_side_to_floor" value="98.5"/>
|
||||
<m name="leg_crotch_to_floor" value="77.5"/>
|
||||
<m name="height_knee" value="48"/>
|
||||
<m name="height_calf" value="30"/>
|
||||
<m name="leg_thigh_upper_circ" value="50"/>
|
||||
<m name="leg_knee_circ" value="35.5"/>
|
||||
<m name="leg_calf_circ" value="34.5"/>
|
||||
<m name="leg_knee_circ_bent" value="38.5"/>
|
||||
<m name="leg_ankle_circ" value="25.5"/>
|
||||
<m name="leg_ankle_diag_circ" value="32"/>
|
||||
<m name="height" value="172"/>
|
||||
<m name="neck_circ" value="37"/>
|
||||
<m name="bust_circ" value="86"/>
|
||||
<m name="waist_circ" value="76 "/>
|
||||
<m name="arm_shoulder_tip_to_wrist" value="58"/>
|
||||
<m name="arm_wrist_circ" value="16"/>
|
||||
<m name="head_circ" value="55"/>
|
||||
<m name="arm_lower_circ" value="26"/>
|
||||
</body-measurements>
|
||||
</vit>
|
913
src/app/share/collection/bugs/smart_pattern_#184_case2.val
Normal file
913
src/app/share/collection/bugs/smart_pattern_#184_case2.val
Normal file
|
@ -0,0 +1,913 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pattern labelPrefix="en" passmarkLength="">
|
||||
<!--Pattern created with Valentina v0.7.52.0 (https://smart-pattern.com.ua/).-->
|
||||
<version>0.9.2</version>
|
||||
<unit>cm</unit>
|
||||
<description>Jeans mit gerader Seitennaht
|
||||
Müller u. Sohn Zeitschrift Ausgabe 10.20 , Seite 47-50 vom PDf (bzw. 14 - 17 vom Herrenteil)</description>
|
||||
<notes>17.10.20:
|
||||
Anpassugen für die Kurzhose -> enger am Saum (-3.5)
|
||||
Hosenschlitzuntertritt gerade an der oberen Kante</notes>
|
||||
<patternName>Jeans Selvedge</patternName>
|
||||
<patternNumber>#4</patternNumber>
|
||||
<company>CrazyRori</company>
|
||||
<customer/>
|
||||
<birthDate>2000-01-01</birthDate>
|
||||
<email/>
|
||||
<patternLabel dateFormat="dd/MM/yyyy" timeFormat="hh:mm:ss">
|
||||
<line alignment="4" bold="true" italic="false" sfIncrement="4" text="%author%"/>
|
||||
<line alignment="4" bold="false" italic="false" sfIncrement="2" text="%patternName%"/>
|
||||
<line alignment="4" bold="false" italic="false" sfIncrement="0" text="%patternNumber%"/>
|
||||
<line alignment="4" bold="false" italic="true" sfIncrement="0" text="%customer%"/>
|
||||
<line alignment="4" bold="false" italic="true" sfIncrement="0" text="%date%"/>
|
||||
</patternLabel>
|
||||
<finalMeasurements>
|
||||
<finalMeasurment formula="Line_A34_A1" name="Fehlbetrag_Bund"/>
|
||||
<finalMeasurment description="Soll möglichst = 0 sein" formula="(SplPath_A1b_A97+Spl_A19_A17)*2-#Bu" name="Kontrolle_Konstruktion_Bundumfang"/>
|
||||
<finalMeasurment description="Muss ca 0.4 - 0.7 sein" formula="(Line_A10_A11+SplPath_A12_A11)-(Line_A22_A24+SplPath_A32_A24)" name="Kontrolle_Konstruktion_Schrittnaht"/>
|
||||
<finalMeasurment description="sollte max ein paar mm sein" formula="Spl_A12_A93 - Spl_A32_A92" name="Kontrolle_Konstruktion_Innennaht_Kurzhose"/>
|
||||
<finalMeasurment description="Mehrweite des kompletten Umfangs" formula="(Line_A4_A5+Line_A4_A29)*2-#Hu" name="Kontrolle_Mehrweite_Hüfte"/>
|
||||
<finalMeasurment description="Mehrweite des kompletten Umfangs" formula="(Line_A109_A110+Line_A109_A111)-leg_thigh_upper_circ" name="Kontrolle_Mehrweite_Oberschenkel"/>
|
||||
<finalMeasurment description="Mehrweite des kompletten Umfangs" formula="(Line_A86_A87+Line_A86_A88)-leg_calf_circ" name="Kontrolle_Mehrweite_Waden"/>
|
||||
<finalMeasurment description="Soll > 0 für Bewebungsfreiheit" formula="#Kw - leg_knee_circ_bent" name="Kontrolle_Knie_gebeugt"/>
|
||||
</finalMeasurements>
|
||||
<measurements path="../../../../../../../../Стільниця/Помилки/Ronan Le Tiec/Masse_Ronan_v3.vit"/>
|
||||
<increments>
|
||||
<increment description="Bundumfang 14.01.2022 von +0.5 zu +1 gewechselt, da bei der letzten Hose etwas zu eng" formula="waist_natural_circ+1" name="#Bu"/>
|
||||
<increment description="Hüftumfang am 08.05.2021 -1 entfernt (vorher 93 cm dann 94)" formula="hip_circ" name="#Hu"/>
|
||||
<increment description="Knieweite 01.03.2021 von + 3.5 auf + 5.5 angepasst 08.05.2021 von 5.5 auf 6.5 angepasst" formula="leg_knee_circ+ 6.5" name="#Kw"/>
|
||||
<increment description="Fussweite am 01.05.2021 -> +2 hinzugefügt" formula="leg_ankle_diag_circ +2" name="#Fw"/>
|
||||
<increment description="Vorderhosenbreite" formula="#Hu/4" name="#Vhbr"/>
|
||||
<increment description="Vorderhosenspaltdurchmesser" formula="#Hu/20+0.5" name="#Vhsd"/>
|
||||
<increment description="Hinterhosenbreite Zugabe 3.5 - 4.5" formula="#Hu/4+3.5" name="#Hhbr"/>
|
||||
<increment description="Hinterhosenspaltdurchmesser Zugabe 1.5 - 2.5" formula="#Hu/10+1.5" name="#Hhsd"/>
|
||||
<increment description="Hosenkürzung 14.01.2022 von 3 zu 1" formula="1" name="#Hk"/>
|
||||
<increment description="Seitenlänge" formula="leg_waist_side_to_floor - #Hk" name="#Sl"/>
|
||||
<increment description="Schrittlänge (Vom Boden bis zum Schritt) " formula="leg_crotch_to_floor - #Hk" name="#Schrl"/>
|
||||
<increment description="Leibhöhe" formula="#Sl-#Schrl" name="#Lh"/>
|
||||
<increment description="Oberschenkelhöhe (für die Kontrolle)" formula="leg_crotch_to_floor - 5 - #Hk" name="#Osh"/>
|
||||
<increment description="Knihöhe (von Boden bis zum Knie)" formula="height_knee - #Hk" name="#Knh"/>
|
||||
<increment description="Wadenhöhe" formula="height_calf - #Hk" name="#Wh"/>
|
||||
<increment description="Länge Kurzhose" formula="42" name="#Lkh"/>
|
||||
<increment description="Bundhöhe" formula="4" name="#Bh"/>
|
||||
<increment description="Gürtelschlaufenbreite" formula="1.2" name="#Gsb"/>
|
||||
<increment description="Gürtelschlaufenlänge" formula="11" name="#Gsl"/>
|
||||
<increment description="Vordertaschenhöhe (Vorher 8.5)" formula="7" name="#Vth"/>
|
||||
<increment description="Vordertaschenbreite" formula="11" name="#Vtb"/>
|
||||
<increment description="0 für ohne Umschlag, 1 für mit Umschlag" formula="0" name="#mitUmschlag"/>
|
||||
<increment description="Saumumschlagbreite 01.05.2021 von 5 auf 4 geändert, so passt die Länge der Hose genau" formula="4" name="#Sasb"/>
|
||||
<increment description="Länge des Reissverschlusses (Länge der Metalteile, nicht des Stoffes)" formula="12" name="#Rvl"/>
|
||||
<increment formula="1" name="#istEinteiligerHosenschlitz"/>
|
||||
<increment description="Hosenschlitzlänge für 2-teiligen Hosenschlitz, mit Reissverschluss von 1.5 auf 2 geändert, damit die Zugabe für das Schrägband hier bereits enthalten ist." formula="#Rvl+2" name="#HlRv2t"/>
|
||||
<increment description="Hosenschlitzlänge für 1-teiligen Hosenschlitz, mit Knöpfen" formula="14" name="#HlKn1t"/>
|
||||
<increment description="Hosenschlitzlänge" formula="(#istEinteiligerHosenschlitz==0)?#HlRv2t:#HlKn1t" name="#Hl"/>
|
||||
<increment description="Hosenschlitz Unter- und Übertrittbreite" formula="3.75" name="#HUUB"/>
|
||||
<increment description="Breite der kleinen Knöpfe vom Hosenschlitz" formula="1.4" name="#HKKnB"/>
|
||||
<increment description="Breite der Knopflöcher vom Hosenschlitz" formula="#HKKnB+0.3" name="#HKKnLB"/>
|
||||
<increment description="Breite der großen Knöpfe vom Hosenschlitz" formula="1.7" name="#HGKnB"/>
|
||||
<increment description="Breite des grossen Knopfloches vom Hosenschlitz" formula="#HGKnB+0.3" name="#HGKnLB"/>
|
||||
<increment description="Bundfehlbetragabzug normalerweise 0.5" formula="0.5" name="#Bfa"/>
|
||||
<increment description="1 für Test, 0 für nicht Test -> hat z.B. einen Einfluss auf den Saum" formula="0" name="#istTest"/>
|
||||
</increments>
|
||||
<previewCalculations/>
|
||||
<draw name="Hose">
|
||||
<calculation>
|
||||
<point id="1" mx="-3.6397" my="-0.408989" name="A" showLabel="true" type="single" x="4.44267" y="103.231"/>
|
||||
<point angle="90" basePoint="1" id="2" length="#Sl" lineColor="black" mx="-3.90408" my="-0.609353" name="A1" showLabel="true" type="endLine" typeLine="none"/>
|
||||
<point firstPoint="1" id="3" length="#Knh" lineColor="black" mx="-3.18534" my="-0.753101" name="A2" secondPoint="2" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="1" id="4" length="#Schrl" lineColor="black" mx="-3.76033" my="-0.609354" name="A3" secondPoint="2" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="4" id="5" length="#Hu/20+3" lineColor="black" mx="-4.19157" my="-0.7531" name="A4" secondPoint="2" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" basePoint="5" id="6" length="#Vhbr" lineColor="black" mx="1.62914" my="-1.48423" name="A5" showLabel="true" type="endLine" typeLine="none"/>
|
||||
<line firstPoint="1" id="7" lineColor="orange" secondPoint="2" typeLine="dotLine"/>
|
||||
<point firstPoint="6" id="9" mx="1.62836" my="-2.38867" name="A6" secondPoint="2" showLabel="true" type="pointOfIntersection"/>
|
||||
<line firstPoint="2" id="10" lineColor="orange" secondPoint="9" typeLine="dotLine"/>
|
||||
<point firstPoint="6" id="11" mx="-2.42561" my="0.689288" name="A7" secondPoint="4" showLabel="true" type="pointOfIntersection"/>
|
||||
<line firstPoint="9" id="12" lineColor="orange" secondPoint="11" typeLine="dotLine"/>
|
||||
<point angle="0" basePoint="6" id="13" length="#Vhsd" lineColor="black" mx="0.515989" my="1.15109" name="A8" showLabel="true" type="endLine" typeLine="none"/>
|
||||
<point angle="0" basePoint="3" id="15" length="#Kw/2-2" lineColor="black" mx="-3.38751" my="-1.36281" name="A9" showLabel="true" type="endLine" typeLine="none"/>
|
||||
<point angle="0" basePoint="1" id="17" length="#Fw/2-2" lineColor="black" mx="0.264583" my="0.396875" name="A10" showLabel="true" type="endLine" typeLine="none"/>
|
||||
<line firstPoint="1" id="18" lineColor="darkBlue" secondPoint="17" typeLine="hair"/>
|
||||
<line firstPoint="17" id="19" lineColor="orange" secondPoint="15" typeLine="dotLine"/>
|
||||
<point angle="90" basePoint="17" id="20" length="(#mitUmschlag==1)?#Sasb:0.5" lineColor="black" mx="-3.41982" my="-0.597328" name="A11" showLabel="true" type="endLine" typeLine="none"/>
|
||||
<line firstPoint="17" id="21" lineColor="darkBlue" secondPoint="20" typeLine="hair"/>
|
||||
<line firstPoint="15" id="22" lineColor="orange" secondPoint="13" typeLine="dotLine"/>
|
||||
<point id="23" mx="0.888233" my="0.806253" name="A12" p1Line1="4" p1Line2="13" p2Line1="11" p2Line2="15" showLabel="true" type="lineIntersect"/>
|
||||
<line firstPoint="4" id="24" lineColor="orange" secondPoint="23" typeLine="dotLine"/>
|
||||
<spline aScale="10" color="darkBlue" id="25" penStyle="hair" type="pathInteractive">
|
||||
<pathPoint angle1="63.439" angle2="243.439" length1="0" length2="9.2951" pSpline="23"/>
|
||||
<pathPoint angle1="81.7129" angle2="261.713" length1="6.53313" length2="6.71593" pSpline="15"/>
|
||||
<pathPoint angle1="90.8626" angle2="270.863" length1="4.3276" length2="2.65454" pSpline="20"/>
|
||||
</spline>
|
||||
<point firstPoint="23" id="26" length="CurrentLength/2" lineColor="black" mx="-1.26966" my="1.59018" name="A13" secondPoint="11" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="11" id="27" length="Line_A13_A7" lineColor="black" mx="-4.37887" my="0.193258" name="A14" secondPoint="6" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="27" id="28" lineColor="orange" secondPoint="23" typeLine="dotLine"/>
|
||||
<point firstPoint="9" id="29" length="1" lineColor="black" mx="2.08434" my="-0.245183" name="A15" secondPoint="6" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="9" id="30" length="1.5" lineColor="black" mx="-1.6558" my="-3.52387" name="A16" secondPoint="2" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="30" id="31" mx="-2.07096" my="1.98862" name="A17" secondPoint="29" showLabel="true" type="pointOfIntersection"/>
|
||||
<line firstPoint="31" id="32" lineColor="orange" secondPoint="6" typeLine="dotLine"/>
|
||||
<point id="33" mx="3.08067" my="-1.1132" name="A18" p1Line1="31" p1Line2="27" p2Line1="6" p2Line2="23" showLabel="true" type="lineIntersect"/>
|
||||
<line firstPoint="6" id="34" lineColor="orange" secondPoint="33" typeLine="dotLine"/>
|
||||
<spline aScale="10" color="darkBlue" id="602" penStyle="hair" type="pathInteractive">
|
||||
<pathPoint angle1="96.9529" angle2="AngleLine_A17_A5" length1="0" length2="2.07556" pSpline="31"/>
|
||||
<pathPoint angle1="AngleLine_A17_A5-180" angle2="276.953" length1="2.28656" length2="6.04207" pSpline="6"/>
|
||||
<pathPoint angle1="AngleLine_A14_A12-180" angle2="333.435" length1="1.75929" length2="2.47427" pSpline="23"/>
|
||||
</spline>
|
||||
<point firstPoint="2" id="36" length="1.5" lineColor="black" mx="0.580176" my="1.48237" name="A19" secondPoint="9" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="2" id="37" length="#Vth" lineColor="black" mx="-4.17693" my="-0.608751" name="A20" secondPoint="5" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" basePoint="37" id="38" length="0.5" lineColor="black" mx="0.767396" my="-1.78198" name="A21" showLabel="true" type="endLine" typeLine="none"/>
|
||||
<spline aScale="10" angle1="85.7839" angle2="257.788" color="darkBlue" id="39" length1="2.61864" length2="1.97671" penStyle="hair" point1="38" point4="36" type="simpleInteractive"/>
|
||||
<line firstPoint="37" id="40" lineColor="darkBlue" secondPoint="38" typeLine="hair"/>
|
||||
<line firstPoint="37" id="41" lineColor="darkBlue" secondPoint="1" typeLine="hair"/>
|
||||
<line firstPoint="36" id="42" lineColor="orange" secondPoint="31" typeLine="dotLine"/>
|
||||
<spline aScale="0" angle1="350.332" angle2="188.903" color="darkBlue" id="43" length1="6.03475" length2="4.60692" penStyle="hair" point1="36" point4="31" type="simpleInteractive"/>
|
||||
<point firstPoint="17" id="46" length="-4" lineColor="black" mx="0.204168" my="0.396875" name="A22" secondPoint="1" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="15" id="47" length="-4" lineColor="black" mx="1.6465" my="-0.462984" name="A23" secondPoint="3" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="90" basePoint="46" id="48" length="(#mitUmschlag==1)?#Sasb:0.5" lineColor="black" mx="2.15477" my="-0.723235" name="A24" showLabel="true" type="endLine" typeLine="none"/>
|
||||
<line firstPoint="1" id="49" lineColor="orange" secondPoint="46" typeLine="dotLine"/>
|
||||
<line firstPoint="1" id="50" lineColor="darkRed" secondPoint="46" typeLine="hair"/>
|
||||
<line firstPoint="46" id="52" lineColor="orange" secondPoint="47" typeLine="dotLine"/>
|
||||
<line firstPoint="46" id="53" lineColor="darkRed" secondPoint="48" typeLine="hair"/>
|
||||
<line firstPoint="3" id="54" lineColor="orange" secondPoint="47" typeLine="dotLine"/>
|
||||
<point firstPoint="5" id="55" length="#Hhbr" lineColor="black" mx="0.663644" my="-4.27609" name="A25" secondPoint="13" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="55" id="56" length="#Hhsd" lineColor="black" mx="0.264583" my="0.396875" name="A26" secondPoint="13" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="5" id="57" lineColor="orange" secondPoint="56" typeLine="dotLine"/>
|
||||
<line firstPoint="56" id="58" lineColor="orange" secondPoint="47" typeLine="dotLine"/>
|
||||
<line firstPoint="4" id="59" lineColor="orange" secondPoint="55" typeLine="dotLine"/>
|
||||
<point angle="180" firstPoint="55" id="60" length="23" lineColor="black" mx="-2.29592" my="-3.83922" name="A27" secondPoint="4" showLabel="true" type="normal" typeLine="none"/>
|
||||
<line firstPoint="60" id="61" lineColor="orange" secondPoint="55" typeLine="dotLine"/>
|
||||
<point basePoint="2" id="62" lineColor="black" mx="0.264583" my="0.396875" name="A28" p1Line="60" p2Line="55" showLabel="true" type="height" typeLine="none"/>
|
||||
<point basePoint="5" id="63" lineColor="black" mx="1.25879" my="-1.18215" name="A29" p1Line="60" p2Line="55" showLabel="true" type="height" typeLine="none"/>
|
||||
<line firstPoint="5" id="64" lineColor="deeppink" secondPoint="63" typeLine="dashDotLine"/>
|
||||
<line firstPoint="2" id="65" lineColor="darkRed" secondPoint="62" typeLine="hair"/>
|
||||
<line firstPoint="62" id="66" lineColor="darkRed" secondPoint="55" typeLine="hair"/>
|
||||
<point firstPoint="62" id="67" length="7" lineColor="black" mx="3.94898" my="-1.3576" name="A30" secondPoint="55" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="2" id="68" length="3.5" lineColor="black" mx="-3.94616" my="-0.597328" name="A31" secondPoint="5" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="2" id="69" lineColor="darkRed" secondPoint="1" typeLine="hair"/>
|
||||
<line firstPoint="68" id="70" lineColor="darkRed" secondPoint="67" typeLine="hair"/>
|
||||
<point firstPoint="47" id="71" length="SplPath_A12_A11_Seg_1-0.7" lineColor="black" mx="0.264583" my="0.338392" name="A32" secondPoint="56" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<spline aScale="10" color="darkRed" id="72" penStyle="hair" type="pathInteractive">
|
||||
<pathPoint angle1="52.9977" angle2="232.998" length1="0" length2="7.32771" pSpline="71"/>
|
||||
<pathPoint angle1="80.8862" angle2="260.886" length1="6.828" length2="6.71" pSpline="47"/>
|
||||
<pathPoint angle1="90" angle2="270" length1="5" length2="3.2362" pSpline="48"/>
|
||||
</spline>
|
||||
<spline aScale="10" angle1="AngleLine_A25_A28+180" angle2="147.531" color="darkRed" id="73" length1="6.60393" length2="3.55083" penStyle="hair" point1="55" point4="71" type="simpleInteractive"/>
|
||||
<point firstPoint="62" id="74" length="-Spl_A19_A17" lineColor="black" mx="0.264583" my="0.396875" name="A33" secondPoint="2" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="2" id="75" lineColor="orange" secondPoint="74" typeLine="dotLine"/>
|
||||
<point firstPoint="74" id="76" length="#Bu/2" lineColor="black" mx="-0.33385" my="1.40137" name="A34" secondPoint="2" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="5" id="78" lineColor="deeppink" secondPoint="6" typeLine="dashDotLine"/>
|
||||
<point firstPoint="2" id="79" length="CurrentLength/2" lineColor="black" mx="-1.37583" my="-3.20146" name="A35" secondPoint="62" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="AngleLine_A1_A28+270" basePoint="79" id="83" lineColor="cornflowerblue" mx="-0.502709" my="1.32292" name="A39" p1Line="68" p2Line="67" showLabel="true" type="lineIntersectAxis" typeLine="none"/>
|
||||
<point firstPoint="79" id="85" length="((Line_A34_A1>1)?Line_A34_A1-#Bfa:Line_A34_A1)/6" lineColor="black" mx="-4.33917" my="-1.66687" name="A37" secondPoint="2" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="79" id="86" length="((Line_A34_A1>1)?Line_A34_A1-#Bfa:Line_A34_A1)/6" lineColor="black" mx="1.56104" my="-3.175" name="A36" secondPoint="62" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="85" id="87" lineColor="goldenrod" secondPoint="83" typeLine="dashDotDotLine"/>
|
||||
<line firstPoint="86" id="88" lineColor="goldenrod" secondPoint="83" typeLine="dashDotDotLine"/>
|
||||
<operation angle="AngleLine_A37_A39-AngleLine_A36_A39" center="83" id="89" suffix="a" type="rotation">
|
||||
<source>
|
||||
<item idObject="67"/>
|
||||
<item idObject="62"/>
|
||||
</source>
|
||||
<destination>
|
||||
<item idObject="90" mx="3.94898" my="-1.3576"/>
|
||||
<item idObject="91" mx="0.661458" my="-1.93146"/>
|
||||
</destination>
|
||||
</operation>
|
||||
<line firstPoint="85" id="92" lineColor="mediumseagreen" secondPoint="91" typeLine="dashLine"/>
|
||||
<line firstPoint="91" id="93" lineColor="mediumseagreen" secondPoint="90" typeLine="dashLine"/>
|
||||
<line firstPoint="83" id="94" lineColor="mediumseagreen" secondPoint="90" typeLine="dashLine"/>
|
||||
<point firstPoint="2" id="95" length="CurrentLength/2" lineColor="black" mx="-1.77271" my="-2.83104" name="A38" secondPoint="85" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="85" id="96" length="CurrentLength/2" lineColor="black" mx="-1.87854" my="-3.12208" name="A40" secondPoint="91" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="AngleLine_A1_A28+270" basePoint="95" id="97" lineColor="cornflowerblue" mx="0.264583" my="0.396875" name="A41" p1Line="68" p2Line="83" showLabel="true" type="lineIntersectAxis" typeLine="none"/>
|
||||
<point angle="AngleLine_A37_A28a+270" basePoint="96" id="98" lineColor="cornflowerblue" mx="0.264583" my="0.396875" name="A42" p1Line="83" p2Line="90" showLabel="true" type="lineIntersectAxis" typeLine="none"/>
|
||||
<point firstPoint="95" id="99" length="((Line_A34_A1>1)?Line_A34_A1-#Bfa:Line_A34_A1)/6" lineColor="black" mx="-1.87854" my="0.873125" name="A43" secondPoint="2" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="95" id="100" length="((Line_A34_A1>1)?Line_A34_A1-#Bfa:Line_A34_A1)/6" lineColor="black" mx="1.53458" my="0.343955" name="A44" secondPoint="85" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="99" id="101" lineColor="goldenrod" secondPoint="97" typeLine="dashDotLine"/>
|
||||
<line firstPoint="100" id="102" lineColor="goldenrod" secondPoint="97" typeLine="dashDotLine"/>
|
||||
<point firstPoint="96" id="103" length="((Line_A34_A1>1)?Line_A34_A1-#Bfa:Line_A34_A1)/6" lineColor="black" mx="2.16958" my="0.3175" name="A45" secondPoint="91" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="96" id="104" length="((Line_A34_A1>1)?Line_A34_A1-#Bfa:Line_A34_A1)/6" lineColor="black" mx="-1.80155" my="1.50813" name="A46" secondPoint="85" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="104" id="105" lineColor="goldenrod" secondPoint="98" typeLine="dashDotLine"/>
|
||||
<line firstPoint="103" id="106" lineColor="goldenrod" secondPoint="98" typeLine="dashDotLine"/>
|
||||
<operation angle="360-(AngleLine_A43_A41-AngleLine_A44_A41)" center="97" id="107" suffix="b" type="rotation">
|
||||
<source>
|
||||
<item idObject="2"/>
|
||||
<item idObject="68"/>
|
||||
</source>
|
||||
<destination>
|
||||
<item idObject="108" mx="-3.42783" my="-1.61477"/>
|
||||
<item idObject="109" mx="-2.91251" my="-1.6461"/>
|
||||
</destination>
|
||||
</operation>
|
||||
<line firstPoint="108" id="110" lineColor="deepskyblue" secondPoint="100" typeLine="dashLine"/>
|
||||
<line firstPoint="108" id="111" lineColor="deepskyblue" secondPoint="109" typeLine="dashLine"/>
|
||||
<line firstPoint="109" id="112" lineColor="deepskyblue" secondPoint="97" typeLine="dashLine"/>
|
||||
<operation angle="AngleLine_A46_A42-AngleLine_A45_A42" center="98" id="113" suffix="c" type="rotation">
|
||||
<source>
|
||||
<item idObject="90"/>
|
||||
<item idObject="91"/>
|
||||
</source>
|
||||
<destination>
|
||||
<item idObject="114" mx="-0.843307" my="-2.44795"/>
|
||||
<item idObject="115" mx="-1.6208" my="-2.46134"/>
|
||||
</destination>
|
||||
</operation>
|
||||
<line firstPoint="104" id="116" lineColor="violet" secondPoint="115" typeLine="dashLine"/>
|
||||
<line firstPoint="115" id="117" lineColor="violet" secondPoint="114" typeLine="dashLine"/>
|
||||
<line firstPoint="114" id="118" lineColor="violet" secondPoint="98" typeLine="dashLine"/>
|
||||
<line firstPoint="108" id="121" lineColor="deepskyblue" secondPoint="100" typeLine="dotLine"/>
|
||||
<line firstPoint="100" id="122" lineColor="deepskyblue" secondPoint="85" typeLine="dotLine"/>
|
||||
<line firstPoint="85" id="123" lineColor="deepskyblue" secondPoint="104" typeLine="dotLine"/>
|
||||
<line firstPoint="104" id="124" lineColor="deepskyblue" secondPoint="115" typeLine="dotLine"/>
|
||||
<line firstPoint="109" id="125" lineColor="deepskyblue" secondPoint="97" typeLine="dotLine"/>
|
||||
<line firstPoint="97" id="126" lineColor="deepskyblue" secondPoint="83" typeLine="dotLine"/>
|
||||
<line firstPoint="83" id="127" lineColor="deepskyblue" secondPoint="98" typeLine="dotLine"/>
|
||||
<line firstPoint="98" id="128" lineColor="deepskyblue" secondPoint="114" typeLine="dotLine"/>
|
||||
<line firstPoint="108" id="129" lineColor="darkviolet" secondPoint="109" typeLine="hair"/>
|
||||
<line firstPoint="115" id="130" lineColor="violet" secondPoint="114" typeLine="dotLine"/>
|
||||
<spline aScale="10" color="darkviolet" id="131" penStyle="hair" type="pathInteractive">
|
||||
<pathPoint angle1="191.994" angle2="AngleLine_A1b_A44" length1="0" length2="0.5" pSpline="108"/>
|
||||
<pathPoint angle1="((AngleLine_A1b_A44) + AngleLine_A44_A37)/2+180" angle2="13.9555" length1="2.5" length2="2.5" pSpline="100"/>
|
||||
<pathPoint angle1="((AngleLine_A46_A37-180) + AngleLine_A44_A37)/2+180" angle2="17.55" length1="2.5" length2="2.5" pSpline="85"/>
|
||||
<pathPoint angle1="((AngleLine_A46_A37-180) + AngleLine_A46_A28ac)/2+180" angle2="20.5807" length1="2.5" length2="2.5" pSpline="104"/>
|
||||
<pathPoint angle1="AngleLine_A46_A28ac+180" angle2="21.9788" length1="1.5" length2="2.72962" pSpline="115"/>
|
||||
</spline>
|
||||
<spline aScale="10" color="darkviolet" id="132" penStyle="hair" type="pathInteractive">
|
||||
<pathPoint angle1="13.105" angle2="AngleLine_A30ac_A42" length1="0" length2="0.5" pSpline="114"/>
|
||||
<pathPoint angle1="((AngleLine_A30ac_A42-180) + AngleLine_A39_A42)/2" angle2="191.707" length1="2.5" length2="2.5" pSpline="98"/>
|
||||
<pathPoint angle1="((AngleLine_A41_A39) + AngleLine_A39_A42)/2" angle2="188.676" length1="2.5" length2="2.5" pSpline="83"/>
|
||||
<pathPoint angle1="((AngleLine_A41_A39) + ((AngleLine_A31b_A41>180)?AngleLine_A31b_A41-360:AngleLine_A31b_A41))/2" angle2="185.082" length1="2.5" length2="2.5" pSpline="97"/>
|
||||
<pathPoint angle1="(AngleLine_A31b_A41 >180)?AngleLine_A31b_A41-360:AngleLine_A31b_A41" angle2="183.12" length1="0.5" length2="2.6214" pSpline="109"/>
|
||||
</spline>
|
||||
<point firstPoint="37" id="142" length="10" lineColor="black" mx="-4.25308" my="-2.55861" name="A47" secondPoint="3" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<spline aScale="0" angle1="263.302" angle2="90.7258" color="black" id="143" length1="1.60457" length2="1.52726" penStyle="hair" point1="38" point4="142" type="simpleInteractive"/>
|
||||
<point id="144" length="#Vtb" mx="-1.93092" my="-2.30528" name="A48" showLabel="true" spline="43" type="cutSpline"/>
|
||||
<spline aScale="1.1" angle1="357.471" angle2="268.291" color="darkBlue" id="145" length1="7.90828" length2="5" notes="23.09.2022 : c1length 9,7659 -> 8 c2length 6,25613 -> 5" penStyle="hair" point1="38" point4="144" type="simpleInteractive"/>
|
||||
<point id="146" length="Spl_A19_A48+3.5" mx="-1.50871" my="-4.75411" name="A49" showLabel="true" spline="43" type="cutSpline"/>
|
||||
<point angle="270" basePoint="146" id="147" length="#Lh+3" lineColor="black" mx="0.264583" my="0.396875" name="A50" showLabel="true" type="endLine" typeLine="hair"/>
|
||||
<point id="148" length="Spl_A19_A48+2" mx="-1.32463" my="-2.02319" name="A51" showLabel="true" spline="43" type="cutSpline"/>
|
||||
<point id="149" length="2" mx="-5.43528" my="-0.236443" name="A52" showLabel="true" spline="143" type="cutSpline"/>
|
||||
<spline aScale="0" angle1="270.411" angle2="358.295" color="black" id="150" length1="8.84026" length2="5" penStyle="hair" point1="148" point4="149" type="simpleInteractive"/>
|
||||
<spline aScale="10" angle1="344.394" angle2="179.167" color="black" id="151" length1="5.55752" length2="13.698" penStyle="hair" point1="142" point4="147" type="simpleInteractive"/>
|
||||
<operation axisType="1" center="147" id="152" suffix="a1" type="flippingByAxis">
|
||||
<source>
|
||||
<item idObject="38"/>
|
||||
<item idObject="37"/>
|
||||
<item idObject="145"/>
|
||||
<item idObject="144"/>
|
||||
<item idObject="43"/>
|
||||
<item idObject="151"/>
|
||||
<item idObject="142"/>
|
||||
</source>
|
||||
<destination>
|
||||
<item idObject="153" mx="0.640732" my="-3.59749"/>
|
||||
<item idObject="154" mx="0.80517" my="1.8823"/>
|
||||
<item idObject="155"/>
|
||||
<item idObject="156" mx="-1.93092" my="-2.30528"/>
|
||||
<item idObject="157"/>
|
||||
<item idObject="158"/>
|
||||
<item idObject="159" mx="-4.25308" my="-2.55861"/>
|
||||
</destination>
|
||||
</operation>
|
||||
<line firstPoint="154" id="160" lineColor="black" secondPoint="159" typeLine="hair"/>
|
||||
<line firstPoint="153" id="161" lineColor="black" secondPoint="154" typeLine="hair"/>
|
||||
<point id="192" length="6.5" mx="-2.47979" my="-3.69858" name="A53" showLabel="true" spline="43" type="cutSpline"/>
|
||||
<point angle="290" basePoint="192" curve="150" id="193" lineColor="black" mx="0.264583" my="0.396875" name="A54" showLabel="true" type="curveIntersectAxis" typeLine="hair"/>
|
||||
<point firstPoint="192" id="196" length="1.5" lineColor="black" mx="1.21708" my="-1.08479" name="A55" secondPoint="193" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="180" firstPoint="196" id="197" length="6" lineColor="black" mx="-2.64583" my="-1.64042" name="A56" secondPoint="193" showLabel="true" type="normal" typeLine="hair"/>
|
||||
<point angle="AngleLine_A53_A54" basePoint="197" curve="150" id="198" lineColor="black" mx="-1.74625" my="2.88396" name="A57" showLabel="true" type="curveIntersectAxis" typeLine="hair"/>
|
||||
<point firstPoint="68" id="253" length="5" lineColor="black" mx="-5.18047" my="-0.934137" name="A58" secondPoint="5" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="67" id="254" length="4.5" lineColor="black" mx="4.07612" my="-0.692135" name="A59" secondPoint="55" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="253" id="255" lineColor="black" secondPoint="254" typeLine="dotLine"/>
|
||||
<point firstPoint="253" id="256" length="4" lineColor="black" mx="-1.42943" my="-2.50715" name="A60" secondPoint="254" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="256" id="257" length="14.5" lineColor="black" mx="0.264583" my="0.396875" name="A61" secondPoint="254" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" firstPoint="257" id="258" length="13" lineColor="black" mx="1.23259" my="-0.450129" name="A62" secondPoint="256" showLabel="true" type="normal" typeLine="none"/>
|
||||
<point angle="180" firstPoint="256" id="259" length="13" lineColor="black" mx="-3.24445" my="0.336373" name="A63" secondPoint="257" showLabel="true" type="normal" typeLine="none"/>
|
||||
<line firstPoint="256" id="260" lineColor="black" secondPoint="259" typeLine="dotLine"/>
|
||||
<line firstPoint="257" id="261" lineColor="black" secondPoint="258" typeLine="dotLine"/>
|
||||
<point firstPoint="256" id="262" length="CurrentLength/2" lineColor="black" mx="0.264583" my="0.396875" name="A64" secondPoint="257" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="259" id="263" length="CurrentLength/2" lineColor="black" mx="-1.27337" my="-2.33711" name="A65" secondPoint="258" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" firstPoint="263" id="264" length="2" lineColor="black" mx="0.264583" my="0.396875" name="A66" secondPoint="259" showLabel="true" type="normal" typeLine="none"/>
|
||||
<line firstPoint="259" id="265" lineColor="black" secondPoint="258" typeLine="dotLine"/>
|
||||
<line firstPoint="263" id="266" lineColor="black" secondPoint="264" typeLine="dotLine"/>
|
||||
<point firstPoint="259" id="267" length="1" lineColor="black" mx="-0.763926" my="1.72789" name="A67" secondPoint="263" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="258" id="268" length="1" lineColor="black" mx="-1.18743" my="2.15139" name="A68" secondPoint="263" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="256" id="269" lineColor="green" secondPoint="267" typeLine="hair"/>
|
||||
<line firstPoint="267" id="270" lineColor="green" secondPoint="264" typeLine="hair"/>
|
||||
<line firstPoint="264" id="271" lineColor="green" secondPoint="268" typeLine="hair"/>
|
||||
<line firstPoint="268" id="272" lineColor="green" secondPoint="257" typeLine="hair"/>
|
||||
<line firstPoint="256" id="273" lineColor="green" secondPoint="257" typeLine="hair"/>
|
||||
<point firstPoint="256" id="274" length="CurrentLength/2+1" lineColor="black" mx="-3.00245" my="0.336374" name="A69" secondPoint="259" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="257" id="275" length="CurrentLength/2+1" lineColor="black" mx="1.47459" my="-0.813136" name="A70" secondPoint="258" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="274" id="276" lineColor="black" secondPoint="275" typeLine="dotLine"/>
|
||||
<point id="277" mx="-0.546686" my="3.80069" name="A71" p1Line1="262" p1Line2="274" p2Line1="264" p2Line2="275" showLabel="true" type="lineIntersect"/>
|
||||
<point firstPoint="277" id="278" length="1" lineColor="black" mx="-1.57873" my="-3.98683" name="A72" secondPoint="275" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="277" id="279" length="1" lineColor="black" mx="-2.48688" my="-3.71344" name="A73" secondPoint="274" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="278" id="280" length="0.4" lineColor="black" mx="4.91233" my="-2.75167" name="A74" secondPoint="275" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="279" id="281" length="0.3" lineColor="black" mx="-5.18583" my="0.370407" name="A75" secondPoint="274" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="279" id="282" length="CurrentLength/2" lineColor="black" mx="-2.03729" my="2.93687" name="A76" secondPoint="277" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="277" id="283" length="CurrentLength/2" lineColor="black" mx="-2.19604" my="-5.00063" name="A77" secondPoint="278" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" firstPoint="283" id="284" length="2" lineColor="black" mx="0.79375" my="2.61937" name="A78" secondPoint="277" showLabel="true" type="normal" typeLine="none"/>
|
||||
<point angle="0" firstPoint="282" id="285" length="2.5" lineColor="black" mx="-3.04271" my="-3.0427" name="A79" secondPoint="277" showLabel="true" type="normal" typeLine="none"/>
|
||||
<line firstPoint="285" id="286" lineColor="green" secondPoint="284" typeLine="hair"/>
|
||||
<point firstPoint="278" id="287" length="CurrentLength/2" lineColor="black" mx="3.09562" my="4.15395" name="A80" secondPoint="280" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="279" id="288" length="CurrentLength/2" lineColor="black" mx="-4.68313" my="-2.67229" name="A81" secondPoint="281" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" firstPoint="288" id="289" length="0.5" lineColor="black" mx="-4.7625" my="1.93146" name="A82" secondPoint="281" showLabel="true" type="normal" typeLine="none"/>
|
||||
<line firstPoint="285" id="290" lineColor="green" secondPoint="289" typeLine="hair"/>
|
||||
<line firstPoint="289" id="291" lineColor="green" secondPoint="281" typeLine="hair"/>
|
||||
<point angle="0" firstPoint="287" id="292" length="1" lineColor="black" mx="1.61396" my="-2.46063" name="A83" secondPoint="280" showLabel="true" type="normal" typeLine="none"/>
|
||||
<line firstPoint="292" id="293" lineColor="green" secondPoint="284" typeLine="hair"/>
|
||||
<line firstPoint="292" id="294" lineColor="green" secondPoint="280" typeLine="hair"/>
|
||||
<point id="295" mx="0.264583" my="0.396875" name="A84" p1Line1="257" p1Line2="274" p2Line1="268" p2Line2="275" showLabel="true" type="lineIntersect"/>
|
||||
<point id="296" mx="0.264583" my="0.396875" name="A85" p1Line1="256" p1Line2="274" p2Line1="267" p2Line2="275" showLabel="true" type="lineIntersect"/>
|
||||
<line firstPoint="280" id="297" lineColor="green" secondPoint="295" typeLine="hair"/>
|
||||
<line firstPoint="281" id="298" lineColor="green" secondPoint="296" typeLine="hair"/>
|
||||
<point firstPoint="1" id="341" length="#Wh" lineColor="black" mx="-4.16418" my="-0.670473" name="A86" secondPoint="2" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" basePoint="341" curve="25" id="342" lineColor="black" mx="-4.13602" my="-0.596011" name="A87" showLabel="true" type="curveIntersectAxis" typeLine="none"/>
|
||||
<point angle="0" basePoint="341" curve="72" id="345" lineColor="black" mx="2.20722" my="-0.547102" name="A88" showLabel="true" type="curveIntersectAxis" typeLine="none"/>
|
||||
<point firstPoint="31" id="376" length="#Hl" lineColor="black" mx="2.33207" my="2.69483" name="A89" notes="von 1.5 auf 2 geändert, damit die Zugabe für das Schrägband hier bereits enthalten ist." secondPoint="6" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="31" id="513" length="CurrentLength/2" lineColor="black" mx="4.77782" my="-1.60676" name="A100" secondPoint="376" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" firstPoint="376" id="377" length="4" lineColor="black" mx="-7.9037" my="-0.659262" name="A90" secondPoint="513" showLabel="true" type="normal" typeLine="none"/>
|
||||
<point angle="AngleLine_A17_A5-180" basePoint="377" curve="43" id="378" lineColor="black" mx="-2.99017" my="1.00241" name="A94" showLabel="true" type="curveIntersectAxis" typeLine="none"/>
|
||||
<point firstPoint="376" id="381" length="-1.5" lineColor="cornflowerblue" mx="-1.02303" my="3.16538" name="A95" secondPoint="31" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" firstPoint="381" id="382" length="Line_A89_A90" lineColor="black" mx="-3.79668" my="1.39655" name="A96" secondPoint="376" showLabel="true" type="normal" typeLine="none"/>
|
||||
<line firstPoint="382" id="385" lineColor="cornflowerblue" secondPoint="378" typeLine="hair"/>
|
||||
<line firstPoint="377" id="392" lineColor="deepskyblue" secondPoint="376" typeLine="hair"/>
|
||||
<point id="417" length="(Line_A34_A1>1)?(CurrentLength-#Bfa):(CurrentLength)" mx="-6.1178" my="-2.78497" name="A97" showLabel="true" splinePath="131" type="cutSplinePath"/>
|
||||
<line firstPoint="417" id="418" lineColor="darkviolet" secondPoint="114" typeLine="hair"/>
|
||||
<operation id="492" p1Line="378" p2Line="382" suffix="a2" type="flippingByLine">
|
||||
<source>
|
||||
<item color="cornflowerblue" idObject="43"/>
|
||||
<item idObject="31"/>
|
||||
<item idObject="381"/>
|
||||
</source>
|
||||
<destination>
|
||||
<item idObject="493"/>
|
||||
<item idObject="494" mx="-4.09247" my="0.702107"/>
|
||||
<item idObject="495" mx="-4.88743" my="1.19789"/>
|
||||
</destination>
|
||||
</operation>
|
||||
<line firstPoint="494" id="496" lineColor="cornflowerblue" secondPoint="495" typeLine="hair"/>
|
||||
<line firstPoint="495" id="497" lineColor="cornflowerblue" secondPoint="381" typeLine="hair"/>
|
||||
<point firstPoint="256" id="510" length="1.2" lineColor="black" mx="0.264583" my="0.396875" name="A98" secondPoint="267" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="257" id="511" length="1.2" lineColor="black" mx="0.264583" my="0.396875" name="A99" secondPoint="268" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="510" id="512" lineColor="goldenrod" secondPoint="511" typeLine="dashLine"/>
|
||||
<point firstPoint="377" id="514" length="0" lineColor="black" mx="-0.40196" my="2.134" name="A101" notes="von 0.5 auf 0 geändert, damit die Zugabe für das Schrägband direkt hier enthalten ist." secondPoint="376" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="AngleLine_A17_A5-180" basePoint="514" curve="43" id="515" lineColor="black" mx="0.324256" my="-2.61663" name="A102" showLabel="true" type="curveIntersectAxis" typeLine="none"/>
|
||||
<line firstPoint="515" id="518" lineColor="deepskyblue" secondPoint="514" typeLine="hair"/>
|
||||
<point firstPoint="514" id="519" length="4" lineColor="black" mx="-4.20754" my="-1.15463" name="A103" secondPoint="515" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<spline aScale="0" angle1="AngleLine_A102_A101" angle2="AngleLine_A89_A90" color="deepskyblue" id="520" length1="2.57336" length2="2.68044" penStyle="hair" point1="519" point4="376" type="simpleInteractive"/>
|
||||
<point firstPoint="382" id="524" length="2" lineColor="black" mx="-4.01162" my="-1.69842" name="A104" secondPoint="378" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<spline aScale="0" angle1="AngleLine_A90_A94-180+30" angle2="AngleLine_A95a2_A95+180" color="cornflowerblue" id="525" length1="1.79358" length2="1.51786" penStyle="hair" point1="524" point4="381" type="simpleInteractive"/>
|
||||
<operation id="526" p1Line="378" p2Line="382" suffix="a3" type="flippingByLine">
|
||||
<source>
|
||||
<item idObject="525"/>
|
||||
</source>
|
||||
<destination>
|
||||
<item idObject="527"/>
|
||||
</destination>
|
||||
</operation>
|
||||
<point firstPoint="2" id="590" length="#Lkh" lineColor="black" mx="-3.2782" my="-0.739327" name="A105" secondPoint="1" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" basePoint="590" curve="25" id="591" lineColor="black" mx="1.06292" my="-3.54066" name="A106" showLabel="true" type="curveIntersectAxis" typeLine="none"/>
|
||||
<point angle="0" basePoint="590" curve="72" id="594" lineColor="black" mx="4.84107" my="-2.90836" name="A107" showLabel="true" type="curveIntersectAxis" typeLine="none"/>
|
||||
<line firstPoint="31" id="607" lineColor="cornflowerblue" secondPoint="381" typeLine="hair"/>
|
||||
<point angle="AngleLine_A17_A5 - 270" basePoint="377" curve="602" id="608" lineColor="black" mx="5.26555" my="0.865239" name="A108" showLabel="true" type="curveIntersectAxis" typeLine="none"/>
|
||||
<line firstPoint="590" id="617" lineColor="darkRed" secondPoint="594" typeLine="hair"/>
|
||||
<line firstPoint="590" id="618" lineColor="darkBlue" secondPoint="591" typeLine="hair"/>
|
||||
<point id="638" mx="0.714375" my="2.80458" name="A91" p1Line1="494" p1Line2="515" p2Line1="31" p2Line2="377" showLabel="true" type="lineIntersect"/>
|
||||
<line firstPoint="494" id="639" lineColor="cornflowerblue" secondPoint="31" typeLine="hair"/>
|
||||
<point firstPoint="594" id="641" length="2" lineColor="black" mx="-1.51961" my="2.65681" name="A92" secondPoint="590" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="591" id="642" length="2" lineColor="black" mx="-2.07516" my="1.26854" name="A93" secondPoint="590" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<spline aScale="1" angle1="243.439" angle2="78" color="darkBlue" id="643" length1="6" length2="2.5" notes="Angle 2 vorher : 90 und 2 " penStyle="hair" point1="23" point4="642" type="simpleInteractive"/>
|
||||
<spline aScale="1" angle1="232.998" angle2="78" color="darkRed" id="644" length1="7" length2="3" penStyle="hair" point1="71" point4="641" type="simpleInteractive"/>
|
||||
<point firstPoint="1" id="852" length="#Osh" lineColor="black" mx="-5.1531" my="0.52435" name="A109" secondPoint="2" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" basePoint="852" curve="25" id="853" lineColor="black" mx="0.264583" my="0.396875" name="A110" showLabel="true" type="curveIntersectAxis" typeLine="none"/>
|
||||
<point angle="0" basePoint="852" curve="72" id="856" lineColor="black" mx="0.264583" my="0.396875" name="A111" showLabel="true" type="curveIntersectAxis" typeLine="none"/>
|
||||
<line firstPoint="852" id="859" lineColor="goldenrod" secondPoint="856" typeLine="dotLine"/>
|
||||
<line firstPoint="852" id="860" lineColor="goldenrod" secondPoint="853" typeLine="dotLine"/>
|
||||
<point firstPoint="590" id="862" length="1.5" lineColor="black" mx="2.32546" my="-5.33774" name="A112" secondPoint="2" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<spline aScale="0" angle1="0" angle2="168" color="darkBlue" id="865" length1="4" length2="5" penStyle="hair" point1="862" point4="642" type="simpleInteractive"/>
|
||||
<spline aScale="0" angle1="0" angle2="168" color="darkRed" id="868" length1="4" length2="5" penStyle="hair" point1="862" point4="641" type="simpleInteractive"/>
|
||||
</calculation>
|
||||
<modeling>
|
||||
<point id="183" idObject="149" inUse="false" mx="-2.95013" my="1.69646" showLabel="true" type="modeling"/>
|
||||
<spline id="184" idObject="143" inUse="false" type="modelingSpline"/>
|
||||
<point id="185" idObject="38" inUse="false" mx="0.767396" my="-1.78198" showLabel="true" type="modeling"/>
|
||||
<spline id="186" idObject="39" inUse="false" type="modelingSpline"/>
|
||||
<point id="187" idObject="36" inUse="false" mx="0.580176" my="1.48237" showLabel="true" type="modeling"/>
|
||||
<spline id="188" idObject="43" inUse="false" type="modelingSpline"/>
|
||||
<point id="189" idObject="148" inUse="false" mx="0.0680086" my="-3.04089" showLabel="true" type="modeling"/>
|
||||
<spline id="190" idObject="150" inUse="false" type="modelingSpline"/>
|
||||
<point id="207" idObject="192" inUse="false" mx="-1.61018" my="-2.72026" showLabel="true" type="modeling"/>
|
||||
<spline id="208" idObject="43" inUse="false" type="modelingSpline"/>
|
||||
<point id="209" idObject="148" inUse="false" mx="-0.735437" my="-3.46939" showLabel="true" type="modeling"/>
|
||||
<spline id="210" idObject="150" inUse="false" type="modelingSpline"/>
|
||||
<point id="211" idObject="193" inUse="false" mx="-1.87541" my="1.43236" showLabel="true" type="modeling"/>
|
||||
</modeling>
|
||||
<details>
|
||||
<detail forbidFlipping="false" forceFlipping="true" hideMainPath="false" id="191" inLayout="false" mx="39.3374" my="44.9867" name="Piece 1" seamAllowance="true" uuid="{2e36ff14-cefe-4668-b6d4-3ff258b767cf}" version="2" width="1">
|
||||
<data annotation="" foldPosition="" fontSize="10" height="0.879713" letter="" mx="504.575" my="383.907" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="true" width="3.53898">
|
||||
<line alignment="4" bold="true" italic="false" sfIncrement="6" text="%pLetter%"/>
|
||||
<line alignment="4" bold="true" italic="false" sfIncrement="2" text="%pName%"/>
|
||||
<line alignment="4" bold="false" italic="false" sfIncrement="0" text="%wCut% %pQuantity%"/>
|
||||
<line alignment="4" bold="false" italic="false" sfIncrement="0" text="%userMaterial1%"/>
|
||||
</data>
|
||||
<patternInfo fontSize="10" height="1.92131" mx="274.604" my="360.938" rotation="0" visible="true" width="3.00933"/>
|
||||
<grainline arrows="0" length="3.945" mx="448.516" my="476.644" rotation="90" visible="true"/>
|
||||
<nodes>
|
||||
<node idObject="188" reverse="0" type="NodeSpline"/>
|
||||
<node after="0.7" idObject="189" type="NodePoint"/>
|
||||
<node idObject="190" reverse="0" type="NodeSpline"/>
|
||||
<node before="0.7" idObject="183" type="NodePoint"/>
|
||||
<node idObject="184" reverse="1" type="NodeSpline"/>
|
||||
<node idObject="185" type="NodePoint"/>
|
||||
<node idObject="186" reverse="0" type="NodeSpline"/>
|
||||
<node idObject="187" type="NodePoint"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
</details>
|
||||
<groups>
|
||||
<group id="44" name="Vorderhose" visible="false">
|
||||
<item object="1" tool="1"/>
|
||||
<item object="3" tool="3"/>
|
||||
<item object="4" tool="4"/>
|
||||
<item object="5" tool="5"/>
|
||||
<item object="6" tool="6"/>
|
||||
<item object="15" tool="15"/>
|
||||
<item object="17" tool="17"/>
|
||||
<item object="18" tool="18"/>
|
||||
<item object="20" tool="20"/>
|
||||
<item object="21" tool="21"/>
|
||||
<item object="23" tool="23"/>
|
||||
<item object="25" tool="25"/>
|
||||
<item object="31" tool="31"/>
|
||||
<item object="35" tool="35"/>
|
||||
<item object="36" tool="36"/>
|
||||
<item object="37" tool="37"/>
|
||||
<item object="38" tool="38"/>
|
||||
<item object="39" tool="39"/>
|
||||
<item object="40" tool="40"/>
|
||||
<item object="41" tool="41"/>
|
||||
<item object="43" tool="43"/>
|
||||
<item object="145" tool="145"/>
|
||||
<item object="144" tool="144"/>
|
||||
<item object="352" tool="352"/>
|
||||
<item object="351" tool="351"/>
|
||||
<item object="342" tool="342"/>
|
||||
<item object="348" tool="348"/>
|
||||
<item object="358" tool="358"/>
|
||||
<item object="356" tool="356"/>
|
||||
<item object="355" tool="355"/>
|
||||
<item object="602" tool="602"/>
|
||||
<item object="591" tool="591"/>
|
||||
<item object="618" tool="618"/>
|
||||
<item object="341" tool="341"/>
|
||||
<item object="590" tool="590"/>
|
||||
<item object="608" tool="608"/>
|
||||
<item tool="643"/>
|
||||
<item tool="642"/>
|
||||
<item tool="853"/>
|
||||
<item tool="860"/>
|
||||
<item tool="862"/>
|
||||
<item tool="865"/>
|
||||
</group>
|
||||
<group id="45" name="Konstruktion" visible="false">
|
||||
<item object="2" tool="2"/>
|
||||
<item object="7" tool="7"/>
|
||||
<item object="9" tool="9"/>
|
||||
<item object="10" tool="10"/>
|
||||
<item object="11" tool="11"/>
|
||||
<item object="12" tool="12"/>
|
||||
<item object="13" tool="13"/>
|
||||
<item object="14" tool="14"/>
|
||||
<item object="16" tool="16"/>
|
||||
<item object="19" tool="19"/>
|
||||
<item object="22" tool="22"/>
|
||||
<item object="24" tool="24"/>
|
||||
<item object="26" tool="26"/>
|
||||
<item object="27" tool="27"/>
|
||||
<item object="28" tool="28"/>
|
||||
<item object="29" tool="29"/>
|
||||
<item object="30" tool="30"/>
|
||||
<item object="33" tool="33"/>
|
||||
<item object="34" tool="34"/>
|
||||
<item object="42" tool="42"/>
|
||||
<item object="5" tool="5"/>
|
||||
<item object="4" tool="4"/>
|
||||
<item object="15" tool="15"/>
|
||||
<item object="3" tool="3"/>
|
||||
<item object="1" tool="1"/>
|
||||
<item object="17" tool="17"/>
|
||||
<item object="49" tool="49"/>
|
||||
<item object="46" tool="46"/>
|
||||
<item object="52" tool="52"/>
|
||||
<item object="54" tool="54"/>
|
||||
<item object="58" tool="58"/>
|
||||
<item object="56" tool="56"/>
|
||||
<item object="55" tool="55"/>
|
||||
<item object="62" tool="62"/>
|
||||
<item object="68" tool="68"/>
|
||||
<item object="67" tool="67"/>
|
||||
<item object="31" tool="31"/>
|
||||
<item object="23" tool="23"/>
|
||||
<item object="71" tool="71"/>
|
||||
<item object="75" tool="75"/>
|
||||
<item object="74" tool="74"/>
|
||||
<item object="57" tool="57"/>
|
||||
<item object="59" tool="59"/>
|
||||
<item object="61" tool="61"/>
|
||||
<item object="60" tool="60"/>
|
||||
<item object="32" tool="32"/>
|
||||
</group>
|
||||
<group id="51" name="Hinterhose" visible="false">
|
||||
<item object="46" tool="46"/>
|
||||
<item object="48" tool="48"/>
|
||||
<item object="50" tool="50"/>
|
||||
<item object="55" tool="55"/>
|
||||
<item object="65" tool="65"/>
|
||||
<item object="66" tool="66"/>
|
||||
<item object="62" tool="62"/>
|
||||
<item object="68" tool="68"/>
|
||||
<item object="67" tool="67"/>
|
||||
<item object="69" tool="69"/>
|
||||
<item object="53" tool="53"/>
|
||||
<item object="70" tool="70"/>
|
||||
<item object="72" tool="72"/>
|
||||
<item object="71" tool="71"/>
|
||||
<item object="73" tool="73"/>
|
||||
<item object="2" tool="2"/>
|
||||
<item object="3" tool="3"/>
|
||||
<item object="1" tool="1"/>
|
||||
<item object="47" tool="47"/>
|
||||
<item object="359" tool="359"/>
|
||||
<item object="354" tool="354"/>
|
||||
<item object="353" tool="353"/>
|
||||
<item object="349" tool="349"/>
|
||||
<item object="345" tool="345"/>
|
||||
<item object="357" tool="357"/>
|
||||
<item object="355" tool="355"/>
|
||||
<item object="617" tool="617"/>
|
||||
<item object="594" tool="594"/>
|
||||
<item object="341" tool="341"/>
|
||||
<item object="590" tool="590"/>
|
||||
<item tool="644"/>
|
||||
<item tool="641"/>
|
||||
<item tool="856"/>
|
||||
<item tool="859"/>
|
||||
<item tool="868"/>
|
||||
<item tool="862"/>
|
||||
</group>
|
||||
<group id="77" name="Kontrolle" visible="false">
|
||||
<item object="64" tool="64"/>
|
||||
<item object="63" tool="63"/>
|
||||
<item object="78" tool="78"/>
|
||||
</group>
|
||||
<group id="119" name="Passe_Konstruktion" visible="false">
|
||||
<item object="76" tool="76"/>
|
||||
<item object="79" tool="79"/>
|
||||
<item object="83" tool="83"/>
|
||||
<item object="85" tool="85"/>
|
||||
<item object="86" tool="86"/>
|
||||
<item object="87" tool="87"/>
|
||||
<item object="88" tool="88"/>
|
||||
<item object="90" tool="89"/>
|
||||
<item object="91" tool="89"/>
|
||||
<item object="92" tool="92"/>
|
||||
<item object="93" tool="93"/>
|
||||
<item object="94" tool="94"/>
|
||||
<item object="95" tool="95"/>
|
||||
<item object="96" tool="96"/>
|
||||
<item object="97" tool="97"/>
|
||||
<item object="98" tool="98"/>
|
||||
<item object="99" tool="99"/>
|
||||
<item object="100" tool="100"/>
|
||||
<item object="101" tool="101"/>
|
||||
<item object="102" tool="102"/>
|
||||
<item object="103" tool="103"/>
|
||||
<item object="104" tool="104"/>
|
||||
<item object="105" tool="105"/>
|
||||
<item object="106" tool="106"/>
|
||||
<item object="108" tool="107"/>
|
||||
<item object="109" tool="107"/>
|
||||
<item object="110" tool="110"/>
|
||||
<item object="111" tool="111"/>
|
||||
<item object="112" tool="112"/>
|
||||
<item object="114" tool="113"/>
|
||||
<item object="115" tool="113"/>
|
||||
<item object="116" tool="116"/>
|
||||
<item object="117" tool="117"/>
|
||||
<item object="118" tool="118"/>
|
||||
</group>
|
||||
<group id="120" name="Passe" visible="false">
|
||||
<item object="83" tool="83"/>
|
||||
<item object="85" tool="85"/>
|
||||
<item object="97" tool="97"/>
|
||||
<item object="98" tool="98"/>
|
||||
<item object="100" tool="100"/>
|
||||
<item object="104" tool="104"/>
|
||||
<item object="108" tool="107"/>
|
||||
<item object="109" tool="107"/>
|
||||
<item object="114" tool="113"/>
|
||||
<item object="115" tool="113"/>
|
||||
<item object="128" tool="128"/>
|
||||
<item object="127" tool="127"/>
|
||||
<item object="126" tool="126"/>
|
||||
<item object="125" tool="125"/>
|
||||
<item object="124" tool="124"/>
|
||||
<item object="123" tool="123"/>
|
||||
<item object="122" tool="122"/>
|
||||
<item object="121" tool="121"/>
|
||||
<item object="129" tool="129"/>
|
||||
<item object="132" tool="132"/>
|
||||
<item object="130" tool="130"/>
|
||||
<item object="131" tool="131"/>
|
||||
<item object="417" tool="417"/>
|
||||
<item object="418" tool="418"/>
|
||||
</group>
|
||||
<group id="162" name="Vordertasche" visible="true">
|
||||
<item object="142" tool="142"/>
|
||||
<item object="143" tool="143"/>
|
||||
<item object="145" tool="145"/>
|
||||
<item object="147" tool="147"/>
|
||||
<item object="148" tool="148"/>
|
||||
<item object="150" tool="150"/>
|
||||
<item object="151" tool="151"/>
|
||||
<item object="153" tool="152"/>
|
||||
<item object="154" tool="152"/>
|
||||
<item object="155" tool="152"/>
|
||||
<item object="156" tool="152"/>
|
||||
<item object="158" tool="152"/>
|
||||
<item object="159" tool="152"/>
|
||||
<item object="160" tool="160"/>
|
||||
<item object="161" tool="161"/>
|
||||
<item object="157" tool="152"/>
|
||||
<item object="144" tool="144"/>
|
||||
<item object="149" tool="149"/>
|
||||
<item object="192" tool="192"/>
|
||||
<item object="196" tool="196"/>
|
||||
<item object="193" tool="193"/>
|
||||
<item object="197" tool="197"/>
|
||||
<item object="198" tool="198"/>
|
||||
<item object="146" tool="146"/>
|
||||
<item object="39" tool="39"/>
|
||||
<item object="43" tool="43"/>
|
||||
<item object="36" tool="36"/>
|
||||
</group>
|
||||
<group id="330" name="Gesäßtasche_Konstruktion" visible="false">
|
||||
<item object="253" tool="253"/>
|
||||
<item object="254" tool="254"/>
|
||||
<item object="255" tool="255"/>
|
||||
<item object="258" tool="258"/>
|
||||
<item object="259" tool="259"/>
|
||||
<item object="260" tool="260"/>
|
||||
<item object="261" tool="261"/>
|
||||
<item object="263" tool="263"/>
|
||||
<item object="265" tool="265"/>
|
||||
<item object="274" tool="274"/>
|
||||
<item object="275" tool="275"/>
|
||||
<item object="266" tool="266"/>
|
||||
<item object="276" tool="276"/>
|
||||
<item object="283" tool="283"/>
|
||||
<item object="282" tool="282"/>
|
||||
<item object="277" tool="277"/>
|
||||
<item object="287" tool="287"/>
|
||||
<item object="288" tool="288"/>
|
||||
<item object="278" tool="278"/>
|
||||
<item object="279" tool="279"/>
|
||||
<item object="262" tool="262"/>
|
||||
<item object="511" tool="511"/>
|
||||
<item object="512" tool="512"/>
|
||||
<item object="510" tool="510"/>
|
||||
</group>
|
||||
<group id="331" name="Gesäßtasche" visible="false">
|
||||
<item object="256" tool="256"/>
|
||||
<item object="257" tool="257"/>
|
||||
<item object="264" tool="264"/>
|
||||
<item object="267" tool="267"/>
|
||||
<item object="268" tool="268"/>
|
||||
<item object="269" tool="269"/>
|
||||
<item object="270" tool="270"/>
|
||||
<item object="271" tool="271"/>
|
||||
<item object="272" tool="272"/>
|
||||
<item object="273" tool="273"/>
|
||||
<item object="280" tool="280"/>
|
||||
<item object="281" tool="281"/>
|
||||
<item object="284" tool="284"/>
|
||||
<item object="285" tool="285"/>
|
||||
<item object="286" tool="286"/>
|
||||
<item object="289" tool="289"/>
|
||||
<item object="290" tool="290"/>
|
||||
<item object="291" tool="291"/>
|
||||
<item object="292" tool="292"/>
|
||||
<item object="293" tool="293"/>
|
||||
<item object="294" tool="294"/>
|
||||
<item object="295" tool="295"/>
|
||||
<item object="296" tool="296"/>
|
||||
<item object="297" tool="297"/>
|
||||
<item object="298" tool="298"/>
|
||||
</group>
|
||||
<group id="393" name="Hosenschlitz 2-teilig RV" visible="false">
|
||||
<item object="43" tool="43"/>
|
||||
<item object="378" tool="378"/>
|
||||
<item object="382" tool="382"/>
|
||||
<item object="385" tool="385"/>
|
||||
<item object="377" tool="377"/>
|
||||
<item object="376" tool="376"/>
|
||||
<item object="381" tool="381"/>
|
||||
<item object="392" tool="392"/>
|
||||
<item object="398" tool="398"/>
|
||||
<item object="395" tool="394"/>
|
||||
<item object="399" tool="399"/>
|
||||
<item object="396" tool="394"/>
|
||||
<item object="397" tool="394"/>
|
||||
<item object="493" tool="492"/>
|
||||
<item object="494" tool="492"/>
|
||||
<item object="496" tool="496"/>
|
||||
<item object="497" tool="497"/>
|
||||
<item object="495" tool="492"/>
|
||||
<item object="513" tool="513"/>
|
||||
<item object="514" tool="514"/>
|
||||
<item object="527" tool="526"/>
|
||||
<item object="525" tool="525"/>
|
||||
<item object="524" tool="524"/>
|
||||
<item object="515" tool="515"/>
|
||||
<item object="518" tool="518"/>
|
||||
<item object="519" tool="519"/>
|
||||
<item object="520" tool="520"/>
|
||||
<item object="31" tool="31"/>
|
||||
<item object="607" tool="607"/>
|
||||
<item object="639" tool="639"/>
|
||||
<item object="638" tool="638"/>
|
||||
</group>
|
||||
</groups>
|
||||
</draw>
|
||||
<draw name="Bund">
|
||||
<calculation>
|
||||
<point id="420" mx="-0.398396" my="-3.67571" name="B" showLabel="true" type="single" x="41.4269" y="7.73397"/>
|
||||
<point angle="0" basePoint="420" id="421" length="#Bu/2+((#istEinteiligerHosenschlitz==0)?Line_A89_A90:(#HUUB-0.5))" lineColor="black" mx="-0.493107" my="-4.4334" name="B1" showLabel="true" type="endLine" typeLine="hair"/>
|
||||
<point angle="0" firstPoint="421" id="422" length="#Bh" lineColor="black" mx="0.115474" my="2.52168" name="B2" secondPoint="420" showLabel="true" type="normal" typeLine="hair"/>
|
||||
<point firstPoint="420" id="423" mx="0.264583" my="0.396875" name="B3" secondPoint="422" showLabel="true" type="pointOfIntersection"/>
|
||||
<line firstPoint="423" id="424" lineColor="black" secondPoint="422" typeLine="hair"/>
|
||||
<line firstPoint="420" id="425" lineColor="black" secondPoint="423" typeLine="hair"/>
|
||||
<point firstPoint="420" id="426" length="(#istEinteiligerHosenschlitz==0)?Line_A89_A90:(#HUUB-0.5)" lineColor="black" mx="-0.497589" my="-3.68398" name="B4" secondPoint="421" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="421" id="428" length="SplPath_A1b_A97" lineColor="black" mx="-2.30022" my="-3.12509" name="B6" secondPoint="420" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="428" id="427" length="Spl_A19_A48" lineColor="black" mx="0.858871" my="-3.97144" name="B5" secondPoint="420" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="426" id="429" mx="0.264583" my="0.396875" name="B7" secondPoint="423" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="427" id="430" mx="1.447" my="2.1271" name="B8" secondPoint="423" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="428" id="431" mx="-2.26938" my="1.39701" name="B9" secondPoint="423" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="427" id="446" length="2" lineColor="black" mx="-2.52806" my="-5.19056" name="B10" notes="14.01.2022 von 1 zu 2, weil man ja an der Taschen die Doppelnaht hat, man braucht mehr Abstand" secondPoint="420" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="446" id="447" length="#Gsb" lineColor="black" mx="-2.97855" my="-3.2563" name="B11" secondPoint="420" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="446" id="448" mx="-2.30755" my="2.89446" name="B12" secondPoint="423" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="447" id="449" mx="-3.23949" my="2.07436" name="B13" secondPoint="423" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="428" id="450" length="2" lineColor="black" mx="-1.26379" my="-3.5918" name="B14" secondPoint="421" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="450" id="451" length="#Gsb" lineColor="black" mx="1.15924" my="-3.96457" name="B15" secondPoint="421" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="451" id="452" mx="1.27107" my="2.44713" name="B16" secondPoint="422" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="450" id="453" mx="-0.928292" my="2.63352" name="B17" secondPoint="431" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="421" id="454" length="#Gsb/2" lineColor="black" mx="-2.49394" my="-2.73442" name="B18" secondPoint="420" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="454" id="455" mx="-2.27028" my="1.70158" name="B19" secondPoint="423" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="426" id="481" length="CurrentLength/2" lineColor="black" mx="-2.57557" my="0.0828608" name="B20" secondPoint="429" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" firstPoint="481" id="482" length="#HGKnB/2 + #HGKnLB/2" lineColor="black" mx="0.264583" my="0.396875" name="B21" secondPoint="429" showLabel="true" type="normal" typeLine="none"/>
|
||||
<line firstPoint="426" id="619" lineColor="black" secondPoint="429" typeLine="dotLine"/>
|
||||
<line firstPoint="447" id="620" lineColor="black" secondPoint="449" typeLine="dotLine"/>
|
||||
<line firstPoint="446" id="621" lineColor="black" secondPoint="448" typeLine="dotLine"/>
|
||||
<line firstPoint="450" id="622" lineColor="black" secondPoint="453" typeLine="dotLine"/>
|
||||
<line firstPoint="451" id="623" lineColor="black" secondPoint="452" typeLine="dotLine"/>
|
||||
<line firstPoint="454" id="624" lineColor="black" secondPoint="455" typeLine="dotLine"/>
|
||||
<line firstPoint="426" id="850" lineColor="black" secondPoint="427" typeLine="hair"/>
|
||||
</calculation>
|
||||
<modeling/>
|
||||
<details/>
|
||||
<groups/>
|
||||
</draw>
|
||||
<draw name="Gürtelschlaufen">
|
||||
<calculation>
|
||||
<point id="625" mx="-1.87215" my="-1.40548" name="C" showLabel="true" type="single" x="40.1932" y="18.8101"/>
|
||||
<point angle="270" basePoint="625" id="626" length="#Gsb*2" lineColor="black" mx="-2.09867" my="0.506794" name="C1" showLabel="true" type="endLine" typeLine="hair"/>
|
||||
<point angle="0" firstPoint="625" id="627" length="#Gsl" lineColor="black" mx="0.814176" my="-0.812229" name="C2" secondPoint="626" showLabel="true" type="normal" typeLine="hair"/>
|
||||
<point firstPoint="627" id="628" mx="0.264583" my="0.396875" name="C3" secondPoint="626" showLabel="true" type="pointOfIntersection"/>
|
||||
<line firstPoint="626" id="629" lineColor="black" secondPoint="628" typeLine="hair"/>
|
||||
<line firstPoint="628" id="630" lineColor="black" secondPoint="627" typeLine="hair"/>
|
||||
</calculation>
|
||||
<modeling/>
|
||||
<details/>
|
||||
<groups/>
|
||||
</draw>
|
||||
<draw name="einteiliger Über- und Untertritt">
|
||||
<calculation>
|
||||
<point id="649" mx="-2.237" my="-1.20332" name="D" showLabel="true" type="single" x="60.2053" y="19.523"/>
|
||||
<point angle="270" basePoint="649" id="650" length="#HlKn1t*2" lineColor="black" mx="-0.694508" my="0.893319" name="D1" showLabel="true" type="endLine" typeLine="hair"/>
|
||||
<point firstPoint="649" id="651" length="CurrentLength/2" lineColor="black" mx="0.341752" my="-2.40541" name="D2" secondPoint="650" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="651" id="672" length="3" lineColor="black" mx="-0.862307" my="0.793318" name="D2p" notes="14.01.2022 von 2 zu 3" secondPoint="650" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point angle="0" firstPoint="649" id="652" length="3.75" lineColor="black" mx="2.82931" my="-2.40262" name="D3" secondPoint="650" showLabel="true" type="normal" typeLine="none"/>
|
||||
<point angle="180" firstPoint="650" id="653" length="Line_D_D3" lineColor="black" mx="-0.635" my="2.61937" name="D4" secondPoint="651" showLabel="true" type="normal" typeLine="none"/>
|
||||
<point firstPoint="652" id="655" mx="0.702452" my="2.58772" name="D5" secondPoint="672" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="655" id="656" length="6" lineColor="black" mx="2.0392" my="-0.441798" name="D6" notes="14.01.2022 von 4 zu 6" secondPoint="652" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="672" id="657" length="2" lineColor="black" mx="0.146187" my="1.93019" name="D7" notes="14.01.2022 von 1.5 zu 1.75 21.09.2022 von 1.75 zu 2" secondPoint="655" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="657" id="658" mx="-0.202604" my="2.40771" name="D8" secondPoint="650" showLabel="true" type="pointOfIntersection"/>
|
||||
<line firstPoint="658" id="659" lineColor="black" secondPoint="657" typeLine="hair"/>
|
||||
<spline aScale="0" angle1="90" angle2="270" color="black" id="660" length1="1.5" length2="1.5" penStyle="hair" point1="657" point4="656" type="simpleInteractive"/>
|
||||
<point angle="0" basePoint="651" curve="660" id="835" lineColor="black" mx="-0.767297" my="0.476253" name="D26" showLabel="true" type="curveIntersectAxis" typeLine="none"/>
|
||||
<operation axisType="1" center="652" id="661" suffix="d1" type="flippingByAxis">
|
||||
<source>
|
||||
<item idObject="657"/>
|
||||
<item idObject="660"/>
|
||||
<item idObject="651"/>
|
||||
<item idObject="658"/>
|
||||
<item idObject="650"/>
|
||||
<item idObject="649"/>
|
||||
<item idObject="835"/>
|
||||
</source>
|
||||
<destination>
|
||||
<item idObject="662" mx="2.74921" my="2.61997"/>
|
||||
<item idObject="663"/>
|
||||
<item idObject="664" mx="2.4689" my="-0.642517"/>
|
||||
<item idObject="665" mx="-0.630139" my="2.83924"/>
|
||||
<item idObject="666" mx="0.665088" my="1.27398"/>
|
||||
<item idObject="667" mx="0.264583" my="0.396875"/>
|
||||
<item idObject="836" mx="-0.332824" my="-1.65877"/>
|
||||
</destination>
|
||||
</operation>
|
||||
<line firstPoint="649" id="668" lineColor="black" secondPoint="667" typeLine="hair"/>
|
||||
<line firstPoint="650" id="669" lineColor="black" secondPoint="666" typeLine="dotLine"/>
|
||||
<line firstPoint="665" id="670" lineColor="black" secondPoint="662" typeLine="hair"/>
|
||||
<line firstPoint="667" id="671" lineColor="black" secondPoint="666" typeLine="hair"/>
|
||||
<line firstPoint="651" id="673" lineColor="black" secondPoint="664" typeLine="dotLine"/>
|
||||
<line firstPoint="650" id="674" lineColor="black" secondPoint="658" typeLine="hair"/>
|
||||
<line firstPoint="665" id="675" lineColor="black" secondPoint="666" typeLine="hair"/>
|
||||
<point firstPoint="652" id="676" length="0.5" lineColor="black" mx="-0.109418" my="-2.90402" name="D9" secondPoint="649" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="676" id="677" mx="-1.47094" my="1.8854" name="D10" secondPoint="651" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="677" id="678" length="4" lineColor="black" mx="1.9435" my="-1.19673" name="D11" secondPoint="676" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<line firstPoint="676" id="679" lineColor="green" secondPoint="678" typeLine="hair"/>
|
||||
<spline aScale="1" angle1="270" angle2="16" color="green" id="680" length1="3" length2="1.5" penStyle="hair" point1="678" point4="651" type="simpleInteractive"/>
|
||||
<point firstPoint="649" id="681" length="#HKKnLB/2" lineColor="black" mx="-2.79963" my="-2.86594" name="D12" secondPoint="676" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="681" id="682" length="#HKKnLB" lineColor="black" mx="0.0943491" my="-4.1427" name="D13" secondPoint="652" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="681" id="683" length="CurrentLength/2" lineColor="black" mx="-1.21078" my="-3.14967" name="D14" secondPoint="682" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="683" id="684" mx="-1.97665" my="0.787902" name="D15" secondPoint="651" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="684" id="685" length="((CurrentLength+Line_B4_B20)/4)" lineColor="black" mx="0.0158717" my="-1.78424" name="D16" notes="23.09.2022 angepasst, sodass der Bund-Knopf auch berücksichtigt wird" secondPoint="683" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="684" id="686" length="((CurrentLength+Line_B4_B20)/4)*2" lineColor="black" mx="-0.380662" my="-1.76326" name="D17" notes="23.09.2022 angepasst, sodass der Bund-Knopf auch berücksichtigt wird" secondPoint="683" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="684" id="687" length="((CurrentLength+Line_B4_B20)/4)*3" lineColor="black" mx="-0.870311" my="-1.90128" name="D18" notes="23.09.2022 angepasst, sodass der Bund-Knopf auch berücksichtigt wird" secondPoint="683" showLabel="true" type="alongLine" typeLine="none"/>
|
||||
<point firstPoint="681" id="688" mx="-1.32427" my="0.198269" name="D19" secondPoint="685" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="682" id="689" mx="-0.728449" my="0.198269" name="D20" secondPoint="685" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="681" id="690" mx="-1.32427" my="-0.0570825" name="D21" secondPoint="686" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="682" id="691" mx="-0.12914" my="0.419505" name="D22" secondPoint="686" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="681" id="692" mx="-2.60102" my="-0.113827" name="D23" secondPoint="687" showLabel="true" type="pointOfIntersection"/>
|
||||
<point firstPoint="682" id="693" mx="2.46559" my="0.754312" name="D24" secondPoint="687" showLabel="true" type="pointOfIntersection"/>
|
||||
<line firstPoint="688" id="694" lineColor="black" secondPoint="689" typeLine="hair"/>
|
||||
<line firstPoint="690" id="695" lineColor="black" secondPoint="691" typeLine="hair"/>
|
||||
<line firstPoint="692" id="696" lineColor="black" secondPoint="693" typeLine="hair"/>
|
||||
<point firstPoint="652" id="704" mx="0.213232" my="1.88604" name="D25" secondPoint="651" showLabel="true" type="pointOfIntersection"/>
|
||||
<operation axisType="1" center="649" id="705" suffix="d2" type="flippingByAxis">
|
||||
<source>
|
||||
<item idObject="652"/>
|
||||
<item idObject="656"/>
|
||||
<item idObject="660"/>
|
||||
<item idObject="704"/>
|
||||
<item idObject="657"/>
|
||||
<item idObject="653"/>
|
||||
<item idObject="658"/>
|
||||
<item idObject="835"/>
|
||||
</source>
|
||||
<destination>
|
||||
<item idObject="706" mx="-2.51115" my="-2.14587"/>
|
||||
<item idObject="707" mx="-5.48287" my="0.0203572"/>
|
||||
<item idObject="708"/>
|
||||
<item idObject="709" mx="-4.30562" my="-0.527435"/>
|
||||
<item idObject="710" mx="-2.65164" my="0.697775"/>
|
||||
<item idObject="711" mx="-3.97279" my="1.48966"/>
|
||||
<item idObject="712" mx="-2.30798" my="2.51041"/>
|
||||
<item idObject="837" mx="-3.39208" my="1.07938"/>
|
||||
</destination>
|
||||
</operation>
|
||||
<line firstPoint="706" id="713" lineColor="black" secondPoint="707" typeLine="hair"/>
|
||||
<line firstPoint="706" id="714" lineColor="black" secondPoint="649" typeLine="hair"/>
|
||||
<line firstPoint="710" id="715" lineColor="black" secondPoint="712" typeLine="hair"/>
|
||||
<line firstPoint="712" id="716" lineColor="black" secondPoint="650" typeLine="hair"/>
|
||||
<line firstPoint="712" id="717" lineColor="black" secondPoint="711" typeLine="dotLine"/>
|
||||
<line firstPoint="711" id="718" lineColor="black" secondPoint="707" typeLine="dotLine"/>
|
||||
<line firstPoint="709" id="719" lineColor="black" secondPoint="651" typeLine="dotLine"/>
|
||||
<line firstPoint="656" id="720" lineColor="black" secondPoint="653" typeLine="dotLine"/>
|
||||
<line firstPoint="656" id="721" lineColor="black" secondPoint="652" typeLine="hair"/>
|
||||
</calculation>
|
||||
<modeling/>
|
||||
<details/>
|
||||
<groups>
|
||||
<group id="697" name="Konpflochkonstruktion" visible="true">
|
||||
<item object="681" tool="681"/>
|
||||
<item object="682" tool="682"/>
|
||||
<item object="683" tool="683"/>
|
||||
<item object="684" tool="684"/>
|
||||
<item object="685" tool="685"/>
|
||||
<item object="686" tool="686"/>
|
||||
<item object="687" tool="687"/>
|
||||
<item object="688" tool="688"/>
|
||||
<item object="689" tool="689"/>
|
||||
<item object="690" tool="690"/>
|
||||
<item object="691" tool="691"/>
|
||||
<item object="692" tool="692"/>
|
||||
<item object="693" tool="693"/>
|
||||
</group>
|
||||
<group id="698" name="Knopflöcher" visible="true">
|
||||
<item object="694" tool="694"/>
|
||||
<item object="695" tool="695"/>
|
||||
<item object="696" tool="696"/>
|
||||
</group>
|
||||
</groups>
|
||||
</draw>
|
||||
</pattern>
|
47
src/app/share/collection/bugs/smart_pattern_#184_case2.vit
Normal file
47
src/app/share/collection/bugs/smart_pattern_#184_case2.vit
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<vit>
|
||||
<!--Measurements created with Valentina v0.7.50.0 (https://smart-pattern.com.ua/).-->
|
||||
<version>0.5.1</version>
|
||||
<read-only>false</read-only>
|
||||
<notes>Nach Messung wegen Büste am 16.03.2021
|
||||
Brustumfang : 88 -> 86
|
||||
Taille: 79 -> 76
|
||||
Hüfte: 92 -> 94
|
||||
Halsumfang: 39.5 -> 37</notes>
|
||||
<unit>cm</unit>
|
||||
<pm_system>998</pm_system>
|
||||
<personal>
|
||||
<customer>Ronan</customer>
|
||||
<birth-date>1987-04-03</birth-date>
|
||||
<gender>male</gender>
|
||||
<email/>
|
||||
</personal>
|
||||
<body-measurements>
|
||||
<m name="waist_natural_circ" value="82"/>
|
||||
<m name="waist_to_hip_b" value="21"/>
|
||||
<m name="neck_back_to_waist_b" value="43"/>
|
||||
<m name="across_chest_f" value="35"/>
|
||||
<m name="across_back_b" value="35"/>
|
||||
<m name="neck_back_to_bust_b" value="22.5"/>
|
||||
<m name="hip_circ" value="94"/>
|
||||
<m name="hand_circ" value="22"/>
|
||||
<m name="leg_waist_side_to_floor" value="98.5"/>
|
||||
<m name="leg_crotch_to_floor" value="77.5"/>
|
||||
<m name="height_knee" value="48"/>
|
||||
<m name="height_calf" value="30"/>
|
||||
<m name="leg_thigh_upper_circ" value="50"/>
|
||||
<m name="leg_knee_circ" value="35.5"/>
|
||||
<m name="leg_calf_circ" value="34.5"/>
|
||||
<m name="leg_knee_circ_bent" value="38.5"/>
|
||||
<m name="leg_ankle_circ" value="25.5"/>
|
||||
<m name="leg_ankle_diag_circ" value="32"/>
|
||||
<m name="height" value="172"/>
|
||||
<m name="neck_circ" value="37"/>
|
||||
<m name="bust_circ" value="86"/>
|
||||
<m name="waist_circ" value="76 "/>
|
||||
<m name="arm_shoulder_tip_to_wrist" value="58"/>
|
||||
<m name="arm_wrist_circ" value="16"/>
|
||||
<m name="head_circ" value="55"/>
|
||||
<m name="arm_lower_circ" value="26"/>
|
||||
</body-measurements>
|
||||
</vit>
|
|
@ -67,6 +67,7 @@
|
|||
<file>schema/pattern/v0.8.13.xsd</file>
|
||||
<file>schema/pattern/v0.9.0.xsd</file>
|
||||
<file>schema/pattern/v0.9.1.xsd</file>
|
||||
<file>schema/pattern/v0.9.2.xsd</file>
|
||||
<file>schema/multisize_measurements/v0.3.0.xsd</file>
|
||||
<file>schema/multisize_measurements/v0.4.0.xsd</file>
|
||||
<file>schema/multisize_measurements/v0.4.1.xsd</file>
|
||||
|
|
563
src/libs/ifc/schema/layout/v0.1.3.xsd
Normal file
563
src/libs/ifc/schema/layout/v0.1.3.xsd
Normal file
|
@ -0,0 +1,563 @@
|
|||
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:element name="layout">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="properties">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element type="units" name="unit"/>
|
||||
<xs:element type="xs:string" name="title"/>
|
||||
<xs:element type="xs:string" name="description"/>
|
||||
<xs:element name="control">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:boolean" name="warningSuperposition"/>
|
||||
<xs:attribute type="xs:boolean" name="warningOutOfBound"/>
|
||||
<xs:attribute type="xs:boolean" name="stickyEdges"/>
|
||||
<xs:attribute type="xs:boolean" name="followGrainline"/>
|
||||
<xs:attribute type="xs:float" name="piecesGap"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="tiles">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="size">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:float" name="width" use="required"/>
|
||||
<xs:attribute type="xs:float" name="length" use="required"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="margin">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:float" name="top"/>
|
||||
<xs:attribute type="xs:float" name="right"/>
|
||||
<xs:attribute type="xs:float" name="bottom"/>
|
||||
<xs:attribute type="xs:float" name="left"/>
|
||||
<xs:attribute type="xs:boolean" name="ignoreMargins"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:boolean" name="visible"/>
|
||||
<xs:attribute type="xs:string" name="matchingMarks"/>
|
||||
<xs:attribute type="xs:boolean" name="printScheme"/>
|
||||
<xs:attribute type="xs:boolean" name="tileNumber"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="scale">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="LayoutScale" name="xScale"/>
|
||||
<xs:attribute type="LayoutScale" name="yScale"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="watermark">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute type="xs:boolean" name="showPreview" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="unplacedPieces">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="piece" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="seamLine">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="point" minOccurs="3" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:double" name="x" use="required"/>
|
||||
<xs:attribute type="xs:double" name="y" use="required"/>
|
||||
<xs:attribute type="xs:boolean" name="turnPoint" use="optional"/>
|
||||
<xs:attribute type="xs:boolean" name="curvePoint" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="seamAllowance">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="point" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:double" name="x" use="required"/>
|
||||
<xs:attribute type="xs:double" name="y" use="required"/>
|
||||
<xs:attribute type="xs:boolean" name="turnPoint" use="optional"/>
|
||||
<xs:attribute type="xs:boolean" name="curvePoint" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:boolean" name="enabled" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="grainline">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="PathOrEmpty">
|
||||
<xs:attribute type="xs:boolean" name="enabled" use="optional"/>
|
||||
<xs:attribute type="xs:float" name="angle" use="optional"/>
|
||||
<xs:attribute type="ArrowDirection" name="arrowDirection" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="notches">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="notch" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:boolean" name="builtIn" use="optional"/>
|
||||
<xs:attribute type="NotchType" name="type" use="optional"/>
|
||||
<xs:attribute type="LinePath" name="baseLine" use="optional"/>
|
||||
<xs:attribute type="LinesPath" name="path" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="internalPaths">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="internalPath" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="point" minOccurs="3" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:double" name="x" use="required"/>
|
||||
<xs:attribute type="xs:double" name="y" use="required"/>
|
||||
<xs:attribute type="xs:boolean" name="turnPoint" use="optional"/>
|
||||
<xs:attribute type="xs:boolean" name="curvePoint" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:boolean" name="cut" use="optional"/>
|
||||
<xs:attribute type="CurvePenStyle" name="penStyle" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="markers">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence>
|
||||
<xs:element name="marker" maxOccurs="unbounded" minOccurs="0">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="Transformation" name="transform" use="required"/>
|
||||
<xs:attribute type="MarkerType" name="type" use="required"/>
|
||||
<xs:attribute type="PointPath" name="center" use="required"/>
|
||||
<xs:attribute type="RectPath" name="box" use="required"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="labels">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="pieceLabel" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="lines">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="line" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute type="xs:boolean" name="bold" use="optional"/>
|
||||
<xs:attribute type="xs:boolean" name="italic" use="optional"/>
|
||||
<xs:attribute type="xs:unsignedInt" name="alignment" use="optional"/>
|
||||
<xs:attribute type="xs:unsignedInt" name="fontSize" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="font"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="shape" use="required"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="patternLabel" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="lines">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="line" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute type="xs:boolean" name="bold" use="optional"/>
|
||||
<xs:attribute type="xs:boolean" name="italic" use="optional"/>
|
||||
<xs:attribute type="xs:unsignedInt" name="alignment" use="optional"/>
|
||||
<xs:attribute type="xs:unsignedInt" name="fontSize" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="font"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="shape" use="required"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="uuid" use="required"/>
|
||||
<xs:attribute type="xs:string" name="name"/>
|
||||
<xs:attribute type="xs:boolean" name="mirrored"/>
|
||||
<xs:attribute type="xs:boolean" name="forbidFlipping"/>
|
||||
<xs:attribute type="xs:boolean" name="forceFlipping"/>
|
||||
<xs:attribute type="Transformation" name="transform"/>
|
||||
<xs:attribute type="xs:string" name="gradationLabel"/>
|
||||
<xs:attribute type="xs:unsignedInt" name="copyNumber"/>
|
||||
<xs:attribute type="xs:boolean" name="showSeamline"/>
|
||||
<xs:attribute type="xs:float" name="xScale"/>
|
||||
<xs:attribute type="xs:float" name="yScale"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="sheets">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="sheet" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element type="xs:string" name="name"/>
|
||||
<xs:element name="size">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:float" name="width" use="required"/>
|
||||
<xs:attribute type="xs:float" name="length" use="required"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="margin">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:float" name="top"/>
|
||||
<xs:attribute type="xs:float" name="right"/>
|
||||
<xs:attribute type="xs:float" name="bottom"/>
|
||||
<xs:attribute type="xs:float" name="left"/>
|
||||
<xs:attribute type="xs:boolean" name="ignoreMargins"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="pieces">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="piece" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="seamLine">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="point" minOccurs="3" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:double" name="x" use="required"/>
|
||||
<xs:attribute type="xs:double" name="y" use="required"/>
|
||||
<xs:attribute type="xs:boolean" name="turnPoint" use="optional"/>
|
||||
<xs:attribute type="xs:boolean" name="curvePoint" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="seamAllowance">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="point" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:double" name="x" use="required"/>
|
||||
<xs:attribute type="xs:double" name="y" use="required"/>
|
||||
<xs:attribute type="xs:boolean" name="turnPoint" use="optional"/>
|
||||
<xs:attribute type="xs:boolean" name="curvePoint" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:boolean" name="enabled" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="grainline">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="PathOrEmpty">
|
||||
<xs:attribute type="xs:boolean" name="enabled" use="optional"/>
|
||||
<xs:attribute type="xs:float" name="angle" use="optional"/>
|
||||
<xs:attribute type="ArrowDirection" name="arrowDirection" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="notches">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="notch" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:boolean" name="builtIn" use="optional"/>
|
||||
<xs:attribute type="NotchType" name="type" use="optional"/>
|
||||
<xs:attribute type="LinePath" name="baseLine" use="optional"/>
|
||||
<xs:attribute type="LinesPath" name="path" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="internalPaths">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="internalPath" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="point" minOccurs="2" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:double" name="x" use="required"/>
|
||||
<xs:attribute type="xs:double" name="y" use="required"/>
|
||||
<xs:attribute type="xs:boolean" name="turnPoint" use="optional"/>
|
||||
<xs:attribute type="xs:boolean" name="curvePoint" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:boolean" name="cut" use="optional"/>
|
||||
<xs:attribute type="CurvePenStyle" name="penStyle" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="markers">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence>
|
||||
<xs:element name="marker" maxOccurs="unbounded" minOccurs="0">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="Transformation" name="transform" use="required"/>
|
||||
<xs:attribute type="MarkerType" name="type" use="required"/>
|
||||
<xs:attribute type="PointPath" name="center" use="required"/>
|
||||
<xs:attribute type="RectPath" name="box" use="required"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="labels">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="pieceLabel" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="lines">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="line" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute type="xs:boolean" name="bold" use="optional"/>
|
||||
<xs:attribute type="xs:boolean" name="italic" use="optional"/>
|
||||
<xs:attribute type="AlignmentType" name="alignment" use="optional"/>
|
||||
<xs:attribute type="xs:unsignedInt" name="fontSize" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="font"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="PathNotEmpty" name="shape" use="required"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="patternLabel" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="lines">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="line" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute type="xs:boolean" name="bold" use="optional"/>
|
||||
<xs:attribute type="xs:boolean" name="italic" use="optional"/>
|
||||
<xs:attribute type="AlignmentType" name="alignment" use="optional"/>
|
||||
<xs:attribute type="xs:unsignedInt" name="fontSize" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="font"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="PathNotEmpty" name="shape" use="required"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="uuid" use="required"/>
|
||||
<xs:attribute type="xs:string" name="name"/>
|
||||
<xs:attribute type="xs:boolean" name="mirrored"/>
|
||||
<xs:attribute type="xs:boolean" name="forbidFlipping"/>
|
||||
<xs:attribute type="xs:boolean" name="forceFlipping"/>
|
||||
<xs:attribute type="Transformation" name="transform"/>
|
||||
<xs:attribute type="xs:string" name="gradationLabel"/>
|
||||
<xs:attribute type="xs:unsignedInt" name="copyNumber"/>
|
||||
<xs:attribute type="xs:boolean" name="showSeamline"/>
|
||||
<xs:attribute type="xs:float" name="xScale"/>
|
||||
<xs:attribute type="xs:float" name="yScale"/>
|
||||
<xs:attribute type="xs:float" name="zValue"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="GrainlineType" name="grainlineType"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="formatVersion" name="version" use="required"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<!--Types-->
|
||||
<xs:simpleType name="formatVersion">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="units">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="mm"/>
|
||||
<xs:enumeration value="cm"/>
|
||||
<xs:enumeration value="inch"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="uuid">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="|\{[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}\}"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="ArrowDirection">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="atFront"/>
|
||||
<xs:enumeration value="atRear"/>
|
||||
<xs:enumeration value="atBoth"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="NotchType">
|
||||
<xs:restriction base="xs:unsignedInt">
|
||||
<xs:enumeration value="0"/>
|
||||
<!--OneLine-->
|
||||
<xs:enumeration value="1"/>
|
||||
<!--TwoLines-->
|
||||
<xs:enumeration value="2"/>
|
||||
<!--ThreeLines-->
|
||||
<xs:enumeration value="3"/>
|
||||
<!--TMark-->
|
||||
<xs:enumeration value="4"/>
|
||||
<!--VMark-->
|
||||
<xs:enumeration value="5"/>
|
||||
<!--VMark2-->
|
||||
<xs:enumeration value="6"/>
|
||||
<!--UMark-->
|
||||
<xs:enumeration value="7"/>
|
||||
<!--BoxMark-->
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="CurvePenStyle">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="hair"/>
|
||||
<xs:enumeration value="dashLine"/>
|
||||
<xs:enumeration value="dotLine"/>
|
||||
<xs:enumeration value="dashDotLine"/>
|
||||
<xs:enumeration value="dashDotDotLine"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="MarkerType">
|
||||
<xs:restriction base="xs:unsignedInt">
|
||||
<xs:enumeration value="0"/><!--Segment-->
|
||||
<xs:enumeration value="1"/><!--Rectangle-->
|
||||
<xs:enumeration value="2"/><!--Cross-->
|
||||
<xs:enumeration value="3"/><!--Tshaped-->
|
||||
<xs:enumeration value="4"/><!--Doubletree-->
|
||||
<xs:enumeration value="5"/><!--Corner-->
|
||||
<xs:enumeration value="6"/><!--Triangle-->
|
||||
<xs:enumeration value="7"/><!--Hshaped-->
|
||||
<xs:enumeration value="8"/><!--Button-->
|
||||
<xs:enumeration value="9"/><!--Circle-->
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="AlignmentType">
|
||||
<xs:restriction base="xs:unsignedInt">
|
||||
<xs:enumeration value="0"/><!--default (no aligns)-->
|
||||
<xs:enumeration value="1"/><!--aligns with the left edge-->
|
||||
<xs:enumeration value="2"/><!--aligns with the right edge-->
|
||||
<xs:enumeration value="4"/><!--Centers horizontally in the available space-->
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="Transformation">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="([-+]?\d+\.?\d*([eE][-+]?\d+)?;){8,}[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="PathNotEmpty">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="([-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?\s){0,}[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="PathOrEmpty">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="|([-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?\s){0,}[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="LinePath">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?;[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="LinesPath">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="([-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?;[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?\*){0,}[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?;[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="PointPath">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="RectPath">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="([-+]?\d+\.?\d*([eE][-+]?\d+)?;){3,}[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="GrainlineType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="horizontal"/>
|
||||
<xs:enumeration value="vertical"/>
|
||||
<xs:enumeration value="notFixed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="LayoutScale">
|
||||
<xs:restriction base="xs:float">
|
||||
<xs:minInclusive value="0.01"/>
|
||||
<xs:maxInclusive value="3"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:schema>
|
1181
src/libs/ifc/schema/pattern/v0.9.2.xsd
Normal file
1181
src/libs/ifc/schema/pattern/v0.9.2.xsd
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -129,6 +129,7 @@ const QString VAbstractPattern::AttrNodePassmark = QStringLiteral("passmark
|
|||
const QString VAbstractPattern::AttrNodePassmarkLine = QStringLiteral("passmarkLine");
|
||||
const QString VAbstractPattern::AttrNodePassmarkAngle = QStringLiteral("passmarkAngle");
|
||||
const QString VAbstractPattern::AttrNodeShowSecondPassmark = QStringLiteral("showSecondPassmark");
|
||||
const QString VAbstractPattern::AttrNodeTurnPoint = QStringLiteral("turnPoint");
|
||||
const QString VAbstractPattern::AttrSABefore = QStringLiteral("before");
|
||||
const QString VAbstractPattern::AttrSAAfter = QStringLiteral("after");
|
||||
const QString VAbstractPattern::AttrStart = QStringLiteral("start");
|
||||
|
@ -811,6 +812,9 @@ VPieceNode VAbstractPattern::ParseSANode(const QDomElement &domElement)
|
|||
const QString passmarkLength =
|
||||
VDomDocument::GetParametrEmptyString(domElement, VAbstractPattern::AttrPassmarkLength);
|
||||
|
||||
const bool turnPoint =
|
||||
VDomDocument::GetParametrBool(domElement, VAbstractPattern::AttrNodeTurnPoint, trueStr);
|
||||
|
||||
const QString t = VDomDocument::GetParametrString(domElement, AttrType, VAbstractPattern::NodePoint);
|
||||
Tool tool;
|
||||
|
||||
|
@ -841,8 +845,7 @@ VPieceNode VAbstractPattern::ParseSANode(const QDomElement &domElement)
|
|||
tool = Tool::NodeElArc;
|
||||
break;
|
||||
default:
|
||||
VException e(QObject::tr("Wrong tag name '%1'.").arg(t));
|
||||
throw e;
|
||||
throw VException(tr("Wrong tag name '%1'.").arg(t));
|
||||
}
|
||||
VPieceNode node(id, tool, reverse);
|
||||
node.SetFormulaSABefore(saBefore);
|
||||
|
@ -856,6 +859,7 @@ VPieceNode VAbstractPattern::ParseSANode(const QDomElement &domElement)
|
|||
node.SetPassmarkAngleType(passmarkAngle);
|
||||
node.SetManualPassmarkLength(manualPassmarkLength);
|
||||
node.SetFormulaPassmarkLength(passmarkLength);
|
||||
node.SetTurnPoint(turnPoint);
|
||||
|
||||
return node;
|
||||
}
|
||||
|
|
|
@ -324,6 +324,7 @@ public:
|
|||
static const QString AttrNodePassmarkLine;
|
||||
static const QString AttrNodePassmarkAngle;
|
||||
static const QString AttrNodeShowSecondPassmark;
|
||||
static const QString AttrNodeTurnPoint;
|
||||
static const QString AttrSABefore;
|
||||
static const QString AttrSAAfter;
|
||||
static const QString AttrStart;
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "vlayoutconverter.h"
|
||||
#include "../exception/vexception.h"
|
||||
#include "ifcdef.h"
|
||||
#include "../vlayout/vlayoutpoint.h"
|
||||
|
||||
/*
|
||||
* Version rules:
|
||||
|
@ -38,12 +39,61 @@
|
|||
*/
|
||||
|
||||
const QString VLayoutConverter::LayoutMinVerStr = QStringLiteral("0.1.0");
|
||||
const QString VLayoutConverter::LayoutMaxVerStr = QStringLiteral("0.1.2");
|
||||
const QString VLayoutConverter::CurrentSchema = QStringLiteral("://schema/layout/v0.1.2.xsd");
|
||||
const QString VLayoutConverter::LayoutMaxVerStr = QStringLiteral("0.1.3");
|
||||
const QString VLayoutConverter::CurrentSchema = QStringLiteral("://schema/layout/v0.1.3.xsd");
|
||||
|
||||
//VLayoutConverter::LayoutMinVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
||||
//VLayoutConverter::LayoutMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
||||
|
||||
namespace
|
||||
{
|
||||
// The list of all string we use for conversion
|
||||
// Better to use global variables because repeating QStringLiteral blows up code size
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, strPieceTag, (QLatin1String("piece"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, strSeamLineTag, (QLatin1String("seamLine"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, strSeamAllowanceTag, (QLatin1String("seamAllowance"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, strInternalPathsTag, (QLatin1String("internalPaths"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, strInternalPathTag, (QLatin1String("internalPath"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, strMarkersTag, (QLatin1String("markers"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, strMarkerTag, (QLatin1String("marker"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, strPointTag, (QLatin1String("point"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, strAttrX, (QLatin1String("x"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, strAttrY, (QLatin1String("y"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, strAttrTurnPoint, (QLatin1String("turnPoint"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, strAttrCurvePoint, (QLatin1String("curvePoint"))) // NOLINT
|
||||
|
||||
//const QChar groupSep = QLatin1Char(';');
|
||||
const QChar coordintatesSep = QLatin1Char(',');
|
||||
const QChar pointsSep = QLatin1Char(' ');
|
||||
//const QChar itemsSep = QLatin1Char('*');
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto StringV0_1_2ToPoint(const QString &point) -> QPointF
|
||||
{
|
||||
QStringList coordinates = point.split(coordintatesSep);
|
||||
if (coordinates.count() == 2)
|
||||
{
|
||||
return {coordinates.at(0).toDouble(), coordinates.at(1).toDouble()};
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto StringV0_1_2ToPath(const QString &path) -> QVector<QPointF>
|
||||
{
|
||||
QVector<QPointF> p;
|
||||
QStringList points = path.split(pointsSep);
|
||||
p.reserve(points.size());
|
||||
for (const auto& point : points)
|
||||
{
|
||||
p.append(StringV0_1_2ToPoint(point));
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
VLayoutConverter::VLayoutConverter(const QString &fileName)
|
||||
: VAbstractConverter(fileName)
|
||||
|
@ -90,7 +140,8 @@ auto VLayoutConverter::XSDSchema(unsigned ver) const -> QString
|
|||
{
|
||||
std::make_pair(FormatVersion(0, 1, 0), QStringLiteral("://schema/layout/v0.1.0.xsd")),
|
||||
std::make_pair(FormatVersion(0, 1, 1), QStringLiteral("://schema/layout/v0.1.1.xsd")),
|
||||
std::make_pair(FormatVersion(0, 1, 2), CurrentSchema),
|
||||
std::make_pair(FormatVersion(0, 1, 2), QStringLiteral("://schema/layout/v0.1.2.xsd")),
|
||||
std::make_pair(FormatVersion(0, 1, 3), CurrentSchema),
|
||||
};
|
||||
|
||||
if (schemas.contains(ver))
|
||||
|
@ -108,10 +159,11 @@ void VLayoutConverter::ApplyPatches()
|
|||
{
|
||||
case (FormatVersion(0, 1, 0)):
|
||||
case (FormatVersion(0, 1, 1)):
|
||||
ToV0_1_2();
|
||||
ValidateXML(XSDSchema(FormatVersion(0, 1, 2)));
|
||||
Q_FALLTHROUGH();
|
||||
case (FormatVersion(0, 1, 2)):
|
||||
ToV0_1_3();
|
||||
ValidateXML(XSDSchema(FormatVersion(0, 1, 3)));
|
||||
Q_FALLTHROUGH();
|
||||
case (FormatVersion(0, 1, 3)):
|
||||
break;
|
||||
default:
|
||||
InvalidVersion(m_ver);
|
||||
|
@ -132,12 +184,78 @@ auto VLayoutConverter::IsReadOnly() const -> bool
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VLayoutConverter::ToV0_1_2()
|
||||
void VLayoutConverter::ConvertPiecesToV0_1_3()
|
||||
{
|
||||
// TODO. Delete if minimal supported version is 0.1.2
|
||||
Q_STATIC_ASSERT_X(VLayoutConverter::LayoutMinVer < FormatVersion(0, 1, 2),
|
||||
// TODO. Delete if minimal supported version is 0.1.3
|
||||
Q_STATIC_ASSERT_X(VLayoutConverter::LayoutMinVer < FormatVersion(0, 1, 3),
|
||||
"Time to refactor the code.");
|
||||
|
||||
SetVersion(QStringLiteral("0.1.2"));
|
||||
const QStringList types
|
||||
{
|
||||
*strSeamLineTag,
|
||||
*strSeamAllowanceTag,
|
||||
*strInternalPathTag
|
||||
};
|
||||
|
||||
for (const auto &tagType : types)
|
||||
{
|
||||
QDomNodeList tags = elementsByTagName(tagType);
|
||||
for (int i=0; i < tags.size(); ++i)
|
||||
{
|
||||
QDomElement node = tags.at(i).toElement();
|
||||
ConvertPathToV0_1_3(node);
|
||||
}
|
||||
}
|
||||
|
||||
QDomNodeList tags = elementsByTagName(*strMarkerTag);
|
||||
for (int i=0; i < tags.size(); ++i)
|
||||
{
|
||||
QDomElement node = tags.at(i).toElement();
|
||||
RemoveAllChildren(node);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VLayoutConverter::ConvertPathToV0_1_3(QDomElement &node)
|
||||
{
|
||||
QString oldPath = node.text();
|
||||
if (oldPath.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RemoveAllChildren(node);
|
||||
QVector<VLayoutPoint> path;
|
||||
CastTo(StringV0_1_2ToPath(oldPath), path);
|
||||
|
||||
for (auto &point : path)
|
||||
{
|
||||
QDomElement pointTag = createElement(*strPointTag);
|
||||
SetAttribute(pointTag, *strAttrX, point.x());
|
||||
SetAttribute(pointTag, *strAttrY, point.y());
|
||||
|
||||
if (point.TurnPoint())
|
||||
{
|
||||
SetAttribute(pointTag, *strAttrTurnPoint, point.TurnPoint());
|
||||
}
|
||||
|
||||
if (point.CurvePoint())
|
||||
{
|
||||
SetAttribute(pointTag, *strAttrCurvePoint, point.CurvePoint());
|
||||
}
|
||||
|
||||
node.appendChild(pointTag);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VLayoutConverter::ToV0_1_3()
|
||||
{
|
||||
// TODO. Delete if minimal supported version is 0.1.3
|
||||
Q_STATIC_ASSERT_X(VLayoutConverter::LayoutMinVer < FormatVersion(0, 1, 3),
|
||||
"Time to refactor the code.");
|
||||
|
||||
ConvertPiecesToV0_1_3();
|
||||
SetVersion(QStringLiteral("0.1.3"));
|
||||
Save();
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ public:
|
|||
static const QString LayoutMaxVerStr;
|
||||
static const QString CurrentSchema;
|
||||
static Q_DECL_CONSTEXPR const unsigned LayoutMinVer = FormatVersion(0, 1, 0);
|
||||
static Q_DECL_CONSTEXPR const unsigned LayoutMaxVer = FormatVersion(0, 1, 2);
|
||||
static Q_DECL_CONSTEXPR const unsigned LayoutMaxVer = FormatVersion(0, 1, 3);
|
||||
|
||||
protected:
|
||||
void SetVersion(const QString &version) override;
|
||||
|
@ -61,7 +61,11 @@ protected:
|
|||
|
||||
auto IsReadOnly() const -> bool override;
|
||||
|
||||
void ToV0_1_2();
|
||||
void ConvertPiecesToV0_1_3();
|
||||
void ConvertPieceToV0_1_3(const QDomElement &piece);
|
||||
void ConvertPathToV0_1_3(QDomElement &node);
|
||||
|
||||
void ToV0_1_3();
|
||||
|
||||
private:
|
||||
Q_DISABLE_COPY_MOVE(VLayoutConverter) // NOLINT
|
||||
|
|
|
@ -60,8 +60,8 @@ class QDomElement;
|
|||
*/
|
||||
|
||||
const QString VPatternConverter::PatternMinVerStr = QStringLiteral("0.1.4");
|
||||
const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.9.1");
|
||||
const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.9.1.xsd");
|
||||
const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.9.2");
|
||||
const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.9.2.xsd");
|
||||
|
||||
//VPatternConverter::PatternMinVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
||||
//VPatternConverter::PatternMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
||||
|
@ -266,7 +266,8 @@ auto VPatternConverter::XSDSchema(unsigned ver) const -> QString
|
|||
std::make_pair(FormatVersion(0, 8, 12), QStringLiteral("://schema/pattern/v0.8.12.xsd")),
|
||||
std::make_pair(FormatVersion(0, 8, 13), QStringLiteral("://schema/pattern/v0.8.13.xsd")),
|
||||
std::make_pair(FormatVersion(0, 9, 0), QStringLiteral("://schema/pattern/v0.9.0.xsd")),
|
||||
std::make_pair(FormatVersion(0, 9, 1), CurrentSchema)
|
||||
std::make_pair(FormatVersion(0, 9, 1), QStringLiteral("://schema/pattern/v0.9.1.xsd")),
|
||||
std::make_pair(FormatVersion(0, 9, 2), CurrentSchema)
|
||||
};
|
||||
|
||||
if (schemas.contains(ver))
|
||||
|
@ -374,6 +375,10 @@ void VPatternConverter::ApplyPatches()
|
|||
ValidateXML(CurrentSchema);
|
||||
Q_FALLTHROUGH();
|
||||
case (FormatVersion(0, 9, 1)):
|
||||
ToV0_9_2();
|
||||
ValidateXML(CurrentSchema);
|
||||
Q_FALLTHROUGH();
|
||||
case (FormatVersion(0, 9, 2)):
|
||||
break;
|
||||
default:
|
||||
InvalidVersion(m_ver);
|
||||
|
@ -391,7 +396,7 @@ void VPatternConverter::DowngradeToCurrentMaxVersion()
|
|||
bool VPatternConverter::IsReadOnly() const
|
||||
{
|
||||
// Check if attribute readOnly was not changed in file format
|
||||
Q_STATIC_ASSERT_X(VPatternConverter::PatternMaxVer == FormatVersion(0, 9, 1),
|
||||
Q_STATIC_ASSERT_X(VPatternConverter::PatternMaxVer == FormatVersion(0, 9, 2),
|
||||
"Check attribute readOnly.");
|
||||
|
||||
// Possibly in future attribute readOnly will change position etc.
|
||||
|
@ -562,6 +567,17 @@ void VPatternConverter::ToV0_9_1()
|
|||
Save();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VPatternConverter::ToV0_9_2()
|
||||
{
|
||||
// TODO. Delete if minimal supported version is 0.9.2
|
||||
Q_STATIC_ASSERT_X(VPatternConverter::PatternMinVer < FormatVersion(0, 9, 2),
|
||||
"Time to refactor the code.");
|
||||
|
||||
SetVersion(QStringLiteral("0.9.2"));
|
||||
Save();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VPatternConverter::TagUnitToV0_2_0()
|
||||
{
|
||||
|
|
|
@ -53,7 +53,7 @@ public:
|
|||
static const QString PatternMaxVerStr;
|
||||
static const QString CurrentSchema;
|
||||
static Q_DECL_CONSTEXPR const unsigned PatternMinVer = FormatVersion(0, 1, 4);
|
||||
static Q_DECL_CONSTEXPR const unsigned PatternMaxVer = FormatVersion(0, 9, 1);
|
||||
static Q_DECL_CONSTEXPR const unsigned PatternMaxVer = FormatVersion(0, 9, 2);
|
||||
|
||||
protected:
|
||||
void Save() override;
|
||||
|
@ -86,6 +86,7 @@ private:
|
|||
void ToV0_8_8();
|
||||
void ToV0_9_0();
|
||||
void ToV0_9_1();
|
||||
void ToV0_9_2();
|
||||
|
||||
void TagUnitToV0_2_0();
|
||||
void TagIncrementToV0_2_0();
|
||||
|
|
|
@ -53,7 +53,9 @@
|
|||
#endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
||||
#include "dxiface.h"
|
||||
#include "../vlayout/vlayoutpiece.h"
|
||||
#include "../vlayout/vlayoutpoint.h"
|
||||
#include "../vgeometry/vgeometrydef.h"
|
||||
#include "../vgeometry/vlayoutplacelabel.h"
|
||||
|
||||
static const qreal AAMATextHeight = 2.5;
|
||||
|
||||
|
@ -61,8 +63,8 @@ namespace
|
|||
{
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const UTF8STRING, layer0, (UTF8STRING("0"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const UTF8STRING, layer1, (UTF8STRING("1"))) // NOLINT
|
||||
//Q_GLOBAL_STATIC_WITH_ARGS(const UTF8STRING, layer2, (UTF8STRING("2"))) // NOLINT
|
||||
//Q_GLOBAL_STATIC_WITH_ARGS(const UTF8STRING, layer3, (UTF8STRING("3"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const UTF8STRING, layer2, (UTF8STRING("2"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const UTF8STRING, layer3, (UTF8STRING("3"))) // NOLINT
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const UTF8STRING, layer4, (UTF8STRING("4"))) // NOLINT
|
||||
//Q_GLOBAL_STATIC_WITH_ARGS(const UTF8STRING, layer5, (UTF8STRING("5"))) // NOLINT
|
||||
//Q_GLOBAL_STATIC_WITH_ARGS(const UTF8STRING, layer6, (UTF8STRING("6"))) // NOLINT
|
||||
|
@ -87,9 +89,9 @@ Q_GLOBAL_STATIC_WITH_ARGS(const UTF8STRING, layer86, (UTF8STRING("86"))) // NOLI
|
|||
Q_GLOBAL_STATIC_WITH_ARGS(const UTF8STRING, layer87, (UTF8STRING("87"))) // NOLINT
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto PieceOutline(const VLayoutPiece &detail) -> QVector<QPointF>
|
||||
auto PieceOutline(const VLayoutPiece &detail) -> QVector<VLayoutPoint>
|
||||
{
|
||||
QVector<QPointF> outline;
|
||||
QVector<VLayoutPoint> outline;
|
||||
if (detail.IsSeamAllowance() && not detail.IsSeamAllowanceBuiltIn())
|
||||
{
|
||||
outline = detail.GetMappedSeamAllowancePoints();
|
||||
|
@ -692,8 +694,7 @@ auto VDxfEngine::ExportToAAMA(const QVector<VLayoutPiece> &details) -> bool
|
|||
return false;
|
||||
}
|
||||
|
||||
m_input = QSharedPointer<dx_iface>(new dx_iface(GetFileNameForLocale(), m_version, m_varMeasurement,
|
||||
m_varInsunits));
|
||||
m_input = QSharedPointer<dx_iface>::create(GetFileNameForLocale(), m_version, m_varMeasurement, m_varInsunits);
|
||||
m_input->AddAAMAHeaderData();
|
||||
if (m_version > DRW::AC1009)
|
||||
{
|
||||
|
@ -705,7 +706,8 @@ auto VDxfEngine::ExportToAAMA(const QVector<VLayoutPiece> &details) -> bool
|
|||
|
||||
for(auto detail : details)
|
||||
{
|
||||
auto *detailBlock = new dx_ifaceBlock();
|
||||
|
||||
auto detailBlock = QSharedPointer<dx_ifaceBlock>::create();
|
||||
|
||||
QString blockName = detail.GetName();
|
||||
if (m_version <= DRW::AC1009)
|
||||
|
@ -726,80 +728,98 @@ auto VDxfEngine::ExportToAAMA(const QVector<VLayoutPiece> &details) -> bool
|
|||
ExportPieceText(detailBlock, detail);
|
||||
ExportAAMADrill(detailBlock, detail);
|
||||
|
||||
m_input->AddBlock(detailBlock);
|
||||
m_input->AddBlock(detailBlock.get());
|
||||
|
||||
auto *insert = new DRW_Insert();
|
||||
QScopedPointer<DRW_Insert> insert(new DRW_Insert());
|
||||
insert->name = blockName.toStdString();
|
||||
insert->layer = *layer1;
|
||||
|
||||
m_input->AddEntity(insert);
|
||||
m_input->AddEntity(insert.take());
|
||||
}
|
||||
|
||||
return m_input->fileExport(m_binary);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportAAMAOutline(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportAAMAOutline(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
DRW_Entity *e = AAMAPolygon(PieceOutline(detail), *layer1, true);
|
||||
if (e)
|
||||
QVector<VLayoutPoint> points = PieceOutline(detail);
|
||||
|
||||
if (DRW_Entity *e = AAMAPolygon(points, *layer1, true))
|
||||
{
|
||||
detailBlock->ent.push_back(e);
|
||||
}
|
||||
|
||||
ExportTurnPoints(detailBlock, points);
|
||||
ExportCurvePoints(detailBlock, points);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportAAMADraw(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportAAMADraw(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
if (detail.IsSeamAllowance() && not detail.IsHideMainPath() && not detail.IsSeamAllowanceBuiltIn())
|
||||
{
|
||||
QVector<VLayoutPoint> points = detail.GetMappedContourPoints();
|
||||
if (DRW_Entity *e = AAMAPolygon(detail.GetMappedContourPoints(), *layer8, true))
|
||||
{
|
||||
detailBlock->ent.push_back(e);
|
||||
}
|
||||
|
||||
ExportTurnPoints(detailBlock, points);
|
||||
ExportCurvePoints(detailBlock, points);
|
||||
}
|
||||
|
||||
const QVector<QVector<QPointF>> drawIntCut = detail.MappedInternalPathsForCut(false);
|
||||
for(const auto &intCut : drawIntCut)
|
||||
const QVector<QVector<VLayoutPoint>> drawIntLine = detail.MappedInternalPathsForCut(false);
|
||||
for(const auto &intLine : drawIntLine)
|
||||
{
|
||||
if (DRW_Entity *e = AAMAPolygon(intCut, *layer8, false))
|
||||
if (DRW_Entity *e = AAMAPolygon(intLine, *layer8, false))
|
||||
{
|
||||
detailBlock->ent.push_back(e);
|
||||
}
|
||||
|
||||
ExportTurnPoints(detailBlock, intLine);
|
||||
ExportCurvePoints(detailBlock, intLine);
|
||||
}
|
||||
|
||||
const QVector<VLayoutPlaceLabel> labels = detail.GetMappedPlaceLabels();
|
||||
const QVector<VLayoutPlaceLabel> labels = detail.GetPlaceLabels();
|
||||
for(const auto &label : labels)
|
||||
{
|
||||
if (label.type != PlaceLabelType::Doubletree && label.type != PlaceLabelType::Button
|
||||
&& label.type != PlaceLabelType::Circle)
|
||||
if (label.Type() != PlaceLabelType::Doubletree && label.Type() != PlaceLabelType::Button
|
||||
&& label.Type() != PlaceLabelType::Circle)
|
||||
{
|
||||
for(const auto &p : qAsConst(label.shape))
|
||||
PlaceLabelImg shape = detail.MapPlaceLabelShape(VAbstractPiece::PlaceLabelShape(label));
|
||||
for(const auto &points : shape)
|
||||
{
|
||||
if (DRW_Entity *e = AAMAPolygon(p, *layer8, false))
|
||||
if (DRW_Entity *e = AAMAPolygon(points, *layer8, false))
|
||||
{
|
||||
detailBlock->ent.push_back(e);
|
||||
}
|
||||
|
||||
ExportTurnPoints(detailBlock, points);
|
||||
ExportCurvePoints(detailBlock, points);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportAAMAIntcut(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportAAMAIntcut(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
QVector<QVector<QPointF>> drawIntCut = detail.MappedInternalPathsForCut(true);
|
||||
QVector<QVector<VLayoutPoint>> drawIntCut = detail.MappedInternalPathsForCut(true);
|
||||
for(auto &intCut : drawIntCut)
|
||||
{
|
||||
if (DRW_Entity *e = AAMAPolygon(intCut, *layer11, false))
|
||||
{
|
||||
detailBlock->ent.push_back(e);
|
||||
}
|
||||
|
||||
ExportTurnPoints(detailBlock, intCut);
|
||||
ExportCurvePoints(detailBlock, intCut);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportAAMANotch(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportAAMANotch(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
if (detail.IsSeamAllowance())
|
||||
{
|
||||
|
@ -818,7 +838,7 @@ void VDxfEngine::ExportAAMANotch(dx_ifaceBlock *detailBlock, const VLayoutPiece
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportAAMAGrainline(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportAAMAGrainline(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
const QVector<QPointF> grainline = detail.GetMappedGrainline();
|
||||
if (grainline.count() > 1)
|
||||
|
@ -831,7 +851,7 @@ void VDxfEngine::ExportAAMAGrainline(dx_ifaceBlock *detailBlock, const VLayoutPi
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportPieceText(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportPieceText(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
const QStringList list = detail.GetPieceText();
|
||||
const QPointF startPos = detail.GetPieceTextPosition();
|
||||
|
@ -863,22 +883,17 @@ void VDxfEngine::ExportStyleSystemText(const QSharedPointer<dx_iface> &input, co
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportAAMADrill(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportAAMADrill(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
const QVector<VLayoutPlaceLabel> labels = detail.GetMappedPlaceLabels();
|
||||
const QVector<VLayoutPlaceLabel> labels = detail.GetPlaceLabels();
|
||||
|
||||
for(const auto &label : labels)
|
||||
{
|
||||
if (label.type == PlaceLabelType::Doubletree || label.type == PlaceLabelType::Button
|
||||
|| label.type == PlaceLabelType::Circle)
|
||||
if (label.Type() == PlaceLabelType::Doubletree || label.Type() == PlaceLabelType::Button
|
||||
|| label.Type() == PlaceLabelType::Circle)
|
||||
{
|
||||
const QPointF center = detail.GetMatrix().map(label.center);
|
||||
auto *point = new DRW_Point();
|
||||
point->basePoint = DRW_Coord(FromPixel(center.x(), m_varInsunits),
|
||||
FromPixel(GetSize().height() - center.y(), m_varInsunits), 0);
|
||||
point->layer = *layer13;
|
||||
|
||||
detailBlock->ent.push_back(point);
|
||||
const QPointF center = detail.GetMatrix().map(label.Center());
|
||||
detailBlock->ent.push_back(AAMAPoint(center, *layer13));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -906,7 +921,7 @@ auto VDxfEngine::ExportToASTM(const QVector<VLayoutPiece> &details) -> bool
|
|||
|
||||
for(auto detail : details)
|
||||
{
|
||||
auto *detailBlock = new dx_ifaceBlock();
|
||||
auto detailBlock = QSharedPointer<dx_ifaceBlock>::create();
|
||||
|
||||
QString blockName = detail.GetName();
|
||||
if (m_version <= DRW::AC1009)
|
||||
|
@ -929,44 +944,45 @@ auto VDxfEngine::ExportToASTM(const QVector<VLayoutPiece> &details) -> bool
|
|||
ExportASTMDrill(detailBlock, detail);
|
||||
ExportASTMAnnotationText(detailBlock, detail);
|
||||
|
||||
m_input->AddBlock(detailBlock);
|
||||
m_input->AddBlock(detailBlock.get());
|
||||
|
||||
auto *insert = new DRW_Insert();
|
||||
QScopedPointer<DRW_Insert> insert(new DRW_Insert());
|
||||
insert->name = blockName.toStdString();
|
||||
insert->layer = *layer1;
|
||||
|
||||
m_input->AddEntity(insert);
|
||||
m_input->AddEntity(insert.take());
|
||||
}
|
||||
|
||||
return m_input->fileExport(m_binary);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportASTMPieceBoundary(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportASTMPieceBoundary(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
QVector<QPointF> pieceBoundary = PieceOutline(detail);
|
||||
QVector<VLayoutPoint> pieceBoundary = PieceOutline(detail);
|
||||
|
||||
// Piece boundary
|
||||
DRW_Entity *e = AAMAPolygon(pieceBoundary, *layer1, true);
|
||||
if (e)
|
||||
if (DRW_Entity *e = AAMAPolygon(pieceBoundary, *layer1, true))
|
||||
{
|
||||
detailBlock->ent.push_back(e);
|
||||
}
|
||||
|
||||
ExportTurnPoints(detailBlock, pieceBoundary);
|
||||
ExportCurvePoints(detailBlock, pieceBoundary);
|
||||
|
||||
// Piece boundary quality validation curves
|
||||
DRW_Entity *q = AAMAPolygon(pieceBoundary, *layer84, true);
|
||||
if (q)
|
||||
if (DRW_Entity *q = AAMAPolygon(pieceBoundary, *layer84, true))
|
||||
{
|
||||
detailBlock->ent.push_back(q);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportASTMSewLine(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportASTMSewLine(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
if (detail.IsSeamAllowance() && not detail.IsHideMainPath() && not detail.IsSeamAllowanceBuiltIn())
|
||||
{
|
||||
QVector<QPointF> sewLine = detail.GetMappedContourPoints();
|
||||
QVector<VLayoutPoint> sewLine = detail.GetMappedContourPoints();
|
||||
|
||||
// Sew lines
|
||||
if (DRW_Entity *e = AAMAPolygon(sewLine, *layer14, true))
|
||||
|
@ -974,6 +990,9 @@ void VDxfEngine::ExportASTMSewLine(dx_ifaceBlock *detailBlock, const VLayoutPiec
|
|||
detailBlock->ent.push_back(e);
|
||||
}
|
||||
|
||||
ExportTurnPoints(detailBlock, sewLine);
|
||||
ExportCurvePoints(detailBlock, sewLine);
|
||||
|
||||
// Sew lines quality validation curves
|
||||
if (DRW_Entity *e = AAMAPolygon(sewLine, *layer87, true))
|
||||
{
|
||||
|
@ -983,31 +1002,35 @@ void VDxfEngine::ExportASTMSewLine(dx_ifaceBlock *detailBlock, const VLayoutPiec
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportASTMInternalLine(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportASTMInternalLine(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
const QVector<QVector<QPointF>> drawIntCut = detail.MappedInternalPathsForCut(false);
|
||||
for(const auto &intCut : drawIntCut)
|
||||
const QVector<QVector<VLayoutPoint>> drawIntLine = detail.MappedInternalPathsForCut(false);
|
||||
for(const auto &intLine : drawIntLine)
|
||||
{
|
||||
// Internal line
|
||||
if (DRW_Entity *e = AAMAPolygon(intCut, *layer8, false))
|
||||
if (DRW_Entity *e = AAMAPolygon(intLine, *layer8, false))
|
||||
{
|
||||
detailBlock->ent.push_back(e);
|
||||
}
|
||||
|
||||
ExportTurnPoints(detailBlock, intLine);
|
||||
ExportCurvePoints(detailBlock, intLine);
|
||||
|
||||
// Internal lines quality validation curves
|
||||
if (DRW_Entity *e = AAMAPolygon(intCut, *layer85, false))
|
||||
if (DRW_Entity *e = AAMAPolygon(intLine, *layer85, false))
|
||||
{
|
||||
detailBlock->ent.push_back(e);
|
||||
}
|
||||
}
|
||||
|
||||
const QVector<VLayoutPlaceLabel> labels = detail.GetMappedPlaceLabels();
|
||||
const QVector<VLayoutPlaceLabel> labels = detail.GetPlaceLabels();
|
||||
for(const auto &label : labels)
|
||||
{
|
||||
if (label.type != PlaceLabelType::Doubletree && label.type != PlaceLabelType::Button
|
||||
&& label.type != PlaceLabelType::Circle)
|
||||
if (label.Type() != PlaceLabelType::Doubletree && label.Type() != PlaceLabelType::Button
|
||||
&& label.Type() != PlaceLabelType::Circle)
|
||||
{
|
||||
for(const auto &p : qAsConst(label.shape))
|
||||
PlaceLabelImg shape = detail.MapPlaceLabelShape(VAbstractPiece::PlaceLabelShape(label));
|
||||
for(const auto &p : shape)
|
||||
{
|
||||
// Internal line (placelabel)
|
||||
if (DRW_Entity *e = AAMAPolygon(p, *layer8, false))
|
||||
|
@ -1015,6 +1038,9 @@ void VDxfEngine::ExportASTMInternalLine(dx_ifaceBlock *detailBlock, const VLayou
|
|||
detailBlock->ent.push_back(e);
|
||||
}
|
||||
|
||||
ExportTurnPoints(detailBlock, p);
|
||||
ExportCurvePoints(detailBlock, p);
|
||||
|
||||
// Internal lines quality validation curves
|
||||
if (DRW_Entity *e = AAMAPolygon(p, *layer85, false))
|
||||
{
|
||||
|
@ -1026,9 +1052,9 @@ void VDxfEngine::ExportASTMInternalLine(dx_ifaceBlock *detailBlock, const VLayou
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportASTMInternalCutout(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportASTMInternalCutout(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
QVector<QVector<QPointF>> drawIntCut = detail.MappedInternalPathsForCut(true);
|
||||
QVector<QVector<VLayoutPoint>> drawIntCut = detail.MappedInternalPathsForCut(true);
|
||||
for(auto &intCut : drawIntCut)
|
||||
{
|
||||
// Internal cutout
|
||||
|
@ -1037,6 +1063,9 @@ void VDxfEngine::ExportASTMInternalCutout(dx_ifaceBlock *detailBlock, const VLay
|
|||
detailBlock->ent.push_back(e);
|
||||
}
|
||||
|
||||
ExportTurnPoints(detailBlock, intCut);
|
||||
ExportCurvePoints(detailBlock, intCut);
|
||||
|
||||
// Internal cutouts quality validation curves
|
||||
if (DRW_Entity *e = AAMAPolygon(intCut, *layer86, false))
|
||||
{
|
||||
|
@ -1046,7 +1075,7 @@ void VDxfEngine::ExportASTMInternalCutout(dx_ifaceBlock *detailBlock, const VLay
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportASTMAnnotationText(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportASTMAnnotationText(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
QString name = detail.GetName();
|
||||
QPointF textPos = detail.VLayoutPiece::DetailBoundingRect().center();
|
||||
|
@ -1056,22 +1085,17 @@ void VDxfEngine::ExportASTMAnnotationText(dx_ifaceBlock *detailBlock, const VLay
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportASTMDrill(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportASTMDrill(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
const QVector<VLayoutPlaceLabel> labels = detail.GetMappedPlaceLabels();
|
||||
const QVector<VLayoutPlaceLabel> labels = detail.GetPlaceLabels();
|
||||
|
||||
for(const auto &label : labels)
|
||||
{
|
||||
if (label.type == PlaceLabelType::Doubletree || label.type == PlaceLabelType::Button
|
||||
|| label.type == PlaceLabelType::Circle)
|
||||
if (label.Type() == PlaceLabelType::Doubletree || label.Type() == PlaceLabelType::Button
|
||||
|| label.Type() == PlaceLabelType::Circle)
|
||||
{
|
||||
const QPointF center = detail.GetMatrix().map(label.center);
|
||||
auto *point = new DRW_Point();
|
||||
point->basePoint = DRW_Coord(FromPixel(center.x(), m_varInsunits),
|
||||
FromPixel(GetSize().height() - center.y(), m_varInsunits), 0);
|
||||
point->layer = *layer13;
|
||||
|
||||
detailBlock->ent.push_back(point);
|
||||
const QPointF center = detail.GetMatrix().map(label.Center());
|
||||
detailBlock->ent.push_back(AAMAPoint(center, *layer13));
|
||||
|
||||
// TODO. Investigate drill category
|
||||
// QPointF pos(center.x(), center.y() - ToPixel(AAMATextHeight, varInsunits));
|
||||
|
@ -1081,7 +1105,7 @@ void VDxfEngine::ExportASTMDrill(dx_ifaceBlock *detailBlock, const VLayoutPiece
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportASTMNotch(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
|
||||
void VDxfEngine::ExportASTMNotch(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail)
|
||||
{
|
||||
if (detail.IsSeamAllowance())
|
||||
{
|
||||
|
@ -1141,7 +1165,34 @@ void VDxfEngine::ExportASTMNotch(dx_ifaceBlock *detailBlock, const VLayoutPiece
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VDxfEngine::AAMAPolygon(const QVector<QPointF> &polygon, const UTF8STRING &layer, bool forceClosed) -> DRW_Entity *
|
||||
void VDxfEngine::ExportTurnPoints(const QSharedPointer<dx_ifaceBlock> &detailBlock,
|
||||
const QVector<VLayoutPoint> &points) const
|
||||
{
|
||||
for(const auto &p : qAsConst(points))
|
||||
{
|
||||
if (p.TurnPoint())
|
||||
{
|
||||
detailBlock->ent.push_back(AAMAPoint(p, *layer2));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDxfEngine::ExportCurvePoints(const QSharedPointer<dx_ifaceBlock> &detailBlock,
|
||||
const QVector<VLayoutPoint> &points) const
|
||||
{
|
||||
for(const auto &p : qAsConst(points))
|
||||
{
|
||||
if (p.CurvePoint() && not p.TurnPoint())
|
||||
{
|
||||
detailBlock->ent.push_back(AAMAPoint(p, *layer3));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VDxfEngine::AAMAPolygon(const QVector<VLayoutPoint> &polygon, const UTF8STRING &layer,
|
||||
bool forceClosed) -> DRW_Entity *
|
||||
{
|
||||
if (polygon.isEmpty())
|
||||
{
|
||||
|
@ -1186,6 +1237,16 @@ auto VDxfEngine::AAMAText(const QPointF &pos, const QString &text, const UTF8STR
|
|||
return textLine;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VDxfEngine::AAMAPoint(const QPointF &pos, const UTF8STRING &layer) const -> DRW_Point *
|
||||
{
|
||||
auto *point = new DRW_Point();
|
||||
point->basePoint = DRW_Coord(FromPixel(pos.x(), m_varInsunits),
|
||||
FromPixel(GetSize().height() - pos.y(), m_varInsunits), 0);
|
||||
point->layer = layer;
|
||||
return point;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VDxfEngine::FromUnicodeToCodec(const QString &str, QTextCodec *codec) -> std::string
|
||||
{
|
||||
|
@ -1203,8 +1264,9 @@ auto VDxfEngine::GetFileNameForLocale() const -> std::string
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<class P, class V>
|
||||
auto VDxfEngine::CreateAAMAPolygon(const QVector<QPointF> &polygon, const UTF8STRING &layer, bool forceClosed) -> P *
|
||||
template<class P, class V, class C>
|
||||
auto VDxfEngine::CreateAAMAPolygon(const QVector<C> &polygon, const UTF8STRING &layer,
|
||||
bool forceClosed) -> P *
|
||||
{
|
||||
auto *poly = new P();
|
||||
poly->layer = layer;
|
||||
|
@ -1221,7 +1283,7 @@ auto VDxfEngine::CreateAAMAPolygon(const QVector<QPointF> &polygon, const UTF8ST
|
|||
}
|
||||
}
|
||||
|
||||
for (auto p : polygon)
|
||||
for (const auto &p : polygon)
|
||||
{
|
||||
poly->addVertex(V(FromPixel(p.x(), m_varInsunits),
|
||||
FromPixel(GetSize().height() - p.y(), m_varInsunits)));
|
||||
|
|
|
@ -49,6 +49,8 @@ class DRW_Text;
|
|||
class VLayoutPiece;
|
||||
class DRW_Entity;
|
||||
class dx_ifaceBlock;
|
||||
class VLayoutPoint;
|
||||
class DRW_Point;
|
||||
|
||||
class VDxfEngine final : public QPaintEngine
|
||||
{
|
||||
|
@ -123,31 +125,37 @@ private:
|
|||
Q_REQUIRED_RESULT auto ToPixel(double val, const VarInsunits &unit) const -> double;
|
||||
|
||||
auto ExportToAAMA(const QVector<VLayoutPiece> &details) -> bool;
|
||||
void ExportAAMAOutline(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportAAMADraw(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportAAMAIntcut(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportAAMANotch(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportAAMAGrainline(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportPieceText(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportAAMAOutline(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
void ExportAAMADraw(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
void ExportAAMAIntcut(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
void ExportAAMANotch(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
void ExportAAMAGrainline(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
void ExportPieceText(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
void ExportStyleSystemText(const QSharedPointer<dx_iface> &input, const QVector<VLayoutPiece> &details);
|
||||
void ExportAAMADrill(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportAAMADrill(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
|
||||
auto ExportToASTM(const QVector<VLayoutPiece> &details) -> bool;
|
||||
void ExportASTMPieceBoundary(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMSewLine(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMInternalLine(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMInternalCutout(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMAnnotationText(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMDrill(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMNotch(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMPieceBoundary(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMSewLine(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMInternalLine(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMInternalCutout(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMAnnotationText(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMDrill(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
void ExportASTMNotch(const QSharedPointer<dx_ifaceBlock> &detailBlock, const VLayoutPiece &detail);
|
||||
|
||||
Q_REQUIRED_RESULT auto AAMAPolygon(const QVector<QPointF> &polygon, const UTF8STRING &layer,
|
||||
void ExportTurnPoints(const QSharedPointer<dx_ifaceBlock> &detailBlock,
|
||||
const QVector<VLayoutPoint> &points) const;
|
||||
void ExportCurvePoints(const QSharedPointer<dx_ifaceBlock> &detailBlock,
|
||||
const QVector<VLayoutPoint> &points) const;
|
||||
|
||||
Q_REQUIRED_RESULT auto AAMAPolygon(const QVector<VLayoutPoint> &polygon, const UTF8STRING &layer,
|
||||
bool forceClosed) -> DRW_Entity *;
|
||||
Q_REQUIRED_RESULT auto AAMALine(const QLineF &line, const UTF8STRING &layer) -> DRW_Entity *;
|
||||
Q_REQUIRED_RESULT auto AAMAText(const QPointF &pos, const QString &text, const UTF8STRING &layer) -> DRW_Entity *;
|
||||
Q_REQUIRED_RESULT auto AAMAPoint(const QPointF &pos, const UTF8STRING &layer) const -> DRW_Point *;
|
||||
|
||||
template<class P, class V>
|
||||
Q_REQUIRED_RESULT auto CreateAAMAPolygon(const QVector<QPointF> &polygon, const UTF8STRING &layer,
|
||||
template<class P, class V, class C>
|
||||
Q_REQUIRED_RESULT auto CreateAAMAPolygon(const QVector<C> &polygon, const UTF8STRING &layer,
|
||||
bool forceClosed) -> P *;
|
||||
|
||||
static auto FromUnicodeToCodec(const QString &str, QTextCodec *codec) -> std::string;
|
||||
|
|
|
@ -6,6 +6,7 @@ SOURCES += \
|
|||
$$PWD/vgobject.cpp \
|
||||
$$PWD/vabstractcurve.cpp \
|
||||
$$PWD/varc.cpp \
|
||||
$$PWD/vlayoutplacelabel.cpp \
|
||||
$$PWD/vpointf.cpp \
|
||||
$$PWD/vspline.cpp \
|
||||
$$PWD/vsplinepath.cpp \
|
||||
|
@ -28,6 +29,7 @@ HEADERS += \
|
|||
$$PWD/vabstractcurve.h \
|
||||
$$PWD/varc.h \
|
||||
$$PWD/varc_p.h \
|
||||
$$PWD/vlayoutplacelabel.h \
|
||||
$$PWD/vpointf.h \
|
||||
$$PWD/vpointf_p.h \
|
||||
$$PWD/vspline.h \
|
||||
|
|
|
@ -93,64 +93,3 @@ QDataStream &operator>>(QDataStream &dataStream, VLayoutPassmark &data)
|
|||
|
||||
return dataStream;
|
||||
}
|
||||
|
||||
const quint32 VLayoutPlaceLabel::streamHeader = 0xB282E284; // CRC-32Q string "VLayoutPlaceLabel"
|
||||
const quint16 VLayoutPlaceLabel::classVersion = 1;
|
||||
|
||||
// Friend functions
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QDataStream& operator<<(QDataStream &dataStream, const VLayoutPlaceLabel &data)
|
||||
{
|
||||
dataStream << VLayoutPlaceLabel::streamHeader << VLayoutPlaceLabel::classVersion;
|
||||
|
||||
// Added in classVersion = 1
|
||||
dataStream << data.center;
|
||||
dataStream << data.type;
|
||||
dataStream << data.shape;
|
||||
dataStream << data.rotationMatrix;
|
||||
dataStream << data.box;
|
||||
|
||||
// Added in classVersion = 2
|
||||
|
||||
return dataStream;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QDataStream& operator>>(QDataStream &dataStream, VLayoutPlaceLabel &data)
|
||||
{
|
||||
quint32 actualStreamHeader = 0;
|
||||
dataStream >> actualStreamHeader;
|
||||
|
||||
if (actualStreamHeader != VLayoutPlaceLabel::streamHeader)
|
||||
{
|
||||
QString message = QCoreApplication::tr("VLayoutPlaceLabel prefix mismatch error: actualStreamHeader = 0x%1 and "
|
||||
"streamHeader = 0x%2")
|
||||
.arg(actualStreamHeader, 8, 0x10, QChar('0'))
|
||||
.arg(VLayoutPlaceLabel::streamHeader, 8, 0x10, QChar('0'));
|
||||
throw VException(message);
|
||||
}
|
||||
|
||||
quint16 actualClassVersion = 0;
|
||||
dataStream >> actualClassVersion;
|
||||
|
||||
if (actualClassVersion > VLayoutPlaceLabel::classVersion)
|
||||
{
|
||||
QString message = QCoreApplication::tr("VLayoutPlaceLabel compatibility error: actualClassVersion = %1 and "
|
||||
"classVersion = %2")
|
||||
.arg(actualClassVersion).arg(VLayoutPlaceLabel::classVersion);
|
||||
throw VException(message);
|
||||
}
|
||||
|
||||
dataStream >> data.center;
|
||||
dataStream >> data.type;
|
||||
dataStream >> data.shape;
|
||||
dataStream >> data.rotationMatrix;
|
||||
dataStream >> data.box;
|
||||
|
||||
// if (actualClassVersion >= 2)
|
||||
// {
|
||||
|
||||
// }
|
||||
|
||||
return dataStream;
|
||||
}
|
||||
|
|
|
@ -64,24 +64,6 @@ enum class PlaceLabelType : quint8
|
|||
Circle = 9
|
||||
};
|
||||
|
||||
typedef QVector<QPolygonF> PlaceLabelImg;
|
||||
|
||||
struct VLayoutPlaceLabel
|
||||
{
|
||||
QPointF center{};
|
||||
PlaceLabelType type{PlaceLabelType::Button};
|
||||
PlaceLabelImg shape{};
|
||||
QTransform rotationMatrix{};
|
||||
QRectF box{};
|
||||
|
||||
friend QDataStream& operator<<(QDataStream& dataStream, const VLayoutPlaceLabel& data);
|
||||
friend QDataStream& operator>>(QDataStream& dataStream, VLayoutPlaceLabel& data);
|
||||
private:
|
||||
static const quint32 streamHeader;
|
||||
static const quint16 classVersion;
|
||||
};
|
||||
Q_DECLARE_METATYPE(VLayoutPlaceLabel)
|
||||
|
||||
struct VLayoutPassmark
|
||||
{
|
||||
QVector<QLineF> lines{};
|
||||
|
|
104
src/libs/vgeometry/vlayoutplacelabel.cpp
Normal file
104
src/libs/vgeometry/vlayoutplacelabel.cpp
Normal file
|
@ -0,0 +1,104 @@
|
|||
/************************************************************************
|
||||
**
|
||||
** @file vlayoutplacelabel.cpp
|
||||
** @author Roman Telezhynskyi <dismine(at)gmail.com>
|
||||
** @date 12 10, 2022
|
||||
**
|
||||
** @brief
|
||||
** @copyright
|
||||
** This source code is part of the Valentina project, a pattern making
|
||||
** program, whose allow create and modeling patterns of clothing.
|
||||
** Copyright (C) 2022 Valentina project
|
||||
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
|
||||
**
|
||||
** Valentina is free software: you can redistribute it and/or modify
|
||||
** it under the terms of the GNU General Public License as published by
|
||||
** the Free Software Foundation, either version 3 of the License, or
|
||||
** (at your option) any later version.
|
||||
**
|
||||
** Valentina is distributed in the hope that it will be useful,
|
||||
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
** GNU General Public License for more details.
|
||||
**
|
||||
** You should have received a copy of the GNU General Public License
|
||||
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
|
||||
**
|
||||
*************************************************************************/
|
||||
#include "vlayoutplacelabel.h"
|
||||
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
|
||||
# include "../vmisc/vdatastreamenum.h"
|
||||
#endif
|
||||
#include "../ifc/exception/vexception.h"
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
VLayoutPlaceLabel::VLayoutPlaceLabel(const VPlaceLabelItem &item)
|
||||
: m_center(item.toQPointF()),
|
||||
m_type(item.GetLabelType()),
|
||||
m_rotationMatrix(item.RotationMatrix()),
|
||||
m_box(item.Box())
|
||||
{}
|
||||
|
||||
// Friend functions
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto operator<<(QDataStream &dataStream, const VLayoutPlaceLabel &data) -> QDataStream&
|
||||
{
|
||||
dataStream << VLayoutPlaceLabel::streamHeader << VLayoutPlaceLabel::classVersion;
|
||||
|
||||
// Added in classVersion = 1
|
||||
dataStream << data.m_center;
|
||||
dataStream << data.m_type;
|
||||
dataStream << data.m_rotationMatrix;
|
||||
dataStream << data.m_box;
|
||||
|
||||
// Added in classVersion = 2
|
||||
|
||||
return dataStream;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto operator>>(QDataStream &dataStream, VLayoutPlaceLabel &data) -> QDataStream&
|
||||
{
|
||||
quint32 actualStreamHeader = 0;
|
||||
dataStream >> actualStreamHeader;
|
||||
|
||||
if (actualStreamHeader != VLayoutPlaceLabel::streamHeader)
|
||||
{
|
||||
QString message = QCoreApplication::tr("VLayoutPlaceLabel prefix mismatch error: actualStreamHeader = 0x%1 and "
|
||||
"streamHeader = 0x%2")
|
||||
.arg(actualStreamHeader, 8, 0x10, QChar('0'))
|
||||
.arg(VLayoutPlaceLabel::streamHeader, 8, 0x10, QChar('0'));
|
||||
throw VException(message);
|
||||
}
|
||||
|
||||
quint16 actualClassVersion = 0;
|
||||
dataStream >> actualClassVersion;
|
||||
|
||||
if (actualClassVersion > VLayoutPlaceLabel::classVersion)
|
||||
{
|
||||
QString message = QCoreApplication::tr("VLayoutPlaceLabel compatibility error: actualClassVersion = %1 and "
|
||||
"classVersion = %2")
|
||||
.arg(actualClassVersion).arg(VLayoutPlaceLabel::classVersion);
|
||||
throw VException(message);
|
||||
}
|
||||
|
||||
dataStream >> data.m_center;
|
||||
dataStream >> data.m_type;
|
||||
|
||||
if (actualClassVersion == 1)
|
||||
{
|
||||
QVector<QPolygonF> shape;
|
||||
dataStream >> shape; // no longer in use
|
||||
}
|
||||
|
||||
dataStream >> data.m_rotationMatrix;
|
||||
dataStream >> data.m_box;
|
||||
|
||||
// if (actualClassVersion >= 2)
|
||||
// {
|
||||
|
||||
// }
|
||||
|
||||
return dataStream;
|
||||
}
|
118
src/libs/vgeometry/vlayoutplacelabel.h
Normal file
118
src/libs/vgeometry/vlayoutplacelabel.h
Normal file
|
@ -0,0 +1,118 @@
|
|||
/************************************************************************
|
||||
**
|
||||
** @file vlayoutplacelabel.h
|
||||
** @author Roman Telezhynskyi <dismine(at)gmail.com>
|
||||
** @date 12 10, 2022
|
||||
**
|
||||
** @brief
|
||||
** @copyright
|
||||
** This source code is part of the Valentina project, a pattern making
|
||||
** program, whose allow create and modeling patterns of clothing.
|
||||
** Copyright (C) 2022 Valentina project
|
||||
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
|
||||
**
|
||||
** Valentina is free software: you can redistribute it and/or modify
|
||||
** it under the terms of the GNU General Public License as published by
|
||||
** the Free Software Foundation, either version 3 of the License, or
|
||||
** (at your option) any later version.
|
||||
**
|
||||
** Valentina is distributed in the hope that it will be useful,
|
||||
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
** GNU General Public License for more details.
|
||||
**
|
||||
** You should have received a copy of the GNU General Public License
|
||||
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
|
||||
**
|
||||
*************************************************************************/
|
||||
#ifndef VLAYOUTPLACELABEL_H
|
||||
#define VLAYOUTPLACELABEL_H
|
||||
|
||||
#include <QPolygonF>
|
||||
|
||||
#include "vgeometrydef.h"
|
||||
#include "vplacelabelitem.h"
|
||||
|
||||
class VLayoutPlaceLabel
|
||||
{
|
||||
public:
|
||||
VLayoutPlaceLabel() = default;
|
||||
explicit VLayoutPlaceLabel(const VPlaceLabelItem &item);
|
||||
|
||||
friend auto operator<<(QDataStream& dataStream, const VLayoutPlaceLabel& data) -> QDataStream&;
|
||||
friend auto operator>>(QDataStream& dataStream, VLayoutPlaceLabel& data) -> QDataStream&;
|
||||
|
||||
auto Center() const -> QPointF;
|
||||
void SetCenter(QPointF newCenter);
|
||||
|
||||
auto Type() const -> PlaceLabelType;
|
||||
void SetType(PlaceLabelType newType);
|
||||
|
||||
auto RotationMatrix() const -> const QTransform &;
|
||||
void SetRotationMatrix(const QTransform &newRotationMatrix);
|
||||
|
||||
auto Box() const -> const QRectF &;
|
||||
void SetBox(const QRectF &newBox);
|
||||
|
||||
private:
|
||||
static constexpr quint32 streamHeader = 0xB282E284; // CRC-32Q string "VLayoutPlaceLabel"
|
||||
static constexpr quint16 classVersion = 2;
|
||||
|
||||
QPointF m_center{};
|
||||
PlaceLabelType m_type{PlaceLabelType::Button};
|
||||
QTransform m_rotationMatrix{};
|
||||
QRectF m_box{};
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(VLayoutPlaceLabel) // NOLINT
|
||||
Q_DECLARE_TYPEINFO(VLayoutPlaceLabel, Q_MOVABLE_TYPE); // NOLINT
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline auto VLayoutPlaceLabel::Center() const -> QPointF
|
||||
{
|
||||
return m_center;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline void VLayoutPlaceLabel::SetCenter(QPointF newCenter)
|
||||
{
|
||||
m_center = newCenter;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline auto VLayoutPlaceLabel::Type() const -> PlaceLabelType
|
||||
{
|
||||
return m_type;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline void VLayoutPlaceLabel::SetType(PlaceLabelType newType)
|
||||
{
|
||||
m_type = newType;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline auto VLayoutPlaceLabel::RotationMatrix() const -> const QTransform &
|
||||
{
|
||||
return m_rotationMatrix;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline void VLayoutPlaceLabel::SetRotationMatrix(const QTransform &newRotationMatrix)
|
||||
{
|
||||
m_rotationMatrix = newRotationMatrix;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline auto VLayoutPlaceLabel::Box() const -> const QRectF &
|
||||
{
|
||||
return m_box;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline void VLayoutPlaceLabel::SetBox(const QRectF &newBox)
|
||||
{
|
||||
m_box = newBox;
|
||||
}
|
||||
|
||||
#endif // VLAYOUTPLACELABEL_H
|
|
@ -28,7 +28,6 @@
|
|||
#include "vplacelabelitem.h"
|
||||
#include "vplacelabelitem_p.h"
|
||||
#include "../vpatterndb/vcontainer.h"
|
||||
#include "varc.h"
|
||||
|
||||
#include <qnumeric.h>
|
||||
#include <QPolygonF>
|
||||
|
@ -240,198 +239,3 @@ VPlaceLabelItem &VPlaceLabelItem::operator=(VPlaceLabelItem &&item) Q_DECL_NOTHR
|
|||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
PlaceLabelImg VPlaceLabelItem::LabelShape() const
|
||||
{
|
||||
QTransform t = RotationMatrix();
|
||||
|
||||
auto SegmentShape = [t, this]()
|
||||
{
|
||||
QPolygonF shape;
|
||||
shape << QPointF(x(), y() - d->hValue/2.0) << QPointF(x(), y() + d->hValue/2.0);
|
||||
|
||||
return PlaceLabelImg({t.map(shape)});
|
||||
};
|
||||
|
||||
auto RectangleShape = [t, this]()
|
||||
{
|
||||
QRectF rect(QPointF(x() - d->wValue/2.0, y() - d->hValue/2.0),
|
||||
QPointF(x() + d->wValue/2.0, y() + d->hValue/2.0));
|
||||
|
||||
QPolygonF shape;
|
||||
shape << rect.topLeft() << rect.topRight() << rect.bottomRight() << rect.bottomLeft() << rect.topLeft();
|
||||
|
||||
return PlaceLabelImg({t.map(shape)});
|
||||
};
|
||||
|
||||
auto CrossShape = [t, this]()
|
||||
{
|
||||
QPolygonF shape1;
|
||||
shape1 << QPointF(x(), y() - d->hValue/2.0)
|
||||
<< QPointF(x(), y() + d->hValue/2.0);
|
||||
|
||||
QPolygonF shape2;
|
||||
shape2 << QPointF(x() - d->wValue/2.0, y())
|
||||
<< QPointF(x() + d->wValue/2.0, y());
|
||||
|
||||
return PlaceLabelImg({t.map(shape1), t.map(shape2)});
|
||||
};
|
||||
|
||||
auto TshapedShape = [t, this]()
|
||||
{
|
||||
QPointF center2(x(), y() + d->hValue/2.0);
|
||||
|
||||
QPolygonF shape1;
|
||||
shape1 << QPointF(x(), y()) << center2;
|
||||
|
||||
QPolygonF shape2;
|
||||
shape2 << QPointF(center2.x() - d->wValue/2.0, center2.y())
|
||||
<< QPointF(center2.x() + d->wValue/2.0, center2.y());
|
||||
|
||||
return PlaceLabelImg({t.map(shape1), t.map(shape2)});
|
||||
};
|
||||
|
||||
auto DoubletreeShape = [t, this]()
|
||||
{
|
||||
QRectF rect(QPointF(x() - d->wValue/2.0, y() - d->hValue/2.0),
|
||||
QPointF(x() + d->wValue/2.0, y() + d->hValue/2.0));
|
||||
|
||||
QPolygonF shape1;
|
||||
shape1 << rect.topLeft() << rect.bottomRight();
|
||||
|
||||
QPolygonF shape2;
|
||||
shape2 << rect.topRight() << rect.bottomLeft();
|
||||
|
||||
return PlaceLabelImg({t.map(shape1), t.map(shape2)});
|
||||
};
|
||||
|
||||
auto CornerShape = [t, this]()
|
||||
{
|
||||
QPolygonF shape1;
|
||||
shape1 << QPointF(x(), y()) << QPointF(x(), y() + d->hValue/2.0);
|
||||
|
||||
QPolygonF shape2;
|
||||
shape2 << QPointF(x() - d->wValue/2.0, y()) << QPointF(x(), y());
|
||||
|
||||
return PlaceLabelImg({t.map(shape1), t.map(shape2)});
|
||||
};
|
||||
|
||||
auto TriangleShape = [t, this]()
|
||||
{
|
||||
QRectF rect(QPointF(x() - d->wValue/2.0, y() - d->hValue/2.0),
|
||||
QPointF(x() + d->wValue/2.0, y() + d->hValue/2.0));
|
||||
|
||||
QPolygonF shape;
|
||||
shape << rect.topLeft() << rect.topRight() << rect.bottomRight() << rect.topLeft();
|
||||
|
||||
return PlaceLabelImg({t.map(shape)});
|
||||
};
|
||||
|
||||
auto HshapedShape = [t, this]()
|
||||
{
|
||||
const QPointF center1 (x(), y() - d->hValue/2.0);
|
||||
const QPointF center2 (x(), y() + d->hValue/2.0);
|
||||
|
||||
QPolygonF shape1;
|
||||
shape1 << center1 << center2;
|
||||
|
||||
QPolygonF shape2;
|
||||
shape2 << QPointF(center1.x() - d->wValue/2.0, center1.y())
|
||||
<< QPointF(center1.x() + d->wValue/2.0, center1.y());
|
||||
|
||||
QPolygonF shape3;
|
||||
shape3 << QPointF(center2.x() - d->wValue/2.0, center2.y())
|
||||
<< QPointF(center2.x() + d->wValue/2.0, center2.y());
|
||||
|
||||
return PlaceLabelImg({t.map(shape1), t.map(shape2), t.map(shape3)});
|
||||
};
|
||||
|
||||
auto ButtonShape = [t, this]()
|
||||
{
|
||||
const qreal radius = qMin(d->wValue/2.0, d->hValue/2.0);
|
||||
QPolygonF shape1;
|
||||
shape1 << QPointF(x(), y() - radius)
|
||||
<< QPointF(x(), y() + radius);
|
||||
|
||||
QPolygonF shape2;
|
||||
shape2 << QPointF(x() - radius, y())
|
||||
<< QPointF(x() + radius, y());
|
||||
|
||||
const qreal circleSize = 0.85;
|
||||
VArc arc(*this, radius*circleSize, 0, 360);
|
||||
arc.SetApproximationScale(10);
|
||||
QPolygonF shape3(arc.GetPoints());
|
||||
if (not shape3.isClosed() && not shape3.isEmpty())
|
||||
{
|
||||
shape3 << ConstFirst<QPointF>(shape3);
|
||||
}
|
||||
|
||||
return PlaceLabelImg({t.map(shape1), t.map(shape2), t.map(shape3)});
|
||||
};
|
||||
|
||||
auto CircleShape = [t, this]()
|
||||
{
|
||||
const qreal radius = qMin(d->wValue/2.0, d->hValue/2.0);
|
||||
VArc arc(*this, radius, 0, 360);
|
||||
arc.SetApproximationScale(10);
|
||||
QPolygonF circle(arc.GetPoints());
|
||||
if (not circle.isClosed() && not circle.isEmpty())
|
||||
{
|
||||
circle << ConstFirst<QPointF>(circle);
|
||||
}
|
||||
|
||||
return PlaceLabelImg({t.map(circle)});
|
||||
};
|
||||
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_GCC("-Wswitch-default")
|
||||
switch(d->type)
|
||||
{
|
||||
case PlaceLabelType::Segment:
|
||||
return SegmentShape();
|
||||
case PlaceLabelType::Rectangle:
|
||||
return RectangleShape();
|
||||
case PlaceLabelType::Cross:
|
||||
return CrossShape();
|
||||
case PlaceLabelType::Tshaped:
|
||||
return TshapedShape();
|
||||
case PlaceLabelType::Doubletree:
|
||||
return DoubletreeShape();
|
||||
case PlaceLabelType::Corner:
|
||||
return CornerShape();
|
||||
case PlaceLabelType::Triangle:
|
||||
return TriangleShape();
|
||||
case PlaceLabelType::Hshaped:
|
||||
return HshapedShape();
|
||||
case PlaceLabelType::Button:
|
||||
return ButtonShape();
|
||||
case PlaceLabelType::Circle:
|
||||
return CircleShape();
|
||||
}
|
||||
// cppcheck-suppress unknownMacro
|
||||
QT_WARNING_POP
|
||||
|
||||
return PlaceLabelImg();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QPainterPath VPlaceLabelItem::LabelShapePath() const
|
||||
{
|
||||
return LabelShapePath(LabelShape());
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QPainterPath VPlaceLabelItem::LabelShapePath(const PlaceLabelImg &shape)
|
||||
{
|
||||
QPainterPath path;
|
||||
for (const auto &p : shape)
|
||||
{
|
||||
if (not p.isEmpty())
|
||||
{
|
||||
path.moveTo(ConstFirst<QPointF>(p));
|
||||
path.addPolygon(p);
|
||||
}
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
|
|
@ -83,12 +83,6 @@ public:
|
|||
|
||||
QTransform RotationMatrix() const;
|
||||
QRectF Box() const;
|
||||
|
||||
PlaceLabelImg LabelShape() const;
|
||||
QPainterPath LabelShapePath() const;
|
||||
|
||||
static QPainterPath LabelShapePath(const PlaceLabelImg &shape);
|
||||
|
||||
private:
|
||||
QSharedDataPointer<VPlaceLabelItemData> d;
|
||||
};
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
#include "vabstractpiece_p.h"
|
||||
#include "../vmisc/vabstractvalapplication.h"
|
||||
#include "../vgeometry/vpointf.h"
|
||||
#include "../vgeometry/vlayoutplacelabel.h"
|
||||
#include "../vgeometry/varc.h"
|
||||
#include "../ifc/exception/vexception.h"
|
||||
#include "../vmisc/compatibility.h"
|
||||
#include "../vpatterndb/floatItemData/vgrainlinedata.h"
|
||||
|
@ -111,7 +113,9 @@ auto AngleByLength(QVector<VRawSAPoint> points, QPointF p1, QPointF p2, QPointF
|
|||
{
|
||||
qDebug()<<"Couldn't find intersection with cut line.";
|
||||
}
|
||||
points.append(px);
|
||||
VRawSAPoint sp(px, p.CurvePoint(), p.TurnPoint());
|
||||
sp.SetPrimary(true);
|
||||
points.append(sp);
|
||||
|
||||
cutLine.setAngle(cutLine.angle()-180);
|
||||
type = Intersects(QLineF(sp2, sp3), cutLine, &px);
|
||||
|
@ -120,11 +124,13 @@ auto AngleByLength(QVector<VRawSAPoint> points, QPointF p1, QPointF p2, QPointF
|
|||
{
|
||||
qDebug()<<"Couldn't find intersection with cut line.";
|
||||
}
|
||||
points.append(px);
|
||||
sp = VRawSAPoint(px, p.CurvePoint(), p.TurnPoint());
|
||||
sp.SetPrimary(true);
|
||||
points.append(sp);
|
||||
}
|
||||
else
|
||||
{// The point just fine
|
||||
points.append(sp2);
|
||||
points.append(VRawSAPoint(sp2, p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -139,25 +145,25 @@ auto AngleByLength(QVector<VRawSAPoint> points, QPointF p1, QPointF p2, QPointF
|
|||
{
|
||||
QLineF loop(bigLine1.p2(), sp2);
|
||||
loop.setLength(loop.length() + accuracyPointOnLine*2.);
|
||||
points.append(loop.p2());
|
||||
points.append(sp2);
|
||||
points.append(VRawSAPoint(bigLine1.p2(), true));
|
||||
points.append(VRawSAPoint(loop.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
points.append(VRawSAPoint(sp2, p.CurvePoint(), p.TurnPoint()));
|
||||
points.append(VRawSAPoint(bigLine1.p2(), p.CurvePoint(), p.TurnPoint(), true));
|
||||
|
||||
loop = QLineF(bigLine2.p2(), sp2);
|
||||
loop.setLength(loop.length() + localWidth);
|
||||
points.append(VRawSAPoint(loop.p2(), true));
|
||||
points.append(VRawSAPoint(loop.p2(), p.CurvePoint(), p.TurnPoint(), true));
|
||||
}
|
||||
else
|
||||
{
|
||||
QLineF loop(sp2, bigLine1.p1());
|
||||
loop.setLength(accuracyPointOnLine*2.);
|
||||
points.append(loop.p2());
|
||||
points.append(sp2);
|
||||
points.append(VRawSAPoint(loop.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
points.append(VRawSAPoint(sp2, p.CurvePoint(), p.TurnPoint()));
|
||||
|
||||
loop = QLineF(bigLine1.p1(), sp2);
|
||||
loop.setLength(loop.length() + localWidth);
|
||||
points.append(VRawSAPoint(loop.p2(), true));
|
||||
points.append(VRawSAPoint(bigLine2.p1(), true));
|
||||
points.append(VRawSAPoint(loop.p2(), p.CurvePoint(), p.TurnPoint(), true));
|
||||
points.append(VRawSAPoint(bigLine2.p1(), p.CurvePoint(), p.TurnPoint(), true));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -168,7 +174,7 @@ auto AngleByLength(QVector<VRawSAPoint> points, QPointF p1, QPointF p2, QPointF
|
|||
{
|
||||
bool success = false;
|
||||
QVector<VRawSAPoint> temp = points;
|
||||
temp.append(bigLine1.p2());
|
||||
temp.append(VRawSAPoint(bigLine1.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
temp = VAbstractPiece::RollbackSeamAllowance(temp, bigLine2, &success);
|
||||
|
||||
if (success)
|
||||
|
@ -183,7 +189,7 @@ auto AngleByLength(QVector<VRawSAPoint> points, QPointF p1, QPointF p2, QPointF
|
|||
}
|
||||
else
|
||||
{
|
||||
points.append(sp2);
|
||||
points.append(VRawSAPoint(sp2, p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -194,16 +200,17 @@ auto AngleByLength(QVector<VRawSAPoint> points, QPointF p1, QPointF p2, QPointF
|
|||
QLineF loop1(sp2, sp1);
|
||||
loop1.setLength(loop1.length()*0.2);
|
||||
|
||||
points.append(loop1.p2()); // Need for the main path rule
|
||||
// Need for the main path rule
|
||||
points.append(VRawSAPoint(loop1.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
|
||||
loop1.setAngle(loop1.angle() + 180);
|
||||
loop1.setLength(localWidth);
|
||||
points.append(loop1.p2());
|
||||
points.append(bigLine2.p1());
|
||||
points.append(VRawSAPoint(loop1.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
points.append(VRawSAPoint(bigLine2.p1(), p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
else
|
||||
{
|
||||
points.append(sp2);
|
||||
points.append(VRawSAPoint(sp2, p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -252,13 +259,13 @@ auto AngleByIntersection(const QVector<VRawSAPoint> &points, QPointF p1, QPointF
|
|||
{
|
||||
return AngleByLength(points, p1, p2, p3, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||
}
|
||||
pointsIntr.append(px);
|
||||
pointsIntr.append(VRawSAPoint(px, p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
else
|
||||
{// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points
|
||||
bool success = false;
|
||||
QVector<VRawSAPoint> temp = pointsIntr;
|
||||
temp.append(bigLine1.p2());
|
||||
temp.append(VRawSAPoint(bigLine1.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
temp = VAbstractPiece::RollbackSeamAllowance(temp, edge2, &success);
|
||||
|
||||
if (success)
|
||||
|
@ -283,16 +290,16 @@ auto AngleByIntersection(const QVector<VRawSAPoint> &points, QPointF p1, QPointF
|
|||
|
||||
if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px))
|
||||
{
|
||||
pointsIntr.append(px);
|
||||
pointsIntr.append(VRawSAPoint(px, p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
else
|
||||
{
|
||||
pointsIntr.append(px);
|
||||
pointsIntr.append(VRawSAPoint(px, p.CurvePoint(), p.TurnPoint()));
|
||||
|
||||
QLineF allowance(p2, px);
|
||||
allowance.setLength(allowance.length() + localWidth * 3.);
|
||||
pointsIntr.append(allowance.p2());
|
||||
pointsIntr.append(bigLine2.p1());
|
||||
pointsIntr.append(VRawSAPoint(allowance.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
pointsIntr.append(VRawSAPoint(bigLine2.p1(), p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
|
||||
return pointsIntr;
|
||||
|
@ -343,13 +350,13 @@ auto AngleByFirstSymmetry(const QVector<VRawSAPoint> &points, QPointF p1, QPoint
|
|||
|
||||
if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px1))
|
||||
{
|
||||
pointsIntr.append(px1);
|
||||
pointsIntr.append(VRawSAPoint(px1, p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
else
|
||||
{// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points
|
||||
bool success = false;
|
||||
QVector<VRawSAPoint> temp = pointsIntr;
|
||||
temp.append(bigLine1.p2());
|
||||
temp.append(VRawSAPoint(bigLine1.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
temp = VAbstractPiece::RollbackSeamAllowance(temp, sEdge, &success);
|
||||
|
||||
if (success)
|
||||
|
@ -365,15 +372,15 @@ auto AngleByFirstSymmetry(const QVector<VRawSAPoint> &points, QPointF p1, QPoint
|
|||
|
||||
if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px2))
|
||||
{
|
||||
pointsIntr.append(px2);
|
||||
pointsIntr.append(VRawSAPoint(px2, p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
else
|
||||
{
|
||||
QLineF allowance(px2, p2);
|
||||
allowance.setAngle(allowance.angle() + 90);
|
||||
pointsIntr.append(px2);
|
||||
pointsIntr.append(allowance.p2());
|
||||
pointsIntr.append(bigLine2.p1());
|
||||
pointsIntr.append(VRawSAPoint(px2, p.CurvePoint(), p.TurnPoint()));
|
||||
pointsIntr.append(VRawSAPoint(allowance.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
pointsIntr.append(VRawSAPoint(bigLine2.p1(), p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
|
||||
return pointsIntr;
|
||||
|
@ -425,13 +432,13 @@ auto AngleBySecondSymmetry(const QVector<VRawSAPoint> &points, QPointF p1, QPoin
|
|||
|
||||
if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px1))
|
||||
{
|
||||
pointsIntr.append(px1);
|
||||
pointsIntr.append(VRawSAPoint(px1, p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
else
|
||||
{// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points
|
||||
bool success = false;
|
||||
QVector<VRawSAPoint> temp = pointsIntr;
|
||||
temp.append(bigLine1.p2());
|
||||
temp.append(VRawSAPoint(bigLine1.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
temp = VAbstractPiece::RollbackSeamAllowance(temp, sEdge, &success);
|
||||
|
||||
if (success)
|
||||
|
@ -447,16 +454,16 @@ auto AngleBySecondSymmetry(const QVector<VRawSAPoint> &points, QPointF p1, QPoin
|
|||
|
||||
if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px2))
|
||||
{
|
||||
pointsIntr.append(px2);
|
||||
pointsIntr.append(VRawSAPoint(px2, p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
else
|
||||
{
|
||||
QLineF allowance(p2, px2);
|
||||
allowance.setLength(p.GetSAAfter(width)*0.98);
|
||||
pointsIntr.append(allowance.p2());
|
||||
pointsIntr.append(VRawSAPoint(allowance.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
allowance.setLength(allowance.length() + localWidth * 3.);
|
||||
pointsIntr.append(allowance.p2());
|
||||
pointsIntr.append(bigLine2.p1());
|
||||
pointsIntr.append(VRawSAPoint(allowance.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
pointsIntr.append(VRawSAPoint(bigLine2.p1(), p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
|
||||
return pointsIntr;
|
||||
|
@ -500,8 +507,8 @@ auto AngleByFirstRightAngle(const QVector<VRawSAPoint> &points, QPointF p1, QPoi
|
|||
{
|
||||
return AngleByLength(points, p1, p2, p3, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||
}
|
||||
pointsRA.append(seam.p2());
|
||||
pointsRA.append(seam.p1());
|
||||
pointsRA.append(VRawSAPoint(seam.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
pointsRA.append(VRawSAPoint(seam.p1(), p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -514,7 +521,7 @@ auto AngleByFirstRightAngle(const QVector<VRawSAPoint> &points, QPointF p1, QPoi
|
|||
return AngleByLength(points, p1, p2, p3, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||
}
|
||||
|
||||
pointsRA.append(seam.p2());
|
||||
pointsRA.append(VRawSAPoint(seam.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
|
||||
QLineF loopLine(px, sp2);
|
||||
const qreal length = loopLine.length()*0.98;
|
||||
|
@ -523,8 +530,8 @@ auto AngleByFirstRightAngle(const QVector<VRawSAPoint> &points, QPointF p1, QPoi
|
|||
QLineF tmp(seam.p2(), seam.p1());
|
||||
tmp.setLength(tmp.length()+length);
|
||||
|
||||
pointsRA.append(tmp.p2());
|
||||
pointsRA.append(loopLine.p2());
|
||||
pointsRA.append(VRawSAPoint(tmp.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
pointsRA.append(VRawSAPoint(loopLine.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
|
||||
return pointsRA;
|
||||
|
@ -568,12 +575,12 @@ auto AngleBySecondRightAngle(QVector<VRawSAPoint> points, QPointF p1, QPointF p2
|
|||
{
|
||||
return AngleByLength(points, p1, p2, p3, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||
}
|
||||
points.append(px);
|
||||
points.append(VRawSAPoint(px, p.CurvePoint(), p.TurnPoint()));
|
||||
|
||||
QLineF seam(px, p3);
|
||||
seam.setAngle(seam.angle()+90);
|
||||
seam.setLength(p.GetSAAfter(width));
|
||||
points.append(seam.p2());
|
||||
points.append(VRawSAPoint(seam.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
|
||||
if (needRollback != nullptr)
|
||||
{
|
||||
|
@ -595,7 +602,7 @@ auto AngleBySecondRightAngle(QVector<VRawSAPoint> points, QPointF p1, QPointF p2
|
|||
bool success = false;
|
||||
const int countBefore = points.size();
|
||||
QVector<VRawSAPoint> temp = points;
|
||||
temp.append(bigLine1.p2());
|
||||
temp.append(VRawSAPoint(bigLine1.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
temp = VAbstractPiece::RollbackSeamAllowance(temp, edge, &success);
|
||||
|
||||
if (success)
|
||||
|
@ -609,7 +616,7 @@ auto AngleBySecondRightAngle(QVector<VRawSAPoint> points, QPointF p1, QPointF p2
|
|||
QLineF seam(px, p3);
|
||||
seam.setAngle(seam.angle()+90);
|
||||
seam.setLength(p.GetSAAfter(width));
|
||||
points.append(seam.p2());
|
||||
points.append(VRawSAPoint(seam.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -619,11 +626,11 @@ auto AngleBySecondRightAngle(QVector<VRawSAPoint> points, QPointF p1, QPointF p2
|
|||
}
|
||||
else if (IsSameDirection(bigLine1.p1(), bigLine1.p2(), px))
|
||||
{
|
||||
points.append(px);
|
||||
points.append(VRawSAPoint(px, p.CurvePoint(), p.TurnPoint()));
|
||||
QLineF seam(px, p3);
|
||||
seam.setAngle(seam.angle()+90);
|
||||
seam.setLength(p.GetSAAfter(width));
|
||||
points.append(seam.p2());
|
||||
points.append(VRawSAPoint(seam.p2(), p.CurvePoint(), p.TurnPoint()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -756,7 +763,7 @@ void RollbackByLength(QVector<VRawSAPoint> &ekvPoints, const QVector<VSAPoint> &
|
|||
const QLineF bigLine1 = VAbstractPiece::ParallelLine(points.at(points.size()-2), points.at(0), width);
|
||||
|
||||
QVector<VRawSAPoint> temp = ekvPoints;
|
||||
temp.insert(ekvPoints.size()-1, bigLine1.p2());
|
||||
temp.insert(ekvPoints.size()-1, VRawSAPoint(bigLine1.p2(), points.at(0).CurvePoint(), points.at(0).TurnPoint()));
|
||||
bool success = Rollback(temp, VAbstractPiece::ParallelLine(points.at(0), points.at(1), width));
|
||||
|
||||
if (success)
|
||||
|
@ -773,7 +780,7 @@ void RollbackBySecondEdgeSymmetry(QVector<VRawSAPoint> &ekvPoints, const QVector
|
|||
QLineF sEdge(VPointF::FlipPF(axis, bigLine1.p1()), VPointF::FlipPF(axis, bigLine1.p2()));
|
||||
|
||||
QVector<VRawSAPoint> temp = ekvPoints;
|
||||
temp.insert(ekvPoints.size()-1, bigLine1.p2());
|
||||
temp.insert(ekvPoints.size()-1, VRawSAPoint(bigLine1.p2(), points.at(0).CurvePoint(), points.at(0).TurnPoint()));
|
||||
bool success = Rollback(temp, sEdge);
|
||||
|
||||
if (success)
|
||||
|
@ -791,7 +798,7 @@ void RollbackByFirstEdgeSymmetry(QVector<VRawSAPoint> &ekvPoints, const QVector<
|
|||
const QLineF bigLine1 = VAbstractPiece::ParallelLine(points.at(points.size()-2), points.at(0), width);
|
||||
|
||||
QVector<VRawSAPoint> temp = ekvPoints;
|
||||
temp.insert(ekvPoints.size()-1, bigLine1.p2());
|
||||
temp.insert(ekvPoints.size()-1, VRawSAPoint(bigLine1.p2(), points.at(0).CurvePoint(), points.at(0).TurnPoint()));
|
||||
bool success = Rollback(temp, sEdge);
|
||||
|
||||
if (success)
|
||||
|
@ -805,7 +812,7 @@ void RollbackByPointsIntersection(QVector<VRawSAPoint> &ekvPoints, const QVector
|
|||
{
|
||||
const QLineF bigLine1 = VAbstractPiece::ParallelLine(points.at(points.size()-2), points.at(0), width);
|
||||
QVector<VRawSAPoint> temp = ekvPoints;
|
||||
temp.insert(ekvPoints.size()-1, bigLine1.p2());
|
||||
temp.insert(ekvPoints.size()-1, VRawSAPoint(bigLine1.p2(), points.at(0).CurvePoint(), points.at(0).TurnPoint()));
|
||||
bool success = Rollback(temp, QLineF(ConstLast(points), points.at(1)));
|
||||
|
||||
if (success)
|
||||
|
@ -848,7 +855,7 @@ void RollbackBySecondEdgeRightAngle(QVector<VRawSAPoint> &ekvPoints, const QVect
|
|||
ekvPoints.removeFirst();
|
||||
ekvPoints.removeLast();
|
||||
|
||||
ekvPoints.append(crosPoint);
|
||||
ekvPoints.append(VRawSAPoint(crosPoint, ekvPoints.at(0).CurvePoint(), ekvPoints.at(0).TurnPoint()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -856,7 +863,7 @@ void RollbackBySecondEdgeRightAngle(QVector<VRawSAPoint> &ekvPoints, const QVect
|
|||
{
|
||||
bool success = false;
|
||||
QVector<VRawSAPoint> temp = ekvPoints;
|
||||
temp.append(bigLine1.p2());
|
||||
temp.append(VRawSAPoint(bigLine1.p2(), ekvPoints.at(0).CurvePoint(), ekvPoints.at(0).TurnPoint()));
|
||||
temp = VAbstractPiece::RollbackSeamAllowance(temp, edge, &success);
|
||||
|
||||
if (success)
|
||||
|
@ -868,7 +875,7 @@ void RollbackBySecondEdgeRightAngle(QVector<VRawSAPoint> &ekvPoints, const QVect
|
|||
QLineF seam(px, points.at(1));
|
||||
seam.setAngle(seam.angle()+90);
|
||||
seam.setLength(points.at(0).GetSAAfter(width));
|
||||
ekvPoints.append(seam.p2());
|
||||
ekvPoints.append(VRawSAPoint(seam.p2(), ekvPoints.at(0).CurvePoint(), ekvPoints.at(0).TurnPoint()));
|
||||
|
||||
if (not ekvPoints.isEmpty())
|
||||
{
|
||||
|
@ -885,22 +892,6 @@ void RollbackBySecondEdgeRightAngle(QVector<VRawSAPoint> &ekvPoints, const QVect
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto CleanLoopArtifacts(const QVector<VRawSAPoint> &points) -> QVector<QPointF>
|
||||
{
|
||||
QVector<QPointF> cleaned;
|
||||
cleaned.reserve(points.size());
|
||||
for (const auto &point : points)
|
||||
{
|
||||
if (not point.LoopPoint())
|
||||
{
|
||||
cleaned.append(point);
|
||||
}
|
||||
}
|
||||
|
||||
return cleaned;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
// Friend functions
|
||||
|
@ -1052,7 +1043,7 @@ void VAbstractPiece::SetSAWidth(qreal value)
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VAbstractPiece::Equidistant(QVector<VSAPoint> points, qreal width, const QString &name) -> QVector<QPointF>
|
||||
auto VAbstractPiece::Equidistant(QVector<VSAPoint> points, qreal width, const QString &name) -> QVector<VLayoutPoint>
|
||||
{
|
||||
if (width < 0)
|
||||
{
|
||||
|
@ -1135,20 +1126,20 @@ auto VAbstractPiece::Equidistant(QVector<VSAPoint> points, qreal width, const QS
|
|||
QT_WARNING_POP
|
||||
}
|
||||
|
||||
QVector<VLayoutPoint> cleaned;
|
||||
// Uncomment for debug
|
||||
// QVector<QPointF> cleaned;
|
||||
// cleaned.reserve(ekvPoints.size());
|
||||
// for (auto &point : ekvPoints)
|
||||
// {
|
||||
// cleaned.append(point);
|
||||
// }
|
||||
// CastTo(ekvPoints, cleaned);
|
||||
|
||||
const bool removeFirstAndLast = false;
|
||||
ekvPoints = RemoveDublicates(ekvPoints, removeFirstAndLast);
|
||||
QVector<QPointF> cleaned = CheckLoops(ekvPoints);//Result path can contain loops
|
||||
ekvPoints = CheckLoops(ekvPoints);
|
||||
cleaned = CorrectEquidistantPoints(cleaned, removeFirstAndLast);
|
||||
cleaned = CorrectPathDistortion(cleaned);
|
||||
// DumpVector(cleaned, QStringLiteral("output.json.XXXXXX")); // Uncomment for dumping test data
|
||||
CastTo(ekvPoints, cleaned);//Result path can contain loops
|
||||
|
||||
// QVector<QPointF> dump;
|
||||
// CastTo(cleaned, dump);
|
||||
// DumpVector(dump, QStringLiteral("output.json.XXXXXX")); // Uncomment for dumping test data
|
||||
return cleaned;
|
||||
}
|
||||
|
||||
|
@ -1188,131 +1179,6 @@ auto VAbstractPiece::SumTrapezoids(const QVector<QPointF> &points) -> qreal
|
|||
return res;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VAbstractPiece::CheckLoops(const QVector<QPointF> &points) -> QVector<QPointF>
|
||||
{
|
||||
QVector<VRawSAPoint> rawPath;
|
||||
rawPath.reserve(points.size());
|
||||
for (const auto &point : points)
|
||||
{
|
||||
rawPath.append(point);
|
||||
}
|
||||
|
||||
return CheckLoops(rawPath);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief CheckLoops seek and delete loops in equidistant.
|
||||
* @param points vector of points of equidistant.
|
||||
* @return vector of points of equidistant.
|
||||
*/
|
||||
auto VAbstractPiece::CheckLoops(const QVector<VRawSAPoint> &points) -> QVector<QPointF>
|
||||
{
|
||||
// DumpVector(points, QStringLiteral("input.json.XXXXXX")); // Uncomment for dumping test data
|
||||
|
||||
/*If we got less than 4 points no need seek loops.*/
|
||||
if (points.size() < 4)
|
||||
{
|
||||
return CleanLoopArtifacts(points);
|
||||
}
|
||||
|
||||
bool loopFound = false;
|
||||
|
||||
auto CheckLoop = [&loopFound](const QVector<VRawSAPoint> &points)
|
||||
{
|
||||
loopFound = false;
|
||||
|
||||
const bool pathClosed = (ConstFirst(points) == ConstLast(points));
|
||||
|
||||
QVector<VRawSAPoint> ekvPoints;
|
||||
ekvPoints.reserve(points.size());
|
||||
|
||||
qint32 i;
|
||||
for (i = 0; i < points.size(); ++i)
|
||||
{
|
||||
/*Last three points no need to check.*/
|
||||
/*Triangle can not contain a loop*/
|
||||
if (loopFound || i > points.size()-4)
|
||||
{
|
||||
ekvPoints.append(points.at(i));
|
||||
continue;
|
||||
}
|
||||
|
||||
enum LoopIntersectType { NoIntersection, BoundedIntersection, ParallelIntersection };
|
||||
|
||||
QPointF crosPoint;
|
||||
LoopIntersectType status = NoIntersection;
|
||||
const QLineF line1(points.at(i), points.at(i+1));
|
||||
|
||||
const int limit = pathClosed && i == 0 ? 2 : 1;
|
||||
qint32 j;
|
||||
for (j = i+2; j < points.size()-limit; ++j)
|
||||
{
|
||||
QLineF line2(points.at(j), points.at(j+1));
|
||||
|
||||
const QLineF::IntersectType intersect = Intersects(line1, line2, &crosPoint);
|
||||
if (intersect == QLineF::NoIntersection)
|
||||
{ // According to the documentation QLineF::NoIntersection indicates that the lines do not intersect;
|
||||
// i.e. they are parallel. But parallel also mean they can be on the same line.
|
||||
// Method IsLineSegmentOnLineSegment will check it.
|
||||
if (VGObject::IsLineSegmentOnLineSegment(line1, line2))
|
||||
{// Now we really sure that segments are on the same line and have real intersections.
|
||||
status = ParallelIntersection;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (intersect == QLineF::BoundedIntersection)
|
||||
{
|
||||
status = BoundedIntersection;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (status)
|
||||
{
|
||||
case ParallelIntersection:
|
||||
/*We have found a loop.*/
|
||||
ekvPoints.append(points.at(i));
|
||||
ekvPoints.append(points.at(j+1));
|
||||
i = j+1; // Skip a loop
|
||||
loopFound = true;
|
||||
break;
|
||||
case BoundedIntersection:
|
||||
ekvPoints.append(points.at(i));
|
||||
ekvPoints.append(crosPoint);
|
||||
i = j;
|
||||
loopFound = true;
|
||||
break;
|
||||
case NoIntersection:
|
||||
/*We have not found loop.*/
|
||||
ekvPoints.append(points.at(i));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ekvPoints;
|
||||
};
|
||||
|
||||
QVector<VRawSAPoint> ekvPoints = points;
|
||||
qint32 i;
|
||||
const int maxLoops = 10000; // limit number of loops to be removed
|
||||
|
||||
for (i = 0; i < maxLoops; ++i)
|
||||
{
|
||||
ekvPoints = CheckLoop(ekvPoints);
|
||||
if (not loopFound)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const QVector<QPointF> cleaned = CleanLoopArtifacts(ekvPoints);
|
||||
// DumpVector(cleaned, QStringLiteral("output.json.XXXXXX")); // Uncomment for dumping test data
|
||||
return cleaned;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief EkvPoint return seam aloowance points in place of intersection two edges. Last points of two edges should be
|
||||
|
@ -1342,7 +1208,7 @@ auto VAbstractPiece::EkvPoint(QVector<VRawSAPoint> points, const VSAPoint &p1Lin
|
|||
|
||||
if (VFuzzyComparePoints(bigLine1.p2(), bigLine2.p1()))
|
||||
{
|
||||
points.append(bigLine1.p2());
|
||||
points.append(VRawSAPoint(bigLine1.p2(), p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
return points;
|
||||
}
|
||||
|
||||
|
@ -1357,16 +1223,16 @@ auto VAbstractPiece::EkvPoint(QVector<VRawSAPoint> points, const VSAPoint &p1Lin
|
|||
ray.setLength(width*2);
|
||||
|
||||
QPointF crosPoint;
|
||||
QLineF::IntersectType type = Intersects(ray, bigLine1, &crosPoint );
|
||||
QLineF::IntersectType type = Intersects(ray, bigLine1, &crosPoint);
|
||||
if (type != QLineF::NoIntersection)
|
||||
{
|
||||
points.append(crosPoint);
|
||||
points.append(VRawSAPoint(crosPoint, p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
}
|
||||
|
||||
type = Intersects(ray, bigLine2, &crosPoint );
|
||||
if (type != QLineF::NoIntersection)
|
||||
{
|
||||
points.append(crosPoint);
|
||||
points.append(VRawSAPoint(crosPoint, p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
}
|
||||
return points;
|
||||
}
|
||||
|
@ -1378,7 +1244,7 @@ auto VAbstractPiece::EkvPoint(QVector<VRawSAPoint> points, const VSAPoint &p1Lin
|
|||
{// There are at least three big cases
|
||||
case (QLineF::BoundedIntersection):
|
||||
// The easiest, real intersection
|
||||
points.append(crosPoint);
|
||||
points.append(VRawSAPoint(crosPoint, p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
return points;
|
||||
case (QLineF::UnboundedIntersection):
|
||||
{ // Most common case
|
||||
|
@ -1400,8 +1266,8 @@ auto VAbstractPiece::EkvPoint(QVector<VRawSAPoint> points, const VSAPoint &p1Lin
|
|||
if (VGObject::IsPointOnLineSegment(p2Line1, p1Line1, p1Line2, ToPixel(0.5, Unit::Mm)) &&
|
||||
IsOnLine(p2Line1, bigLine1.p2(), bigLine2.p1(), ToPixel(0.5, Unit::Mm)))
|
||||
{
|
||||
points.append(bigLine1.p2());
|
||||
points.append(bigLine2.p1());
|
||||
points.append(VRawSAPoint(bigLine1.p2(), p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
points.append(VRawSAPoint(bigLine2.p1(), p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
return points;
|
||||
}
|
||||
|
||||
|
@ -1473,7 +1339,7 @@ QT_WARNING_POP
|
|||
const QLineF::IntersectType type = Intersects(bigEdge, line, &px);
|
||||
if (type != QLineF::BoundedIntersection && line.length() < QLineF(p2Line1, px).length())
|
||||
{
|
||||
points.append(crosPoint);
|
||||
points.append(VRawSAPoint(crosPoint, p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
return points;
|
||||
}
|
||||
}
|
||||
|
@ -1484,12 +1350,12 @@ QT_WARNING_POP
|
|||
QLineF loop(crosPoint, bigLine1.p1());
|
||||
loop.setAngle(loop.angle() + 180);
|
||||
loop.setLength(accuracyPointOnLine*2.);
|
||||
points.append(loop.p2());
|
||||
points.append(crosPoint);
|
||||
points.append(VRawSAPoint(loop.p2(), p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
points.append(VRawSAPoint(crosPoint, p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
|
||||
loop = QLineF(crosPoint, bigLine1.p1());
|
||||
loop.setLength(loop.length() + localWidth*2.);
|
||||
points.append(VRawSAPoint(loop.p2(), true));
|
||||
points.append(VRawSAPoint(loop.p2(), p2Line1.CurvePoint(), p2Line1.TurnPoint(), true));
|
||||
}
|
||||
|
||||
return points;
|
||||
|
@ -1504,20 +1370,20 @@ QT_WARNING_POP
|
|||
{// The cross point is still outside of a piece
|
||||
if (line.length() >= localWidth)
|
||||
{
|
||||
points.append(crosPoint);
|
||||
points.append(VRawSAPoint(crosPoint, p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
return points;
|
||||
}
|
||||
|
||||
// but not enough far, fix it
|
||||
line.setLength(localWidth);
|
||||
points.append(line.p2());
|
||||
points.append(VRawSAPoint(line.p2(), p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
return points;
|
||||
}
|
||||
|
||||
// Wrong cross point, probably inside of a piece. Manually creating correct seam allowance
|
||||
const QLineF bigEdge = SimpleParallelLine(bigLine1.p2(), bigLine2.p1(), localWidth );
|
||||
points.append(bigEdge.p1());
|
||||
points.append(bigEdge.p2());
|
||||
points.append(VRawSAPoint(bigEdge.p1(), p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
points.append(VRawSAPoint(bigEdge.p2(), p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
return points;
|
||||
}
|
||||
}
|
||||
|
@ -1525,8 +1391,9 @@ QT_WARNING_POP
|
|||
}
|
||||
case (QLineF::NoIntersection):
|
||||
/*If we have correct lines this means lines lie on a line or parallel.*/
|
||||
points.append(bigLine1.p2());
|
||||
points.append(bigLine2.p1()); // Second point for parallel line
|
||||
points.append(VRawSAPoint(bigLine1.p2(), p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
// Second point for parallel line
|
||||
points.append(VRawSAPoint(bigLine2.p1(), p2Line1.CurvePoint(), p2Line1.TurnPoint()));
|
||||
return points;
|
||||
default:
|
||||
break;
|
||||
|
@ -1657,10 +1524,8 @@ auto VAbstractPiece::GetUniqueID() const -> QString
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VSAPoint::toJson() const -> QJsonObject
|
||||
{
|
||||
QJsonObject pointObject;
|
||||
QJsonObject pointObject = VLayoutPoint::toJson();
|
||||
pointObject[QLatin1String("type")] = "VSAPoint";
|
||||
pointObject[QLatin1String("x")] = x();
|
||||
pointObject[QLatin1String("y")] = y();
|
||||
|
||||
if (not VFuzzyComparePossibleNulls(m_before, -1))
|
||||
{
|
||||
|
@ -1698,7 +1563,7 @@ auto VAbstractPiece::RollbackSeamAllowance(QVector<VRawSAPoint> points, const QL
|
|||
&& VGObject::IsPointOnLineSegment(crosPoint, segment.p1(), segment.p2())
|
||||
&& IsSameDirection(cuttingEdge.p2(), cuttingEdge.p1(), crosPoint))
|
||||
{
|
||||
clipped.append(crosPoint);
|
||||
clipped.append(VRawSAPoint(crosPoint, points.at(i).CurvePoint(), points.at(i).TurnPoint()));
|
||||
for (int j=i-1; j>=0; --j)
|
||||
{
|
||||
clipped.append(points.at(j));
|
||||
|
@ -1717,7 +1582,8 @@ auto VAbstractPiece::RollbackSeamAllowance(QVector<VRawSAPoint> points, const QL
|
|||
|
||||
if (type != QLineF::NoIntersection && IsOutsidePoint(secondLast.p1(), secondLast.p2(), crosPoint))
|
||||
{
|
||||
points.append(crosPoint);
|
||||
points.append(VRawSAPoint(crosPoint, points.at(points.size()-1).CurvePoint(),
|
||||
points.at(points.size()-1).TurnPoint()));
|
||||
*success = true;
|
||||
}
|
||||
}
|
||||
|
@ -1919,20 +1785,275 @@ auto VAbstractPiece::GrainlinePoints(const VGrainlineData &geom, const VContaine
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VAbstractPiece::PainterPath(const QVector<QPointF> &points) -> QPainterPath
|
||||
auto VAbstractPiece::PlaceLabelShape(const VLayoutPlaceLabel &label) -> PlaceLabelImg
|
||||
{
|
||||
QPainterPath path;
|
||||
path.setFillRule(Qt::WindingFill);
|
||||
|
||||
if (not points.isEmpty())
|
||||
auto LayoutPoint = [label](QPointF p, bool turnPoint = false, bool curvePoint = false)
|
||||
{
|
||||
path.moveTo(points.at(0));
|
||||
for (qint32 i = 1; i < points.count(); ++i)
|
||||
VLayoutPoint point(label.RotationMatrix().map(p));
|
||||
point.SetTurnPoint(turnPoint);
|
||||
point.SetCurvePoint(curvePoint);
|
||||
return point;
|
||||
};
|
||||
|
||||
const QPointF pos = label.Center();
|
||||
const QRectF box = label.Box();
|
||||
|
||||
auto SegmentShape = [pos, box, LayoutPoint]()
|
||||
{
|
||||
QVector<VLayoutPoint> shape
|
||||
{
|
||||
path.lineTo(points.at(i));
|
||||
LayoutPoint(QPointF(pos.x(), pos.y() - box.height()/2.0), true),
|
||||
LayoutPoint(QPointF(pos.x(), pos.y() + box.height()/2.0), true)
|
||||
};
|
||||
|
||||
return PlaceLabelImg{shape};
|
||||
};
|
||||
|
||||
auto RectangleShape = [pos, box, LayoutPoint]()
|
||||
{
|
||||
QRectF rect(QPointF(pos.x() - box.width()/2.0, pos.y() - box.height()/2.0),
|
||||
QPointF(pos.x() + box.width()/2.0, pos.y() + box.height()/2.0));
|
||||
|
||||
QVector<VLayoutPoint> shape
|
||||
{
|
||||
LayoutPoint(rect.topLeft(), true),
|
||||
LayoutPoint(rect.topRight(), true),
|
||||
LayoutPoint(rect.bottomRight(), true),
|
||||
LayoutPoint(rect.bottomLeft(), true),
|
||||
LayoutPoint(rect.topLeft(), true)
|
||||
};
|
||||
|
||||
return PlaceLabelImg{shape};
|
||||
};
|
||||
|
||||
auto CrossShape = [pos, box, LayoutPoint]()
|
||||
{
|
||||
QVector<VLayoutPoint> shape1
|
||||
{
|
||||
LayoutPoint(QPointF(pos.x(), pos.y() - box.height()/2.0), true),
|
||||
LayoutPoint(QPointF(pos.x(), pos.y() + box.height()/2.0), true)
|
||||
};
|
||||
|
||||
QVector<VLayoutPoint> shape2
|
||||
{
|
||||
LayoutPoint(QPointF(pos.x() - box.width()/2.0, pos.y()), true),
|
||||
LayoutPoint(QPointF(pos.x() + box.width()/2.0, pos.y()), true)
|
||||
};
|
||||
|
||||
return PlaceLabelImg{shape1, shape2};
|
||||
};
|
||||
|
||||
auto TshapedShape = [pos, box, LayoutPoint]()
|
||||
{
|
||||
QPointF center2(pos.x(), pos.y() + box.height()/2.0);
|
||||
|
||||
QVector<VLayoutPoint> shape1
|
||||
{
|
||||
LayoutPoint(QPointF(pos.x(), pos.y()), true),
|
||||
LayoutPoint(center2, true)
|
||||
};
|
||||
|
||||
QVector<VLayoutPoint> shape2
|
||||
{
|
||||
LayoutPoint(QPointF(center2.x() - box.width()/2.0, center2.y()), true),
|
||||
LayoutPoint(QPointF(center2.x() + box.width()/2.0, center2.y()), true)
|
||||
};
|
||||
|
||||
return PlaceLabelImg{shape1, shape2};
|
||||
};
|
||||
|
||||
auto DoubletreeShape = [pos, box, LayoutPoint]()
|
||||
{
|
||||
QRectF rect(QPointF(pos.x() - box.width()/2.0, pos.y() - box.height()/2.0),
|
||||
QPointF(pos.x() + box.width()/2.0, pos.y() + box.height()/2.0));
|
||||
|
||||
QVector<VLayoutPoint> shape1
|
||||
{
|
||||
LayoutPoint(rect.topLeft(), true),
|
||||
LayoutPoint(rect.bottomRight(), true)
|
||||
};
|
||||
|
||||
QVector<VLayoutPoint> shape2
|
||||
{
|
||||
LayoutPoint(rect.topRight(), true),
|
||||
LayoutPoint(rect.bottomLeft(), true)
|
||||
};
|
||||
|
||||
return PlaceLabelImg{shape1, shape2};
|
||||
};
|
||||
|
||||
auto CornerShape = [pos, box, LayoutPoint]()
|
||||
{
|
||||
QVector<VLayoutPoint> shape1
|
||||
{
|
||||
LayoutPoint(QPointF(pos.x(), pos.y()), true),
|
||||
LayoutPoint(QPointF(pos.x(), pos.y() + box.height()/2.0), true)
|
||||
};
|
||||
|
||||
QVector<VLayoutPoint> shape2
|
||||
{
|
||||
LayoutPoint(QPointF(pos.x() - box.width()/2.0, pos.y()), true),
|
||||
LayoutPoint(QPointF(pos.x(), pos.y()), true)
|
||||
};
|
||||
|
||||
return PlaceLabelImg{shape1, shape2};
|
||||
};
|
||||
|
||||
auto TriangleShape = [pos, box, LayoutPoint]()
|
||||
{
|
||||
QRectF rect(QPointF(pos.x() - box.width()/2.0, pos.y() - box.height()/2.0),
|
||||
QPointF(pos.x() + box.width()/2.0, pos.y() + box.height()/2.0));
|
||||
|
||||
QVector<VLayoutPoint> shape
|
||||
{
|
||||
LayoutPoint(rect.topLeft(), true),
|
||||
LayoutPoint(rect.topRight(), true),
|
||||
LayoutPoint(rect.bottomRight(), true),
|
||||
LayoutPoint(rect.topLeft(), true)
|
||||
};
|
||||
|
||||
return PlaceLabelImg{shape};
|
||||
};
|
||||
|
||||
auto HshapedShape = [pos, box, LayoutPoint]()
|
||||
{
|
||||
const QPointF center1 (pos.x(), pos.y() - box.height()/2.0);
|
||||
const QPointF center2 (pos.x(), pos.y() + box.height()/2.0);
|
||||
|
||||
QVector<VLayoutPoint> shape1
|
||||
{
|
||||
LayoutPoint(center1, true),
|
||||
LayoutPoint(center2, true)
|
||||
};
|
||||
|
||||
QVector<VLayoutPoint> shape2
|
||||
{
|
||||
LayoutPoint(QPointF(center1.x() - box.width()/2.0, center1.y()), true),
|
||||
LayoutPoint(QPointF(center1.x() + box.width()/2.0, center1.y()), true)
|
||||
};
|
||||
|
||||
QVector<VLayoutPoint> shape3
|
||||
{
|
||||
LayoutPoint(QPointF(center2.x() - box.width()/2.0, center2.y()), true),
|
||||
LayoutPoint(QPointF(center2.x() + box.width()/2.0, center2.y()), true)
|
||||
};
|
||||
|
||||
return PlaceLabelImg{shape1, shape2, shape3};
|
||||
};
|
||||
|
||||
auto ButtonShape = [pos, box, LayoutPoint]()
|
||||
{
|
||||
const qreal radius = qMin(box.width()/2.0, box.height()/2.0);
|
||||
QVector<VLayoutPoint> shape1
|
||||
{
|
||||
LayoutPoint(QPointF(pos.x(), pos.y() - radius), true),
|
||||
LayoutPoint(QPointF(pos.x(), pos.y() + radius), true)
|
||||
};
|
||||
|
||||
QVector<VLayoutPoint> shape2
|
||||
{
|
||||
LayoutPoint(QPointF(pos.x() - radius, pos.y()), true),
|
||||
LayoutPoint(QPointF(pos.x() + radius, pos.y()), true)
|
||||
};
|
||||
|
||||
const qreal circleSize = 0.85;
|
||||
VArc arc(VPointF(pos), radius*circleSize, 0, 360);
|
||||
arc.SetApproximationScale(10);
|
||||
|
||||
QVector<QPointF> points = arc.GetPoints();
|
||||
if (not points.isEmpty() && ConstFirst(points) != ConstLast(points))
|
||||
{
|
||||
points.append(ConstFirst(points));
|
||||
}
|
||||
path.lineTo(points.at(0));
|
||||
|
||||
QVector<VLayoutPoint> shape3;
|
||||
for (int i=0; i < points.size(); ++i)
|
||||
{
|
||||
bool turnPoint = false;
|
||||
if (i == 0 || i == points.size() -1)
|
||||
{
|
||||
turnPoint = true;
|
||||
}
|
||||
shape3.append(LayoutPoint(points.at(i), turnPoint, true));
|
||||
}
|
||||
|
||||
return PlaceLabelImg{shape1, shape2, shape3};
|
||||
};
|
||||
|
||||
auto CircleShape = [pos, box, LayoutPoint]()
|
||||
{
|
||||
const qreal radius = qMin(box.width()/2.0, box.height()/2.0);
|
||||
VArc arc(VPointF(pos), radius, 0, 360);
|
||||
arc.SetApproximationScale(10);
|
||||
|
||||
QVector<QPointF> points = arc.GetPoints();
|
||||
if (not points.isEmpty() && ConstFirst(points) != ConstLast(points))
|
||||
{
|
||||
points.append(ConstFirst(points));
|
||||
}
|
||||
|
||||
QVector<VLayoutPoint> circle;
|
||||
for (int i=0; i < points.size(); ++i)
|
||||
{
|
||||
bool turnPoint = false;
|
||||
if (i == 0 || i == points.size() -1)
|
||||
{
|
||||
turnPoint = true;
|
||||
}
|
||||
circle.append(LayoutPoint(points.at(i), turnPoint, true));
|
||||
}
|
||||
|
||||
return PlaceLabelImg{circle};
|
||||
};
|
||||
|
||||
switch(label.Type())
|
||||
{
|
||||
case PlaceLabelType::Segment:
|
||||
return SegmentShape();
|
||||
case PlaceLabelType::Rectangle:
|
||||
return RectangleShape();
|
||||
case PlaceLabelType::Cross:
|
||||
return CrossShape();
|
||||
case PlaceLabelType::Tshaped:
|
||||
return TshapedShape();
|
||||
case PlaceLabelType::Doubletree:
|
||||
return DoubletreeShape();
|
||||
case PlaceLabelType::Corner:
|
||||
return CornerShape();
|
||||
case PlaceLabelType::Triangle:
|
||||
return TriangleShape();
|
||||
case PlaceLabelType::Hshaped:
|
||||
return HshapedShape();
|
||||
case PlaceLabelType::Button:
|
||||
return ButtonShape();
|
||||
case PlaceLabelType::Circle:
|
||||
return CircleShape();
|
||||
default:
|
||||
return {};
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VAbstractPiece::LabelShapePath(const VLayoutPlaceLabel &label) -> QPainterPath
|
||||
{
|
||||
return LabelShapePath(PlaceLabelShape(label));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VAbstractPiece::LabelShapePath(const PlaceLabelImg &shape) -> QPainterPath
|
||||
{
|
||||
QPainterPath path;
|
||||
for (const auto &p : shape)
|
||||
{
|
||||
if (not p.isEmpty())
|
||||
{
|
||||
path.moveTo(ConstFirst<QPointF>(p));
|
||||
QVector<QPointF> polygon;
|
||||
CastTo(p, polygon);
|
||||
path.addPolygon(polygon);
|
||||
}
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "../vmisc/compatibility.h"
|
||||
#include "../vgeometry/vgobject.h"
|
||||
#include "vsapoint.h"
|
||||
#include "vrawsapoint.h"
|
||||
#include "testpath.h"
|
||||
|
||||
class VAbstractPieceData;
|
||||
|
@ -45,6 +46,9 @@ class QPainterPath;
|
|||
class VGrainlineData;
|
||||
class VContainer;
|
||||
class VRawSAPoint;
|
||||
class VLayoutPlaceLabel;
|
||||
|
||||
using PlaceLabelImg = QVector<QVector<VLayoutPoint> >;
|
||||
|
||||
class VAbstractPiece
|
||||
{
|
||||
|
@ -100,10 +104,10 @@ public:
|
|||
*/
|
||||
virtual auto GetUniqueID() const -> QString;
|
||||
|
||||
static auto Equidistant(QVector<VSAPoint> points, qreal width, const QString &name) -> QVector<QPointF>;
|
||||
static auto Equidistant(QVector<VSAPoint> points, qreal width, const QString &name) -> QVector<VLayoutPoint>;
|
||||
static auto SumTrapezoids(const QVector<QPointF> &points) -> qreal;
|
||||
static auto CheckLoops(const QVector<QPointF> &points) -> QVector<QPointF>;
|
||||
static auto CheckLoops(const QVector<VRawSAPoint> &points) -> QVector<QPointF>;
|
||||
template <class T>
|
||||
static auto CheckLoops(QVector<T> points) -> QVector<T>;
|
||||
static auto EkvPoint(QVector<VRawSAPoint> points, const VSAPoint &p1Line1, const VSAPoint &p2Line1,
|
||||
const VSAPoint &p1Line2, const VSAPoint &p2Line2, qreal width,
|
||||
bool *needRollback = nullptr) -> QVector<VRawSAPoint>;
|
||||
|
@ -122,28 +126,81 @@ public:
|
|||
static auto GrainlinePoints(const VGrainlineData &geom, const VContainer *pattern,
|
||||
const QRectF &boundingRect, qreal &dAng) -> QVector<QPointF>;
|
||||
|
||||
static auto PainterPath(const QVector<QPointF> &points) -> QPainterPath;
|
||||
template <class T>
|
||||
static auto PainterPath(const QVector<T> &points) -> QPainterPath;
|
||||
|
||||
friend auto operator<< (QDataStream& dataStream, const VAbstractPiece& piece) -> QDataStream&;
|
||||
friend auto operator>> (QDataStream& dataStream, VAbstractPiece& piece) -> QDataStream&;
|
||||
|
||||
static auto PlaceLabelShape(const VLayoutPlaceLabel &label) -> PlaceLabelImg;
|
||||
static auto LabelShapePath(const VLayoutPlaceLabel &label) -> QPainterPath;
|
||||
static auto LabelShapePath(const PlaceLabelImg &shape) -> QPainterPath;
|
||||
|
||||
protected:
|
||||
template <class T>
|
||||
static auto RemoveDublicates(const QVector<T> &points, bool removeFirstAndLast = true) -> QVector<T>;
|
||||
static auto IsEkvPointOnLine(const QPointF &iPoint, const QPointF &prevPoint, const QPointF &nextPoint) -> bool;
|
||||
static auto IsEkvPointOnLine(const VSAPoint &iPoint, const VSAPoint &prevPoint, const VSAPoint &nextPoint) -> bool;
|
||||
template <class T>
|
||||
static auto CheckPointOnLine(QVector<T> &points, const T &iPoint, const T &prevPoint, const T &nextPoint) -> bool;
|
||||
|
||||
static auto IsItemContained(const QRectF &parentBoundingRect, const QVector<QPointF> &shape, qreal &dX,
|
||||
qreal &dY) -> bool;
|
||||
static auto CorrectPosition(const QRectF &parentBoundingRect, QVector<QPointF> points) -> QVector<QPointF>;
|
||||
static auto FindGrainlineGeometry(const VGrainlineData& geom, const VContainer *pattern, qreal &length,
|
||||
qreal &rotationAngle, QPointF &pos) -> bool;
|
||||
template <class T>
|
||||
static auto ComparePoints(QVector<T> &points, const T &p1, const T &p2, qreal accuracy) -> bool;
|
||||
template <class T>
|
||||
static auto CompareFirstAndLastPoints(QVector<T> &points, qreal accuracy) -> void;
|
||||
template <class T>
|
||||
static auto CheckLoop(const QVector<T> &points, bool &loopFound) -> QVector<T>;
|
||||
template <class T>
|
||||
static auto IntersectionPoint(QPointF crosPoint, const T &l1p1, const T &l1p2, const T &l2p1, const T &l2p2) -> T;
|
||||
private:
|
||||
QSharedDataPointer<VAbstractPieceData> d;
|
||||
};
|
||||
|
||||
Q_DECLARE_TYPEINFO(VAbstractPiece, Q_MOVABLE_TYPE); // NOLINT
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <class T>
|
||||
inline auto VAbstractPiece::CheckPointOnLine(QVector<T> &points, const T &iPoint, const T &prevPoint,
|
||||
const T &nextPoint) -> bool
|
||||
{
|
||||
if (not IsEkvPointOnLine(iPoint, prevPoint, nextPoint))
|
||||
{
|
||||
points.append(iPoint);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (not points.isEmpty() && iPoint.TurnPoint())
|
||||
{
|
||||
points.last().SetTurnPoint(true);
|
||||
}
|
||||
|
||||
if (not points.isEmpty() && iPoint.CurvePoint())
|
||||
{
|
||||
points.last().SetCurvePoint(true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <>
|
||||
inline auto VAbstractPiece::CheckPointOnLine<QPointF>(QVector<QPointF> &points, const QPointF &iPoint,
|
||||
const QPointF &prevPoint, const QPointF &nextPoint) -> bool
|
||||
{
|
||||
if (not IsEkvPointOnLine(iPoint, prevPoint, nextPoint))
|
||||
{
|
||||
points.append(iPoint);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief CorrectEquidistantPoints clear equivalent points and remove point on line from equdistant.
|
||||
|
@ -151,7 +208,7 @@ Q_DECLARE_TYPEINFO(VAbstractPiece, Q_MOVABLE_TYPE); // NOLINT
|
|||
* @return corrected list.
|
||||
*/
|
||||
template <class T>
|
||||
auto VAbstractPiece::CorrectEquidistantPoints(const QVector<T> &points, bool removeFirstAndLast) -> QVector<T>
|
||||
inline auto VAbstractPiece::CorrectEquidistantPoints(const QVector<T> &points, bool removeFirstAndLast) -> QVector<T>
|
||||
{
|
||||
// DumpVector(points, QStringLiteral("input.json.XXXXXX")); // Uncomment for dumping test data
|
||||
if (points.size()<4)//Better don't check if only three points. We can destroy equidistant.
|
||||
|
@ -174,7 +231,7 @@ auto VAbstractPiece::CorrectEquidistantPoints(const QVector<T> &points, bool rem
|
|||
QVector<T> buf2;
|
||||
//Remove point on line
|
||||
for (qint32 i = 0; i < buf1.size(); ++i)
|
||||
{// In this case we alwayse will have bounded intersection, so all is need is to check if point i is on line.
|
||||
{// In this case we alwayse will have bounded intersection, so all is need is to check if point is on line.
|
||||
// Unfortunatelly QLineF::intersect can't be used in this case because of the floating-point accuraccy problem.
|
||||
if (prev == -1)
|
||||
{
|
||||
|
@ -213,9 +270,8 @@ auto VAbstractPiece::CorrectEquidistantPoints(const QVector<T> &points, bool rem
|
|||
const T &prevPoint = buf1.at(prev);
|
||||
const T &nextPoint = buf1.at(next);
|
||||
|
||||
if (not IsEkvPointOnLine(iPoint, prevPoint, nextPoint))
|
||||
if (not CheckPointOnLine(buf2, iPoint, prevPoint, nextPoint))
|
||||
{
|
||||
buf2.append(iPoint);
|
||||
prev = -1;
|
||||
}
|
||||
}
|
||||
|
@ -233,7 +289,7 @@ auto VAbstractPiece::CorrectEquidistantPoints(const QVector<T> &points, bool rem
|
|||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <class T>
|
||||
auto VAbstractPiece::RemoveDublicates(const QVector<T> &points, bool removeFirstAndLast) -> QVector<T>
|
||||
inline auto VAbstractPiece::RemoveDublicates(const QVector<T> &points, bool removeFirstAndLast) -> QVector<T>
|
||||
{
|
||||
if (points.size() < 4)
|
||||
{
|
||||
|
@ -252,9 +308,8 @@ auto VAbstractPiece::RemoveDublicates(const QVector<T> &points, bool removeFirst
|
|||
{
|
||||
for (int j = i+1; j < points.size(); ++j)
|
||||
{
|
||||
if (not VFuzzyComparePoints(points.at(i), points.at(j), accuracy))
|
||||
if (not ComparePoints(p, points.at(i), points.at(j), accuracy))
|
||||
{
|
||||
p.append(points.at(j));
|
||||
i = j-1;
|
||||
break;
|
||||
}
|
||||
|
@ -267,10 +322,7 @@ auto VAbstractPiece::RemoveDublicates(const QVector<T> &points, bool removeFirst
|
|||
{
|
||||
// Path can't be closed
|
||||
// See issue #686
|
||||
if (VFuzzyComparePoints(ConstFirst(p), ConstLast(p), accuracy))
|
||||
{
|
||||
p.removeLast();
|
||||
}
|
||||
CompareFirstAndLastPoints(p, accuracy);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -279,7 +331,163 @@ auto VAbstractPiece::RemoveDublicates(const QVector<T> &points, bool removeFirst
|
|||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <class T>
|
||||
auto VAbstractPiece::IsInsidePolygon(const QVector<T> &path, const QVector<T> &polygon, qreal accuracy) -> bool
|
||||
inline auto VAbstractPiece::ComparePoints(QVector<T> &points, const T &p1, const T &p2, qreal accuracy) -> bool
|
||||
{
|
||||
qreal testAccuracy = accuracy;
|
||||
if (p2.TurnPoint())
|
||||
{
|
||||
testAccuracy = accuracyPointOnLine;
|
||||
}
|
||||
|
||||
if (not VFuzzyComparePoints(p1, p2, testAccuracy))
|
||||
{
|
||||
points.append(p2);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (not points.isEmpty() && p2.TurnPoint())
|
||||
{
|
||||
points.last().SetTurnPoint(true);
|
||||
}
|
||||
|
||||
if (not points.isEmpty() && p2.CurvePoint())
|
||||
{
|
||||
points.last().SetCurvePoint(true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <>
|
||||
inline auto VAbstractPiece::ComparePoints(QVector<VRawSAPoint> &points, const VRawSAPoint &p1, const VRawSAPoint &p2,
|
||||
qreal accuracy) -> bool
|
||||
{
|
||||
qreal testAccuracy = accuracy;
|
||||
if ((p1.Primary() && p2.Primary()) || p2.TurnPoint())
|
||||
{
|
||||
testAccuracy = accuracyPointOnLine;
|
||||
}
|
||||
|
||||
if (not VFuzzyComparePoints(p1, p2, testAccuracy))
|
||||
{
|
||||
points.append(p2);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (not points.isEmpty() && p2.TurnPoint())
|
||||
{
|
||||
points.last().SetTurnPoint(true);
|
||||
}
|
||||
|
||||
if (not points.isEmpty() && p2.CurvePoint())
|
||||
{
|
||||
points.last().SetCurvePoint(true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <>
|
||||
inline auto VAbstractPiece::ComparePoints<QPointF>(QVector<QPointF> &points, const QPointF &p1, const QPointF &p2,
|
||||
qreal accuracy) -> bool
|
||||
{
|
||||
if (not VFuzzyComparePoints(p1, p2, accuracy))
|
||||
{
|
||||
points.append(p2);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <class T>
|
||||
inline auto VAbstractPiece::CompareFirstAndLastPoints(QVector<T> &points, qreal accuracy) -> void
|
||||
{
|
||||
if (points.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const T& first = ConstFirst(points);
|
||||
const T& last = ConstLast(points);
|
||||
|
||||
qreal testAccuracy = accuracy;
|
||||
if (last.TurnPoint())
|
||||
{
|
||||
testAccuracy = accuracyPointOnLine;
|
||||
}
|
||||
|
||||
if (VFuzzyComparePoints(first, last, testAccuracy))
|
||||
{
|
||||
points.removeLast();
|
||||
|
||||
if (last.TurnPoint())
|
||||
{
|
||||
points.last().SetTurnPoint(true);
|
||||
}
|
||||
|
||||
if (last.CurvePoint())
|
||||
{
|
||||
points.last().SetCurvePoint(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <>
|
||||
inline auto VAbstractPiece::CompareFirstAndLastPoints(QVector<VRawSAPoint> &points, qreal accuracy) -> void
|
||||
{
|
||||
if (points.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const VRawSAPoint& first = ConstFirst(points);
|
||||
const VRawSAPoint& last = ConstLast(points);
|
||||
|
||||
qreal testAccuracy = accuracy;
|
||||
if ((first.Primary() && last.Primary()) || last.TurnPoint())
|
||||
{
|
||||
testAccuracy = accuracyPointOnLine;
|
||||
}
|
||||
|
||||
if (VFuzzyComparePoints(first, last, testAccuracy))
|
||||
{
|
||||
points.removeLast();
|
||||
|
||||
if (last.TurnPoint())
|
||||
{
|
||||
points.last().SetTurnPoint(true);
|
||||
}
|
||||
|
||||
if (last.CurvePoint())
|
||||
{
|
||||
points.last().SetCurvePoint(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <>
|
||||
inline auto VAbstractPiece::CompareFirstAndLastPoints<QPointF>(QVector<QPointF> &points, qreal accuracy) -> void
|
||||
{
|
||||
if (points.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (VFuzzyComparePoints(ConstFirst(points), ConstLast(points), accuracy))
|
||||
{
|
||||
points.removeLast();
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <class T>
|
||||
inline auto VAbstractPiece::IsInsidePolygon(const QVector<T> &path, const QVector<T> &polygon, qreal accuracy) -> bool
|
||||
{
|
||||
// Edges must not intersect
|
||||
for (auto i = 0; i < path.count(); ++i)
|
||||
|
@ -340,4 +548,167 @@ auto VAbstractPiece::IsInsidePolygon(const QVector<T> &path, const QVector<T> &p
|
|||
{ return allowancePolygon.containsPoint(point, Qt::WindingFill); });
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <class T>
|
||||
inline auto VAbstractPiece::PainterPath(const QVector<T> &points) -> QPainterPath
|
||||
{
|
||||
QPainterPath path;
|
||||
path.setFillRule(Qt::WindingFill);
|
||||
|
||||
if (not points.isEmpty())
|
||||
{
|
||||
path.moveTo(points.at(0));
|
||||
for (qint32 i = 1; i < points.count(); ++i)
|
||||
{
|
||||
path.lineTo(points.at(i));
|
||||
}
|
||||
path.lineTo(points.at(0));
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief CheckLoops seek and delete loops in equidistant.
|
||||
* @param points vector of points of equidistant.
|
||||
* @return vector of points of equidistant.
|
||||
*/
|
||||
template <class T>
|
||||
inline auto VAbstractPiece::CheckLoops(QVector<T> points) -> QVector<T>
|
||||
{
|
||||
// DumpVector(points, QStringLiteral("input.json.XXXXXX")); // Uncomment for dumping test data
|
||||
|
||||
/*If we got less than 4 points no need seek loops.*/
|
||||
if (points.size() < 4)
|
||||
{
|
||||
return points;
|
||||
}
|
||||
|
||||
bool loopFound = false;
|
||||
qint32 i;
|
||||
const int maxLoops = 10000; // limit number of loops to be removed
|
||||
|
||||
for (i = 0; i < maxLoops; ++i)
|
||||
{
|
||||
points = CheckLoop(points, loopFound);
|
||||
if (not loopFound)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// DumpVector(ekvPoints, QStringLiteral("output.json.XXXXXX")); // Uncomment for dumping test data
|
||||
return points;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<class T>
|
||||
inline auto VAbstractPiece::CheckLoop(const QVector<T> &points, bool &loopFound) -> QVector<T>
|
||||
{
|
||||
loopFound = false;
|
||||
|
||||
const bool pathClosed = (ConstFirst(points) == ConstLast(points));
|
||||
|
||||
QVector<T> ekvPoints;
|
||||
ekvPoints.reserve(points.size());
|
||||
|
||||
qint32 i;
|
||||
for (i = 0; i < points.size(); ++i)
|
||||
{
|
||||
/*Last three points no need to check.*/
|
||||
/*Triangle can not contain a loop*/
|
||||
if (loopFound || i > points.size()-4)
|
||||
{
|
||||
ekvPoints.append(points.at(i));
|
||||
continue;
|
||||
}
|
||||
|
||||
enum LoopIntersectType { NoIntersection, BoundedIntersection, ParallelIntersection };
|
||||
|
||||
QPointF crosPoint;
|
||||
LoopIntersectType status = NoIntersection;
|
||||
const QLineF line1(points.at(i), points.at(i+1));
|
||||
|
||||
const int limit = pathClosed && i == 0 ? 2 : 1;
|
||||
qint32 j;
|
||||
for (j = i+2; j < points.size()-limit; ++j)
|
||||
{
|
||||
QLineF line2(points.at(j), points.at(j+1));
|
||||
|
||||
const QLineF::IntersectType intersect = Intersects(line1, line2, &crosPoint);
|
||||
if (intersect == QLineF::NoIntersection)
|
||||
{ // According to the documentation QLineF::NoIntersection indicates that the lines do not intersect;
|
||||
// i.e. they are parallel. But parallel also mean they can be on the same line.
|
||||
// Method IsLineSegmentOnLineSegment will check it.
|
||||
if (VGObject::IsLineSegmentOnLineSegment(line1, line2))
|
||||
{// Now we really sure that segments are on the same line and have real intersections.
|
||||
status = ParallelIntersection;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (intersect == QLineF::BoundedIntersection)
|
||||
{
|
||||
status = BoundedIntersection;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (status)
|
||||
{
|
||||
case ParallelIntersection:
|
||||
/*We have found a loop.*/
|
||||
ekvPoints.append(points.at(i));
|
||||
ekvPoints.append(points.at(j+1));
|
||||
i = j+1; // Skip a loop
|
||||
loopFound = true;
|
||||
break;
|
||||
case BoundedIntersection:
|
||||
ekvPoints.append(points.at(i));
|
||||
ekvPoints.append(IntersectionPoint(crosPoint, points.at(i), points.at(i+1), points.at(j), points.at(j+1)));
|
||||
i = j;
|
||||
loopFound = true;
|
||||
break;
|
||||
case NoIntersection:
|
||||
/*We have not found loop.*/
|
||||
ekvPoints.append(points.at(i));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ekvPoints;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<class T>
|
||||
inline auto VAbstractPiece::IntersectionPoint(QPointF crosPoint, const T &l1p1, const T &l1p2, const T &l2p1,
|
||||
const T &l2p2) -> T
|
||||
{
|
||||
T point(crosPoint);
|
||||
|
||||
if ((l1p1.CurvePoint() && l1p2.CurvePoint()) || (l2p1.CurvePoint() && l2p2.CurvePoint()) ||
|
||||
(l1p1.CurvePoint() && l2p2.CurvePoint()))
|
||||
{
|
||||
point.SetCurvePoint(true);
|
||||
}
|
||||
|
||||
if ((l1p1.TurnPoint() && l1p2.TurnPoint()) || (l2p1.TurnPoint() && l2p2.TurnPoint()) ||
|
||||
(l1p1.TurnPoint() && l2p2.TurnPoint()))
|
||||
{
|
||||
point.SetTurnPoint(true);
|
||||
}
|
||||
|
||||
return point;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<>
|
||||
inline auto VAbstractPiece::IntersectionPoint<QPointF>(QPointF crosPoint, const QPointF & /*unused*/,
|
||||
const QPointF & /*unused*/, const QPointF & /*unused*/,
|
||||
const QPointF & /*unused*/) -> QPointF
|
||||
{
|
||||
return crosPoint;
|
||||
}
|
||||
|
||||
#endif // VABSTRACTPIECE_H
|
||||
|
|
|
@ -15,6 +15,7 @@ HEADERS += \
|
|||
$$PWD/vcontour.h \
|
||||
$$PWD/vcontour_p.h \
|
||||
$$PWD/vbestsquare.h \
|
||||
$$PWD/vlayoutpoint.h \
|
||||
$$PWD/vposition.h \
|
||||
$$PWD/vrawlayout.h \
|
||||
$$PWD/vprintlayout.h \
|
||||
|
@ -38,6 +39,7 @@ SOURCES += \
|
|||
$$PWD/vbank.cpp \
|
||||
$$PWD/vcontour.cpp \
|
||||
$$PWD/vbestsquare.cpp \
|
||||
$$PWD/vlayoutpoint.cpp \
|
||||
$$PWD/vposition.cpp \
|
||||
$$PWD/vrawlayout.cpp \
|
||||
$$PWD/vprintlayout.cpp \
|
||||
|
|
|
@ -34,8 +34,6 @@
|
|||
#include <QPainterPath>
|
||||
#include <ciso646>
|
||||
|
||||
#include "../vmisc/typedef.h"
|
||||
|
||||
enum class LayoutExportFormats : qint8
|
||||
{
|
||||
SVG = 0,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -55,6 +55,7 @@ class VPiece;
|
|||
class VPieceLabelData;
|
||||
class VAbstractPattern;
|
||||
class VPatternLabelData;
|
||||
class VLayoutPoint;
|
||||
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_GCC("-Wsuggest-final-types")
|
||||
|
@ -67,75 +68,74 @@ public:
|
|||
VLayoutPiece();
|
||||
VLayoutPiece(const VLayoutPiece &detail);
|
||||
|
||||
virtual ~VLayoutPiece() override;
|
||||
~VLayoutPiece() override;
|
||||
|
||||
VLayoutPiece &operator=(const VLayoutPiece &detail);
|
||||
auto operator=(const VLayoutPiece &detail) -> VLayoutPiece &;
|
||||
#ifdef Q_COMPILER_RVALUE_REFS
|
||||
VLayoutPiece(VLayoutPiece &&detail) Q_DECL_NOTHROW;
|
||||
VLayoutPiece &operator=(VLayoutPiece &&detail) Q_DECL_NOTHROW;
|
||||
auto operator=(VLayoutPiece &&detail) Q_DECL_NOTHROW -> VLayoutPiece &;
|
||||
#endif
|
||||
|
||||
static VLayoutPiece Create(const VPiece &piece, vidtype id, const VContainer *pattern);
|
||||
static auto Create(const VPiece &piece, vidtype id, const VContainer *pattern) -> VLayoutPiece;
|
||||
|
||||
virtual auto GetUniqueID() const -> QString override;
|
||||
auto GetUniqueID() const -> QString override;
|
||||
|
||||
QVector<QPointF> GetMappedContourPoints() const;
|
||||
QVector<QPointF> GetContourPoints() const;
|
||||
void SetCountourPoints(const QVector<QPointF> &points, bool hideMainPath = false);
|
||||
auto GetMappedContourPoints() const -> QVector<VLayoutPoint>;
|
||||
auto GetContourPoints() const -> QVector<VLayoutPoint>;
|
||||
void SetCountourPoints(const QVector<VLayoutPoint> &points, bool hideMainPath = false);
|
||||
|
||||
QVector<QPointF> GetMappedSeamAllowancePoints() const;
|
||||
QVector<QPointF> GetSeamAllowancePoints() const;
|
||||
void SetSeamAllowancePoints(const QVector<QPointF> &points, bool seamAllowance = true,
|
||||
auto GetMappedSeamAllowancePoints() const -> QVector<VLayoutPoint>;
|
||||
auto GetSeamAllowancePoints() const -> QVector<VLayoutPoint>;
|
||||
void SetSeamAllowancePoints(const QVector<VLayoutPoint> &points, bool seamAllowance = true,
|
||||
bool seamAllowanceBuiltIn = false);
|
||||
|
||||
QVector<QPointF> GetMappedLayoutAllowancePoints() const;
|
||||
QVector<QPointF> GetLayoutAllowancePoints() const;
|
||||
auto GetMappedLayoutAllowancePoints() const -> QVector<QPointF>;
|
||||
auto GetLayoutAllowancePoints() const -> QVector<QPointF>;
|
||||
void SetLayoutAllowancePoints();
|
||||
|
||||
QVector<QPointF> GetMappedExternalContourPoints() const;
|
||||
QVector<QPointF> GetExternalContourPoints() const;
|
||||
auto GetMappedExternalContourPoints() const -> QVector<VLayoutPoint>;
|
||||
auto GetExternalContourPoints() const -> QVector<VLayoutPoint>;
|
||||
|
||||
QVector<VLayoutPassmark> GetMappedPassmarks() const;
|
||||
QVector<VLayoutPassmark> GetPassmarks() const;
|
||||
auto GetMappedPassmarks() const -> QVector<VLayoutPassmark>;
|
||||
auto GetPassmarks() const -> QVector<VLayoutPassmark>;
|
||||
void SetPassmarks(const QVector<VLayoutPassmark> &passmarks);
|
||||
|
||||
QVector<VLayoutPlaceLabel> GetMappedPlaceLabels() const;
|
||||
QVector<VLayoutPlaceLabel> GetPlaceLabels() const;
|
||||
auto GetPlaceLabels() const -> QVector<VLayoutPlaceLabel>;
|
||||
void SetPlaceLabels(const QVector<VLayoutPlaceLabel> &labels);
|
||||
|
||||
QVector<QVector<QPointF>> MappedInternalPathsForCut(bool cut) const;
|
||||
QVector<VLayoutPiecePath> GetInternalPaths() const;
|
||||
auto MappedInternalPathsForCut(bool cut) const -> QVector<QVector<VLayoutPoint> >;
|
||||
auto GetInternalPaths() const -> QVector<VLayoutPiecePath>;
|
||||
void SetInternalPaths(const QVector<VLayoutPiecePath> &internalPaths);
|
||||
|
||||
QPointF GetPieceTextPosition() const;
|
||||
QStringList GetPieceText() const;
|
||||
auto GetPieceTextPosition() const -> QPointF;
|
||||
auto GetPieceText() const -> QStringList;
|
||||
void SetPieceText(const QString &qsName, const VPieceLabelData& data, const QFont& font, const VContainer *pattern);
|
||||
|
||||
QPointF GetPatternTextPosition() const;
|
||||
QStringList GetPatternText() const;
|
||||
auto GetPatternTextPosition() const -> QPointF;
|
||||
auto GetPatternText() const -> QStringList;
|
||||
void SetPatternInfo(VAbstractPattern *pDoc, const VPatternLabelData& geom, const QFont& font,
|
||||
const VContainer *pattern);
|
||||
|
||||
void SetGrainline(const VGrainlineData& geom, const VContainer *pattern);
|
||||
QVector<QPointF> GetMappedGrainline() const;
|
||||
QVector<QPointF> GetGrainline() const;
|
||||
bool IsGrainlineEnabled() const;
|
||||
qreal GrainlineAngle() const;
|
||||
GrainlineArrowDirection GrainlineArrowType() const;
|
||||
auto GetMappedGrainline() const -> QVector<QPointF>;
|
||||
auto GetGrainline() const -> QVector<QPointF>;
|
||||
auto IsGrainlineEnabled() const -> bool;
|
||||
auto GrainlineAngle() const -> qreal;
|
||||
auto GrainlineArrowType() const -> GrainlineArrowDirection;
|
||||
|
||||
QTransform GetMatrix() const;
|
||||
void SetMatrix(const QTransform &matrix);
|
||||
auto GetMatrix() const -> QTransform;
|
||||
void SetMatrix(const QTransform &matrix);
|
||||
|
||||
qreal GetLayoutWidth() const;
|
||||
void SetLayoutWidth(qreal value);
|
||||
auto GetLayoutWidth() const -> qreal;
|
||||
void SetLayoutWidth(qreal value);
|
||||
|
||||
quint16 GetQuantity() const;
|
||||
void SetQuantity(quint16 value);
|
||||
auto GetQuantity() const -> quint16;
|
||||
void SetQuantity(quint16 value);
|
||||
|
||||
vidtype GetId() const;
|
||||
void SetId(vidtype id);
|
||||
auto GetId() const -> vidtype;
|
||||
void SetId(vidtype id);
|
||||
|
||||
bool IsMirror() const;
|
||||
auto IsMirror() const -> bool;
|
||||
void SetMirror(bool value);
|
||||
|
||||
void SetGradationId(const QString &id);
|
||||
|
@ -154,36 +154,38 @@ public:
|
|||
void Mirror(const QLineF &edge);
|
||||
void Mirror();
|
||||
|
||||
int DetailEdgesCount() const;
|
||||
int LayoutEdgesCount() const;
|
||||
auto DetailEdgesCount() const -> int;
|
||||
auto LayoutEdgesCount() const -> int;
|
||||
|
||||
QLineF LayoutEdge(int i) const;
|
||||
int LayoutEdgeByPoint(const QPointF &p1) const;
|
||||
auto LayoutEdge(int i) const -> QLineF;
|
||||
auto LayoutEdgeByPoint(const QPointF &p1) const -> int;
|
||||
|
||||
QRectF MappedDetailBoundingRect() const;
|
||||
QRectF DetailBoundingRect() const;
|
||||
QRectF MappedLayoutBoundingRect() const;
|
||||
qreal Diagonal() const;
|
||||
auto MappedDetailBoundingRect() const -> QRectF;
|
||||
auto DetailBoundingRect() const -> QRectF;
|
||||
auto MappedLayoutBoundingRect() const -> QRectF;
|
||||
auto Diagonal() const -> qreal;
|
||||
|
||||
static QRectF BoundingRect(QVector<QPointF> points);
|
||||
static auto BoundingRect(QVector<QPointF> points) -> QRectF;
|
||||
|
||||
bool isNull() const;
|
||||
qint64 Square() const;
|
||||
auto isNull() const -> bool;
|
||||
auto Square() const -> qint64;
|
||||
|
||||
QPainterPath MappedContourPath() const;
|
||||
QPainterPath ContourPath() const;
|
||||
QPainterPath MappedLayoutAllowancePath() const;
|
||||
auto MappedContourPath() const -> QPainterPath;
|
||||
auto ContourPath() const -> QPainterPath;
|
||||
auto MappedLayoutAllowancePath() const -> QPainterPath;
|
||||
|
||||
void DrawMiniature(QPainter &painter) const;
|
||||
|
||||
Q_REQUIRED_RESULT QGraphicsItem *GetItem(bool textAsPaths) const;
|
||||
Q_REQUIRED_RESULT auto GetItem(bool textAsPaths) const -> QGraphicsItem *;
|
||||
|
||||
bool IsLayoutAllowanceValid() const;
|
||||
auto IsLayoutAllowanceValid() const -> bool;
|
||||
|
||||
qreal BiggestEdge() const;
|
||||
auto BiggestEdge() const -> qreal;
|
||||
|
||||
friend QDataStream& operator<< (QDataStream& dataStream, const VLayoutPiece& piece);
|
||||
friend QDataStream& operator>> (QDataStream& dataStream, VLayoutPiece& piece);
|
||||
friend auto operator<< (QDataStream& dataStream, const VLayoutPiece& piece) -> QDataStream&;
|
||||
friend auto operator>> (QDataStream& dataStream, VLayoutPiece& piece) -> QDataStream&;
|
||||
|
||||
auto MapPlaceLabelShape(PlaceLabelImg shape) const -> PlaceLabelImg;
|
||||
|
||||
protected:
|
||||
void SetGrainlineEnabled(bool enabled);
|
||||
|
@ -206,20 +208,20 @@ protected:
|
|||
private:
|
||||
QSharedDataPointer<VLayoutPieceData> d;
|
||||
|
||||
QVector<QPointF> DetailPath() const;
|
||||
auto DetailPath() const -> QVector<VLayoutPoint>;
|
||||
|
||||
Q_REQUIRED_RESULT QGraphicsPathItem *GetMainItem() const;
|
||||
Q_REQUIRED_RESULT QGraphicsPathItem *GetMainPathItem() const;
|
||||
Q_REQUIRED_RESULT auto GetMainItem() const -> QGraphicsPathItem *;
|
||||
Q_REQUIRED_RESULT auto GetMainPathItem() const -> QGraphicsPathItem *;
|
||||
|
||||
void CreateLabelStrings(QGraphicsItem *parent, const QVector<QPointF> &labelShape, const VTextManager &tm,
|
||||
bool textAsPaths) const;
|
||||
void CreateGrainlineItem(QGraphicsItem *parent) const;
|
||||
|
||||
template <class T>
|
||||
QVector<T> Map(QVector<T> points) const;
|
||||
auto Map(QVector<T> points) const -> QVector<T>;
|
||||
|
||||
QLineF Edge(const QVector<QPointF> &path, int i) const;
|
||||
int EdgeByPoint(const QVector<QPointF> &path, const QPointF &p1) const;
|
||||
auto Edge(const QVector<QPointF> &path, int i) const -> QLineF;
|
||||
auto EdgeByPoint(const QVector<QPointF> &path, const QPointF &p1) const -> int;
|
||||
};
|
||||
|
||||
QT_WARNING_POP
|
||||
|
|
|
@ -34,9 +34,7 @@
|
|||
#include <QVector>
|
||||
#include <QTransform>
|
||||
|
||||
#include "../vpatterndb/floatItemData/vpiecelabeldata.h"
|
||||
#include "../vpatterndb/floatItemData/vpatternlabeldata.h"
|
||||
#include "../vpatterndb/floatItemData/vgrainlinedata.h"
|
||||
#include "../vpatterndb/floatItemData/floatitemdef.h"
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
||||
#include "../vmisc/diagnostic.h"
|
||||
#endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
||||
|
@ -47,6 +45,8 @@
|
|||
#include "../vgeometry/vgeometrydef.h"
|
||||
#include "vtextmanager.h"
|
||||
#include "../ifc/exception/vexception.h"
|
||||
#include "vlayoutpoint.h"
|
||||
#include "vlayoutplacelabel.h"
|
||||
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_GCC("-Weffc++")
|
||||
|
@ -55,126 +55,99 @@ QT_WARNING_DISABLE_GCC("-Wnon-virtual-dtor")
|
|||
class VLayoutPieceData : public QSharedData
|
||||
{
|
||||
public:
|
||||
VLayoutPieceData()
|
||||
{}
|
||||
|
||||
VLayoutPieceData(const VLayoutPieceData &detail)
|
||||
: QSharedData(detail),
|
||||
contour(detail.contour),
|
||||
seamAllowance(detail.seamAllowance),
|
||||
layoutAllowance(detail.layoutAllowance),
|
||||
passmarks(detail.passmarks),
|
||||
m_internalPaths(detail.m_internalPaths),
|
||||
matrix(detail.matrix),
|
||||
layoutWidth(detail.layoutWidth),
|
||||
mirror(detail.mirror),
|
||||
detailLabel(detail.detailLabel),
|
||||
patternInfo(detail.patternInfo),
|
||||
grainlinePoints(detail.grainlinePoints),
|
||||
grainlineArrowType(detail.grainlineArrowType),
|
||||
grainlineAngle(detail.grainlineAngle),
|
||||
grainlineEnabled(detail.grainlineEnabled),
|
||||
m_tmDetail(detail.m_tmDetail),
|
||||
m_tmPattern(detail.m_tmPattern),
|
||||
m_placeLabels(detail.m_placeLabels),
|
||||
m_square(detail.m_square),
|
||||
m_quantity(detail.m_quantity),
|
||||
m_id(detail.m_id),
|
||||
m_gradationId(detail.m_gradationId),
|
||||
m_xScale(detail.m_xScale),
|
||||
m_yScale(detail.m_yScale)
|
||||
{}
|
||||
VLayoutPieceData(){} // NOLINT(modernize-use-equals-default)
|
||||
|
||||
VLayoutPieceData(const VLayoutPieceData &detail) = default;
|
||||
~VLayoutPieceData() = default;
|
||||
|
||||
friend QDataStream& operator<<(QDataStream& dataStream, const VLayoutPieceData& piece);
|
||||
friend QDataStream& operator>>(QDataStream& dataStream, VLayoutPieceData& piece);
|
||||
friend auto operator<<(QDataStream& dataStream, const VLayoutPieceData& piece) -> QDataStream&;
|
||||
friend auto operator>>(QDataStream& dataStream, VLayoutPieceData& piece) -> QDataStream&;
|
||||
|
||||
/** @brief contour list of contour points. */
|
||||
QVector<QPointF> contour{};
|
||||
QVector<VLayoutPoint> m_contour{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief seamAllowance list of seam allowance points. */
|
||||
QVector<QPointF> seamAllowance{};
|
||||
QVector<VLayoutPoint> m_seamAllowance{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief layoutAllowance list of layout allowance points. */
|
||||
QVector<QPointF> layoutAllowance{};
|
||||
QVector<QPointF> m_layoutAllowance{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief passmarks list of passmakrs. */
|
||||
QVector<VLayoutPassmark> passmarks{};
|
||||
QVector<VLayoutPassmark> m_passmarks{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief m_internalPaths list of internal paths. */
|
||||
QVector<VLayoutPiecePath> m_internalPaths{};
|
||||
QVector<VLayoutPiecePath> m_internalPaths{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief matrix transformation matrix*/
|
||||
QTransform matrix{};
|
||||
QTransform m_matrix{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief layoutWidth value layout allowance width in pixels. */
|
||||
qreal layoutWidth{0};
|
||||
qreal m_layoutWidth{0}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
bool mirror{false};
|
||||
bool m_mirror{false}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief detailLabel detail label rectangle */
|
||||
QVector<QPointF> detailLabel{};
|
||||
QVector<QPointF> m_detailLabel{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief patternInfo pattern info rectangle */
|
||||
QVector<QPointF> patternInfo{};
|
||||
QVector<QPointF> m_patternInfo{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief grainlineInfo line */
|
||||
QVector<QPointF> grainlinePoints{};
|
||||
QVector<QPointF> m_grainlinePoints{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
GrainlineArrowDirection grainlineArrowType{GrainlineArrowDirection::atFront};
|
||||
qreal grainlineAngle{0};
|
||||
bool grainlineEnabled{false};
|
||||
GrainlineArrowDirection m_grainlineArrowType{GrainlineArrowDirection::atFront}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
qreal m_grainlineAngle{0}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
bool m_grainlineEnabled{false}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief m_tmDetail text manager for laying out detail info */
|
||||
VTextManager m_tmDetail{};
|
||||
VTextManager m_tmDetail{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief m_tmPattern text manager for laying out pattern info */
|
||||
VTextManager m_tmPattern{};
|
||||
VTextManager m_tmPattern{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief m_placeLabels list of place labels. */
|
||||
QVector<VLayoutPlaceLabel> m_placeLabels{};
|
||||
QVector<VLayoutPlaceLabel> m_placeLabels{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
qint64 m_square{0};
|
||||
qint64 m_square{0}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
quint16 m_quantity{1};
|
||||
quint16 m_quantity{1}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
/** @brief m_id keep id of original piece. */
|
||||
vidtype m_id;
|
||||
vidtype m_id{NULL_ID}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
QString m_gradationId{};
|
||||
QString m_gradationId{}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
qreal m_xScale{1.0};
|
||||
qreal m_yScale{1.0};
|
||||
qreal m_xScale{1.0}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
qreal m_yScale{1.0}; // NOLINT(misc-non-private-member-variables-in-classes)
|
||||
|
||||
private:
|
||||
Q_DISABLE_ASSIGN(VLayoutPieceData)
|
||||
Q_DISABLE_ASSIGN_MOVE(VLayoutPieceData) // NOLINT
|
||||
|
||||
static const quint32 streamHeader;
|
||||
static const quint16 classVersion;
|
||||
static constexpr quint32 streamHeader{0x80D7D009}; // CRC-32Q string "VLayoutPieceData"
|
||||
static constexpr quint16 classVersion{4};
|
||||
};
|
||||
|
||||
// Friend functions
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline QDataStream &operator<<(QDataStream &dataStream, const VLayoutPieceData &piece)
|
||||
inline auto operator<<(QDataStream &dataStream, const VLayoutPieceData &piece) -> QDataStream &
|
||||
{
|
||||
dataStream << VLayoutPieceData::streamHeader << VLayoutPieceData::classVersion;
|
||||
|
||||
// Added in classVersion = 1
|
||||
dataStream << piece.contour;
|
||||
dataStream << piece.seamAllowance;
|
||||
dataStream << piece.layoutAllowance;
|
||||
dataStream << piece.passmarks;
|
||||
dataStream << piece.m_contour;
|
||||
dataStream << piece.m_seamAllowance;
|
||||
dataStream << piece.m_layoutAllowance;
|
||||
dataStream << piece.m_passmarks;
|
||||
dataStream << piece.m_internalPaths;
|
||||
dataStream << piece.matrix;
|
||||
dataStream << piece.layoutWidth;
|
||||
dataStream << piece.mirror;
|
||||
dataStream << piece.detailLabel;
|
||||
dataStream << piece.patternInfo;
|
||||
dataStream << piece.grainlinePoints;
|
||||
dataStream << piece.grainlineArrowType;
|
||||
dataStream << piece.grainlineAngle;
|
||||
dataStream << piece.grainlineEnabled;
|
||||
dataStream << piece.m_matrix;
|
||||
dataStream << piece.m_layoutWidth;
|
||||
dataStream << piece.m_mirror;
|
||||
dataStream << piece.m_detailLabel;
|
||||
dataStream << piece.m_patternInfo;
|
||||
dataStream << piece.m_grainlinePoints;
|
||||
dataStream << piece.m_grainlineArrowType;
|
||||
dataStream << piece.m_grainlineAngle;
|
||||
dataStream << piece.m_grainlineEnabled;
|
||||
dataStream << piece.m_placeLabels;
|
||||
dataStream << piece.m_square;
|
||||
|
||||
|
@ -193,7 +166,7 @@ inline QDataStream &operator<<(QDataStream &dataStream, const VLayoutPieceData &
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline QDataStream &operator>>(QDataStream &dataStream, VLayoutPieceData &piece)
|
||||
inline auto operator>>(QDataStream &dataStream, VLayoutPieceData &piece) -> QDataStream &
|
||||
{
|
||||
quint32 actualStreamHeader = 0;
|
||||
dataStream >> actualStreamHeader;
|
||||
|
@ -218,20 +191,37 @@ inline QDataStream &operator>>(QDataStream &dataStream, VLayoutPieceData &piece)
|
|||
throw VException(message);
|
||||
}
|
||||
|
||||
dataStream >> piece.contour;
|
||||
dataStream >> piece.seamAllowance;
|
||||
dataStream >> piece.layoutAllowance;
|
||||
dataStream >> piece.passmarks;
|
||||
if (actualClassVersion < 4)
|
||||
{
|
||||
auto ReadPoints = [&dataStream]()
|
||||
{
|
||||
QVector<QPointF> points;
|
||||
dataStream >> points;
|
||||
QVector<VLayoutPoint> casted;
|
||||
CastTo(points, casted);
|
||||
return casted;
|
||||
};
|
||||
|
||||
piece.m_contour = ReadPoints();
|
||||
piece.m_seamAllowance = ReadPoints();
|
||||
}
|
||||
else
|
||||
{
|
||||
dataStream >> piece.m_contour;
|
||||
dataStream >> piece.m_seamAllowance;
|
||||
}
|
||||
dataStream >> piece.m_layoutAllowance;
|
||||
dataStream >> piece.m_passmarks;
|
||||
dataStream >> piece.m_internalPaths;
|
||||
dataStream >> piece.matrix;
|
||||
dataStream >> piece.layoutWidth;
|
||||
dataStream >> piece.mirror;
|
||||
dataStream >> piece.detailLabel;
|
||||
dataStream >> piece.patternInfo;
|
||||
dataStream >> piece.grainlinePoints;
|
||||
dataStream >> piece.grainlineArrowType;
|
||||
dataStream >> piece.grainlineAngle;
|
||||
dataStream >> piece.grainlineEnabled;
|
||||
dataStream >> piece.m_matrix;
|
||||
dataStream >> piece.m_layoutWidth;
|
||||
dataStream >> piece.m_mirror;
|
||||
dataStream >> piece.m_detailLabel;
|
||||
dataStream >> piece.m_patternInfo;
|
||||
dataStream >> piece.m_grainlinePoints;
|
||||
dataStream >> piece.m_grainlineArrowType;
|
||||
dataStream >> piece.m_grainlineAngle;
|
||||
dataStream >> piece.m_grainlineEnabled;
|
||||
dataStream >> piece.m_placeLabels;
|
||||
dataStream >> piece.m_square;
|
||||
|
||||
|
|
|
@ -28,13 +28,9 @@
|
|||
|
||||
#include "vlayoutpiecepath.h"
|
||||
#include "vlayoutpiecepath_p.h"
|
||||
#include "vlayoutdef.h"
|
||||
|
||||
#include <QPainterPath>
|
||||
|
||||
const quint32 VLayoutPiecePathData::streamHeader = 0xA53F0225; // CRC-32Q string "VLayoutPiecePathData"
|
||||
const quint16 VLayoutPiecePathData::classVersion = 1;
|
||||
|
||||
// Friend functions
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QDataStream &operator<<(QDataStream &dataStream, const VLayoutPiecePath &path)
|
||||
|
@ -57,7 +53,7 @@ VLayoutPiecePath::VLayoutPiecePath()
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
VLayoutPiecePath::VLayoutPiecePath(const QVector<QPointF> &points)
|
||||
VLayoutPiecePath::VLayoutPiecePath(const QVector<VLayoutPoint> &points)
|
||||
: d(new VLayoutPiecePathData(points))
|
||||
{
|
||||
}
|
||||
|
@ -104,20 +100,22 @@ QPainterPath VLayoutPiecePath::GetPainterPath() const
|
|||
QPainterPath path;
|
||||
if (not d->m_points.isEmpty())
|
||||
{
|
||||
path.addPolygon(QPolygonF(d->m_points));
|
||||
QVector<QPointF> points;
|
||||
CastTo(d->m_points, points);
|
||||
path.addPolygon(QPolygonF(points));
|
||||
path.setFillRule(Qt::WindingFill);
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<QPointF> VLayoutPiecePath::Points() const
|
||||
QVector<VLayoutPoint> VLayoutPiecePath::Points() const
|
||||
{
|
||||
return d->m_points;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VLayoutPiecePath::SetPoints(const QVector<QPointF> &points)
|
||||
void VLayoutPiecePath::SetPoints(const QVector<VLayoutPoint> &points)
|
||||
{
|
||||
d->m_points = points;
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#ifndef VLAYOUTPIECEPATH_H
|
||||
#define VLAYOUTPIECEPATH_H
|
||||
|
||||
#include "vlayoutpoint.h"
|
||||
#include <QPointF>
|
||||
#include <QSharedDataPointer>
|
||||
#include <QMetaType>
|
||||
|
@ -40,7 +41,7 @@ class VLayoutPiecePath
|
|||
{
|
||||
public:
|
||||
VLayoutPiecePath();
|
||||
explicit VLayoutPiecePath(const QVector<QPointF> &points);
|
||||
explicit VLayoutPiecePath(const QVector<VLayoutPoint> &points);
|
||||
VLayoutPiecePath(const VLayoutPiecePath &path);
|
||||
|
||||
virtual ~VLayoutPiecePath();
|
||||
|
@ -53,8 +54,8 @@ public:
|
|||
|
||||
QPainterPath GetPainterPath() const;
|
||||
|
||||
QVector<QPointF> Points() const;
|
||||
void SetPoints(const QVector<QPointF> &points);
|
||||
QVector<VLayoutPoint> Points() const;
|
||||
void SetPoints(const QVector<VLayoutPoint> &points);
|
||||
|
||||
Qt::PenStyle PenStyle() const;
|
||||
void SetPenStyle(const Qt::PenStyle &penStyle);
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
# include "../vmisc/vdatastreamenum.h"
|
||||
#endif
|
||||
#include "../ifc/exception/vexception.h"
|
||||
#include "vlayoutpoint.h"
|
||||
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_GCC("-Weffc++")
|
||||
|
@ -52,24 +53,18 @@ public:
|
|||
VLayoutPiecePathData()
|
||||
{}
|
||||
|
||||
explicit VLayoutPiecePathData(const QVector<QPointF> &points)
|
||||
explicit VLayoutPiecePathData(const QVector<VLayoutPoint> &points)
|
||||
: m_points(points)
|
||||
{}
|
||||
|
||||
VLayoutPiecePathData(const VLayoutPiecePathData &path)
|
||||
: QSharedData(path),
|
||||
m_points(path.m_points),
|
||||
m_penStyle(path.m_penStyle),
|
||||
m_cut(path.m_cut)
|
||||
{}
|
||||
|
||||
VLayoutPiecePathData(const VLayoutPiecePathData &path) = default;
|
||||
~VLayoutPiecePathData() = default;
|
||||
|
||||
friend QDataStream& operator<<(QDataStream& dataStream, const VLayoutPiecePathData& path);
|
||||
friend QDataStream& operator>>(QDataStream& dataStream, VLayoutPiecePathData& path);
|
||||
|
||||
/** @brief m_points list of path points. */
|
||||
QVector<QPointF> m_points{};
|
||||
QVector<VLayoutPoint> m_points{};
|
||||
|
||||
/** @brief m_penStyle path pen style. */
|
||||
Qt::PenStyle m_penStyle{Qt::SolidLine};
|
||||
|
@ -79,8 +74,8 @@ public:
|
|||
private:
|
||||
Q_DISABLE_ASSIGN(VLayoutPiecePathData)
|
||||
|
||||
static const quint32 streamHeader;
|
||||
static const quint16 classVersion;
|
||||
static constexpr quint32 streamHeader = 0xA53F0225; // CRC-32Q string "VLayoutPiecePathData"
|
||||
static constexpr quint16 classVersion = 2;
|
||||
};
|
||||
|
||||
QT_WARNING_POP
|
||||
|
@ -127,7 +122,16 @@ QDataStream& operator>>(QDataStream &dataStream, VLayoutPiecePathData &path)
|
|||
throw VException(message);
|
||||
}
|
||||
|
||||
dataStream >> path.m_points;
|
||||
if (actualClassVersion == 1)
|
||||
{
|
||||
QVector<QPointF> points;
|
||||
dataStream >> points;
|
||||
CastTo(points, path.m_points);
|
||||
}
|
||||
else
|
||||
{
|
||||
dataStream >> path.m_points;
|
||||
}
|
||||
dataStream >> path.m_penStyle;
|
||||
dataStream >> path.m_cut;
|
||||
|
||||
|
|
52
src/libs/vlayout/vlayoutpoint.cpp
Normal file
52
src/libs/vlayout/vlayoutpoint.cpp
Normal file
|
@ -0,0 +1,52 @@
|
|||
/************************************************************************
|
||||
**
|
||||
** @file vlayoutpoint.cpp
|
||||
** @author Roman Telezhynskyi <dismine(at)gmail.com>
|
||||
** @date 17 10, 2022
|
||||
**
|
||||
** @brief
|
||||
** @copyright
|
||||
** This source code is part of the Valentina project, a pattern making
|
||||
** program, whose allow create and modeling patterns of clothing.
|
||||
** Copyright (C) 2022 Valentina project
|
||||
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
|
||||
**
|
||||
** Valentina is free software: you can redistribute it and/or modify
|
||||
** it under the terms of the GNU General Public License as published by
|
||||
** the Free Software Foundation, either version 3 of the License, or
|
||||
** (at your option) any later version.
|
||||
**
|
||||
** Valentina is distributed in the hope that it will be useful,
|
||||
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
** GNU General Public License for more details.
|
||||
**
|
||||
** You should have received a copy of the GNU General Public License
|
||||
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
|
||||
**
|
||||
*************************************************************************/
|
||||
|
||||
#include "vlayoutpoint.h"
|
||||
|
||||
#include <QJsonObject>
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VLayoutPoint::toJson() const -> QJsonObject
|
||||
{
|
||||
QJsonObject pointObject;
|
||||
pointObject[QLatin1String("type")] = "VLayoutPoint";
|
||||
pointObject[QLatin1String("x")] = x();
|
||||
pointObject[QLatin1String("y")] = y();
|
||||
|
||||
if (m_turnPoint)
|
||||
{
|
||||
pointObject[QLatin1String("turnPoint")] = m_turnPoint;
|
||||
}
|
||||
|
||||
if (m_curvePoint)
|
||||
{
|
||||
pointObject[QLatin1String("curvePoint")] = m_curvePoint;
|
||||
}
|
||||
|
||||
return pointObject;
|
||||
}
|
146
src/libs/vlayout/vlayoutpoint.h
Normal file
146
src/libs/vlayout/vlayoutpoint.h
Normal file
|
@ -0,0 +1,146 @@
|
|||
/************************************************************************
|
||||
**
|
||||
** @file vlayoutpoint.h
|
||||
** @author Roman Telezhynskyi <dismine(at)gmail.com>
|
||||
** @date 8 10, 2022
|
||||
**
|
||||
** @brief
|
||||
** @copyright
|
||||
** This source code is part of the Valentina project, a pattern making
|
||||
** program, whose allow create and modeling patterns of clothing.
|
||||
** Copyright (C) 2022 Valentina project
|
||||
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
|
||||
**
|
||||
** Valentina is free software: you can redistribute it and/or modify
|
||||
** it under the terms of the GNU General Public License as published by
|
||||
** the Free Software Foundation, either version 3 of the License, or
|
||||
** (at your option) any later version.
|
||||
**
|
||||
** Valentina is distributed in the hope that it will be useful,
|
||||
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
** GNU General Public License for more details.
|
||||
**
|
||||
** You should have received a copy of the GNU General Public License
|
||||
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
|
||||
**
|
||||
*************************************************************************/
|
||||
#ifndef VLAYOUTPOINT_H
|
||||
#define VLAYOUTPOINT_H
|
||||
|
||||
#include <QtGlobal>
|
||||
#include <QPointF>
|
||||
#include <QMetaType>
|
||||
#include <QVector>
|
||||
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
||||
#include "../vmisc/diagnostic.h"
|
||||
#endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
||||
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_GCC("-Weffc++")
|
||||
QT_WARNING_DISABLE_GCC("-Wnon-virtual-dtor")
|
||||
QT_WARNING_DISABLE_CLANG("-Wnon-virtual-dtor")
|
||||
|
||||
class VLayoutPoint : public QPointF
|
||||
{
|
||||
public:
|
||||
Q_DECL_CONSTEXPR VLayoutPoint() = default;
|
||||
Q_DECL_CONSTEXPR VLayoutPoint(qreal xpos, qreal ypos);
|
||||
Q_DECL_CONSTEXPR explicit VLayoutPoint(QPointF p);
|
||||
|
||||
Q_DECL_CONSTEXPR auto TurnPoint() const -> bool;
|
||||
Q_DECL_CONSTEXPR auto CurvePoint() const -> bool;
|
||||
|
||||
Q_DECL_RELAXED_CONSTEXPR void SetTurnPoint(bool newTurnPoint);
|
||||
Q_DECL_RELAXED_CONSTEXPR void SetCurvePoint(bool newCurvePoint);
|
||||
|
||||
virtual auto toJson() const -> QJsonObject;
|
||||
|
||||
private:
|
||||
bool m_turnPoint{false};
|
||||
bool m_curvePoint{false};
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(VLayoutPoint) // NOLINT
|
||||
Q_DECLARE_TYPEINFO(VLayoutPoint, Q_MOVABLE_TYPE); // NOLINT
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <class T>
|
||||
inline auto CastTo(const QVector<T> &points, QVector<T> &casted) -> void
|
||||
{
|
||||
Q_UNUSED(points)
|
||||
Q_UNUSED(casted)
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
//upcast
|
||||
template <class Derived, class Base, typename std::enable_if<std::is_base_of<Base, Derived>::value>::type* = nullptr>
|
||||
inline auto CastTo(const QVector<Base> &points, QVector<Derived> &casted) -> void
|
||||
{
|
||||
casted.clear();
|
||||
casted.reserve(points.size());
|
||||
for (const auto &p : points)
|
||||
{
|
||||
casted.append(Derived(p));
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
//downcast
|
||||
template <class Base, class Derived, typename std::enable_if<std::is_base_of<Base, Derived>::value>::type* = nullptr>
|
||||
inline auto CastTo(const QVector<Derived> &points, QVector<Base> &casted) -> void
|
||||
{
|
||||
casted.clear();
|
||||
casted.reserve(points.size());
|
||||
for (const auto &p : points)
|
||||
{
|
||||
casted.append(p);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
VLayoutPoint stream functions
|
||||
*****************************************************************************/
|
||||
#ifndef QT_NO_DATASTREAM
|
||||
auto operator<<(QDataStream &, const VLayoutPoint &) -> QDataStream &;
|
||||
auto operator>>(QDataStream &, VLayoutPoint &) -> QDataStream &;
|
||||
#endif
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline VLayoutPoint::VLayoutPoint(qreal xpos, qreal ypos)
|
||||
: QPointF(xpos, ypos)
|
||||
{}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline VLayoutPoint::VLayoutPoint(QPointF p)
|
||||
: QPointF(p)
|
||||
{}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline auto VLayoutPoint::TurnPoint() const -> bool
|
||||
{
|
||||
return m_turnPoint;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_RELAXED_CONSTEXPR inline void VLayoutPoint::SetTurnPoint(bool newTurnPoint)
|
||||
{
|
||||
m_turnPoint = newTurnPoint;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline auto VLayoutPoint::CurvePoint() const -> bool
|
||||
{
|
||||
return m_curvePoint;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_RELAXED_CONSTEXPR inline void VLayoutPoint::SetCurvePoint(bool newCurvePoint)
|
||||
{
|
||||
m_curvePoint = newCurvePoint;
|
||||
}
|
||||
|
||||
QT_WARNING_POP
|
||||
|
||||
#endif // VLAYOUTPOINT_H
|
|
@ -53,6 +53,7 @@
|
|||
#include "../vmisc/def.h"
|
||||
#include "../ifc/exception/vexception.h"
|
||||
#include "../vpatterndb/floatItemData/floatitemdef.h"
|
||||
#include "../vlayout/vlayoutpoint.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
|
@ -461,8 +462,9 @@ auto VPosition::Crossing(const VLayoutPiece &detail) const -> VPosition::Crossin
|
|||
const QRectF layoutBoundingRect = VLayoutPiece::BoundingRect(layoutPoints);
|
||||
const QPainterPath layoutAllowancePath = VAbstractPiece::PainterPath(layoutPoints);
|
||||
|
||||
const QVector<QPointF> contourPoints = detail.IsSeamAllowance() && not detail.IsSeamAllowanceBuiltIn() ?
|
||||
detail.GetMappedSeamAllowancePoints() : detail.GetMappedContourPoints();
|
||||
QVector<QPointF> contourPoints;
|
||||
CastTo(detail.IsSeamAllowance() && not detail.IsSeamAllowanceBuiltIn() ?
|
||||
detail.GetMappedSeamAllowancePoints() : detail.GetMappedContourPoints(), contourPoints);
|
||||
const QRectF detailBoundingRect = VLayoutPiece::BoundingRect(contourPoints);
|
||||
const QPainterPath contourPath = VAbstractPiece::PainterPath(contourPoints);
|
||||
|
||||
|
|
|
@ -31,14 +31,13 @@
|
|||
#include <QJsonObject>
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QJsonObject VRawSAPoint::toJson() const
|
||||
auto VRawSAPoint::toJson() const -> QJsonObject
|
||||
{
|
||||
QJsonObject pointObject;
|
||||
pointObject[QLatin1String("type")] = "VRawSAPoint";
|
||||
pointObject[QLatin1String("x")] = x();
|
||||
pointObject[QLatin1String("y")] = y();
|
||||
QJsonObject pointObject = VLayoutPoint::toJson();
|
||||
|
||||
pointObject[QLatin1String("type")] = "VRawSAPoint";
|
||||
pointObject[QLatin1String("loopPoint")] = m_loopPoint;
|
||||
pointObject[QLatin1String("primary")] = m_primary;
|
||||
|
||||
return pointObject;
|
||||
}
|
||||
|
|
|
@ -28,59 +28,78 @@
|
|||
#ifndef VRAWSAPOINT_H
|
||||
#define VRAWSAPOINT_H
|
||||
|
||||
#include <QPointF>
|
||||
#include <QtGlobal>
|
||||
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
||||
#include "../vmisc/diagnostic.h"
|
||||
#endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
||||
#include "../vmisc/def.h"
|
||||
#include "vlayoutpoint.h"
|
||||
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_GCC("-Weffc++")
|
||||
QT_WARNING_DISABLE_GCC("-Wnon-virtual-dtor")
|
||||
QT_WARNING_DISABLE_CLANG("-Wnon-virtual-dtor")
|
||||
|
||||
class VRawSAPoint : public QPointF
|
||||
class VRawSAPoint : public VLayoutPoint
|
||||
{
|
||||
public:
|
||||
Q_DECL_CONSTEXPR VRawSAPoint();
|
||||
Q_DECL_CONSTEXPR VRawSAPoint() = default;
|
||||
Q_DECL_CONSTEXPR VRawSAPoint(qreal xpos, qreal ypos);
|
||||
Q_DECL_CONSTEXPR VRawSAPoint(QPointF p);
|
||||
Q_DECL_CONSTEXPR VRawSAPoint(QPointF p, bool loopPoint);
|
||||
Q_DECL_CONSTEXPR explicit VRawSAPoint(QPointF p);
|
||||
Q_DECL_CONSTEXPR explicit VRawSAPoint(const VLayoutPoint &p);
|
||||
Q_DECL_CONSTEXPR VRawSAPoint(QPointF p, bool curvePoint, bool turnPoint);
|
||||
Q_DECL_CONSTEXPR VRawSAPoint(QPointF p, bool curvePoint, bool turnPoint, bool loopPoint);
|
||||
|
||||
Q_DECL_CONSTEXPR bool LoopPoint() const;
|
||||
Q_DECL_CONSTEXPR auto LoopPoint() const -> bool;
|
||||
Q_DECL_RELAXED_CONSTEXPR void SetLoopPoint(bool loopPoint);
|
||||
|
||||
QJsonObject toJson() const;
|
||||
Q_DECL_CONSTEXPR auto Primary() const -> bool;
|
||||
Q_DECL_RELAXED_CONSTEXPR void SetPrimary(bool primary);
|
||||
|
||||
auto toJson() const -> QJsonObject override;
|
||||
|
||||
private:
|
||||
bool m_loopPoint{false};
|
||||
bool m_primary{false};
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(VRawSAPoint)
|
||||
Q_DECLARE_METATYPE(VRawSAPoint) // NOLINT
|
||||
Q_DECLARE_TYPEINFO(VRawSAPoint, Q_MOVABLE_TYPE); // NOLINT
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline VRawSAPoint::VRawSAPoint()
|
||||
{}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline VRawSAPoint::VRawSAPoint(qreal xpos, qreal ypos)
|
||||
: QPointF(xpos, ypos)
|
||||
: VLayoutPoint(xpos, ypos)
|
||||
{}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline VRawSAPoint::VRawSAPoint(QPointF p)
|
||||
: QPointF(p)
|
||||
: VLayoutPoint(p)
|
||||
{}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline VRawSAPoint::VRawSAPoint(QPointF p, bool loopPoint)
|
||||
: QPointF(p),
|
||||
Q_DECL_CONSTEXPR inline VRawSAPoint::VRawSAPoint(const VLayoutPoint &p)
|
||||
: VLayoutPoint(p)
|
||||
{}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline VRawSAPoint::VRawSAPoint(QPointF p, bool curvePoint, bool turnPoint)
|
||||
: VLayoutPoint(p)
|
||||
{
|
||||
SetCurvePoint(curvePoint);
|
||||
SetTurnPoint(turnPoint);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline VRawSAPoint::VRawSAPoint(QPointF p, bool curvePoint, bool turnPoint, bool loopPoint)
|
||||
: VLayoutPoint(p),
|
||||
m_loopPoint(loopPoint)
|
||||
{}
|
||||
{
|
||||
SetCurvePoint(curvePoint);
|
||||
SetTurnPoint(turnPoint);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline bool VRawSAPoint::LoopPoint() const
|
||||
Q_DECL_CONSTEXPR inline auto VRawSAPoint::LoopPoint() const -> bool
|
||||
{
|
||||
return m_loopPoint;
|
||||
}
|
||||
|
@ -91,6 +110,18 @@ Q_DECL_RELAXED_CONSTEXPR inline void VRawSAPoint::SetLoopPoint(bool loopPoint)
|
|||
m_loopPoint = loopPoint;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline auto VRawSAPoint::Primary() const -> bool
|
||||
{
|
||||
return m_primary;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_RELAXED_CONSTEXPR inline void VRawSAPoint::SetPrimary(bool primary)
|
||||
{
|
||||
m_primary = primary;
|
||||
}
|
||||
|
||||
QT_WARNING_POP
|
||||
|
||||
#endif // VRAWSAPOINT_H
|
||||
|
|
|
@ -36,17 +36,17 @@
|
|||
#endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
||||
#include "../vmisc/def.h"
|
||||
#include "../vgeometry/vgeometrydef.h"
|
||||
|
||||
#include <QPointF>
|
||||
#include "vlayoutpoint.h"
|
||||
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_GCC("-Weffc++")
|
||||
QT_WARNING_DISABLE_GCC("-Wnon-virtual-dtor")
|
||||
QT_WARNING_DISABLE_CLANG("-Wnon-virtual-dtor")
|
||||
|
||||
/**
|
||||
* @brief The VSAPoint class seam allowance point
|
||||
*/
|
||||
class VSAPoint : public QPointF
|
||||
class VSAPoint : public VLayoutPoint
|
||||
{
|
||||
public:
|
||||
QT_WARNING_PUSH
|
||||
|
@ -58,6 +58,7 @@ public:
|
|||
|
||||
Q_DECL_CONSTEXPR VSAPoint(qreal xpos, qreal ypos);
|
||||
Q_DECL_CONSTEXPR explicit VSAPoint(QPointF p);
|
||||
Q_DECL_CONSTEXPR explicit VSAPoint(const VLayoutPoint &p);
|
||||
|
||||
Q_DECL_CONSTEXPR auto GetSABefore() const -> qreal;
|
||||
Q_DECL_CONSTEXPR auto GetSAAfter() const -> qreal;
|
||||
|
@ -78,7 +79,7 @@ public:
|
|||
Q_DECL_RELAXED_CONSTEXPR auto MaxLocalSA(qreal width) const -> qreal;
|
||||
Q_DECL_RELAXED_CONSTEXPR auto PassmarkLength(qreal width) const -> qreal;
|
||||
|
||||
auto toJson() const -> QJsonObject;
|
||||
auto toJson() const -> QJsonObject override;
|
||||
|
||||
static constexpr qreal passmarkFactor{0.5};
|
||||
static constexpr qreal maxPassmarkLength{MmToPixel(10.)};
|
||||
|
@ -97,12 +98,17 @@ Q_DECLARE_TYPEINFO(VSAPoint, Q_MOVABLE_TYPE); // NOLINT
|
|||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline VSAPoint::VSAPoint(qreal xpos, qreal ypos)
|
||||
: QPointF(xpos, ypos)
|
||||
: VLayoutPoint(xpos, ypos)
|
||||
{}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline VSAPoint::VSAPoint(QPointF p)
|
||||
: QPointF(p)
|
||||
: VLayoutPoint(p)
|
||||
{}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Q_DECL_CONSTEXPR inline VSAPoint::VSAPoint(const VLayoutPoint &p)
|
||||
: VLayoutPoint(p)
|
||||
{}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -198,7 +198,7 @@ inline void Move(T &vector, int from, int to)
|
|||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <typename T>
|
||||
auto Reverse(const QVector<T> &container) -> QVector<T>
|
||||
inline auto Reverse(const QVector<T> &container) -> QVector<T>
|
||||
{
|
||||
if (container.isEmpty())
|
||||
{
|
||||
|
@ -216,14 +216,14 @@ auto Reverse(const QVector<T> &container) -> QVector<T>
|
|||
|
||||
template <typename T, template <typename> class C>
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto Reverse(const C<T> &container) -> C<T>
|
||||
inline auto Reverse(const C<T> &container) -> C<T>
|
||||
{
|
||||
return ConvertToList(Reverse(ConvertToVector(container)));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <typename T, typename std::enable_if<std::is_same<T, QStringList>::value, T>::type* = nullptr>
|
||||
auto Reverse(const T &container) -> T
|
||||
inline auto Reverse(const T &container) -> T
|
||||
{
|
||||
return Reverse<QString, QList>(container);
|
||||
}
|
||||
|
|
|
@ -33,7 +33,6 @@
|
|||
#include "../ifc/exception/vexceptioninvalidnotch.h"
|
||||
#include "../vgeometry/vabstractcurve.h"
|
||||
#include "../vgeometry/varc.h"
|
||||
#include "testpassmark.h"
|
||||
#include "../vlayout/vrawsapoint.h"
|
||||
|
||||
const qreal VPassmark::passmarkRadiusFactor = 0.45;
|
||||
|
@ -53,7 +52,7 @@ PassmarkStatus GetSeamPassmarkSAPoint(const VPiecePassmarkData &passmarkData, co
|
|||
if (needRollback && not seamAllowance.isEmpty())
|
||||
{
|
||||
ekvPoints.clear();
|
||||
ekvPoints += seamAllowance.at(seamAllowance.size()-2);
|
||||
ekvPoints += VRawSAPoint(seamAllowance.at(seamAllowance.size()-2));
|
||||
}
|
||||
|
||||
if (ekvPoints.isEmpty())
|
||||
|
@ -689,7 +688,7 @@ QVector<QLineF> VPassmark::FullPassmark(const VPiece &piece, const VContainer *d
|
|||
{
|
||||
if (m_null)
|
||||
{
|
||||
return QVector<QLineF>();
|
||||
return {};
|
||||
}
|
||||
|
||||
if (not piece.IsSeamAllowanceBuiltIn())
|
||||
|
@ -720,16 +719,18 @@ QVector<QLineF> VPassmark::SAPassmark(const VPiece &piece, const VContainer *dat
|
|||
{
|
||||
if (m_null)
|
||||
{
|
||||
return QVector<QLineF>();
|
||||
return {};
|
||||
}
|
||||
|
||||
if (not piece.IsSeamAllowanceBuiltIn())
|
||||
{
|
||||
// Because rollback cannot be calulated if passmark is not first point in main path we rotate it.
|
||||
return SAPassmark(piece.SeamAllowancePointsWithRotation(data, m_data.passmarkIndex), side);
|
||||
QVector<QPointF> points;
|
||||
CastTo(piece.SeamAllowancePointsWithRotation(data, m_data.passmarkIndex), points);
|
||||
return SAPassmark(points, side);
|
||||
}
|
||||
|
||||
return QVector<QLineF>();
|
||||
return {};
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -737,7 +738,7 @@ QVector<QLineF> VPassmark::SAPassmark(const QVector<QPointF> &seamAllowance, Pas
|
|||
{
|
||||
if (m_null)
|
||||
{
|
||||
return QVector<QLineF>();
|
||||
return {};
|
||||
}
|
||||
|
||||
// Because rollback @seamAllowance must be rotated here.
|
||||
|
@ -801,8 +802,9 @@ QVector<QLineF> VPassmark::BuiltInSAPassmark(const VPiece &piece, const VContain
|
|||
return QVector<QLineF>();
|
||||
}
|
||||
|
||||
return CreatePassmarkLines(m_data.passmarkLineType, m_data.passmarkAngleType, lines, piece.MainPathPoints(data),
|
||||
PassmarkSide::All);
|
||||
QVector<QPointF> points;
|
||||
CastTo(piece.MainPathPoints(data), points);
|
||||
return CreatePassmarkLines(m_data.passmarkLineType, m_data.passmarkAngleType, lines, points, PassmarkSide::All);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -854,7 +856,7 @@ QVector<QLineF> VPassmark::BuiltInSAPassmarkBaseLine(const VPiece &piece) const
|
|||
edge1.setAngle(edge1.angle() + edge1.angleTo(edge2)/2.);
|
||||
edge1.setLength(length);
|
||||
|
||||
return QVector<QLineF>({edge1});
|
||||
return {edge1};
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -862,16 +864,18 @@ QVector<QLineF> VPassmark::SAPassmarkBaseLine(const VPiece &piece, const VContai
|
|||
{
|
||||
if (m_null)
|
||||
{
|
||||
return QVector<QLineF>();
|
||||
return {};
|
||||
}
|
||||
|
||||
if (not piece.IsSeamAllowanceBuiltIn())
|
||||
{
|
||||
// Because rollback cannot be calulated if passmark is not first point in main path we rotate it.
|
||||
return SAPassmarkBaseLine(piece.SeamAllowancePointsWithRotation(data, m_data.passmarkIndex), side);
|
||||
QVector<QPointF> points;
|
||||
CastTo(piece.SeamAllowancePointsWithRotation(data, m_data.passmarkIndex), points);
|
||||
return SAPassmarkBaseLine(points, side);
|
||||
}
|
||||
|
||||
return QVector<QLineF>();
|
||||
return {};
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -879,7 +883,7 @@ QVector<QLineF> VPassmark::SAPassmarkBaseLine(const QVector<QPointF> &seamAllowa
|
|||
{
|
||||
if (m_null)
|
||||
{
|
||||
return QVector<QLineF>();
|
||||
return {};
|
||||
}
|
||||
|
||||
if (seamAllowance.size() < 2)
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include "../vgeometry/vpointf.h"
|
||||
#include "../vgeometry/vabstractcurve.h"
|
||||
#include "../vgeometry/vplacelabelitem.h"
|
||||
#include "../vgeometry/varc.h"
|
||||
#include "../vgeometry/vlayoutplacelabel.h"
|
||||
#include "vcontainer.h"
|
||||
#include "../vmisc/vabstractvalapplication.h"
|
||||
#include "../vmisc/compatibility.h"
|
||||
|
@ -171,14 +171,14 @@ void VPiece::SetPath(const VPiecePath &path)
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<QPointF> VPiece::MainPathPoints(const VContainer *data) const
|
||||
QVector<VLayoutPoint> VPiece::MainPathPoints(const VContainer *data) const
|
||||
{
|
||||
// DumpPiece(*this, data, QStringLiteral("input.json.XXXXXX")); // Uncomment for dumping test data
|
||||
|
||||
VPiecePath mainPath = GetPath();
|
||||
mainPath.SetName(tr("Main path of piece %1").arg(GetName()));
|
||||
|
||||
QVector<QPointF> points = mainPath.PathPoints(data);
|
||||
QVector<VLayoutPoint> points = mainPath.PathPoints(data);
|
||||
points = CheckLoops(CorrectEquidistantPoints(points));//A path can contains loops
|
||||
|
||||
// DumpVector(points, QStringLiteral("output.json.XXXXXX")); // Uncomment for dumping test data
|
||||
|
@ -186,9 +186,9 @@ QVector<QPointF> VPiece::MainPathPoints(const VContainer *data) const
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<QPointF> VPiece::UniteMainPathPoints(const VContainer *data) const
|
||||
QVector<VLayoutPoint> VPiece::UniteMainPathPoints(const VContainer *data) const
|
||||
{
|
||||
QVector<QPointF> points = VPiecePath::NodesToPoints(data, GetUnitedPath(data), GetName());
|
||||
QVector<VLayoutPoint> points = VPiecePath::NodesToPoints(data, GetUnitedPath(data), GetName());
|
||||
points = CheckLoops(CorrectEquidistantPoints(points));//A path can contains loops
|
||||
return points;
|
||||
}
|
||||
|
@ -200,7 +200,7 @@ QVector<VPointF> VPiece::MainPathNodePoints(const VContainer *data, bool showExc
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<QPointF> VPiece::SeamAllowancePoints(const VContainer *data) const
|
||||
QVector<VLayoutPoint> VPiece::SeamAllowancePoints(const VContainer *data) const
|
||||
{
|
||||
return SeamAllowancePointsWithRotation(data, -1);
|
||||
}
|
||||
|
@ -208,14 +208,15 @@ QVector<QPointF> VPiece::SeamAllowancePoints(const VContainer *data) const
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<QPointF> VPiece::CuttingPathPoints(const VContainer *data) const
|
||||
{
|
||||
if (IsSeamAllowance() and not IsSeamAllowanceBuiltIn())
|
||||
QVector<QPointF> points;
|
||||
if (IsSeamAllowance() && not IsSeamAllowanceBuiltIn())
|
||||
{
|
||||
return SeamAllowancePoints(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
return MainPathPoints(data);
|
||||
CastTo(SeamAllowancePoints(data), points);
|
||||
return points;
|
||||
}
|
||||
|
||||
CastTo(MainPathPoints(data), points);
|
||||
return points;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -271,7 +272,9 @@ QVector<QPainterPath> VPiece::CurvesPainterPath(const VContainer *data) const
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QPainterPath VPiece::MainPathPath(const VContainer *data) const
|
||||
{
|
||||
return VPiece::MainPathPath(MainPathPoints(data));
|
||||
QVector<QPointF> points;
|
||||
CastTo(MainPathPoints(data), points);
|
||||
return VPiece::MainPathPath(points);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -299,42 +302,6 @@ QPainterPath VPiece::SeamAllowancePath(const VContainer *data) const
|
|||
return SeamAllowancePath(SeamAllowancePoints(data));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QPainterPath VPiece::SeamAllowancePath(const QVector<QPointF> &points) const
|
||||
{
|
||||
QPainterPath ekv;
|
||||
|
||||
// seam allowence
|
||||
if (IsSeamAllowance() && not IsSeamAllowanceBuiltIn())
|
||||
{
|
||||
if (not points.isEmpty())
|
||||
{
|
||||
ekv.moveTo(points.at(0));
|
||||
for (qint32 i = 1; i < points.count(); ++i)
|
||||
{
|
||||
ekv.lineTo(points.at(i));
|
||||
}
|
||||
|
||||
#if !defined(V_NO_ASSERT)
|
||||
// uncomment for debug
|
||||
// QFont font;
|
||||
// font.setPixelSize(1);
|
||||
// for (qint32 i = 0; i < points.count(); ++i)
|
||||
// {
|
||||
// ekv.addEllipse(points.at(i).x()-accuracyPointOnLine, points.at(i).y()-accuracyPointOnLine,
|
||||
// accuracyPointOnLine*2., accuracyPointOnLine*2.);
|
||||
// ekv.addText(points.at(i).x()-accuracyPointOnLine, points.at(i).y()-accuracyPointOnLine, font,
|
||||
// QString::number(i+1));
|
||||
// }
|
||||
#endif
|
||||
|
||||
ekv.setFillRule(Qt::WindingFill);
|
||||
}
|
||||
}
|
||||
|
||||
return ekv;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QPainterPath VPiece::PassmarksPath(const VContainer *data) const
|
||||
{
|
||||
|
@ -370,7 +337,7 @@ QPainterPath VPiece::PlaceLabelPath(const VContainer *data) const
|
|||
const auto label = data->GeometricObject<VPlaceLabelItem>(placeLabel);
|
||||
if (label->IsVisible())
|
||||
{
|
||||
path.addPath(label->LabelShapePath());
|
||||
path.addPath(LabelShapePath(VLayoutPlaceLabel(*label)));
|
||||
}
|
||||
}
|
||||
catch (const VExceptionBadId &e)
|
||||
|
@ -387,12 +354,16 @@ bool VPiece::IsSeamAllowanceValid(const VContainer *data) const
|
|||
{
|
||||
if (IsSeamAllowance() && not IsSeamAllowanceBuiltIn())
|
||||
{
|
||||
return VAbstractPiece::IsAllowanceValid(UniteMainPathPoints(data), SeamAllowancePoints(data));
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
QVector<QPointF> mainPathPoints;
|
||||
CastTo<QPointF>(UniteMainPathPoints(data), mainPathPoints);
|
||||
|
||||
QVector<QPointF> seamAllowancePoints;
|
||||
CastTo<QPointF>(SeamAllowancePoints(data), seamAllowancePoints);
|
||||
|
||||
return VAbstractPiece::IsAllowanceValid(mainPathPoints, seamAllowancePoints);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -662,13 +633,13 @@ const VGrainlineData &VPiece::GetGrainlineGeometry() const
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<QPointF> VPiece::SeamAllowancePointsWithRotation(const VContainer *data, int makeFirst) const
|
||||
QVector<VLayoutPoint> VPiece::SeamAllowancePointsWithRotation(const VContainer *data, int makeFirst) const
|
||||
{
|
||||
SCASSERT(data != nullptr);
|
||||
|
||||
if (not IsSeamAllowance() || IsSeamAllowanceBuiltIn())
|
||||
{
|
||||
return QVector<QPointF>();
|
||||
return {};
|
||||
}
|
||||
|
||||
const QVector<CustomSARecord> records = FilterRecords(GetValidRecords());
|
||||
|
|
|
@ -33,7 +33,6 @@
|
|||
#include <QSharedDataPointer>
|
||||
|
||||
#include "../vlayout/vabstractpiece.h"
|
||||
#include "../vgeometry/vgeometrydef.h"
|
||||
|
||||
class VPieceData;
|
||||
class VPieceNode;
|
||||
|
@ -65,10 +64,10 @@ public:
|
|||
VPiecePath &GetPath();
|
||||
void SetPath(const VPiecePath &path);
|
||||
|
||||
QVector<QPointF> MainPathPoints(const VContainer *data) const;
|
||||
QVector<QPointF> UniteMainPathPoints(const VContainer *data) const;
|
||||
QVector<VLayoutPoint> MainPathPoints(const VContainer *data) const;
|
||||
QVector<VLayoutPoint> UniteMainPathPoints(const VContainer *data) const;
|
||||
QVector<VPointF> MainPathNodePoints(const VContainer *data, bool showExcluded = false) const;
|
||||
QVector<QPointF> SeamAllowancePoints(const VContainer *data) const;
|
||||
QVector<VLayoutPoint> SeamAllowancePoints(const VContainer *data) const;
|
||||
QVector<QPointF> CuttingPathPoints(const VContainer *data) const;
|
||||
QVector<QLineF> PassmarksLines(const VContainer *data) const;
|
||||
|
||||
|
@ -80,7 +79,8 @@ public:
|
|||
static QPainterPath MainPathPath(const QVector<QPointF> &points);
|
||||
|
||||
QPainterPath SeamAllowancePath(const VContainer *data) const;
|
||||
QPainterPath SeamAllowancePath(const QVector<QPointF> &points) const;
|
||||
template <class T>
|
||||
QPainterPath SeamAllowancePath(const QVector<T> &points) const;
|
||||
QPainterPath PassmarksPath(const VContainer *data) const;
|
||||
QPainterPath PlaceLabelPath(const VContainer *data) const;
|
||||
|
||||
|
@ -132,7 +132,7 @@ public:
|
|||
|
||||
QVector<VPieceNode> GetUnitedPath(const VContainer *data) const;
|
||||
|
||||
QVector<QPointF> SeamAllowancePointsWithRotation(const VContainer *data, int makeFirst) const;
|
||||
QVector<VLayoutPoint> SeamAllowancePointsWithRotation(const VContainer *data, int makeFirst) const;
|
||||
|
||||
void SetGradationLabel(const QString &label);
|
||||
auto GetGradationLabel() const -> QString;
|
||||
|
@ -167,4 +167,41 @@ private:
|
|||
|
||||
Q_DECLARE_TYPEINFO(VPiece, Q_MOVABLE_TYPE); // NOLINT
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <class T>
|
||||
inline QPainterPath VPiece::SeamAllowancePath(const QVector<T> &points) const
|
||||
{
|
||||
QPainterPath ekv;
|
||||
|
||||
// seam allowence
|
||||
if (IsSeamAllowance() && not IsSeamAllowanceBuiltIn())
|
||||
{
|
||||
if (not points.isEmpty())
|
||||
{
|
||||
ekv.moveTo(points.at(0));
|
||||
for (qint32 i = 1; i < points.count(); ++i)
|
||||
{
|
||||
ekv.lineTo(points.at(i));
|
||||
}
|
||||
|
||||
#if !defined(V_NO_ASSERT)
|
||||
// uncomment for debug
|
||||
// QFont font;
|
||||
// font.setPixelSize(1);
|
||||
// for (qint32 i = 0; i < points.count(); ++i)
|
||||
// {
|
||||
// ekv.addEllipse(points.at(i).x()-accuracyPointOnLine, points.at(i).y()-accuracyPointOnLine,
|
||||
// accuracyPointOnLine*2., accuracyPointOnLine*2.);
|
||||
// ekv.addText(points.at(i).x()-accuracyPointOnLine, points.at(i).y()-accuracyPointOnLine, font,
|
||||
// QString::number(i+1));
|
||||
// }
|
||||
#endif
|
||||
|
||||
ekv.setFillRule(Qt::WindingFill);
|
||||
}
|
||||
}
|
||||
|
||||
return ekv;
|
||||
}
|
||||
|
||||
#endif // VPIECE_H
|
||||
|
|
|
@ -36,9 +36,6 @@
|
|||
#include <QDataStream>
|
||||
#include <QtNumeric>
|
||||
|
||||
const quint32 VPieceNodeData::streamHeader = 0x2198CBC8; // CRC-32Q string "VPieceNodeData"
|
||||
const quint16 VPieceNodeData::classVersion = 1;
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
VPieceNode::VPieceNode()
|
||||
: d(new VPieceNodeData)
|
||||
|
@ -454,6 +451,18 @@ void VPieceNode::SetManualPassmarkLength(bool value)
|
|||
d->m_manualPassmarkLength = value;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
bool VPieceNode::IsTurnPoint() const
|
||||
{
|
||||
return d->m_typeTool == Tool::NodePoint ? d->m_turnPoint : false;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VPieceNode::SetTurnPoint(bool value)
|
||||
{
|
||||
d->m_turnPoint = value;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
bool VPieceNode::IsExcluded() const
|
||||
{
|
||||
|
|
|
@ -108,6 +108,9 @@ public:
|
|||
|
||||
bool IsManualPassmarkLength() const;
|
||||
void SetManualPassmarkLength(bool value);
|
||||
|
||||
bool IsTurnPoint() const;
|
||||
void SetTurnPoint(bool value);
|
||||
private:
|
||||
QSharedDataPointer<VPieceNodeData> d;
|
||||
};
|
||||
|
|
|
@ -63,24 +63,7 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
VPieceNodeData (const VPieceNodeData& node)
|
||||
: QSharedData(node),
|
||||
m_id(node.m_id),
|
||||
m_typeTool(node.m_typeTool),
|
||||
m_reverse(node.m_reverse),
|
||||
m_excluded(node.m_excluded),
|
||||
m_isPassmark(node.m_isPassmark),
|
||||
m_isMainPathNode(node.m_isMainPathNode),
|
||||
m_formulaWidthBefore(node.m_formulaWidthBefore),
|
||||
m_formulaWidthAfter(node.m_formulaWidthAfter),
|
||||
m_formulaPassmarkLength(node.m_formulaPassmarkLength),
|
||||
m_angleType(node.m_angleType),
|
||||
m_passmarkLineType(node.m_passmarkLineType),
|
||||
m_passmarkAngleType(node.m_passmarkAngleType),
|
||||
m_isShowSecondPassmark(node.m_isShowSecondPassmark),
|
||||
m_checkUniqueness(node.m_checkUniqueness),
|
||||
m_manualPassmarkLength(node.m_manualPassmarkLength)
|
||||
{}
|
||||
VPieceNodeData (const VPieceNodeData& node) = default;
|
||||
|
||||
~VPieceNodeData() = default;
|
||||
|
||||
|
@ -124,11 +107,13 @@ public:
|
|||
|
||||
bool m_manualPassmarkLength{false};
|
||||
|
||||
bool m_turnPoint{true};
|
||||
|
||||
private:
|
||||
Q_DISABLE_ASSIGN(VPieceNodeData)
|
||||
|
||||
static const quint32 streamHeader;
|
||||
static const quint16 classVersion;
|
||||
static constexpr quint32 streamHeader = 0x2198CBC8; // CRC-32Q string "VPieceNodeData"
|
||||
static constexpr quint16 classVersion = 2;
|
||||
};
|
||||
|
||||
// Friend functions
|
||||
|
@ -155,6 +140,8 @@ QDataStream &operator<<(QDataStream &out, const VPieceNodeData &p)
|
|||
|
||||
// Added in classVersion = 2
|
||||
|
||||
out << p.m_turnPoint;
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
|
@ -199,10 +186,10 @@ QDataStream &operator>>(QDataStream &in, VPieceNodeData &p)
|
|||
>> p.m_checkUniqueness
|
||||
>> p.m_manualPassmarkLength;
|
||||
|
||||
// if (actualClassVersion >= 2)
|
||||
// {
|
||||
|
||||
// }
|
||||
if (actualClassVersion >= 2)
|
||||
{
|
||||
in >> p.m_turnPoint;
|
||||
}
|
||||
|
||||
return in;
|
||||
}
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
#include "vpiecepath_p.h"
|
||||
#include "vcontainer.h"
|
||||
#include "../vgeometry/vpointf.h"
|
||||
#include "../vlayout/vabstractpiece.h"
|
||||
#include "calculator.h"
|
||||
#include "../vmisc/vabstractvalapplication.h"
|
||||
#include "../vmisc/compatibility.h"
|
||||
|
@ -54,6 +53,7 @@ VSAPoint CurvePoint(VSAPoint candidate, const VContainer *data, const VPieceNode
|
|||
candidate.SetSAAfter(node.GetSAAfter(data, *data->GetPatternUnit()));
|
||||
candidate.SetSABefore(node.GetSABefore(data, *data->GetPatternUnit()));
|
||||
candidate.SetAngleType(node.GetAngleType());
|
||||
candidate.SetTurnPoint(node.IsTurnPoint());
|
||||
}
|
||||
}
|
||||
return candidate;
|
||||
|
@ -92,6 +92,7 @@ VSAPoint CurveStartPoint(VSAPoint candidate, const VContainer *data, const VPiec
|
|||
}
|
||||
|
||||
candidate = VSAPoint(p);
|
||||
candidate.SetTurnPoint(true);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -131,6 +132,7 @@ VSAPoint CurveEndPoint(VSAPoint candidate, const VContainer *data, const VPieceN
|
|||
}
|
||||
|
||||
candidate = VSAPoint(p);
|
||||
candidate.SetTurnPoint(true);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -172,14 +174,15 @@ QPainterPath MakePainterPath(const QVector<QPointF> &points)
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
qreal FindTipDirection(const QVector<QPointF> &points)
|
||||
template <class T>
|
||||
qreal FindTipDirection(const QVector<T> &points)
|
||||
{
|
||||
if (points.size() <= 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const QPointF &first = ConstFirst(points);
|
||||
const T &first = ConstFirst(points);
|
||||
|
||||
for(int i = 1; i < points.size(); ++i)
|
||||
{
|
||||
|
@ -195,8 +198,8 @@ qreal FindTipDirection(const QVector<QPointF> &points)
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
bool IntersectionWithCuttingCountour(const QVector<QPointF> &cuttingPath, const QVector<QPointF> &points,
|
||||
QPointF *firstConnection)
|
||||
bool IntersectionWithCuttingCountour(const QVector<QPointF> &cuttingPath, const QVector<VLayoutPoint> &points,
|
||||
QPointF *connection)
|
||||
{
|
||||
if (points.size() <= 1)
|
||||
{
|
||||
|
@ -207,12 +210,35 @@ bool IntersectionWithCuttingCountour(const QVector<QPointF> &cuttingPath, const
|
|||
|
||||
if (VAbstractCurve::IsPointOnCurve(cuttingPath, first))
|
||||
{ // Point is already part of a cutting countour
|
||||
*firstConnection = first;
|
||||
*connection = first;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return VAbstractCurve::CurveIntersectAxis(first, FindTipDirection(points), cuttingPath, firstConnection);
|
||||
return VAbstractCurve::CurveIntersectAxis(first, FindTipDirection(points), cuttingPath, connection);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <class T>
|
||||
void AppendCurveSegment(QVector<T> &points, QVector<QPointF> &segment, const VSAPoint &begin, const VSAPoint &end)
|
||||
{
|
||||
points.reserve(points.size() + segment.size());
|
||||
|
||||
for(int i=0; i < segment.size(); ++i)
|
||||
{
|
||||
VLayoutPoint lp(segment.at(i));
|
||||
if (i == 0)
|
||||
{
|
||||
lp.SetTurnPoint(VFuzzyComparePoints(lp, begin) ? begin.TurnPoint() : true);
|
||||
}
|
||||
else if (i == segment.size() - 1)
|
||||
{
|
||||
lp.SetTurnPoint(VFuzzyComparePoints(lp, end) ? end.TurnPoint() : true);
|
||||
}
|
||||
|
||||
lp.SetCurvePoint(true);
|
||||
points.append(lp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -388,19 +414,20 @@ bool VPiecePath::IsLastToCuttingCountour() const
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<QPointF> VPiecePath::PathPoints(const VContainer *data, const QVector<QPointF> &cuttingPath) const
|
||||
QVector<VLayoutPoint> VPiecePath::PathPoints(const VContainer *data, const QVector<QPointF> &cuttingPath) const
|
||||
{
|
||||
QVector<QPointF> points = NodesToPoints(data, d->m_nodes, GetName());
|
||||
QVector<VLayoutPoint> points = NodesToPoints(data, d->m_nodes, GetName());
|
||||
|
||||
if (GetType() == PiecePathType::InternalPath && not cuttingPath.isEmpty() && points.size() > 1)
|
||||
{
|
||||
QVector<QPointF> extended = points;
|
||||
QVector<VLayoutPoint> extended = points;
|
||||
|
||||
if (IsFirstToCuttingCountour())
|
||||
{
|
||||
QPointF firstConnection;
|
||||
VLayoutPoint firstConnection;
|
||||
if (IntersectionWithCuttingCountour(cuttingPath, points, &firstConnection))
|
||||
{
|
||||
firstConnection.SetTurnPoint(true);
|
||||
extended.prepend(firstConnection);
|
||||
}
|
||||
else
|
||||
|
@ -415,9 +442,10 @@ QVector<QPointF> VPiecePath::PathPoints(const VContainer *data, const QVector<QP
|
|||
|
||||
if (IsLastToCuttingCountour())
|
||||
{
|
||||
QPointF lastConnection;
|
||||
VLayoutPoint lastConnection;
|
||||
if (IntersectionWithCuttingCountour(cuttingPath, Reverse(points), &lastConnection))
|
||||
{
|
||||
lastConnection.SetTurnPoint(true);
|
||||
extended.append(lastConnection);
|
||||
}
|
||||
else
|
||||
|
@ -542,7 +570,10 @@ QVector<VSAPoint> VPiecePath::SeamAllowancePoints(const VContainer *data, qreal
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QPainterPath VPiecePath::PainterPath(const VContainer *data, const QVector<QPointF> &cuttingPath) const
|
||||
{
|
||||
return MakePainterPath(PathPoints(data, cuttingPath));
|
||||
QVector<VLayoutPoint> points = PathPoints(data, cuttingPath);
|
||||
QVector<QPointF> casted;
|
||||
CastTo(points, casted);
|
||||
return MakePainterPath(casted);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -552,7 +583,7 @@ QVector<QPainterPath> VPiecePath::CurvesPainterPath(const VContainer *data) cons
|
|||
QVector<QPainterPath> paths;
|
||||
paths.reserve(curves.size());
|
||||
|
||||
for(auto &curve : curves)
|
||||
for(const auto &curve : curves)
|
||||
{
|
||||
paths.append(MakePainterPath(curve));
|
||||
}
|
||||
|
@ -1104,6 +1135,7 @@ VSAPoint VPiecePath::PreparePointEkv(const VPieceNode &node, const VContainer *d
|
|||
const QSharedPointer<VPointF> point = data->GeometricObject<VPointF>(node.GetId());
|
||||
VSAPoint p(point->toQPointF());
|
||||
|
||||
p.SetTurnPoint(node.IsTurnPoint());
|
||||
p.SetSAAfter(node.GetSAAfter(data, *data->GetPatternUnit()));
|
||||
p.SetSABefore(node.GetSABefore(data, *data->GetPatternUnit()));
|
||||
p.SetAngleType(node.GetAngleType());
|
||||
|
@ -1138,18 +1170,23 @@ QVector<VSAPoint> VPiecePath::CurveSeamAllowanceSegment(const VContainer *data,
|
|||
{
|
||||
VSAPoint p(points.at(i));
|
||||
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||
p.SetCurvePoint(true);
|
||||
|
||||
if (i == 0)
|
||||
{ // first point
|
||||
p.SetSAAfter(begin.GetSAAfter());
|
||||
p.SetSABefore(begin.GetSABefore());
|
||||
p.SetAngleType(begin.GetAngleType());
|
||||
p.SetTurnPoint(VFuzzyComparePoints(p, begin) ? begin.TurnPoint() : true);
|
||||
}
|
||||
else if (i == points.size() - 1)
|
||||
{ // last point
|
||||
p.SetSAAfter(end.GetSAAfter());
|
||||
p.SetSABefore(end.GetSABefore());
|
||||
p.SetAngleType(end.GetAngleType());
|
||||
p.SetTurnPoint(VFuzzyComparePoints(p, end) ? end.TurnPoint() : true);
|
||||
}
|
||||
|
||||
pointsEkv.append(p);
|
||||
}
|
||||
}
|
||||
|
@ -1165,13 +1202,15 @@ QVector<VSAPoint> VPiecePath::CurveSeamAllowanceSegment(const VContainer *data,
|
|||
w2 = width;
|
||||
}
|
||||
|
||||
const qreal wDiff = w2 - w1;// Difference between to local widths
|
||||
const qreal wDiff = w2 - w1;// Difference between two local widths
|
||||
const qreal fullLength = VAbstractCurve::PathLength(points);
|
||||
|
||||
VSAPoint p(points.at(0));//First point in the list
|
||||
p.SetSAAfter(begin.GetSAAfter());
|
||||
p.SetSABefore(begin.GetSABefore());
|
||||
p.SetAngleType(begin.GetAngleType());
|
||||
p.SetCurvePoint(true);
|
||||
p.SetTurnPoint(VFuzzyComparePoints(p, begin) ? begin.TurnPoint() : true);
|
||||
pointsEkv.append(p);
|
||||
|
||||
qreal length = 0; // how much we handle
|
||||
|
@ -1179,12 +1218,14 @@ QVector<VSAPoint> VPiecePath::CurveSeamAllowanceSegment(const VContainer *data,
|
|||
for(int i = 1; i < points.size(); ++i)
|
||||
{
|
||||
p = VSAPoint(points.at(i));
|
||||
p.SetCurvePoint(true);
|
||||
|
||||
if (i == points.size() - 1)
|
||||
{// last point
|
||||
p.SetSAAfter(end.GetSAAfter());
|
||||
p.SetSABefore(end.GetSABefore());
|
||||
p.SetAngleType(end.GetAngleType());
|
||||
p.SetTurnPoint(VFuzzyComparePoints(p, end) ? end.TurnPoint() : true);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1220,14 +1261,14 @@ QString VPiecePath::NodeName(const QVector<VPieceNode> &nodes, int nodeIndex, co
|
|||
{
|
||||
// ignore
|
||||
}
|
||||
return QString();
|
||||
return {};
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<QPointF> VPiecePath::NodesToPoints(const VContainer *data, const QVector<VPieceNode> &nodes,
|
||||
const QString &piece)
|
||||
QVector<VLayoutPoint> VPiecePath::NodesToPoints(const VContainer *data, const QVector<VPieceNode> &nodes,
|
||||
const QString &piece)
|
||||
{
|
||||
QVector<QPointF> points;
|
||||
QVector<VLayoutPoint> points;
|
||||
for (int i = 0; i < nodes.size(); ++i)
|
||||
{
|
||||
const VPieceNode &node = nodes.at(i);
|
||||
|
@ -1241,7 +1282,9 @@ QVector<QPointF> VPiecePath::NodesToPoints(const VContainer *data, const QVector
|
|||
case (Tool::NodePoint):
|
||||
{
|
||||
const QSharedPointer<VPointF> point = data->GeometricObject<VPointF>(node.GetId());
|
||||
points.append(static_cast<QPointF>(*point));
|
||||
VLayoutPoint layoutPoint(point->toQPointF());
|
||||
layoutPoint.SetTurnPoint(node.IsTurnPoint());
|
||||
points.append(layoutPoint);
|
||||
}
|
||||
break;
|
||||
case (Tool::NodeArc):
|
||||
|
@ -1251,11 +1294,11 @@ QVector<QPointF> VPiecePath::NodesToPoints(const VContainer *data, const QVector
|
|||
{
|
||||
const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(node.GetId());
|
||||
|
||||
const VSAPoint begin = StartSegment(data, nodes, i);
|
||||
const VSAPoint end = EndSegment(data, nodes, i);
|
||||
|
||||
const QPointF begin = StartSegment(data, nodes, i);
|
||||
const QPointF end = EndSegment(data, nodes, i);
|
||||
|
||||
points << curve->GetSegmentPoints(begin, end, node.GetReverse(), piece);
|
||||
QVector<QPointF> segment = curve->GetSegmentPoints(begin, end, node.GetReverse(), piece);
|
||||
AppendCurveSegment(points, segment, begin, end);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -42,6 +42,7 @@ class QPainterPath;
|
|||
class VPointF;
|
||||
class VPieceNode;
|
||||
class VInternalVariable;
|
||||
class VLayoutPoint;
|
||||
|
||||
class VPiecePath
|
||||
{
|
||||
|
@ -89,7 +90,7 @@ public:
|
|||
void SetLastToCuttingCountour(bool value);
|
||||
bool IsLastToCuttingCountour() const;
|
||||
|
||||
QVector<QPointF> PathPoints(const VContainer *data,
|
||||
QVector<VLayoutPoint> PathPoints(const VContainer *data,
|
||||
const QVector<QPointF> &cuttingPath = QVector<QPointF>()) const;
|
||||
QVector<VPointF> PathNodePoints(const VContainer *data, bool showExcluded = true) const;
|
||||
QVector<QVector<QPointF> > PathCurvePoints(const VContainer *data) const;
|
||||
|
@ -138,8 +139,8 @@ public:
|
|||
|
||||
static QString NodeName(const QVector<VPieceNode> &nodes, int nodeIndex, const VContainer *data);
|
||||
|
||||
static QVector<QPointF> NodesToPoints(const VContainer *data, const QVector<VPieceNode> &nodes,
|
||||
const QString &piece = QString());
|
||||
static QVector<VLayoutPoint> NodesToPoints(const VContainer *data, const QVector<VPieceNode> &nodes,
|
||||
const QString &piece = QString());
|
||||
|
||||
private:
|
||||
QSharedDataPointer<VPiecePathData> d;
|
||||
|
|
|
@ -46,17 +46,14 @@
|
|||
#include <QVector>
|
||||
#include <QtGlobal>
|
||||
#include <QLineF>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
|
||||
#include "vsysexits.h"
|
||||
#include "../vgeometry/vgobject.h"
|
||||
#include "../vgeometry/vpointf.h"
|
||||
#include "../vgeometry/vspline.h"
|
||||
#include "../vgeometry/vsplinepath.h"
|
||||
#include "../vlayout/vabstractpiece.h"
|
||||
#include "../vlayout/vrawsapoint.h"
|
||||
#include "../vpatterndb/vcontainer.h"
|
||||
#include "../vpatterndb/vpiece.h"
|
||||
#include "../vpatterndb/vpiecenode.h"
|
||||
|
@ -68,104 +65,6 @@ AbstractTest::AbstractTest(QObject *parent) :
|
|||
{
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::VectorFromJson(const QString &json, QVector<QPointF>& vector) const
|
||||
{
|
||||
QByteArray saveData;
|
||||
PrepareDocument(json, saveData);
|
||||
QJsonDocument loadDoc(QJsonDocument::fromJson(saveData));
|
||||
|
||||
const QString vectorKey = QStringLiteral("vector");
|
||||
const QString typeKey = QStringLiteral("type");
|
||||
|
||||
QJsonObject vectorObject = loadDoc.object();
|
||||
TestRoot(vectorObject, vectorKey, json);
|
||||
|
||||
QJsonArray vectorArray = vectorObject[vectorKey].toArray();
|
||||
for (int i = 0; i < vectorArray.size(); ++i)
|
||||
{
|
||||
QJsonObject pointObject = vectorArray[i].toObject();
|
||||
|
||||
QString type;
|
||||
AbstractTest::ReadStringValue(pointObject, typeKey, type);
|
||||
|
||||
if (type != QLatin1String("QPointF"))
|
||||
{
|
||||
const QString error = QStringLiteral("Invalid json file '%1'. Unexpected class '%2'.")
|
||||
.arg(json, pointObject[typeKey].toString());
|
||||
QFAIL(qUtf8Printable(error));
|
||||
}
|
||||
|
||||
QPointF point;
|
||||
QPointFromJson(pointObject, point);
|
||||
vector.append(point);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::VectorFromJson(const QString &json, QVector<VSAPoint> &vector) const
|
||||
{
|
||||
QByteArray saveData;
|
||||
PrepareDocument(json, saveData);
|
||||
QJsonDocument loadDoc(QJsonDocument::fromJson(saveData));
|
||||
|
||||
const QString vectorKey = QStringLiteral("vector");
|
||||
|
||||
QJsonObject vectorObject = loadDoc.object();
|
||||
TestRoot(vectorObject, vectorKey, json);
|
||||
|
||||
QJsonArray vectorArray = vectorObject[vectorKey].toArray();
|
||||
for (int i = 0; i < vectorArray.size(); ++i)
|
||||
{
|
||||
QJsonObject pointObject = vectorArray[i].toObject();
|
||||
|
||||
QString type;
|
||||
AbstractTest::ReadStringValue(pointObject, QStringLiteral("type"), type);
|
||||
|
||||
if (type != QLatin1String("VSAPoint"))
|
||||
{
|
||||
const QString error = QStringLiteral("Invalid json file '%1'. Unexpected class '%2'.").arg(json, type);
|
||||
QFAIL(qUtf8Printable(error));
|
||||
}
|
||||
|
||||
VSAPoint point;
|
||||
SAPointFromJson(pointObject, point);
|
||||
vector.append(point);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::VectorFromJson(const QString &json, QVector<VRawSAPoint> &vector) const
|
||||
{
|
||||
QByteArray saveData;
|
||||
PrepareDocument(json, saveData);
|
||||
QJsonDocument loadDoc(QJsonDocument::fromJson(saveData));
|
||||
|
||||
const QString vectorKey = QStringLiteral("vector");
|
||||
|
||||
QJsonObject vectorObject = loadDoc.object();
|
||||
TestRoot(vectorObject, vectorKey, json);
|
||||
|
||||
QJsonArray vectorArray = vectorObject[vectorKey].toArray();
|
||||
for (int i = 0; i < vectorArray.size(); ++i)
|
||||
{
|
||||
QJsonObject pointObject = vectorArray[i].toObject();
|
||||
|
||||
QString type;
|
||||
AbstractTest::ReadStringValue(pointObject, QStringLiteral("type"), type);
|
||||
|
||||
if (type != QLatin1String("VRawSAPoint"))
|
||||
{
|
||||
const QString error = QStringLiteral("Invalid json file '%1'. Unexpected class '%2'.").arg(json, type);
|
||||
QFAIL(qUtf8Printable(error));
|
||||
}
|
||||
|
||||
VRawSAPoint point;
|
||||
RawSAPointFromJson(pointObject, point);
|
||||
vector.append(point);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::PieceFromJson(const QString &json, VPiece &piece, QSharedPointer<VContainer> &data)
|
||||
{
|
||||
|
@ -217,17 +116,25 @@ void AbstractTest::PassmarkDataFromJson(const QString &json, VPiecePassmarkData
|
|||
|
||||
QJsonObject passmarkData = dataObject[dataKey].toObject();
|
||||
|
||||
VSAPoint previousSAPoint;
|
||||
SAPointFromJson(passmarkData[QStringLiteral("previousSAPoint")].toObject(), previousSAPoint);
|
||||
data.previousSAPoint = previousSAPoint;
|
||||
try
|
||||
{
|
||||
VSAPoint previousSAPoint;
|
||||
PointFromJson(passmarkData[QStringLiteral("previousSAPoint")].toObject(), previousSAPoint);
|
||||
data.previousSAPoint = previousSAPoint;
|
||||
|
||||
VSAPoint passmarkSAPoint;
|
||||
SAPointFromJson(passmarkData[QStringLiteral("passmarkSAPoint")].toObject(), passmarkSAPoint);
|
||||
data.passmarkSAPoint = passmarkSAPoint;
|
||||
VSAPoint passmarkSAPoint;
|
||||
PointFromJson(passmarkData[QStringLiteral("passmarkSAPoint")].toObject(), passmarkSAPoint);
|
||||
data.passmarkSAPoint = passmarkSAPoint;
|
||||
|
||||
VSAPoint nextSAPoint;
|
||||
SAPointFromJson(passmarkData[QStringLiteral("nextSAPoint")].toObject(), nextSAPoint);
|
||||
data.nextSAPoint = nextSAPoint;
|
||||
VSAPoint nextSAPoint;
|
||||
PointFromJson(passmarkData[QStringLiteral("nextSAPoint")].toObject(), nextSAPoint);
|
||||
data.nextSAPoint = nextSAPoint;
|
||||
}
|
||||
catch (const VException &e)
|
||||
{
|
||||
const QString error = QStringLiteral("Invalid json file '%1'. %2").arg(json, e.ErrorMessage());
|
||||
QFAIL(qUtf8Printable(error));
|
||||
}
|
||||
|
||||
qreal saWidth = 0;
|
||||
AbstractTest::ReadDoubleValue(passmarkData, QStringLiteral("saWidth"), saWidth);
|
||||
|
@ -287,9 +194,9 @@ void AbstractTest::PassmarkShapeFromJson(const QString &json, QVector<QLineF> &s
|
|||
TestRoot(shapeObject, shapeKey, json);
|
||||
|
||||
QJsonArray vectorArray = shapeObject[shapeKey].toArray();
|
||||
for (int i = 0; i < vectorArray.size(); ++i)
|
||||
for (auto && item : vectorArray)
|
||||
{
|
||||
QJsonObject lineObject = vectorArray[i].toObject();
|
||||
QJsonObject lineObject = item.toObject();
|
||||
|
||||
QString type;
|
||||
AbstractTest::ReadStringValue(lineObject, typeKey, type);
|
||||
|
@ -301,27 +208,25 @@ void AbstractTest::PassmarkShapeFromJson(const QString &json, QVector<QLineF> &s
|
|||
QFAIL(qUtf8Printable(error));
|
||||
}
|
||||
|
||||
QLineF line;
|
||||
QLineFromJson(lineObject, line);
|
||||
shape.append(line);
|
||||
shape.append(QLineFromJson(lineObject));
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::Comparison(const QVector<QPointF> &ekv, const QVector<QPointF> &ekvOrig) const
|
||||
void AbstractTest::ComparePathsDistance(const QVector<QPointF> &ekv, const QVector<QPointF> &ekvOrig) const
|
||||
{
|
||||
// Begin comparison
|
||||
QCOMPARE(ekv.size(), ekvOrig.size());// First check if sizes equal
|
||||
QCOMPARE(ekv.size(), ekvOrig.size());// First check if sizes are equal
|
||||
const qreal testAccuracy = MmToPixel(1.);
|
||||
|
||||
for (int i=0; i < ekv.size(); i++)
|
||||
{
|
||||
Comparison(ekv.at(i), ekvOrig.at(i), testAccuracy);
|
||||
ComparePointsDistance(ekv.at(i), ekvOrig.at(i), testAccuracy);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::Comparison(const QPointF &result, const QPointF &expected, qreal testAccuracy) const
|
||||
void AbstractTest::ComparePointsDistance(const QPointF &result, const QPointF &expected, qreal testAccuracy) const
|
||||
{
|
||||
const QString msg = QStringLiteral("Actual '%2;%3', Expected '%4;%5'. Distance between points %6 mm.")
|
||||
.arg(result.x()).arg(result.y()).arg(expected.x()).arg(expected.y())
|
||||
|
@ -332,7 +237,7 @@ void AbstractTest::Comparison(const QPointF &result, const QPointF &expected, qr
|
|||
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::Comparison(const QVector<QLineF> &result, const QVector<QLineF> &expected) const
|
||||
void AbstractTest::CompareLinesDistance(const QVector<QLineF> &result, const QVector<QLineF> &expected) const
|
||||
{
|
||||
// Begin comparison
|
||||
QCOMPARE(result.size(), expected.size());// First check if sizes equal
|
||||
|
@ -525,7 +430,7 @@ bool AbstractTest::CopyRecursively(const QString &srcFilePath, const QString &tg
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::PrepareDocument(const QString &json, QByteArray &data) const
|
||||
void AbstractTest::PrepareDocument(const QString &json, QByteArray &data)
|
||||
{
|
||||
QFile loadFile(json);
|
||||
if (not loadFile.open(QIODevice::ReadOnly))
|
||||
|
@ -538,7 +443,7 @@ void AbstractTest::PrepareDocument(const QString &json, QByteArray &data) const
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::TestRoot(const QJsonObject &root, const QString &attribute, const QString &file) const
|
||||
void AbstractTest::TestRoot(const QJsonObject &root, const QString &attribute, const QString &file)
|
||||
{
|
||||
if (not root.contains(attribute))
|
||||
{
|
||||
|
@ -549,7 +454,7 @@ void AbstractTest::TestRoot(const QJsonObject &root, const QString &attribute, c
|
|||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::ReadStringValue(const QJsonObject &itemObject, const QString &attribute, QString &value,
|
||||
const QString &defaultValue) const
|
||||
const QString &defaultValue)
|
||||
{
|
||||
if (itemObject.contains(attribute))
|
||||
{
|
||||
|
@ -580,7 +485,7 @@ void AbstractTest::ReadStringValue(const QJsonObject &itemObject, const QString
|
|||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::ReadBooleanValue(const QJsonObject &itemObject, const QString &attribute, bool &value,
|
||||
const QString &defaultValue) const
|
||||
const QString &defaultValue)
|
||||
{
|
||||
if (itemObject.contains(attribute))
|
||||
{
|
||||
|
@ -624,8 +529,7 @@ void AbstractTest::ReadPointValue(const QJsonObject &itemObject, const QString &
|
|||
{
|
||||
if (itemObject.contains(attribute))
|
||||
{
|
||||
QJsonObject p1Object = itemObject[attribute].toObject();
|
||||
VPointFromJson(p1Object, value);
|
||||
PointFromJson(itemObject[attribute].toObject(), value);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -706,22 +610,11 @@ void AbstractTest::ReadPieceNodeValue(const QJsonObject &itemObject, VPieceNode
|
|||
node = VPieceNode(id, typeTool, reverse);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::QPointFromJson(const QJsonObject &itemObject, QPointF &point) const
|
||||
{
|
||||
qreal x = 0;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("x"), x);
|
||||
point.setX(x);
|
||||
|
||||
qreal y = 0;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("y"), y);
|
||||
point.setY(y);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<typename T, typename std::enable_if<std::is_floating_point<T>::value>::type*>
|
||||
void AbstractTest::ReadDoubleValue(const QJsonObject &itemObject, const QString &attribute, T &value,
|
||||
const QString &defaultValue) const
|
||||
const QString &defaultValue)
|
||||
{
|
||||
if (itemObject.contains(attribute))
|
||||
{
|
||||
|
@ -760,7 +653,7 @@ void AbstractTest::ReadDoubleValue(const QJsonObject &itemObject, const QString
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<typename T, typename std::enable_if<std::is_enum<T>::value>::type*>
|
||||
void AbstractTest::ReadDoubleValue(const QJsonObject &itemObject, const QString &attribute, T &value,
|
||||
const QString &defaultValue) const
|
||||
const QString &defaultValue)
|
||||
{
|
||||
if (itemObject.contains(attribute))
|
||||
{
|
||||
|
@ -799,7 +692,7 @@ void AbstractTest::ReadDoubleValue(const QJsonObject &itemObject, const QString
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<typename T, typename std::enable_if<std::is_integral<T>::value>::type*>
|
||||
void AbstractTest::ReadDoubleValue(const QJsonObject &itemObject, const QString &attribute, T &value,
|
||||
const QString &defaultValue) const
|
||||
const QString &defaultValue)
|
||||
{
|
||||
if (itemObject.contains(attribute))
|
||||
{
|
||||
|
@ -836,81 +729,13 @@ void AbstractTest::ReadDoubleValue(const QJsonObject &itemObject, const QString
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::VPointFromJson(const QJsonObject &itemObject, VPointF &point)
|
||||
{
|
||||
vidtype id = NULL_ID;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("id"), id);
|
||||
|
||||
qreal mx = 0;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("mx"), mx);
|
||||
|
||||
qreal my = 0;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("my"), my);
|
||||
|
||||
QString name;
|
||||
AbstractTest::ReadStringValue(itemObject, QStringLiteral("name"), name);
|
||||
|
||||
qreal x = 0;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("x"), x);
|
||||
|
||||
qreal y = 0;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("y"), y);
|
||||
|
||||
point = VPointF(x, y, name, mx, my);
|
||||
point.setId(id);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::QLineFromJson(const QJsonObject &itemObject, QLineF &line)
|
||||
auto AbstractTest::QLineFromJson(const QJsonObject &itemObject) -> QLineF
|
||||
{
|
||||
QPointF p1;
|
||||
QPointFromJson(itemObject[QStringLiteral("p1")].toObject(), p1);
|
||||
|
||||
QPointF p2;
|
||||
QPointFromJson(itemObject[QStringLiteral("p2")].toObject(), p2);
|
||||
|
||||
line = QLineF(p1, p2);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::SAPointFromJson(const QJsonObject &itemObject, VSAPoint &point) const
|
||||
{
|
||||
qreal x = 0;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("x"), x);
|
||||
point.setX(x);
|
||||
|
||||
qreal y = 0;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("y"), y);
|
||||
point.setY(y);
|
||||
|
||||
qreal saBefore;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("saBefore"), saBefore, QStringLiteral("-1"));
|
||||
point.SetSABefore(saBefore);
|
||||
|
||||
qreal saAfter;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("saAfter"), saAfter, QStringLiteral("-1"));
|
||||
point.SetSAAfter(saAfter);
|
||||
|
||||
PieceNodeAngle angleType = PieceNodeAngle::ByLength;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("angle"), angleType,
|
||||
QString::number(static_cast<int>(PieceNodeAngle::ByLength)));
|
||||
point.SetAngleType(angleType);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void AbstractTest::RawSAPointFromJson(const QJsonObject &itemObject, VRawSAPoint &point) const
|
||||
{
|
||||
qreal x = 0;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("x"), x);
|
||||
point.setX(x);
|
||||
|
||||
qreal y = 0;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("y"), y);
|
||||
point.setY(y);
|
||||
|
||||
bool loopPoint;
|
||||
AbstractTest::ReadBooleanValue(itemObject, QStringLiteral("loopPoint"), loopPoint, QStringLiteral("0"));
|
||||
point.SetLoopPoint(loopPoint);
|
||||
PointFromJson(itemObject[QStringLiteral("p1")].toObject(), p1);
|
||||
PointFromJson(itemObject[QStringLiteral("p2")].toObject(), p2);
|
||||
return {p1, p2};
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -989,9 +814,9 @@ void AbstractTest::DBFromJson(const QJsonObject &dbObject, QSharedPointer<VConta
|
|||
if (dbObject.contains(itemsKey))
|
||||
{
|
||||
QJsonArray items = dbObject[itemsKey].toArray();
|
||||
for (int i = 0; i < items.size(); ++i)
|
||||
for (auto && item : items)
|
||||
{
|
||||
QJsonObject itemObject = items[i].toObject();
|
||||
QJsonObject itemObject = item.toObject();
|
||||
GOType objectType;
|
||||
AbstractTest::ReadDoubleValue(itemObject, QStringLiteral("type"), objectType);
|
||||
|
||||
|
@ -1000,7 +825,7 @@ void AbstractTest::DBFromJson(const QJsonObject &dbObject, QSharedPointer<VConta
|
|||
case GOType::Point:
|
||||
{
|
||||
VPointF point;
|
||||
VPointFromJson(itemObject, point);
|
||||
PointFromJson(itemObject, point);
|
||||
data->UpdateGObject(point.id(), new VPointF(point));
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -32,9 +32,17 @@
|
|||
#include <QMetaObject>
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
#include <qtestcase.h>
|
||||
|
||||
#include "../vgeometry/vpointf.h"
|
||||
#include "../vlayout/vsapoint.h"
|
||||
#include "../vlayout/vrawsapoint.h"
|
||||
#include "../ifc/exception/vexception.h"
|
||||
|
||||
template <class T> class QVector;
|
||||
class VSAPoint;
|
||||
|
||||
#include <ciso646>
|
||||
|
||||
|
@ -69,9 +77,8 @@ class AbstractTest : public QObject
|
|||
public:
|
||||
explicit AbstractTest(QObject *parent = nullptr);
|
||||
|
||||
void VectorFromJson(const QString &json, QVector<QPointF>& vector) const;
|
||||
void VectorFromJson(const QString &json, QVector<VSAPoint>& vector) const;
|
||||
void VectorFromJson(const QString &json, QVector<VRawSAPoint>& vector) const;
|
||||
template <class T>
|
||||
static auto VectorFromJson(const QString &json) -> QVector<T>;
|
||||
|
||||
void PieceFromJson(const QString &json, VPiece &piece, QSharedPointer<VContainer> &data);
|
||||
|
||||
|
@ -79,45 +86,50 @@ public:
|
|||
void PassmarkShapeFromJson(const QString &json, QVector<QLineF> &shape);
|
||||
|
||||
protected:
|
||||
void Comparison(const QVector<QPointF> &ekv, const QVector<QPointF> &ekvOrig) const;
|
||||
void Comparison(const QPointF &result, const QPointF &expected, qreal testAccuracy) const;
|
||||
void Comparison(const QVector<QLineF> &result, const QVector<QLineF> &expected) const;
|
||||
void ComparePathsDistance(const QVector<QPointF> &ekv, const QVector<QPointF> &ekvOrig) const;
|
||||
void ComparePointsDistance(const QPointF &result, const QPointF &expected, qreal testAccuracy) const;
|
||||
void CompareLinesDistance(const QVector<QLineF> &result, const QVector<QLineF> &expected) const;
|
||||
|
||||
QString ValentinaPath() const;
|
||||
QString TapePath() const;
|
||||
QString TranslationsPath() const;
|
||||
auto ValentinaPath() const -> QString;
|
||||
auto TapePath() const -> QString;
|
||||
auto TranslationsPath() const -> QString;
|
||||
|
||||
static int RunTimeout(int defMsecs);
|
||||
static auto RunTimeout(int defMsecs) -> int;
|
||||
|
||||
int Run(int exit, const QString &program, const QStringList &arguments, QString &error, int msecs = 120000);
|
||||
bool CopyRecursively(const QString &srcFilePath, const QString &tgtFilePath) const;
|
||||
auto Run(int exit, const QString &program, const QStringList &arguments, QString &error, int msecs = 120000) -> int;
|
||||
auto CopyRecursively(const QString &srcFilePath, const QString &tgtFilePath) const -> bool;
|
||||
|
||||
void PrepareDocument(const QString &json, QByteArray &data) const;
|
||||
void TestRoot(const QJsonObject &root, const QString &attribute, const QString &file) const;
|
||||
static void PrepareDocument(const QString &json, QByteArray &data);
|
||||
static void TestRoot(const QJsonObject &root, const QString &attribute, const QString &file);
|
||||
|
||||
template <typename T, typename std::enable_if<std::is_floating_point<T>::value>::type* = nullptr>
|
||||
void ReadDoubleValue(const QJsonObject &itemObject, const QString &attribute, T &value,
|
||||
const QString &defaultValue = QString()) const;
|
||||
static void ReadDoubleValue(const QJsonObject &itemObject, const QString &attribute, T &value,
|
||||
const QString &defaultValue = QString());
|
||||
template <typename T, typename std::enable_if<std::is_enum<T>::value>::type* = nullptr>
|
||||
void ReadDoubleValue(const QJsonObject &itemObject, const QString &attribute, T &value,
|
||||
const QString &defaultValue = QString()) const;
|
||||
static void ReadDoubleValue(const QJsonObject &itemObject, const QString &attribute, T &value,
|
||||
const QString &defaultValue = QString());
|
||||
template <typename T, typename std::enable_if<std::is_integral<T>::value>::type* = nullptr>
|
||||
void ReadDoubleValue(const QJsonObject &itemObject, const QString &attribute, T &value,
|
||||
const QString &defaultValue = QString()) const;
|
||||
void ReadStringValue(const QJsonObject &itemObject, const QString &attribute, QString &value,
|
||||
const QString &defaultValue = QString()) const;
|
||||
void ReadBooleanValue(const QJsonObject &itemObject, const QString &attribute, bool &value,
|
||||
const QString &defaultValue = QString()) const;
|
||||
static void ReadDoubleValue(const QJsonObject &itemObject, const QString &attribute, T &value,
|
||||
const QString &defaultValue = QString());
|
||||
static void ReadStringValue(const QJsonObject &itemObject, const QString &attribute, QString &value,
|
||||
const QString &defaultValue = QString());
|
||||
static void ReadBooleanValue(const QJsonObject &itemObject, const QString &attribute, bool &value,
|
||||
const QString &defaultValue = QString());
|
||||
void ReadPointValue(const QJsonObject &itemObject, const QString &attribute, VPointF &value);
|
||||
void ReadSplinePointValues(const QJsonObject &itemObject, const QString &attribute, QVector<VSplinePoint> &points);
|
||||
void ReadSplinePointValue(const QJsonObject &itemObject, VSplinePoint &point);
|
||||
void ReadPieceNodeValue(const QJsonObject &itemObject, VPieceNode &node);
|
||||
|
||||
void QPointFromJson(const QJsonObject &itemObject, QPointF &point) const;
|
||||
void VPointFromJson(const QJsonObject &itemObject, VPointF &point);
|
||||
void QLineFromJson(const QJsonObject &itemObject, QLineF &line);
|
||||
void SAPointFromJson(const QJsonObject &itemObject, VSAPoint &point) const;
|
||||
void RawSAPointFromJson(const QJsonObject &itemObject, VRawSAPoint &point) const;
|
||||
template <class T>
|
||||
static void CheckClassType(const QJsonObject &itemObject);
|
||||
|
||||
template <class T>
|
||||
static auto ReadPointData(const QJsonObject &pointObject) -> T;
|
||||
|
||||
template <class T>
|
||||
static auto PointFromJson(const QJsonObject &pointObject, T &point) -> void;
|
||||
|
||||
auto QLineFromJson(const QJsonObject &itemObject) -> QLineF;
|
||||
void SplineFromJson(const QJsonObject &itemObject, QSharedPointer<VContainer> &data);
|
||||
void SplinePathFromJson(const QJsonObject &itemObject, QSharedPointer<VContainer> &data);
|
||||
|
||||
|
@ -125,4 +137,190 @@ protected:
|
|||
void MainPathFromJson(const QJsonObject &pieceObject, VPiece &piece);
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<class T>
|
||||
inline auto AbstractTest::VectorFromJson(const QString &json) -> QVector<T>
|
||||
{
|
||||
QByteArray saveData;
|
||||
PrepareDocument(json, saveData);
|
||||
QJsonDocument loadDoc(QJsonDocument::fromJson(saveData));
|
||||
|
||||
const QString vectorKey = QStringLiteral("vector");
|
||||
|
||||
QJsonObject vectorObject = loadDoc.object();
|
||||
TestRoot(vectorObject, vectorKey, json);
|
||||
|
||||
QJsonArray vectorArray = vectorObject[vectorKey].toArray();
|
||||
QVector<T> vector;
|
||||
vector.reserve(vectorArray.size());
|
||||
|
||||
for (auto && item : vectorArray)
|
||||
{
|
||||
try
|
||||
{
|
||||
T point;
|
||||
PointFromJson(item.toObject(), point);
|
||||
vector.append(point);
|
||||
}
|
||||
catch (const VException &e)
|
||||
{
|
||||
throw VException(QStringLiteral("Invalid json file '%1'. %2").arg(json, e.ErrorMessage()));
|
||||
}
|
||||
}
|
||||
|
||||
return vector;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<class T>
|
||||
inline void AbstractTest::CheckClassType(const QJsonObject &itemObject)
|
||||
{
|
||||
const QString typeKey = QStringLiteral("type");
|
||||
|
||||
QString type;
|
||||
AbstractTest::ReadStringValue(itemObject, typeKey, type);
|
||||
|
||||
const QStringList types
|
||||
{
|
||||
QStringLiteral("QPointF"), // 0
|
||||
QStringLiteral("VLayoutPoint"), // 1
|
||||
QStringLiteral("VRawSAPoint"), // 2
|
||||
QStringLiteral("VSAPoint"), // 3
|
||||
};
|
||||
|
||||
bool res = false;
|
||||
switch (types.indexOf(type))
|
||||
{
|
||||
case 0:
|
||||
res = (typeid(T) == typeid(QPointF));
|
||||
break;
|
||||
case 1:
|
||||
res = (typeid(T) == typeid(VLayoutPoint));
|
||||
break;
|
||||
case 2:
|
||||
res = (typeid(T) == typeid(VRawSAPoint));
|
||||
break;
|
||||
case 3:
|
||||
res = (typeid(T) == typeid(VSAPoint));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (not res)
|
||||
{
|
||||
throw VException(QStringLiteral("Unexpected class '%2'.").arg(itemObject[typeKey].toString()));
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<class T>
|
||||
inline auto AbstractTest::ReadPointData(const QJsonObject &pointObject) -> T
|
||||
{
|
||||
T point;
|
||||
qreal x = 0;
|
||||
AbstractTest::ReadDoubleValue(pointObject, QChar('x'), x);
|
||||
point.setX(x);
|
||||
|
||||
qreal y = 0;
|
||||
AbstractTest::ReadDoubleValue(pointObject, QChar('y'), y);
|
||||
point.setY(y);
|
||||
|
||||
return point;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<class T>
|
||||
inline auto AbstractTest::PointFromJson(const QJsonObject &pointObject, T &point) -> void
|
||||
{
|
||||
CheckClassType<T>(pointObject);
|
||||
point = ReadPointData<T>(pointObject);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<>
|
||||
inline auto AbstractTest::PointFromJson(const QJsonObject &pointObject, VPointF &point) -> void
|
||||
{
|
||||
vidtype id = NULL_ID;
|
||||
AbstractTest::ReadDoubleValue(pointObject, QStringLiteral("id"), id);
|
||||
|
||||
qreal mx = 0;
|
||||
AbstractTest::ReadDoubleValue(pointObject, QStringLiteral("mx"), mx);
|
||||
|
||||
qreal my = 0;
|
||||
AbstractTest::ReadDoubleValue(pointObject, QStringLiteral("my"), my);
|
||||
|
||||
QString name;
|
||||
AbstractTest::ReadStringValue(pointObject, QStringLiteral("name"), name);
|
||||
|
||||
qreal x = 0;
|
||||
AbstractTest::ReadDoubleValue(pointObject, QChar('x'), x);
|
||||
|
||||
qreal y = 0;
|
||||
AbstractTest::ReadDoubleValue(pointObject, QChar('y'), y);
|
||||
|
||||
point = VPointF(x, y, name, mx, my);
|
||||
point.setId(id);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<>
|
||||
inline auto AbstractTest::ReadPointData(const QJsonObject &pointObject) -> VLayoutPoint
|
||||
{
|
||||
VLayoutPoint point(ReadPointData<QPointF>(pointObject));
|
||||
|
||||
bool turnPoint;
|
||||
AbstractTest::ReadBooleanValue(pointObject, QStringLiteral("turnPoint"), turnPoint, QStringLiteral("0"));
|
||||
point.SetTurnPoint(turnPoint);
|
||||
|
||||
bool curvePoint;
|
||||
AbstractTest::ReadBooleanValue(pointObject, QStringLiteral("curvePoint"), curvePoint, QStringLiteral("0"));
|
||||
point.SetCurvePoint(curvePoint);
|
||||
|
||||
return point;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<>
|
||||
inline auto AbstractTest::PointFromJson(const QJsonObject &pointObject, VLayoutPoint &point) -> void
|
||||
{
|
||||
CheckClassType<VLayoutPoint>(pointObject);
|
||||
point = ReadPointData<VLayoutPoint>(pointObject);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<>
|
||||
inline auto AbstractTest::PointFromJson(const QJsonObject &pointObject, VSAPoint &point) -> void
|
||||
{
|
||||
CheckClassType<VSAPoint>(pointObject);
|
||||
|
||||
point = VSAPoint(ReadPointData<VLayoutPoint>(pointObject));
|
||||
|
||||
qreal saBefore;
|
||||
AbstractTest::ReadDoubleValue(pointObject, QStringLiteral("saBefore"), saBefore, QStringLiteral("-1"));
|
||||
point.SetSABefore(saBefore);
|
||||
|
||||
qreal saAfter;
|
||||
AbstractTest::ReadDoubleValue(pointObject, QStringLiteral("saAfter"), saAfter, QStringLiteral("-1"));
|
||||
point.SetSAAfter(saAfter);
|
||||
|
||||
PieceNodeAngle angleType = PieceNodeAngle::ByLength;
|
||||
AbstractTest::ReadDoubleValue(pointObject, QStringLiteral("angle"), angleType,
|
||||
QString::number(static_cast<int>(PieceNodeAngle::ByLength)));
|
||||
point.SetAngleType(angleType);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template<>
|
||||
inline auto AbstractTest::PointFromJson(const QJsonObject &pointObject, VRawSAPoint &point) -> void
|
||||
{
|
||||
CheckClassType<VRawSAPoint>(pointObject);
|
||||
|
||||
point = VRawSAPoint(ReadPointData<VLayoutPoint>(pointObject));
|
||||
|
||||
bool loopPoint;
|
||||
AbstractTest::ReadBooleanValue(pointObject, QStringLiteral("loopPoint"), loopPoint, QStringLiteral("0"));
|
||||
point.SetLoopPoint(loopPoint);
|
||||
}
|
||||
|
||||
#endif // ABSTRACTTEST_H
|
||||
|
|
|
@ -672,6 +672,11 @@ QString GetNodeName(const VContainer *data, const VPieceNode &node, bool showPas
|
|||
{
|
||||
name = QLatin1Char('[') + name + QLatin1Char(']');
|
||||
}
|
||||
|
||||
if (not node.IsTurnPoint())
|
||||
{
|
||||
name += QStringLiteral(" ⦿");
|
||||
}
|
||||
}
|
||||
|
||||
return name;
|
||||
|
|
|
@ -329,11 +329,13 @@ void DialogPiecePath::ShowContextMenu(const QPoint &pos)
|
|||
|
||||
QListWidgetItem *rowItem = ui->listWidget->item(row);
|
||||
SCASSERT(rowItem != nullptr);
|
||||
VPieceNode rowNode = qvariant_cast<VPieceNode>(rowItem->data(Qt::UserRole));
|
||||
auto rowNode = qvariant_cast<VPieceNode>(rowItem->data(Qt::UserRole));
|
||||
|
||||
QAction *actionPassmark = nullptr;
|
||||
QAction *actionUniqueness = nullptr;
|
||||
QAction *actionReverse = nullptr;
|
||||
QAction *actionTurnPoint = nullptr;
|
||||
|
||||
if (rowNode.GetTypeTool() != Tool::NodePoint)
|
||||
{
|
||||
actionReverse = menu->addAction(tr("Reverse"));
|
||||
|
@ -353,6 +355,10 @@ void DialogPiecePath::ShowContextMenu(const QPoint &pos)
|
|||
actionUniqueness = menu->addAction(tr("Check uniqueness"));
|
||||
actionUniqueness->setCheckable(true);
|
||||
actionUniqueness->setChecked(rowNode.IsCheckUniqueness());
|
||||
|
||||
actionTurnPoint = menu->addAction(tr("Turn point"));
|
||||
actionTurnPoint->setCheckable(true);
|
||||
actionTurnPoint->setChecked(rowNode.IsTurnPoint());
|
||||
}
|
||||
|
||||
QAction *actionExcluded = menu->addAction(tr("Excluded"));
|
||||
|
@ -393,6 +399,12 @@ void DialogPiecePath::ShowContextMenu(const QPoint &pos)
|
|||
rowItem->setData(Qt::UserRole, QVariant::fromValue(rowNode));
|
||||
rowItem->setText(GetNodeName(data, rowNode, IsShowNotch()));
|
||||
}
|
||||
else if (rowNode.GetTypeTool() == Tool::NodePoint && selectedAction == actionTurnPoint)
|
||||
{
|
||||
rowNode.SetTurnPoint(not rowNode.IsTurnPoint());
|
||||
rowItem->setData(Qt::UserRole, QVariant::fromValue(rowNode));
|
||||
rowItem->setText(GetNodeName(data, rowNode, IsShowNotch()));
|
||||
}
|
||||
|
||||
ValidObjects(PathIsValid());
|
||||
ListChanged();
|
||||
|
|
|
@ -745,11 +745,13 @@ void DialogSeamAllowance::ShowMainPathContextMenu(const QPoint &pos)
|
|||
|
||||
QListWidgetItem *rowItem = uiTabPaths->listWidgetMainPath->item(row);
|
||||
SCASSERT(rowItem != nullptr);
|
||||
VPieceNode rowNode = qvariant_cast<VPieceNode>(rowItem->data(Qt::UserRole));
|
||||
auto rowNode = qvariant_cast<VPieceNode>(rowItem->data(Qt::UserRole));
|
||||
|
||||
QAction *actionPassmark = nullptr;
|
||||
QAction *actionUniqueness = nullptr;
|
||||
QAction *actionReverse = nullptr;
|
||||
QAction *actionTurnPoint = nullptr;
|
||||
|
||||
if (rowNode.GetTypeTool() != Tool::NodePoint)
|
||||
{
|
||||
actionReverse = menu->addAction(tr("Reverse"));
|
||||
|
@ -768,6 +770,10 @@ void DialogSeamAllowance::ShowMainPathContextMenu(const QPoint &pos)
|
|||
actionUniqueness = menu->addAction(tr("Check uniqueness"));
|
||||
actionUniqueness->setCheckable(true);
|
||||
actionUniqueness->setChecked(rowNode.IsCheckUniqueness());
|
||||
|
||||
actionTurnPoint = menu->addAction(tr("Turn point"));
|
||||
actionTurnPoint->setCheckable(true);
|
||||
actionTurnPoint->setChecked(rowNode.IsTurnPoint());
|
||||
}
|
||||
|
||||
QAction *actionExcluded = menu->addAction(tr("Excluded"));
|
||||
|
@ -807,6 +813,13 @@ void DialogSeamAllowance::ShowMainPathContextMenu(const QPoint &pos)
|
|||
rowItem->setText(GetNodeName(data, rowNode, true));
|
||||
}
|
||||
|
||||
else if (selectedAction == actionTurnPoint)
|
||||
{
|
||||
rowNode.SetTurnPoint(not rowNode.IsTurnPoint());
|
||||
rowItem->setData(Qt::UserRole, QVariant::fromValue(rowNode));
|
||||
rowItem->setText(GetNodeName(data, rowNode, true));
|
||||
}
|
||||
|
||||
ValidObjects(MainPathIsValid());
|
||||
ListChanged();
|
||||
}
|
||||
|
@ -2750,7 +2763,8 @@ void DialogSeamAllowance::ValidObjects(bool value)
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
bool DialogSeamAllowance::MainPathIsClockwise() const
|
||||
{
|
||||
const QVector<QPointF> points = CreatePiece().MainPathPoints(data);
|
||||
QVector<QPointF> points;
|
||||
CastTo(CreatePiece().MainPathPoints(data), points);
|
||||
|
||||
if(points.count() < 3)
|
||||
{
|
||||
|
|
|
@ -100,6 +100,7 @@ enum class ContextMenuOption : int
|
|||
ForbidFlipping,
|
||||
ForceFlipping,
|
||||
Remove,
|
||||
TurnPoint,
|
||||
LAST_ONE_DO_NOT_USE
|
||||
};
|
||||
}
|
||||
|
@ -140,7 +141,7 @@ void VNodePoint::Create(const VAbstractNodeInitData &initData)
|
|||
VAbstractTool::AddRecord(initData.id, Tool::NodePoint, initData.doc);
|
||||
//TODO Need create garbage collector and remove all nodes, what we don't use.
|
||||
//Better check garbage before each saving file. Check only modeling tags.
|
||||
VNodePoint *point = new VNodePoint(initData);
|
||||
auto *point = new VNodePoint(initData);
|
||||
|
||||
connect(initData.scene, &VMainGraphicsScene::EnableToolMove, point, &VNodePoint::EnableToolMove);
|
||||
connect(initData.scene, &VMainGraphicsScene::EnablePointItemHover, point, &VNodePoint::AllowHover);
|
||||
|
@ -326,7 +327,7 @@ QHash<int, QAction *> VNodePoint::InitContextMenu(QMenu *menu, vidtype pieceId,
|
|||
InitPassmarkAngleTypeMenu(menu, pieceId, contextMenu);
|
||||
InitPassmarkLineTypeMenu(menu, pieceId, contextMenu);
|
||||
|
||||
QAction *separatorAct = new QAction(this);
|
||||
auto *separatorAct = new QAction(this);
|
||||
separatorAct->setSeparator(true);
|
||||
menu->addAction(separatorAct);
|
||||
|
||||
|
@ -366,11 +367,17 @@ void VNodePoint::InitPassmarkMenu(QMenu *menu, vidtype pieceId, QHash<int, QActi
|
|||
const int nodeIndex = detail.GetPath().indexOfNode(m_id);
|
||||
if (nodeIndex != -1)
|
||||
{
|
||||
const VPieceNode &node = detail.GetPath().at(nodeIndex);
|
||||
|
||||
QAction *actionPassmark = menu->addAction(tr("Passmark"));
|
||||
actionPassmark->setCheckable(true);
|
||||
actionPassmark->setChecked(detail.GetPath().at(nodeIndex).IsPassmark());
|
||||
|
||||
actionPassmark->setChecked(node.IsPassmark());
|
||||
contextMenu.insert(static_cast<int>(ContextMenuOption::Passmark), actionPassmark);
|
||||
|
||||
QAction *actionTurnPoint = menu->addAction(tr("Turn point"));
|
||||
actionTurnPoint->setCheckable(true);
|
||||
actionTurnPoint->setChecked(node.IsTurnPoint());
|
||||
contextMenu.insert(static_cast<int>(ContextMenuOption::TurnPoint), actionTurnPoint);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -524,7 +531,7 @@ void VNodePoint::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
|
|||
return;
|
||||
}
|
||||
|
||||
if (VToolSeamAllowance *piece = qgraphicsitem_cast<VToolSeamAllowance *>(parentItem()))
|
||||
if (auto *piece = qgraphicsitem_cast<VToolSeamAllowance *>(parentItem()))
|
||||
{
|
||||
QMenu menu;
|
||||
QHash<int, QAction *> contextMenu = InitContextMenu(&menu, piece->getId(), piece->referens());
|
||||
|
@ -573,7 +580,7 @@ void VNodePoint::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
|
|||
ContextMenuOption selectedOption = static_cast<ContextMenuOption>(
|
||||
contextMenu.key(selectedAction, static_cast<int>(ContextMenuOption::NoSelection)));
|
||||
|
||||
Q_STATIC_ASSERT_X(static_cast<int>(ContextMenuOption::LAST_ONE_DO_NOT_USE) == 31,
|
||||
Q_STATIC_ASSERT_X(static_cast<int>(ContextMenuOption::LAST_ONE_DO_NOT_USE) == 32,
|
||||
"Not all options were handled.");
|
||||
|
||||
QT_WARNING_PUSH
|
||||
|
@ -614,6 +621,9 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default")
|
|||
case ContextMenuOption::Exclude:
|
||||
emit ToggleExcludeState(m_id);
|
||||
break;
|
||||
case ContextMenuOption::TurnPoint:
|
||||
emit ToggleTurnPointState(m_id);
|
||||
break;
|
||||
case ContextMenuOption::ByLength:
|
||||
SelectSeamAllowanceAngle(PieceNodeAngle::ByLength);
|
||||
break;
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
#include <QString>
|
||||
#include <QtGlobal>
|
||||
|
||||
#include "../ifc/xml/vabstractpattern.h"
|
||||
#include "../vmisc/def.h"
|
||||
#include "vabstractnode.h"
|
||||
#include "../vwidgets/vscenepoint.h"
|
||||
|
@ -66,6 +65,7 @@ signals:
|
|||
void ToggleForceFlipping(bool checked);
|
||||
void Delete();
|
||||
void ToggleExcludeState(quint32 id);
|
||||
void ToggleTurnPointState(quint32 id);
|
||||
void ToggleSeamAllowanceAngleType(quint32 id, PieceNodeAngle type);
|
||||
void TogglePassmark(quint32 id, bool toggle);
|
||||
void TogglePassmarkAngleType(quint32 id, PassmarkAngleType type);
|
||||
|
|
|
@ -567,6 +567,9 @@ QDomElement VAbstractTool::AddSANode(VAbstractPattern *doc, const QString &tagNa
|
|||
nod.removeAttribute(VAbstractPattern::AttrNodePassmarkLine);
|
||||
nod.removeAttribute(VAbstractPattern::AttrNodePassmarkAngle);
|
||||
}
|
||||
|
||||
doc->SetAttributeOrRemoveIf<bool>(nod, VAbstractPattern::AttrNodeTurnPoint, node.IsTurnPoint(),
|
||||
[](bool value) noexcept {return value;});
|
||||
}
|
||||
else
|
||||
{ // Wrong configuration.
|
||||
|
|
|
@ -1391,7 +1391,7 @@ void VToolSeamAllowance::RefreshGeometry(bool updateChildren)
|
|||
this->getData());
|
||||
QFuture<QPainterPath > futurePassmarks = QtConcurrent::run(detail, &VPiece::PassmarksPath, this->getData());
|
||||
|
||||
QFuture<QVector<QPointF> > futureSeamAllowance;
|
||||
QFuture<QVector<VLayoutPoint> > futureSeamAllowance;
|
||||
QFuture<bool> futureSeamAllowanceValid;
|
||||
|
||||
if (detail.IsSeamAllowance())
|
||||
|
@ -1584,6 +1584,26 @@ void VToolSeamAllowance::ToggleExcludeState(quint32 id)
|
|||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VToolSeamAllowance::ToggleTurnPointState(quint32 id)
|
||||
{
|
||||
const VPiece oldDet = VAbstractTool::data.GetPiece(m_id);
|
||||
VPiece newDet = oldDet;
|
||||
|
||||
for (int i = 0; i< oldDet.GetPath().CountNodes(); ++i)
|
||||
{
|
||||
VPieceNode node = oldDet.GetPath().at(i);
|
||||
if (node.GetId() == id && node.GetTypeTool() == Tool::NodePoint)
|
||||
{
|
||||
node.SetTurnPoint(not node.IsTurnPoint());
|
||||
newDet.GetPath()[i] = node;
|
||||
|
||||
VAbstractApplication::VApp()->getUndoStack()->push(new SavePieceOptions(oldDet, newDet, doc, m_id));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VToolSeamAllowance::ToggleNodePointAngleType(quint32 id, PieceNodeAngle type)
|
||||
{
|
||||
|
@ -1876,7 +1896,7 @@ void VToolSeamAllowance::InitNode(const VPieceNode &node, VMainGraphicsScene *sc
|
|||
{
|
||||
case (Tool::NodePoint):
|
||||
{
|
||||
VNodePoint *tool = qobject_cast<VNodePoint*>(VAbstractPattern::getTool(node.GetId()));
|
||||
auto *tool = qobject_cast<VNodePoint*>(VAbstractPattern::getTool(node.GetId()));
|
||||
SCASSERT(tool != nullptr);
|
||||
|
||||
if (tool->parent() != parent)
|
||||
|
@ -1891,6 +1911,8 @@ void VToolSeamAllowance::InitNode(const VPieceNode &node, VMainGraphicsScene *sc
|
|||
connect(tool, &VNodePoint::Delete, parent, &VToolSeamAllowance::DeleteFromMenu, Qt::UniqueConnection);
|
||||
connect(tool, &VNodePoint::ToggleExcludeState, parent, &VToolSeamAllowance::ToggleExcludeState,
|
||||
Qt::UniqueConnection);
|
||||
connect(tool, &VNodePoint::ToggleTurnPointState, parent, &VToolSeamAllowance::ToggleTurnPointState,
|
||||
Qt::UniqueConnection);
|
||||
connect(tool, &VNodePoint::ToggleSeamAllowanceAngleType, parent,
|
||||
&VToolSeamAllowance::ToggleNodePointAngleType, Qt::UniqueConnection);
|
||||
connect(tool, &VNodePoint::TogglePassmark, parent, &VToolSeamAllowance::ToggleNodePointPassmark,
|
||||
|
@ -2071,8 +2093,10 @@ auto VToolSeamAllowance::IsGrainlinePositionValid() const -> bool
|
|||
{
|
||||
QLineF grainLine = m_grainLine->Grainline();
|
||||
const VPiece detail = VAbstractTool::data.GetPiece(m_id);
|
||||
const QVector<QPointF> contourPoints = detail.IsSeamAllowance() && not detail.IsSeamAllowanceBuiltIn() ?
|
||||
detail.SeamAllowancePoints(getData()) : detail.MainPathPoints(getData());
|
||||
QVector<QPointF> contourPoints;
|
||||
detail.IsSeamAllowance() && not detail.IsSeamAllowanceBuiltIn()
|
||||
? CastTo(detail.SeamAllowancePoints(getData()), contourPoints)
|
||||
: CastTo(detail.MainPathPoints(getData()), contourPoints);
|
||||
|
||||
QVector<QPointF> points = VAbstractCurve::CurveIntersectLine(contourPoints, grainLine);
|
||||
if (not points.isEmpty())
|
||||
|
|
|
@ -168,6 +168,7 @@ private slots:
|
|||
void ToggleForbidFlipping(bool checked);
|
||||
void ToggleForceFlipping(bool checked);
|
||||
void ToggleExcludeState(quint32 id);
|
||||
void ToggleTurnPointState(quint32 id);
|
||||
void ToggleNodePointAngleType(quint32 id, PieceNodeAngle type);
|
||||
void ToggleNodePointPassmark(quint32 id, bool toggle);
|
||||
void TogglePassmarkAngleType(quint32 id, PassmarkAngleType type);
|
||||
|
|
|
@ -52,7 +52,7 @@ void VisToolPiece::RefreshGeometry()
|
|||
if (GetMode() == Mode::Creation)
|
||||
{
|
||||
m_cachedCurvesPath = m_piece.CurvesPainterPath(GetData());
|
||||
m_cachedMainPathPoints = m_piece.MainPathPoints(GetData());
|
||||
CastTo(m_piece.MainPathPoints(GetData()), m_cachedMainPathPoints);
|
||||
m_cachedMainPath = VPiece::MainPathPath(m_cachedMainPathPoints);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "../vgeometry/vpointf.h"
|
||||
#include "../vwidgets/scalesceneitems.h"
|
||||
#include "../vmisc/compatibility.h"
|
||||
#include "../vlayout/vlayoutpoint.h"
|
||||
|
||||
#include <QGraphicsSceneMouseEvent>
|
||||
|
||||
|
@ -63,7 +64,7 @@ void VisToolPiecePath::RefreshGeometry()
|
|||
|
||||
if (GetMode() == Mode::Creation)
|
||||
{
|
||||
const QVector<QPointF> points = m_path.PathPoints(GetData());
|
||||
const QVector<VLayoutPoint> points = m_path.PathPoints(GetData());
|
||||
if (not points.empty())
|
||||
{
|
||||
DrawLine(m_line, QLineF(ConstLast(points), ScenePos()), Color(VColor::SupportColor), Qt::DashLine);
|
||||
|
|
|
@ -1,549 +1,651 @@
|
|||
{
|
||||
"vector": [
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1676.804606592377,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1790.1904333640305,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2132.831278036873,
|
||||
"y": 334.01963822471856
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2209.0824577516487,
|
||||
"y": 196.52029498815347
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2280.0788311549086,
|
||||
"y": 214.46913581675784
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2345.053938897079,
|
||||
"y": 232.82808880019167
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2406.430397575602,
|
||||
"y": 252.1184733940386
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2466.630823787921,
|
||||
"y": 272.8616090538824
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2528.077834131477,
|
||||
"y": 295.5788152353067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2626.972277996681,
|
||||
"y": 334.08672189942854
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2683.174281565618,
|
||||
"y": 428.6163050991843
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2636.9155845119085,
|
||||
"y": 570.0364148944475
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2602.3359035137023,
|
||||
"y": 679.2016045836615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2581.1485889486808,
|
||||
"y": 750.3046656507598
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2562.658903353014,
|
||||
"y": 818.1666036205969
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2551.3190086136897,
|
||||
"y": 865.7283064025331
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2545.058458315721,
|
||||
"y": 895.6477493986852
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2542.4441145955184,
|
||||
"y": 909.8834645669292
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2539.941891688312,
|
||||
"y": 924.5359428210015
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.2824566009085,
|
||||
"y": 946.6345652094251
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3671357993244,
|
||||
"y": 961.2177429989904
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3893819364166,
|
||||
"y": 975.5256347551833
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.538148749601,
|
||||
"y": 989.4206965556962
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2540.002389976296,
|
||||
"y": 1002.7653844782211
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2543.971059353917,
|
||||
"y": 1015.422154600451
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2549.633110619882,
|
||||
"y": 1027.253463000078
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2557.177497511606,
|
||||
"y": 1038.121765754795
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2566.7931737665076,
|
||||
"y": 1047.8895189422938
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2578.669093122002,
|
||||
"y": 1056.419178640267
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2592.9942093155073,
|
||||
"y": 1063.5732009264073
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2609.9574760844393,
|
||||
"y": 1069.214041878407
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2629.747847166216,
|
||||
"y": 1073.204157573959
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2652.554276298253,
|
||||
"y": 1075.406004090755
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2656.455947900562,
|
||||
"y": 1149.9520876303336
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2642.4743193451973,
|
||||
"y": 1283.9248328571011
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2632.348846491074,
|
||||
"y": 1400.3953842544354
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2625.462074272455,
|
||||
"y": 1499.2648032469053
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2621.1965476236046,
|
||||
"y": 1580.4341512590793
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.9348114787863,
|
||||
"y": 1643.804489715526
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.8911123953603,
|
||||
"y": 1707.5262208487393
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.9884514435694,
|
||||
"y": 1722.9543307086615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.243518754759,
|
||||
"y": 1728.6863715569775
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2620.9069750474355,
|
||||
"y": 1754.8103451532859
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2628.7361755238107,
|
||||
"y": 1818.230094084754
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2644.9536288641093,
|
||||
"y": 1932.092426039521
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2659.427198191514,
|
||||
"y": 2020.1956325333963
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2669.339056867133,
|
||||
"y": 2073.2470143796036
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"saAfter": 151.18110236220474,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3075.2356380110023
|
||||
},
|
||||
{
|
||||
"saBefore": 151.18110236220474,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"saBefore": 151.18110236220474,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2007.2814993554916,
|
||||
"y": 3069.0853220695535
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1985.2213981724194,
|
||||
"y": 3066.6063749413943
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1971.0975271551902,
|
||||
"y": 3064.1269682327293
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1957.4637612744855,
|
||||
"y": 3060.939408867782
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1944.3112415072071,
|
||||
"y": 3057.044174599266
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1931.6311088302562,
|
||||
"y": 3052.4417431799
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1919.4145042205341,
|
||||
"y": 3047.1325923624
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1907.6525686549428,
|
||||
"y": 3041.117199899481
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1896.3364431103832,
|
||||
"y": 3034.3960435438594
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1885.457268563757,
|
||||
"y": 3026.969601048252
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1875.0061859919656,
|
||||
"y": 3018.8383501653752
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1864.97433637191,
|
||||
"y": 3010.0027686479434
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1855.3528606804925,
|
||||
"y": 3000.4633342486754
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1841.6221908501716,
|
||||
"y": 2984.9233358928996
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1824.7351747619791,
|
||||
"y": 2961.627082835932
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1809.3301919725623,
|
||||
"y": 2935.524017800505
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1795.3363702971328,
|
||||
"y": 2906.617962808349
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1782.6828375509026,
|
||||
"y": 2874.9127398811934
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1771.298721549083,
|
||||
"y": 2840.412171040767
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1761.1131501068844,
|
||||
"y": 2803.1200783087997
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1752.0552510395196,
|
||||
"y": 2763.0402837070214
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1744.054152162199,
|
||||
"y": 2720.1766092571615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1737.0389812901346,
|
||||
"y": 2674.5328769809485
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1730.9388662385377,
|
||||
"y": 2626.1129089001124
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1725.6829348226192,
|
||||
"y": 2574.9205270363836
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1721.2003148575914,
|
||||
"y": 2520.9595534114897
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1715.6967946026289,
|
||||
"y": 2435.1802236828553
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1710.5209571604514,
|
||||
"y": 2310.692590126838
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1707.1626661956402,
|
||||
"y": 2175.1993859172935
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1705.0549442298873,
|
||||
"y": 2028.73118722806
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1703.0187742577805,
|
||||
"y": 1789.8799791806941
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
|
|
|
@ -22,33 +22,33 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2218.3461551694068,
|
||||
"y": 159.8778773943609
|
||||
"x": 2217.5977299326023,
|
||||
"y": 159.69675636609975
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2290.3556666474014,
|
||||
"y": 178.09786268498775
|
||||
"x": 2289.3425285726667,
|
||||
"y": 177.82671822296527
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2356.386310160867,
|
||||
"y": 196.77174097480187
|
||||
"x": 2355.330774389572,
|
||||
"y": 196.45681566842157
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2418.743012243872,
|
||||
"y": 216.38498242273093
|
||||
"x": 2417.76276883939,
|
||||
"y": 216.0621255686488
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2479.7368903013507,
|
||||
"y": 237.4114485815882
|
||||
"x": 2478.943438456191,
|
||||
"y": 237.12811808257362
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2541.791733714628,
|
||||
"y": 260.35933461464947
|
||||
"x": 2541.1839006449068,
|
||||
"y": 260.1286547630125
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -58,7 +58,7 @@
|
|||
{
|
||||
"type": "QPointF",
|
||||
"x": 2750.0942175506984,
|
||||
"y": 342.49876114111674
|
||||
"y": 342.4987611411168
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -95,6 +95,11 @@
|
|||
"x": 2582.147933534884,
|
||||
"y": 902.9327107340721
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2579.6177268527103,
|
||||
"y": 916.710279982473
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2577.3549162322406,
|
||||
|
@ -137,18 +142,18 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2586.114686464242,
|
||||
"y": 1013.528603121976
|
||||
"x": 2586.380914190024,
|
||||
"y": 1013.9121258080509
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2591.4699318406524,
|
||||
"y": 1019.025810364433
|
||||
"x": 2591.4629589216133,
|
||||
"y": 1019.0745457263262
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2598.6551332041845,
|
||||
"y": 1024.1539538228847
|
||||
"x": 2598.261040748605,
|
||||
"y": 1023.957142420315
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -177,8 +182,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2694.0188568415797,
|
||||
"y": 1154.1454872438824
|
||||
"x": 2693.986760463563,
|
||||
"y": 1154.4153784932541
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -210,6 +215,11 @@
|
|||
"x": 2655.688340739313,
|
||||
"y": 1707.7165018577969
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.778424569198,
|
||||
"y": 1721.9946692493584
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.953419573936,
|
||||
|
@ -257,13 +267,13 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2021.3199675389635,
|
||||
"y": 3220.8483027084308
|
||||
"x": 2023.4768582688548,
|
||||
"y": 3220.8687790842673
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2021.3182640632187,
|
||||
"y": 3107.4419653203568
|
||||
"x": 2022.9357135847897,
|
||||
"y": 3107.5035007672386
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -362,48 +372,48 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1724.2475956555309,
|
||||
"y": 2811.4515698895543
|
||||
"x": 1724.6533610418696,
|
||||
"y": 2813.078323048724
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1714.9017110090306,
|
||||
"y": 2769.975506859066
|
||||
"x": 1715.189696588166,
|
||||
"y": 2771.371775287776
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1706.6975180190836,
|
||||
"y": 2725.918102308894
|
||||
"x": 1706.90061213171,
|
||||
"y": 2727.1118324092063
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1699.5401219581372,
|
||||
"y": 2679.257112978941
|
||||
"x": 1699.6823471470193,
|
||||
"y": 2680.274370032681
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1693.3412326417047,
|
||||
"y": 2629.9730649700537
|
||||
"x": 1693.4400069065402,
|
||||
"y": 2630.837144898105
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1688.0173984057383,
|
||||
"y": 2578.0494603041498
|
||||
"x": 1688.0853012257862,
|
||||
"y": 2578.780683106325
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1683.4825898547426,
|
||||
"y": 2523.3794867938254
|
||||
"x": 1683.5347784407104,
|
||||
"y": 2524.0884866792558
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1677.9341442539435,
|
||||
"y": 2436.7502859774568
|
||||
"x": 1677.9790695997801,
|
||||
"y": 2437.600157065191
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1672.7372856065697,
|
||||
"y": 2311.629084053139
|
||||
"x": 1672.758306811766,
|
||||
"y": 2312.2626524214393
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -415,6 +425,11 @@
|
|||
"x": 1667.2635813707664,
|
||||
"y": 2029.2750164437336
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1665.2248719406762,
|
||||
"y": 1790.2021664103715
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1663.7116397669358,
|
||||
|
|
|
@ -2,569 +2,675 @@
|
|||
"vector": [
|
||||
{
|
||||
"angle": 4,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"angle": 4,
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2014.9729320292,
|
||||
"y": 3069.6130267291883
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1999.838557691558,
|
||||
"y": 3068.8816935485092
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1985.2122453725951,
|
||||
"y": 3067.420020685311
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1971.0851302475294,
|
||||
"y": 3065.229001637756
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1957.4483474915787,
|
||||
"y": 3062.309629904003
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1944.293032279962,
|
||||
"y": 3058.6628989822143
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1931.6103197878972,
|
||||
"y": 3054.289802370551
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1919.3913451906024,
|
||||
"y": 3049.191333567172
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1907.6272436632962,
|
||||
"y": 3043.368486070239
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1896.3091503811966,
|
||||
"y": 3036.8222533779135
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1885.4282005195219,
|
||||
"y": 3029.5536289883566
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1874.9755292534905,
|
||||
"y": 3021.563606399727
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1864.9422717583204,
|
||||
"y": 3012.8531791101877
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1855.3195632092302,
|
||||
"y": 3003.4233406178982
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1846.098538781438,
|
||||
"y": 2993.2750844210195
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1837.2703336501618,
|
||||
"y": 2982.4094040177133
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1824.6988381756855,
|
||||
"y": 2964.8572538605545
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1809.2929657948505,
|
||||
"y": 2938.833269793301
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1795.2988037540088,
|
||||
"y": 2909.9574718672293
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1782.645433454907,
|
||||
"y": 2878.237808067624
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1771.2619362992912,
|
||||
"y": 2843.682226379773
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1761.0773936889077,
|
||||
"y": 2806.2986747889627
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1752.020887025502,
|
||||
"y": 2766.095101280478
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1744.0214977108208,
|
||||
"y": 2723.0794538396067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1737.00830714661,
|
||||
"y": 2677.259680451635
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1730.9103967346155,
|
||||
"y": 2628.6437291018483
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1725.656847876584,
|
||||
"y": 2577.2395477755335
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1721.1767419742605,
|
||||
"y": 2523.055084457977
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1715.6771359215397,
|
||||
"y": 2436.927798469381
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1710.5065586720987,
|
||||
"y": 2311.972555710253
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1707.153218476922,
|
||||
"y": 2176.039248721311
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1705.0497665499784,
|
||||
"y": 2029.1914613848467
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1703.0181141551627,
|
||||
"y": 1789.9386595512806
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1676.804606592377,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1790.1904333640305,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2132.831278036873,
|
||||
"y": 334.01963822471856
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2209.0824577516487,
|
||||
"y": 196.52029498815347
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2280.0788311549086,
|
||||
"y": 214.46913581675784
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2345.053938897079,
|
||||
"y": 232.82808880019167
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2406.430397575602,
|
||||
"y": 252.1184733940386
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2466.630823787921,
|
||||
"y": 272.8616090538824
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2528.077834131477,
|
||||
"y": 295.5788152353067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2626.972277996681,
|
||||
"y": 334.08672189942854
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2683.174281565618,
|
||||
"y": 428.6163050991843
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2636.9155845119085,
|
||||
"y": 570.0364148944475
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2602.3359035137023,
|
||||
"y": 679.2016045836615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2581.1485889486808,
|
||||
"y": 750.3046656507598
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2562.658903353014,
|
||||
"y": 818.1666036205969
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2551.3190086136897,
|
||||
"y": 865.7283064025331
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2545.058458315721,
|
||||
"y": 895.6477493986852
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2542.4441145955184,
|
||||
"y": 909.8834645669292
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2539.941891688312,
|
||||
"y": 924.5359428210015
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.2824566009085,
|
||||
"y": 946.6345652094251
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3671357993244,
|
||||
"y": 961.2177429989904
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3893819364166,
|
||||
"y": 975.5256347551833
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.538148749601,
|
||||
"y": 989.4206965556962
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2540.002389976296,
|
||||
"y": 1002.7653844782211
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2543.971059353917,
|
||||
"y": 1015.422154600451
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2549.633110619882,
|
||||
"y": 1027.253463000078
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2557.177497511606,
|
||||
"y": 1038.121765754795
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2566.7931737665076,
|
||||
"y": 1047.8895189422938
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2578.669093122002,
|
||||
"y": 1056.419178640267
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2592.9942093155073,
|
||||
"y": 1063.5732009264073
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2609.9574760844393,
|
||||
"y": 1069.214041878407
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2629.747847166216,
|
||||
"y": 1073.204157573959
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2652.554276298253,
|
||||
"y": 1075.406004090755
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2656.455947900562,
|
||||
"y": 1149.9520876303336
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2642.4743193451973,
|
||||
"y": 1283.9248328571011
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2632.348846491074,
|
||||
"y": 1400.3953842544354
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2625.462074272455,
|
||||
"y": 1499.2648032469053
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2621.1965476236046,
|
||||
"y": 1580.4341512590793
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.9348114787863,
|
||||
"y": 1643.804489715526
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.8911123953603,
|
||||
"y": 1707.5262208487393
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.9884514435694,
|
||||
"y": 1722.9543307086615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.243518754759,
|
||||
"y": 1728.6863715569775
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2620.9069750474355,
|
||||
"y": 1754.8103451532859
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2628.7361755238107,
|
||||
"y": 1818.230094084754
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2644.9536288641093,
|
||||
"y": 1932.092426039521
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2659.427198191514,
|
||||
"y": 2020.1956325333963
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2669.339056867133,
|
||||
"y": 2073.2470143796036
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3075.2356380110023
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3188.621464782656
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3183.059839328322
|
||||
|
|
|
@ -7,8 +7,13 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2013.1486925189367,
|
||||
"y": 3107.3642519699065
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3107.470448669474
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2014.6767556005577,
|
||||
"y": 3107.407141833111
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -22,8 +27,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1964.1685608395817,
|
||||
"y": 3102.6667943667003
|
||||
"x": 1964.2273050875103,
|
||||
"y": 3102.4125360082517
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -72,8 +77,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1827.775230874743,
|
||||
"y": 3029.062323188764
|
||||
"x": 1828.6586787634583,
|
||||
"y": 3029.9799215151306
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -112,48 +117,48 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1724.2060573521064,
|
||||
"y": 2814.604541011345
|
||||
"x": 1724.611163823378,
|
||||
"y": 2816.233307965892
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1714.8626689124646,
|
||||
"y": 2773.005215869235
|
||||
"x": 1715.1495506887006,
|
||||
"y": 2774.4009675028606
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1706.6613158714413,
|
||||
"y": 2728.7978163582184
|
||||
"x": 1706.8632795977835,
|
||||
"y": 2729.989568428364
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1699.5068804939508,
|
||||
"y": 2681.9634933710727
|
||||
"x": 1699.6481253072302,
|
||||
"y": 2682.978042970247
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1693.3109741320875,
|
||||
"y": 2632.486420466245
|
||||
"x": 1693.4089700819563,
|
||||
"y": 2633.347542021286
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1687.9901053084427,
|
||||
"y": 2580.353927532551
|
||||
"x": 1688.057425274056,
|
||||
"y": 2581.08223913993
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1683.4582844809274,
|
||||
"y": 2525.463573878589
|
||||
"x": 1683.5099994061193,
|
||||
"y": 2526.1694642149946
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1677.9141764602605,
|
||||
"y": 2438.490408366745
|
||||
"x": 1677.9586784282067,
|
||||
"y": 2439.336287889993
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1672.7227781832871,
|
||||
"y": 2312.9046441927917
|
||||
"x": 1672.7435992108194,
|
||||
"y": 2313.5351656076173
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -165,6 +170,11 @@
|
|||
"x": 1667.2583677386065,
|
||||
"y": 2029.732786467735
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1665.224201165844,
|
||||
"y": 1790.259592444213
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1663.7116376060108,
|
||||
|
@ -192,33 +202,33 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2218.3461551694068,
|
||||
"y": 159.8778773943609
|
||||
"x": 2217.5977299326023,
|
||||
"y": 159.69675636609975
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2290.3556666474014,
|
||||
"y": 178.09786268498775
|
||||
"x": 2289.3425285726667,
|
||||
"y": 177.82671822296527
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2356.386310160867,
|
||||
"y": 196.77174097480187
|
||||
"x": 2355.330774389572,
|
||||
"y": 196.45681566842157
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2418.743012243872,
|
||||
"y": 216.38498242273093
|
||||
"x": 2417.76276883939,
|
||||
"y": 216.0621255686488
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2479.7368903013507,
|
||||
"y": 237.4114485815882
|
||||
"x": 2478.943438456191,
|
||||
"y": 237.12811808257362
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2541.791733714628,
|
||||
"y": 260.35933461464947
|
||||
"x": 2541.1839006449068,
|
||||
"y": 260.1286547630125
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -265,6 +275,11 @@
|
|||
"x": 2582.147933534884,
|
||||
"y": 902.9327107340721
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2579.6177268527103,
|
||||
"y": 916.710279982473
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2577.3549162322406,
|
||||
|
@ -347,8 +362,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2694.0188568415797,
|
||||
"y": 1154.1454872438824
|
||||
"x": 2693.986760463563,
|
||||
"y": 1154.4153784932541
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -380,6 +395,11 @@
|
|||
"x": 2655.688340739313,
|
||||
"y": 1707.7165018577969
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.778424569198,
|
||||
"y": 1721.9946692493584
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.953419573936,
|
||||
|
|
|
@ -2,569 +2,675 @@
|
|||
"vector": [
|
||||
{
|
||||
"angle": 2,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"angle": 2,
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2014.9729320292,
|
||||
"y": 3069.6130267291883
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1999.838557691558,
|
||||
"y": 3068.8816935485092
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1985.2122453725951,
|
||||
"y": 3067.420020685311
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1971.0851302475294,
|
||||
"y": 3065.229001637756
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1957.4483474915787,
|
||||
"y": 3062.309629904003
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1944.293032279962,
|
||||
"y": 3058.6628989822143
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1931.6103197878972,
|
||||
"y": 3054.289802370551
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1919.3913451906024,
|
||||
"y": 3049.191333567172
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1907.6272436632962,
|
||||
"y": 3043.368486070239
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1896.3091503811966,
|
||||
"y": 3036.8222533779135
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1885.4282005195219,
|
||||
"y": 3029.5536289883566
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1874.9755292534905,
|
||||
"y": 3021.563606399727
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1864.9422717583204,
|
||||
"y": 3012.8531791101877
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1855.3195632092302,
|
||||
"y": 3003.4233406178982
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1846.098538781438,
|
||||
"y": 2993.2750844210195
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1837.2703336501618,
|
||||
"y": 2982.4094040177133
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1824.6988381756855,
|
||||
"y": 2964.8572538605545
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1809.2929657948505,
|
||||
"y": 2938.833269793301
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1795.2988037540088,
|
||||
"y": 2909.9574718672293
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1782.645433454907,
|
||||
"y": 2878.237808067624
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1771.2619362992912,
|
||||
"y": 2843.682226379773
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1761.0773936889077,
|
||||
"y": 2806.2986747889627
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1752.020887025502,
|
||||
"y": 2766.095101280478
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1744.0214977108208,
|
||||
"y": 2723.0794538396067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1737.00830714661,
|
||||
"y": 2677.259680451635
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1730.9103967346155,
|
||||
"y": 2628.6437291018483
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1725.656847876584,
|
||||
"y": 2577.2395477755335
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1721.1767419742605,
|
||||
"y": 2523.055084457977
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1715.6771359215397,
|
||||
"y": 2436.927798469381
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1710.5065586720987,
|
||||
"y": 2311.972555710253
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1707.153218476922,
|
||||
"y": 2176.039248721311
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1705.0497665499784,
|
||||
"y": 2029.1914613848467
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1703.0181141551627,
|
||||
"y": 1789.9386595512806
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1676.804606592377,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1790.1904333640305,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2132.831278036873,
|
||||
"y": 334.01963822471856
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2209.0824577516487,
|
||||
"y": 196.52029498815347
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2280.0788311549086,
|
||||
"y": 214.46913581675784
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2345.053938897079,
|
||||
"y": 232.82808880019167
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2406.430397575602,
|
||||
"y": 252.1184733940386
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2466.630823787921,
|
||||
"y": 272.8616090538824
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2528.077834131477,
|
||||
"y": 295.5788152353067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2626.972277996681,
|
||||
"y": 334.08672189942854
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2683.174281565618,
|
||||
"y": 428.6163050991843
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2636.9155845119085,
|
||||
"y": 570.0364148944475
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2602.3359035137023,
|
||||
"y": 679.2016045836615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2581.1485889486808,
|
||||
"y": 750.3046656507598
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2562.658903353014,
|
||||
"y": 818.1666036205969
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2551.3190086136897,
|
||||
"y": 865.7283064025331
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2545.058458315721,
|
||||
"y": 895.6477493986852
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2542.4441145955184,
|
||||
"y": 909.8834645669292
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2539.941891688312,
|
||||
"y": 924.5359428210015
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.2824566009085,
|
||||
"y": 946.6345652094251
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3671357993244,
|
||||
"y": 961.2177429989904
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3893819364166,
|
||||
"y": 975.5256347551833
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.538148749601,
|
||||
"y": 989.4206965556962
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2540.002389976296,
|
||||
"y": 1002.7653844782211
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2543.971059353917,
|
||||
"y": 1015.422154600451
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2549.633110619882,
|
||||
"y": 1027.253463000078
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2557.177497511606,
|
||||
"y": 1038.121765754795
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2566.7931737665076,
|
||||
"y": 1047.8895189422938
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2578.669093122002,
|
||||
"y": 1056.419178640267
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2592.9942093155073,
|
||||
"y": 1063.5732009264073
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2609.9574760844393,
|
||||
"y": 1069.214041878407
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2629.747847166216,
|
||||
"y": 1073.204157573959
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2652.554276298253,
|
||||
"y": 1075.406004090755
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2656.455947900562,
|
||||
"y": 1149.9520876303336
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2642.4743193451973,
|
||||
"y": 1283.9248328571011
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2632.348846491074,
|
||||
"y": 1400.3953842544354
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2625.462074272455,
|
||||
"y": 1499.2648032469053
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2621.1965476236046,
|
||||
"y": 1580.4341512590793
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.9348114787863,
|
||||
"y": 1643.804489715526
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.8911123953603,
|
||||
"y": 1707.5262208487393
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.9884514435694,
|
||||
"y": 1722.9543307086615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.243518754759,
|
||||
"y": 1728.6863715569775
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2620.9069750474355,
|
||||
"y": 1754.8103451532859
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2628.7361755238107,
|
||||
"y": 1818.230094084754
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2644.9536288641093,
|
||||
"y": 1932.092426039521
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2659.427198191514,
|
||||
"y": 2020.1956325333963
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2669.339056867133,
|
||||
"y": 2073.2470143796036
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3075.2356380110023
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3188.621464782656
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3183.059839328322
|
||||
|
|
|
@ -1,5 +1,15 @@
|
|||
{
|
||||
"vector": [
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3108.349696217459
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3107.1742631465927
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
|
@ -7,8 +17,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1980.460653502646,
|
||||
"y": 3104.734721364734
|
||||
"x": 1980.4332947144517,
|
||||
"y": 3104.9259742893705
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -62,8 +72,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1827.775230874743,
|
||||
"y": 3029.062323188764
|
||||
"x": 1828.6586787634583,
|
||||
"y": 3029.9799215151306
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -102,48 +112,48 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1724.2060573521064,
|
||||
"y": 2814.604541011345
|
||||
"x": 1724.611163823378,
|
||||
"y": 2816.233307965892
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1714.8626689124646,
|
||||
"y": 2773.005215869235
|
||||
"x": 1715.1495506887006,
|
||||
"y": 2774.4009675028606
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1706.6613158714413,
|
||||
"y": 2728.7978163582184
|
||||
"x": 1706.8632795977835,
|
||||
"y": 2729.989568428364
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1699.5068804939508,
|
||||
"y": 2681.9634933710727
|
||||
"x": 1699.6481253072302,
|
||||
"y": 2682.978042970247
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1693.3109741320875,
|
||||
"y": 2632.486420466245
|
||||
"x": 1693.4089700819563,
|
||||
"y": 2633.347542021286
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1687.9901053084427,
|
||||
"y": 2580.353927532551
|
||||
"x": 1688.057425274056,
|
||||
"y": 2581.08223913993
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1683.4582844809274,
|
||||
"y": 2525.463573878589
|
||||
"x": 1683.5099994061193,
|
||||
"y": 2526.1694642149946
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1677.9141764602605,
|
||||
"y": 2438.490408366745
|
||||
"x": 1677.9586784282067,
|
||||
"y": 2439.336287889993
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1672.7227781832871,
|
||||
"y": 2312.9046441927917
|
||||
"x": 1672.7435992108194,
|
||||
"y": 2313.5351656076173
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -155,6 +165,11 @@
|
|||
"x": 1667.2583677386065,
|
||||
"y": 2029.732786467735
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1665.224201165844,
|
||||
"y": 1790.259592444213
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1663.7116376060108,
|
||||
|
@ -182,33 +197,33 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2218.3461551694068,
|
||||
"y": 159.8778773943609
|
||||
"x": 2217.5977299326023,
|
||||
"y": 159.69675636609975
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2290.3556666474014,
|
||||
"y": 178.09786268498775
|
||||
"x": 2289.3425285726667,
|
||||
"y": 177.82671822296527
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2356.386310160867,
|
||||
"y": 196.77174097480187
|
||||
"x": 2355.330774389572,
|
||||
"y": 196.45681566842157
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2418.743012243872,
|
||||
"y": 216.38498242273093
|
||||
"x": 2417.76276883939,
|
||||
"y": 216.0621255686488
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2479.7368903013507,
|
||||
"y": 237.4114485815882
|
||||
"x": 2478.943438456191,
|
||||
"y": 237.12811808257362
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2541.791733714628,
|
||||
"y": 260.35933461464947
|
||||
"x": 2541.1839006449068,
|
||||
"y": 260.1286547630125
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -255,6 +270,11 @@
|
|||
"x": 2582.147933534884,
|
||||
"y": 902.9327107340721
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2579.6177268527103,
|
||||
"y": 916.710279982473
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2577.3549162322406,
|
||||
|
@ -337,8 +357,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2694.0188568415797,
|
||||
"y": 1154.1454872438824
|
||||
"x": 2693.986760463563,
|
||||
"y": 1154.4153784932541
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -370,6 +390,11 @@
|
|||
"x": 2655.688340739313,
|
||||
"y": 1707.7165018577969
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.778424569198,
|
||||
"y": 1721.9946692493584
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.953419573936,
|
||||
|
@ -423,7 +448,7 @@
|
|||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3105.37833426348
|
||||
"y": 3108.349696217459
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2,569 +2,675 @@
|
|||
"vector": [
|
||||
{
|
||||
"angle": 1,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"angle": 1,
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2014.9729320292,
|
||||
"y": 3069.6130267291883
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1999.838557691558,
|
||||
"y": 3068.8816935485092
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1985.2122453725951,
|
||||
"y": 3067.420020685311
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1971.0851302475294,
|
||||
"y": 3065.229001637756
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1957.4483474915787,
|
||||
"y": 3062.309629904003
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1944.293032279962,
|
||||
"y": 3058.6628989822143
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1931.6103197878972,
|
||||
"y": 3054.289802370551
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1919.3913451906024,
|
||||
"y": 3049.191333567172
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1907.6272436632962,
|
||||
"y": 3043.368486070239
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1896.3091503811966,
|
||||
"y": 3036.8222533779135
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1885.4282005195219,
|
||||
"y": 3029.5536289883566
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1874.9755292534905,
|
||||
"y": 3021.563606399727
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1864.9422717583204,
|
||||
"y": 3012.8531791101877
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1855.3195632092302,
|
||||
"y": 3003.4233406178982
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1846.098538781438,
|
||||
"y": 2993.2750844210195
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1837.2703336501618,
|
||||
"y": 2982.4094040177133
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1824.6988381756855,
|
||||
"y": 2964.8572538605545
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1809.2929657948505,
|
||||
"y": 2938.833269793301
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1795.2988037540088,
|
||||
"y": 2909.9574718672293
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1782.645433454907,
|
||||
"y": 2878.237808067624
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1771.2619362992912,
|
||||
"y": 2843.682226379773
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1761.0773936889077,
|
||||
"y": 2806.2986747889627
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1752.020887025502,
|
||||
"y": 2766.095101280478
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1744.0214977108208,
|
||||
"y": 2723.0794538396067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1737.00830714661,
|
||||
"y": 2677.259680451635
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1730.9103967346155,
|
||||
"y": 2628.6437291018483
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1725.656847876584,
|
||||
"y": 2577.2395477755335
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1721.1767419742605,
|
||||
"y": 2523.055084457977
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1715.6771359215397,
|
||||
"y": 2436.927798469381
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1710.5065586720987,
|
||||
"y": 2311.972555710253
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1707.153218476922,
|
||||
"y": 2176.039248721311
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1705.0497665499784,
|
||||
"y": 2029.1914613848467
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1703.0181141551627,
|
||||
"y": 1789.9386595512806
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1676.804606592377,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1790.1904333640305,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2132.831278036873,
|
||||
"y": 334.01963822471856
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2209.0824577516487,
|
||||
"y": 196.52029498815347
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2280.0788311549086,
|
||||
"y": 214.46913581675784
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2345.053938897079,
|
||||
"y": 232.82808880019167
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2406.430397575602,
|
||||
"y": 252.1184733940386
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2466.630823787921,
|
||||
"y": 272.8616090538824
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2528.077834131477,
|
||||
"y": 295.5788152353067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2626.972277996681,
|
||||
"y": 334.08672189942854
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2683.174281565618,
|
||||
"y": 428.6163050991843
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2636.9155845119085,
|
||||
"y": 570.0364148944475
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2602.3359035137023,
|
||||
"y": 679.2016045836615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2581.1485889486808,
|
||||
"y": 750.3046656507598
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2562.658903353014,
|
||||
"y": 818.1666036205969
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2551.3190086136897,
|
||||
"y": 865.7283064025331
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2545.058458315721,
|
||||
"y": 895.6477493986852
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2542.4441145955184,
|
||||
"y": 909.8834645669292
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2539.941891688312,
|
||||
"y": 924.5359428210015
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.2824566009085,
|
||||
"y": 946.6345652094251
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3671357993244,
|
||||
"y": 961.2177429989904
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3893819364166,
|
||||
"y": 975.5256347551833
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.538148749601,
|
||||
"y": 989.4206965556962
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2540.002389976296,
|
||||
"y": 1002.7653844782211
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2543.971059353917,
|
||||
"y": 1015.422154600451
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2549.633110619882,
|
||||
"y": 1027.253463000078
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2557.177497511606,
|
||||
"y": 1038.121765754795
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2566.7931737665076,
|
||||
"y": 1047.8895189422938
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2578.669093122002,
|
||||
"y": 1056.419178640267
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2592.9942093155073,
|
||||
"y": 1063.5732009264073
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2609.9574760844393,
|
||||
"y": 1069.214041878407
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2629.747847166216,
|
||||
"y": 1073.204157573959
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2652.554276298253,
|
||||
"y": 1075.406004090755
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2656.455947900562,
|
||||
"y": 1149.9520876303336
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2642.4743193451973,
|
||||
"y": 1283.9248328571011
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2632.348846491074,
|
||||
"y": 1400.3953842544354
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2625.462074272455,
|
||||
"y": 1499.2648032469053
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2621.1965476236046,
|
||||
"y": 1580.4341512590793
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.9348114787863,
|
||||
"y": 1643.804489715526
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.8911123953603,
|
||||
"y": 1707.5262208487393
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.9884514435694,
|
||||
"y": 1722.9543307086615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.243518754759,
|
||||
"y": 1728.6863715569775
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2620.9069750474355,
|
||||
"y": 1754.8103451532859
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2628.7361755238107,
|
||||
"y": 1818.230094084754
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2644.9536288641093,
|
||||
"y": 1932.092426039521
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2659.427198191514,
|
||||
"y": 2020.1956325333963
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2669.339056867133,
|
||||
"y": 2073.2470143796036
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3075.2356380110023
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3188.621464782656
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3183.059839328322
|
||||
|
|
|
@ -1,5 +1,15 @@
|
|||
{
|
||||
"vector": [
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3108.349696217459
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3107.1742631465927
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
|
@ -7,8 +17,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1980.460653502646,
|
||||
"y": 3104.734721364734
|
||||
"x": 1980.4332947144517,
|
||||
"y": 3104.9259742893705
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -62,8 +72,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1827.775230874743,
|
||||
"y": 3029.062323188764
|
||||
"x": 1828.6586787634583,
|
||||
"y": 3029.9799215151306
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -102,48 +112,48 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1724.2060573521064,
|
||||
"y": 2814.604541011345
|
||||
"x": 1724.611163823378,
|
||||
"y": 2816.233307965892
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1714.8626689124646,
|
||||
"y": 2773.005215869235
|
||||
"x": 1715.1495506887006,
|
||||
"y": 2774.4009675028606
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1706.6613158714413,
|
||||
"y": 2728.7978163582184
|
||||
"x": 1706.8632795977835,
|
||||
"y": 2729.989568428364
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1699.5068804939508,
|
||||
"y": 2681.9634933710727
|
||||
"x": 1699.6481253072302,
|
||||
"y": 2682.978042970247
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1693.3109741320875,
|
||||
"y": 2632.486420466245
|
||||
"x": 1693.4089700819563,
|
||||
"y": 2633.347542021286
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1687.9901053084427,
|
||||
"y": 2580.353927532551
|
||||
"x": 1688.057425274056,
|
||||
"y": 2581.08223913993
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1683.4582844809274,
|
||||
"y": 2525.463573878589
|
||||
"x": 1683.5099994061193,
|
||||
"y": 2526.1694642149946
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1677.9141764602605,
|
||||
"y": 2438.490408366745
|
||||
"x": 1677.9586784282067,
|
||||
"y": 2439.336287889993
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1672.7227781832871,
|
||||
"y": 2312.9046441927917
|
||||
"x": 1672.7435992108194,
|
||||
"y": 2313.5351656076173
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -155,6 +165,11 @@
|
|||
"x": 1667.2583677386065,
|
||||
"y": 2029.732786467735
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1665.224201165844,
|
||||
"y": 1790.259592444213
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1663.7116376060108,
|
||||
|
@ -182,33 +197,33 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2218.3461551694068,
|
||||
"y": 159.8778773943609
|
||||
"x": 2217.5977299326023,
|
||||
"y": 159.69675636609975
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2290.3556666474014,
|
||||
"y": 178.09786268498775
|
||||
"x": 2289.3425285726667,
|
||||
"y": 177.82671822296527
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2356.386310160867,
|
||||
"y": 196.77174097480187
|
||||
"x": 2355.330774389572,
|
||||
"y": 196.45681566842157
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2418.743012243872,
|
||||
"y": 216.38498242273093
|
||||
"x": 2417.76276883939,
|
||||
"y": 216.0621255686488
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2479.7368903013507,
|
||||
"y": 237.4114485815882
|
||||
"x": 2478.943438456191,
|
||||
"y": 237.12811808257362
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2541.791733714628,
|
||||
"y": 260.35933461464947
|
||||
"x": 2541.1839006449068,
|
||||
"y": 260.1286547630125
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -255,6 +270,11 @@
|
|||
"x": 2582.147933534884,
|
||||
"y": 902.9327107340721
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2579.6177268527103,
|
||||
"y": 916.710279982473
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2577.3549162322406,
|
||||
|
@ -337,8 +357,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2694.0188568415797,
|
||||
"y": 1154.1454872438824
|
||||
"x": 2693.986760463563,
|
||||
"y": 1154.4153784932541
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -370,6 +390,11 @@
|
|||
"x": 2655.688340739313,
|
||||
"y": 1707.7165018577969
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.778424569198,
|
||||
"y": 1721.9946692493584
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.953419573936,
|
||||
|
@ -423,7 +448,7 @@
|
|||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3105.37833426348
|
||||
"y": 3108.349696217459
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,568 +1,674 @@
|
|||
{
|
||||
"vector": [
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2014.9729320292,
|
||||
"y": 3069.6130267291883
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1999.838557691558,
|
||||
"y": 3068.8816935485092
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1985.2122453725951,
|
||||
"y": 3067.420020685311
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1971.0851302475294,
|
||||
"y": 3065.229001637756
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1957.4483474915787,
|
||||
"y": 3062.309629904003
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1944.293032279962,
|
||||
"y": 3058.6628989822143
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1931.6103197878972,
|
||||
"y": 3054.289802370551
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1919.3913451906024,
|
||||
"y": 3049.191333567172
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1907.6272436632962,
|
||||
"y": 3043.368486070239
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1896.3091503811966,
|
||||
"y": 3036.8222533779135
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1885.4282005195219,
|
||||
"y": 3029.5536289883566
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1874.9755292534905,
|
||||
"y": 3021.563606399727
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1864.9422717583204,
|
||||
"y": 3012.8531791101877
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1855.3195632092302,
|
||||
"y": 3003.4233406178982
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1846.098538781438,
|
||||
"y": 2993.2750844210195
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1837.2703336501618,
|
||||
"y": 2982.4094040177133
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1824.6988381756855,
|
||||
"y": 2964.8572538605545
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1809.2929657948505,
|
||||
"y": 2938.833269793301
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1795.2988037540088,
|
||||
"y": 2909.9574718672293
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1782.645433454907,
|
||||
"y": 2878.237808067624
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1771.2619362992912,
|
||||
"y": 2843.682226379773
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1761.0773936889077,
|
||||
"y": 2806.2986747889627
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1752.020887025502,
|
||||
"y": 2766.095101280478
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1744.0214977108208,
|
||||
"y": 2723.0794538396067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1737.00830714661,
|
||||
"y": 2677.259680451635
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1730.9103967346155,
|
||||
"y": 2628.6437291018483
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1725.656847876584,
|
||||
"y": 2577.2395477755335
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1721.1767419742605,
|
||||
"y": 2523.055084457977
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1715.6771359215397,
|
||||
"y": 2436.927798469381
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1710.5065586720987,
|
||||
"y": 2311.972555710253
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1707.153218476922,
|
||||
"y": 2176.039248721311
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1705.0497665499784,
|
||||
"y": 2029.1914613848467
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1703.0181141551627,
|
||||
"y": 1789.9386595512806
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1676.804606592377,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1790.1904333640305,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2132.831278036873,
|
||||
"y": 334.01963822471856
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2209.0824577516487,
|
||||
"y": 196.52029498815347
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2280.0788311549086,
|
||||
"y": 214.46913581675784
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2345.053938897079,
|
||||
"y": 232.82808880019167
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2406.430397575602,
|
||||
"y": 252.1184733940386
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2466.630823787921,
|
||||
"y": 272.8616090538824
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2528.077834131477,
|
||||
"y": 295.5788152353067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2626.972277996681,
|
||||
"y": 334.08672189942854
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2683.174281565618,
|
||||
"y": 428.6163050991843
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2636.9155845119085,
|
||||
"y": 570.0364148944475
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2602.3359035137023,
|
||||
"y": 679.2016045836615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2581.1485889486808,
|
||||
"y": 750.3046656507598
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2562.658903353014,
|
||||
"y": 818.1666036205969
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2551.3190086136897,
|
||||
"y": 865.7283064025331
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2545.058458315721,
|
||||
"y": 895.6477493986852
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2542.4441145955184,
|
||||
"y": 909.8834645669292
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2539.941891688312,
|
||||
"y": 924.5359428210015
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.2824566009085,
|
||||
"y": 946.6345652094251
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3671357993244,
|
||||
"y": 961.2177429989904
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3893819364166,
|
||||
"y": 975.5256347551833
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.538148749601,
|
||||
"y": 989.4206965556962
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2540.002389976296,
|
||||
"y": 1002.7653844782211
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2543.971059353917,
|
||||
"y": 1015.422154600451
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2549.633110619882,
|
||||
"y": 1027.253463000078
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2557.177497511606,
|
||||
"y": 1038.121765754795
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2566.7931737665076,
|
||||
"y": 1047.8895189422938
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2578.669093122002,
|
||||
"y": 1056.419178640267
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2592.9942093155073,
|
||||
"y": 1063.5732009264073
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2609.9574760844393,
|
||||
"y": 1069.214041878407
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2629.747847166216,
|
||||
"y": 1073.204157573959
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2652.554276298253,
|
||||
"y": 1075.406004090755
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2656.455947900562,
|
||||
"y": 1149.9520876303336
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2642.4743193451973,
|
||||
"y": 1283.9248328571011
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2632.348846491074,
|
||||
"y": 1400.3953842544354
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2625.462074272455,
|
||||
"y": 1499.2648032469053
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2621.1965476236046,
|
||||
"y": 1580.4341512590793
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.9348114787863,
|
||||
"y": 1643.804489715526
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.8911123953603,
|
||||
"y": 1707.5262208487393
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.9884514435694,
|
||||
"y": 1722.9543307086615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.243518754759,
|
||||
"y": 1728.6863715569775
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2620.9069750474355,
|
||||
"y": 1754.8103451532859
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2628.7361755238107,
|
||||
"y": 1818.230094084754
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2644.9536288641093,
|
||||
"y": 1932.092426039521
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2659.427198191514,
|
||||
"y": 2020.1956325333963
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2669.339056867133,
|
||||
"y": 2073.2470143796036
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3075.2356380110023
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3188.621464782656
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3183.059839328322
|
||||
|
|
|
@ -1,5 +1,15 @@
|
|||
{
|
||||
"vector": [
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3108.349696217459
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3107.1742631465927
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
|
@ -7,8 +17,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1980.460653502646,
|
||||
"y": 3104.734721364734
|
||||
"x": 1980.4332947144517,
|
||||
"y": 3104.9259742893705
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -62,8 +72,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1827.775230874743,
|
||||
"y": 3029.062323188764
|
||||
"x": 1828.6586787634583,
|
||||
"y": 3029.9799215151306
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -102,48 +112,48 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1724.2060573521064,
|
||||
"y": 2814.604541011345
|
||||
"x": 1724.611163823378,
|
||||
"y": 2816.233307965892
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1714.8626689124646,
|
||||
"y": 2773.005215869235
|
||||
"x": 1715.1495506887006,
|
||||
"y": 2774.4009675028606
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1706.6613158714413,
|
||||
"y": 2728.7978163582184
|
||||
"x": 1706.8632795977835,
|
||||
"y": 2729.989568428364
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1699.5068804939508,
|
||||
"y": 2681.9634933710727
|
||||
"x": 1699.6481253072302,
|
||||
"y": 2682.978042970247
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1693.3109741320875,
|
||||
"y": 2632.486420466245
|
||||
"x": 1693.4089700819563,
|
||||
"y": 2633.347542021286
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1687.9901053084427,
|
||||
"y": 2580.353927532551
|
||||
"x": 1688.057425274056,
|
||||
"y": 2581.08223913993
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1683.4582844809274,
|
||||
"y": 2525.463573878589
|
||||
"x": 1683.5099994061193,
|
||||
"y": 2526.1694642149946
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1677.9141764602605,
|
||||
"y": 2438.490408366745
|
||||
"x": 1677.9586784282067,
|
||||
"y": 2439.336287889993
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1672.7227781832871,
|
||||
"y": 2312.9046441927917
|
||||
"x": 1672.7435992108194,
|
||||
"y": 2313.5351656076173
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -155,6 +165,11 @@
|
|||
"x": 1667.2583677386065,
|
||||
"y": 2029.732786467735
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1665.224201165844,
|
||||
"y": 1790.259592444213
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1663.7116376060108,
|
||||
|
@ -182,33 +197,33 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2218.3461551694068,
|
||||
"y": 159.8778773943609
|
||||
"x": 2217.5977299326023,
|
||||
"y": 159.69675636609975
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2290.3556666474014,
|
||||
"y": 178.09786268498775
|
||||
"x": 2289.3425285726667,
|
||||
"y": 177.82671822296527
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2356.386310160867,
|
||||
"y": 196.77174097480187
|
||||
"x": 2355.330774389572,
|
||||
"y": 196.45681566842157
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2418.743012243872,
|
||||
"y": 216.38498242273093
|
||||
"x": 2417.76276883939,
|
||||
"y": 216.0621255686488
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2479.7368903013507,
|
||||
"y": 237.4114485815882
|
||||
"x": 2478.943438456191,
|
||||
"y": 237.12811808257362
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2541.791733714628,
|
||||
"y": 260.35933461464947
|
||||
"x": 2541.1839006449068,
|
||||
"y": 260.1286547630125
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -255,6 +270,11 @@
|
|||
"x": 2582.147933534884,
|
||||
"y": 902.9327107340721
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2579.6177268527103,
|
||||
"y": 916.710279982473
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2577.3549162322406,
|
||||
|
@ -337,8 +357,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2694.0188568415797,
|
||||
"y": 1154.1454872438824
|
||||
"x": 2693.986760463563,
|
||||
"y": 1154.4153784932541
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -370,6 +390,11 @@
|
|||
"x": 2655.688340739313,
|
||||
"y": 1707.7165018577969
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.778424569198,
|
||||
"y": 1721.9946692493584
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.953419573936,
|
||||
|
@ -423,7 +448,7 @@
|
|||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3105.37833426348
|
||||
"y": 3108.349696217459
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2,569 +2,675 @@
|
|||
"vector": [
|
||||
{
|
||||
"angle": 5,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"angle": 5,
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2014.9729320292,
|
||||
"y": 3069.6130267291883
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1999.838557691558,
|
||||
"y": 3068.8816935485092
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1985.2122453725951,
|
||||
"y": 3067.420020685311
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1971.0851302475294,
|
||||
"y": 3065.229001637756
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1957.4483474915787,
|
||||
"y": 3062.309629904003
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1944.293032279962,
|
||||
"y": 3058.6628989822143
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1931.6103197878972,
|
||||
"y": 3054.289802370551
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1919.3913451906024,
|
||||
"y": 3049.191333567172
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1907.6272436632962,
|
||||
"y": 3043.368486070239
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1896.3091503811966,
|
||||
"y": 3036.8222533779135
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1885.4282005195219,
|
||||
"y": 3029.5536289883566
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1874.9755292534905,
|
||||
"y": 3021.563606399727
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1864.9422717583204,
|
||||
"y": 3012.8531791101877
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1855.3195632092302,
|
||||
"y": 3003.4233406178982
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1846.098538781438,
|
||||
"y": 2993.2750844210195
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1837.2703336501618,
|
||||
"y": 2982.4094040177133
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1824.6988381756855,
|
||||
"y": 2964.8572538605545
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1809.2929657948505,
|
||||
"y": 2938.833269793301
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1795.2988037540088,
|
||||
"y": 2909.9574718672293
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1782.645433454907,
|
||||
"y": 2878.237808067624
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1771.2619362992912,
|
||||
"y": 2843.682226379773
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1761.0773936889077,
|
||||
"y": 2806.2986747889627
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1752.020887025502,
|
||||
"y": 2766.095101280478
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1744.0214977108208,
|
||||
"y": 2723.0794538396067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1737.00830714661,
|
||||
"y": 2677.259680451635
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1730.9103967346155,
|
||||
"y": 2628.6437291018483
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1725.656847876584,
|
||||
"y": 2577.2395477755335
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1721.1767419742605,
|
||||
"y": 2523.055084457977
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1715.6771359215397,
|
||||
"y": 2436.927798469381
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1710.5065586720987,
|
||||
"y": 2311.972555710253
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1707.153218476922,
|
||||
"y": 2176.039248721311
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1705.0497665499784,
|
||||
"y": 2029.1914613848467
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1703.0181141551627,
|
||||
"y": 1789.9386595512806
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1676.804606592377,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1790.1904333640305,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2132.831278036873,
|
||||
"y": 334.01963822471856
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2209.0824577516487,
|
||||
"y": 196.52029498815347
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2280.0788311549086,
|
||||
"y": 214.46913581675784
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2345.053938897079,
|
||||
"y": 232.82808880019167
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2406.430397575602,
|
||||
"y": 252.1184733940386
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2466.630823787921,
|
||||
"y": 272.8616090538824
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2528.077834131477,
|
||||
"y": 295.5788152353067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2626.972277996681,
|
||||
"y": 334.08672189942854
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2683.174281565618,
|
||||
"y": 428.6163050991843
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2636.9155845119085,
|
||||
"y": 570.0364148944475
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2602.3359035137023,
|
||||
"y": 679.2016045836615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2581.1485889486808,
|
||||
"y": 750.3046656507598
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2562.658903353014,
|
||||
"y": 818.1666036205969
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2551.3190086136897,
|
||||
"y": 865.7283064025331
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2545.058458315721,
|
||||
"y": 895.6477493986852
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2542.4441145955184,
|
||||
"y": 909.8834645669292
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2539.941891688312,
|
||||
"y": 924.5359428210015
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.2824566009085,
|
||||
"y": 946.6345652094251
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3671357993244,
|
||||
"y": 961.2177429989904
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3893819364166,
|
||||
"y": 975.5256347551833
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.538148749601,
|
||||
"y": 989.4206965556962
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2540.002389976296,
|
||||
"y": 1002.7653844782211
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2543.971059353917,
|
||||
"y": 1015.422154600451
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2549.633110619882,
|
||||
"y": 1027.253463000078
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2557.177497511606,
|
||||
"y": 1038.121765754795
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2566.7931737665076,
|
||||
"y": 1047.8895189422938
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2578.669093122002,
|
||||
"y": 1056.419178640267
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2592.9942093155073,
|
||||
"y": 1063.5732009264073
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2609.9574760844393,
|
||||
"y": 1069.214041878407
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2629.747847166216,
|
||||
"y": 1073.204157573959
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2652.554276298253,
|
||||
"y": 1075.406004090755
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2656.455947900562,
|
||||
"y": 1149.9520876303336
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2642.4743193451973,
|
||||
"y": 1283.9248328571011
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2632.348846491074,
|
||||
"y": 1400.3953842544354
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2625.462074272455,
|
||||
"y": 1499.2648032469053
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2621.1965476236046,
|
||||
"y": 1580.4341512590793
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.9348114787863,
|
||||
"y": 1643.804489715526
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.8911123953603,
|
||||
"y": 1707.5262208487393
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.9884514435694,
|
||||
"y": 1722.9543307086615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.243518754759,
|
||||
"y": 1728.6863715569775
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2620.9069750474355,
|
||||
"y": 1754.8103451532859
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2628.7361755238107,
|
||||
"y": 1818.230094084754
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2644.9536288641093,
|
||||
"y": 1932.092426039521
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2659.427198191514,
|
||||
"y": 2020.1956325333963
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2669.339056867133,
|
||||
"y": 2073.2470143796036
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3075.2356380110023
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3188.621464782656
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3183.059839328322
|
||||
|
|
|
@ -1,5 +1,15 @@
|
|||
{
|
||||
"vector": [
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3108.349696217459
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3107.1742631465927
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
|
@ -7,8 +17,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1980.460653502646,
|
||||
"y": 3104.734721364734
|
||||
"x": 1980.4332947144517,
|
||||
"y": 3104.9259742893705
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -62,8 +72,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1827.775230874743,
|
||||
"y": 3029.062323188764
|
||||
"x": 1828.6586787634583,
|
||||
"y": 3029.9799215151306
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -102,48 +112,48 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1724.2060573521064,
|
||||
"y": 2814.604541011345
|
||||
"x": 1724.611163823378,
|
||||
"y": 2816.233307965892
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1714.8626689124646,
|
||||
"y": 2773.005215869235
|
||||
"x": 1715.1495506887006,
|
||||
"y": 2774.4009675028606
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1706.6613158714413,
|
||||
"y": 2728.7978163582184
|
||||
"x": 1706.8632795977835,
|
||||
"y": 2729.989568428364
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1699.5068804939508,
|
||||
"y": 2681.9634933710727
|
||||
"x": 1699.6481253072302,
|
||||
"y": 2682.978042970247
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1693.3109741320875,
|
||||
"y": 2632.486420466245
|
||||
"x": 1693.4089700819563,
|
||||
"y": 2633.347542021286
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1687.9901053084427,
|
||||
"y": 2580.353927532551
|
||||
"x": 1688.057425274056,
|
||||
"y": 2581.08223913993
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1683.4582844809274,
|
||||
"y": 2525.463573878589
|
||||
"x": 1683.5099994061193,
|
||||
"y": 2526.1694642149946
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1677.9141764602605,
|
||||
"y": 2438.490408366745
|
||||
"x": 1677.9586784282067,
|
||||
"y": 2439.336287889993
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1672.7227781832871,
|
||||
"y": 2312.9046441927917
|
||||
"x": 1672.7435992108194,
|
||||
"y": 2313.5351656076173
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -155,6 +165,11 @@
|
|||
"x": 1667.2583677386065,
|
||||
"y": 2029.732786467735
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1665.224201165844,
|
||||
"y": 1790.259592444213
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1663.7116376060108,
|
||||
|
@ -182,33 +197,33 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2218.3461551694068,
|
||||
"y": 159.8778773943609
|
||||
"x": 2217.5977299326023,
|
||||
"y": 159.69675636609975
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2290.3556666474014,
|
||||
"y": 178.09786268498775
|
||||
"x": 2289.3425285726667,
|
||||
"y": 177.82671822296527
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2356.386310160867,
|
||||
"y": 196.77174097480187
|
||||
"x": 2355.330774389572,
|
||||
"y": 196.45681566842157
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2418.743012243872,
|
||||
"y": 216.38498242273093
|
||||
"x": 2417.76276883939,
|
||||
"y": 216.0621255686488
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2479.7368903013507,
|
||||
"y": 237.4114485815882
|
||||
"x": 2478.943438456191,
|
||||
"y": 237.12811808257362
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2541.791733714628,
|
||||
"y": 260.35933461464947
|
||||
"x": 2541.1839006449068,
|
||||
"y": 260.1286547630125
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -255,6 +270,11 @@
|
|||
"x": 2582.147933534884,
|
||||
"y": 902.9327107340721
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2579.6177268527103,
|
||||
"y": 916.710279982473
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2577.3549162322406,
|
||||
|
@ -337,8 +357,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2694.0188568415797,
|
||||
"y": 1154.1454872438824
|
||||
"x": 2693.986760463563,
|
||||
"y": 1154.4153784932541
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -370,6 +390,11 @@
|
|||
"x": 2655.688340739313,
|
||||
"y": 1707.7165018577969
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.778424569198,
|
||||
"y": 1721.9946692493584
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.953419573936,
|
||||
|
@ -423,7 +448,7 @@
|
|||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3105.37833426348
|
||||
"y": 3108.349696217459
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2,569 +2,675 @@
|
|||
"vector": [
|
||||
{
|
||||
"angle": 3,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"angle": 3,
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3069.6740125566685
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2014.9729320292,
|
||||
"y": 3069.6130267291883
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1999.838557691558,
|
||||
"y": 3068.8816935485092
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1985.2122453725951,
|
||||
"y": 3067.420020685311
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1971.0851302475294,
|
||||
"y": 3065.229001637756
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1957.4483474915787,
|
||||
"y": 3062.309629904003
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1944.293032279962,
|
||||
"y": 3058.6628989822143
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1931.6103197878972,
|
||||
"y": 3054.289802370551
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1919.3913451906024,
|
||||
"y": 3049.191333567172
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1907.6272436632962,
|
||||
"y": 3043.368486070239
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1896.3091503811966,
|
||||
"y": 3036.8222533779135
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1885.4282005195219,
|
||||
"y": 3029.5536289883566
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1874.9755292534905,
|
||||
"y": 3021.563606399727
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1864.9422717583204,
|
||||
"y": 3012.8531791101877
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1855.3195632092302,
|
||||
"y": 3003.4233406178982
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1846.098538781438,
|
||||
"y": 2993.2750844210195
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1837.2703336501618,
|
||||
"y": 2982.4094040177133
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1824.6988381756855,
|
||||
"y": 2964.8572538605545
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1809.2929657948505,
|
||||
"y": 2938.833269793301
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1795.2988037540088,
|
||||
"y": 2909.9574718672293
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1782.645433454907,
|
||||
"y": 2878.237808067624
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1771.2619362992912,
|
||||
"y": 2843.682226379773
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1761.0773936889077,
|
||||
"y": 2806.2986747889627
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1752.020887025502,
|
||||
"y": 2766.095101280478
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1744.0214977108208,
|
||||
"y": 2723.0794538396067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1737.00830714661,
|
||||
"y": 2677.259680451635
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1730.9103967346155,
|
||||
"y": 2628.6437291018483
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1725.656847876584,
|
||||
"y": 2577.2395477755335
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1721.1767419742605,
|
||||
"y": 2523.055084457977
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1715.6771359215397,
|
||||
"y": 2436.927798469381
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1710.5065586720987,
|
||||
"y": 2311.972555710253
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1707.153218476922,
|
||||
"y": 2176.039248721311
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1705.0497665499784,
|
||||
"y": 2029.1914613848467
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1703.0181141551627,
|
||||
"y": 1789.9386595512806
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1701.5055118110236,
|
||||
"y": 1614.2929133858268
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1676.804606592377,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1790.1904333640305,
|
||||
"y": 376.4976377952755
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2132.831278036873,
|
||||
"y": 334.01963822471856
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2170.166929133858,
|
||||
"y": 187.5212598425196
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2209.0824577516487,
|
||||
"y": 196.52029498815347
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2280.0788311549086,
|
||||
"y": 214.46913581675784
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2345.053938897079,
|
||||
"y": 232.82808880019167
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2406.430397575602,
|
||||
"y": 252.1184733940386
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2466.630823787921,
|
||||
"y": 272.8616090538824
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2528.077834131477,
|
||||
"y": 295.5788152353067
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2626.972277996681,
|
||||
"y": 334.08672189942854
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2703.4528262445083,
|
||||
"y": 364.5878268403889
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2683.174281565618,
|
||||
"y": 428.6163050991843
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2636.9155845119085,
|
||||
"y": 570.0364148944475
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2602.3359035137023,
|
||||
"y": 679.2016045836615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2581.1485889486808,
|
||||
"y": 750.3046656507598
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2562.658903353014,
|
||||
"y": 818.1666036205969
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2551.3190086136897,
|
||||
"y": 865.7283064025331
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2545.058458315721,
|
||||
"y": 895.6477493986852
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2542.4441145955184,
|
||||
"y": 909.8834645669292
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2539.941891688312,
|
||||
"y": 924.5359428210015
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.2824566009085,
|
||||
"y": 946.6345652094251
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3671357993244,
|
||||
"y": 961.2177429989904
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2536.3893819364166,
|
||||
"y": 975.5256347551833
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2537.538148749601,
|
||||
"y": 989.4206965556962
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2540.002389976296,
|
||||
"y": 1002.7653844782211
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2543.971059353917,
|
||||
"y": 1015.422154600451
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2549.633110619882,
|
||||
"y": 1027.253463000078
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2557.177497511606,
|
||||
"y": 1038.121765754795
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2566.7931737665076,
|
||||
"y": 1047.8895189422938
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2578.669093122002,
|
||||
"y": 1056.419178640267
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2592.9942093155073,
|
||||
"y": 1063.5732009264073
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2609.9574760844393,
|
||||
"y": 1069.214041878407
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2629.747847166216,
|
||||
"y": 1073.204157573959
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2652.554276298253,
|
||||
"y": 1075.406004090755
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2665.2850393700787,
|
||||
"y": 1075.7102362204726
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2656.455947900562,
|
||||
"y": 1149.9520876303336
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2642.4743193451973,
|
||||
"y": 1283.9248328571011
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2632.348846491074,
|
||||
"y": 1400.3953842544354
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2625.462074272455,
|
||||
"y": 1499.2648032469053
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2621.1965476236046,
|
||||
"y": 1580.4341512590793
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.9348114787863,
|
||||
"y": 1643.804489715526
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.8911123953603,
|
||||
"y": 1707.5262208487393
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2617.9884514435694,
|
||||
"y": 1722.9543307086615
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2618.243518754759,
|
||||
"y": 1728.6863715569775
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2620.9069750474355,
|
||||
"y": 1754.8103451532859
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2628.7361755238107,
|
||||
"y": 1818.230094084754
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2644.9536288641093,
|
||||
"y": 1932.092426039521
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2659.427198191514,
|
||||
"y": 2020.1956325333963
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2669.339056867133,
|
||||
"y": 2073.2470143796036
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2674.225047922979,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 2096.1826771653546
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3075.2356380110023
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2608.5921259842517,
|
||||
"y": 3188.621464782656
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2022.7551360150967,
|
||||
"y": 3183.059839328322
|
||||
|
|
|
@ -1,5 +1,15 @@
|
|||
{
|
||||
"vector": [
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3108.349696217459
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3107.1742631465927
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
|
@ -7,8 +17,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1980.460653502646,
|
||||
"y": 3104.734721364734
|
||||
"x": 1980.4332947144517,
|
||||
"y": 3104.9259742893705
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -62,8 +72,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1827.775230874743,
|
||||
"y": 3029.062323188764
|
||||
"x": 1828.6586787634583,
|
||||
"y": 3029.9799215151306
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -102,48 +112,48 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1724.2060573521064,
|
||||
"y": 2814.604541011345
|
||||
"x": 1724.611163823378,
|
||||
"y": 2816.233307965892
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1714.8626689124646,
|
||||
"y": 2773.005215869235
|
||||
"x": 1715.1495506887006,
|
||||
"y": 2774.4009675028606
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1706.6613158714413,
|
||||
"y": 2728.7978163582184
|
||||
"x": 1706.8632795977835,
|
||||
"y": 2729.989568428364
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1699.5068804939508,
|
||||
"y": 2681.9634933710727
|
||||
"x": 1699.6481253072302,
|
||||
"y": 2682.978042970247
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1693.3109741320875,
|
||||
"y": 2632.486420466245
|
||||
"x": 1693.4089700819563,
|
||||
"y": 2633.347542021286
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1687.9901053084427,
|
||||
"y": 2580.353927532551
|
||||
"x": 1688.057425274056,
|
||||
"y": 2581.08223913993
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1683.4582844809274,
|
||||
"y": 2525.463573878589
|
||||
"x": 1683.5099994061193,
|
||||
"y": 2526.1694642149946
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1677.9141764602605,
|
||||
"y": 2438.490408366745
|
||||
"x": 1677.9586784282067,
|
||||
"y": 2439.336287889993
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1672.7227781832871,
|
||||
"y": 2312.9046441927917
|
||||
"x": 1672.7435992108194,
|
||||
"y": 2313.5351656076173
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -155,6 +165,11 @@
|
|||
"x": 1667.2583677386065,
|
||||
"y": 2029.732786467735
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1665.224201165844,
|
||||
"y": 1790.259592444213
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1663.7116376060108,
|
||||
|
@ -182,33 +197,33 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2218.3461551694068,
|
||||
"y": 159.8778773943609
|
||||
"x": 2217.5977299326023,
|
||||
"y": 159.69675636609975
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2290.3556666474014,
|
||||
"y": 178.09786268498775
|
||||
"x": 2289.3425285726667,
|
||||
"y": 177.82671822296527
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2356.386310160867,
|
||||
"y": 196.77174097480187
|
||||
"x": 2355.330774389572,
|
||||
"y": 196.45681566842157
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2418.743012243872,
|
||||
"y": 216.38498242273093
|
||||
"x": 2417.76276883939,
|
||||
"y": 216.0621255686488
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2479.7368903013507,
|
||||
"y": 237.4114485815882
|
||||
"x": 2478.943438456191,
|
||||
"y": 237.12811808257362
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2541.791733714628,
|
||||
"y": 260.35933461464947
|
||||
"x": 2541.1839006449068,
|
||||
"y": 260.1286547630125
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -255,6 +270,11 @@
|
|||
"x": 2582.147933534884,
|
||||
"y": 902.9327107340721
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2579.6177268527103,
|
||||
"y": 916.710279982473
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2577.3549162322406,
|
||||
|
@ -337,8 +357,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2694.0188568415797,
|
||||
"y": 1154.1454872438824
|
||||
"x": 2693.986760463563,
|
||||
"y": 1154.4153784932541
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -370,6 +390,11 @@
|
|||
"x": 2655.688340739313,
|
||||
"y": 1707.7165018577969
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.778424569198,
|
||||
"y": 1721.9946692493584
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 2655.953419573936,
|
||||
|
@ -423,7 +448,7 @@
|
|||
{
|
||||
"type": "QPointF",
|
||||
"x": 1984.9598604245455,
|
||||
"y": 3105.37833426348
|
||||
"y": 3108.349696217459
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,31 +1,37 @@
|
|||
{
|
||||
"vector": [
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 99.86433649395012,
|
||||
"y": 10.166060970128015
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 236.976230899601,
|
||||
"y": 65.89294600598842
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 198.9294347511521,
|
||||
"y": 172.04822599160408
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 260.3187756756982,
|
||||
"y": 75.38014122578073
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 324.5363299638826,
|
||||
"y": 101.48031496062993
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 29.858267716535437,
|
||||
"y": 300.8503937007874
|
||||
|
|
|
@ -5,6 +5,16 @@
|
|||
"x": 73.4038432255171,
|
||||
"y": -41.386063334917424
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 284.78380715883054,
|
||||
"y": 44.52586283354347
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 245.32495095506744,
|
||||
"y": 28.488456649013926
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 404.34279917400556,
|
||||
|
|
|
@ -1,31 +1,37 @@
|
|||
{
|
||||
"vector": [
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 99.86433649395012,
|
||||
"y": 10.166060970128015
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 236.976230899601,
|
||||
"y": 65.89294600598842
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 198.9294347511521,
|
||||
"y": 172.04822599160408
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 260.3187756756982,
|
||||
"y": 75.38014122578073
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 324.5363299638826,
|
||||
"y": 101.48031496062993
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 29.858267716535437,
|
||||
"y": 300.8503937007874
|
||||
|
|
|
@ -5,6 +5,16 @@
|
|||
"x": 46.94334995708405,
|
||||
"y": -92.9381876399629
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 332.5913834180602,
|
||||
"y": 23.15877966109862
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 230.33112623443668,
|
||||
"y": -18.40322792775288
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 484.14926838412856,
|
||||
|
|
|
@ -2,147 +2,126 @@
|
|||
"vector": [
|
||||
{
|
||||
"saAfter": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 11565.008125001965,
|
||||
"y": -71.44488549419933
|
||||
"x": 11565.013142470898,
|
||||
"y": -71.44502878281966
|
||||
},
|
||||
{
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 11774.053467225081,
|
||||
"y": -3376.8303371353477
|
||||
"x": 12574.226196766724,
|
||||
"y": -4788.694779920271
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 11774.053467225081,
|
||||
"y": -3376.8303371353477
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"type": "VSAPoint",
|
||||
"x": 11821.637653562488,
|
||||
"y": -3457.444047544761
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"type": "VSAPoint",
|
||||
"x": 11916.506852253828,
|
||||
"y": -3619.698047174161
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"type": "VSAPoint",
|
||||
"x": 12011.687139013728,
|
||||
"y": -3784.3170132645946
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"type": "VSAPoint",
|
||||
"x": 12107.923065894336,
|
||||
"y": -3952.559914581168
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"type": "VSAPoint",
|
||||
"x": 12205.959184947797,
|
||||
"y": -4125.685719888987
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"type": "VSAPoint",
|
||||
"x": 12306.540048226263,
|
||||
"y": -4304.953397953153
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"type": "VSAPoint",
|
||||
"x": 12463.260680635496,
|
||||
"y": -4586.963758807588
|
||||
"x": 12574.226196766724,
|
||||
"y": -4788.694779920271
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 12688.625497168217,
|
||||
"y": -4997.457976655285
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 12937.571227539614,
|
||||
"y": -5455.181123300274
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 13363.424703096609,
|
||||
"y": -6243.3010001396
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 13704.042216387523,
|
||||
"y": -6875.648082494775
|
||||
},
|
||||
{
|
||||
"saAfter": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 13704.042216387523,
|
||||
"y": -6875.648082494775
|
||||
},
|
||||
{
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 13493.259591532773,
|
||||
"y": -71.4448854942045
|
||||
"x": 13493.254460030012,
|
||||
"y": -71.44503203938407
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 13493.259591532773,
|
||||
"y": -71.4448854942045
|
||||
"x": 13493.254460030012,
|
||||
"y": -71.44503203938407
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 13227.96813484252,
|
||||
"y": -78.38238188976378
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 12939.963705708662,
|
||||
"y": -83.80364173228347
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 12664.66535433071,
|
||||
"y": -86.51427165354332
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 12393.602362204725,
|
||||
"y": -86.51427165354332
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 12118.304010826774,
|
||||
"y": -83.80364173228347
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 11830.299581692912,
|
||||
"y": -78.38238188976378
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 11565.008125001965,
|
||||
"y": -71.44488549419933
|
||||
"x": 11565.013142470898,
|
||||
"y": -71.44502878281966
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2,48 +2,23 @@
|
|||
"vector": [
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 11560.846475874965,
|
||||
"y": -14.623761696484117
|
||||
"x": 11551.905199769692,
|
||||
"y": -14.389955863800495
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 11781.326946495077,
|
||||
"y": -3500.819302857501
|
||||
"x": 12404.150893454804,
|
||||
"y": -3997.9450330949685
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 11867.565752333256,
|
||||
"y": -3648.313692662954
|
||||
"x": 12614.150847904311,
|
||||
"y": -4979.523926317832
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 11962.607394275858,
|
||||
"y": -3812.6942063012807
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 12058.712075176787,
|
||||
"y": -3980.708890064595
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 12156.626721853161,
|
||||
"y": -4153.62126200273
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 12257.09760942872,
|
||||
"y": -4332.693831870464
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 12413.705754675855,
|
||||
"y": -4614.5027446514505
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 12638.929472529417,
|
||||
"y": -5024.741516808089
|
||||
"x": 12638.908041375378,
|
||||
"y": -5024.702444307613
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -57,38 +32,38 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 13708.573357026718,
|
||||
"y": -7003.606684992652
|
||||
"x": 13708.907465404465,
|
||||
"y": -7004.226948043184
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 13492.070905293423,
|
||||
"y": -14.763675483318366
|
||||
"x": 13492.380272854994,
|
||||
"y": -14.755597758319709
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 13226.486095144688,
|
||||
"y": -21.70884320982175
|
||||
"x": 13226.486097782079,
|
||||
"y": -21.708843140852863
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 12939.151113441983,
|
||||
"y": -27.11598122480561
|
||||
"x": 12938.896733996888,
|
||||
"y": -27.120769543772127
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 12664.386257521342,
|
||||
"x": 12664.107174239743,
|
||||
"y": -29.824106164643062
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 12393.602362204725,
|
||||
"y": -29.82135826771654
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 12393.881459014092,
|
||||
"y": -29.82135826771654
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 12119.116603093453,
|
||||
"y": -27.11598122480561
|
||||
"x": 12118.86219091774,
|
||||
"y": -27.11347624338321
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -97,8 +72,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 11560.846475874965,
|
||||
"y": -14.623761696484117
|
||||
"x": 11551.905199769692,
|
||||
"y": -14.389955863800495
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"vector": [
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1352.8346456692914,
|
||||
"y": 1173.8581417322835
|
||||
|
@ -9,20 +10,24 @@
|
|||
"angle": 6,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1352.8346456692914,
|
||||
"y": 1362.8345196850394
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1352.8346456692914,
|
||||
"y": 1362.8345196850394
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -31,6 +36,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -39,6 +45,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -47,6 +54,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -55,6 +63,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -63,6 +72,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -71,6 +81,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -79,6 +90,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -87,6 +99,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -95,6 +108,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -103,6 +117,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -111,6 +126,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -119,6 +135,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -127,6 +144,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -135,6 +153,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -143,6 +162,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -151,6 +171,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -159,6 +180,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -167,6 +189,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -175,6 +198,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -183,6 +207,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -191,8 +216,10 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 691.4173228346457,
|
||||
"y": 1476.2203464566928
|
||||
|
@ -201,20 +228,24 @@
|
|||
"angle": 6,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 691.4173228346457,
|
||||
"y": 1476.2203464566928
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 691.4173228346457,
|
||||
"y": 1476.2203464566928
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -223,6 +254,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -231,6 +263,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -239,6 +272,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -247,6 +281,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -255,6 +290,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -263,6 +299,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -271,6 +308,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -279,6 +317,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -287,6 +326,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -295,6 +335,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -303,6 +344,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -311,6 +353,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -319,6 +362,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -327,6 +371,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -335,6 +380,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"type": "VSAPoint",
|
||||
|
@ -343,8 +389,10 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 30,
|
||||
"y": 1362.8345196850394
|
||||
|
@ -353,401 +401,473 @@
|
|||
"angle": 6,
|
||||
"saAfter": 0,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 30,
|
||||
"y": 1362.8345196850394
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 30,
|
||||
"y": 1173.8581417322835
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 30,
|
||||
"y": 39.999874015748034
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 30,
|
||||
"y": 39.999874015748034
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 33.76305151898726,
|
||||
"y": 60.995030973282226
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 43.0315825387278,
|
||||
"y": 101.39020424935029
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 54.27954844568175,
|
||||
"y": 139.90490371803747
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 67.38308402773156,
|
||||
"y": 176.57656822314317
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 82.21832407275966,
|
||||
"y": 211.44263660846684
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 98.66140336864854,
|
||||
"y": 244.5405477178079
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 116.58845670328057,
|
||||
"y": 275.9077403949657
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 135.87561886453827,
|
||||
"y": 305.58165348373984
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 156.39902464030405,
|
||||
"y": 333.59972582792955
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 178.03480881846033,
|
||||
"y": 359.9993962713345
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 200.65910618688957,
|
||||
"y": 384.8181036577539
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 224.1480515334743,
|
||||
"y": 408.0932868309873
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 248.37777964609688,
|
||||
"y": 429.8623846348342
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 273.2244253126397,
|
||||
"y": 450.1628359130938
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 298.5641233209853,
|
||||
"y": 469.03207950956573
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 324.27300845901607,
|
||||
"y": 486.50755426804926
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 350.2272155146145,
|
||||
"y": 502.62669903234394
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 376.30287927566303,
|
||||
"y": 517.4269526462492
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 402.37613453004406,
|
||||
"y": 530.9457539535643
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 428.3231160656401,
|
||||
"y": 543.220541798089
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 454.0199586703335,
|
||||
"y": 554.2887550236226
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 479.34279713200675,
|
||||
"y": 564.1878324739644
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 504.1677662385423,
|
||||
"y": 572.9552129929136
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 528.3710007778225,
|
||||
"y": 580.6283354242702
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 563.3555698213261,
|
||||
"y": 590.2932652501413
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 606.5452489509445,
|
||||
"y": 599.5232277128903
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 645.018415993426,
|
||||
"y": 605.0500570136577
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 677.7841492518301,
|
||||
"y": 607.1732639028387
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 691.4173228346472,
|
||||
"y": 606.9290078739998
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 691.4173228346472,
|
||||
"y": 606.9290078739998
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 691.4173228346472,
|
||||
"y": 606.9290078739998
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 705.4040324293001,
|
||||
"y": 606.5537669203095
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 733.313887957579,
|
||||
"y": 607.2856128814886
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 761.113422978073,
|
||||
"y": 609.7421003245712
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 788.7648106968343,
|
||||
"y": 613.8630604047041
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 816.2302243199158,
|
||||
"y": 619.5883242770342
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 843.4718370533695,
|
||||
"y": 626.8577230967081
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 870.4518221032482,
|
||||
"y": 635.6110880188726
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 897.1323526756041,
|
||||
"y": 645.7882501986744
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 923.4756019764898,
|
||||
"y": 657.3290407912602
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 949.4437432119576,
|
||||
"y": 670.1732909517772
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 974.99894958806,
|
||||
"y": 684.2608318353717
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1000.1033943108496,
|
||||
"y": 699.5314945971908
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1024.7192505863786,
|
||||
"y": 715.9251103923807
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1048.8086916206998,
|
||||
"y": 733.381510376089
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1072.333890619865,
|
||||
"y": 751.8405257034619
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1095.257020789927,
|
||||
"y": 771.2419875296464
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1117.5402553369386,
|
||||
"y": 791.5257270097891
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1139.1457674669518,
|
||||
"y": 812.6315752990367
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1160.0357303860196,
|
||||
"y": 834.4993635525362
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1180.1723173001938,
|
||||
"y": 857.0689229254342
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1199.517701415527,
|
||||
"y": 880.2800845728777
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1218.0340559380716,
|
||||
"y": 904.0726796500132
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1235.6835540738803,
|
||||
"y": 928.3865393119877
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1252.4283690290056,
|
||||
"y": 953.1614947139476
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1268.2306740094996,
|
||||
"y": 978.3373770110402
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1283.0526422214152,
|
||||
"y": 1003.8540173584116
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1296.8564468708046,
|
||||
"y": 1029.651246911209
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1309.60426116372,
|
||||
"y": 1055.6688968245794
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1321.258258306214,
|
||||
"y": 1081.846798253669
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1331.780611504339,
|
||||
"y": 1108.1247823536248
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1341.1334939641479,
|
||||
"y": 1134.4426802795938
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1349.2790788916927,
|
||||
"y": 1160.7403231867224
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1352.8346456692914,
|
||||
"y": 1173.8581417322835
|
||||
|
|
|
@ -2,203 +2,208 @@
|
|||
"vector": [
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1391.2039211231315,
|
||||
"y": 1170.9444368424918
|
||||
"x": 1391.2011016775252,
|
||||
"y": 1170.934034850861
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1353.4015748031497,
|
||||
"x": 1353.716220472441,
|
||||
"y": 1362.8345196850394
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1351.1847957148477,
|
||||
"y": 1367.9837020242383
|
||||
"x": 1351.472718112178,
|
||||
"y": 1368.1105980065204
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1345.1491063827884,
|
||||
"y": 1377.0351535858993
|
||||
"x": 1345.4107517871767,
|
||||
"y": 1377.2099208012642
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1337.195060618467,
|
||||
"y": 1385.0908506308913
|
||||
"x": 1337.4187552857716,
|
||||
"y": 1385.3121255572237
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1327.4356491832236,
|
||||
"y": 1392.193532758326
|
||||
"x": 1327.6206417585736,
|
||||
"y": 1392.4480512139812
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1315.972058403799,
|
||||
"y": 1398.411239348762
|
||||
"x": 1316.1219684603934,
|
||||
"y": 1398.6878778712705
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1302.9006184964092,
|
||||
"y": 1403.813879103759
|
||||
"x": 1303.0207413941732,
|
||||
"y": 1404.1046924229804
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1288.3146848455422,
|
||||
"y": 1408.4705173942918
|
||||
"x": 1288.4103406995205,
|
||||
"y": 1408.7702703839407
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1272.3064038330447,
|
||||
"y": 1412.4487702782033
|
||||
"x": 1272.3822665169344,
|
||||
"y": 1412.7541335870615
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1245.9857010948988,
|
||||
"y": 1417.3517931078604
|
||||
"x": 1246.043310569705,
|
||||
"y": 1417.6611198697424
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1206.53852508622,
|
||||
"y": 1422.0295899414439
|
||||
"x": 1206.575567617045,
|
||||
"y": 1422.3420475355488
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1163.0590153626633,
|
||||
"y": 1425.1699495236505
|
||||
"x": 1163.0816776764527,
|
||||
"y": 1425.4837780066432
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1116.2932350829396,
|
||||
"y": 1427.2879226859707
|
||||
"x": 1116.3074690935448,
|
||||
"y": 1427.602246229705
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1041.7895077573253,
|
||||
"y": 1429.6401613199018
|
||||
"x": 1041.799436608138,
|
||||
"y": 1429.9546502944706
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 963.7205338463195,
|
||||
"y": 1432.6490541812936
|
||||
"x": 963.7326517001363,
|
||||
"y": 1432.9634664183689
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 911.2591589138497,
|
||||
"y": 1435.8168701844065
|
||||
"x": 911.2781230605095,
|
||||
"y": 1436.1309438355543
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 859.237872023468,
|
||||
"y": 1440.530494934681
|
||||
"x": 859.2662640679569,
|
||||
"y": 1440.84385700803
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 808.4052261459925,
|
||||
"y": 1447.3026887534452
|
||||
"x": 808.4467747259209,
|
||||
"y": 1447.6145791391734
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 771.5939627010235,
|
||||
"y": 1454.1324411149867
|
||||
"x": 771.6513546317626,
|
||||
"y": 1454.4418083134578
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 747.7741871176479,
|
||||
"y": 1459.5416218107064
|
||||
"x": 747.8438596303752,
|
||||
"y": 1459.8484566818895
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 724.6693192587568,
|
||||
"y": 1465.7538024321
|
||||
"x": 724.7510106846972,
|
||||
"y": 1466.0576583323743
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 702.3758460326873,
|
||||
"y": 1472.8321997422458
|
||||
"x": 702.4710574539205,
|
||||
"y": 1473.1320941944628
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 674.507015051664,
|
||||
"y": 1482.923776815389
|
||||
"x": 691.7189992449391,
|
||||
"y": 1477.0486975157376
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 639.6066402491301,
|
||||
"y": 1493.192210436715
|
||||
"x": 674.6137934445236,
|
||||
"y": 1483.2197502466663
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 603.8826034921715,
|
||||
"y": 1500.9647096620215
|
||||
"x": 639.6954429590429,
|
||||
"y": 1493.494064666296
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 567.3181507277893,
|
||||
"y": 1506.2427302418655
|
||||
"x": 603.9494838615082,
|
||||
"y": 1501.2721652090543
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 529.8901218300683,
|
||||
"y": 1509.0302296950115
|
||||
"x": 567.3630914194166,
|
||||
"y": 1506.554149944903
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 491.57527912840374,
|
||||
"y": 1509.3313030222791
|
||||
"x": 529.9134794568803,
|
||||
"y": 1509.3440071933658
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 452.3502707817418,
|
||||
"y": 1507.150148679257
|
||||
"x": 491.57774121601966,
|
||||
"y": 1509.6459390585628
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 412.19161352943087,
|
||||
"y": 1502.4910279791181
|
||||
"x": 452.33279240390664,
|
||||
"y": 1507.4643085167793
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 371.07569338620755,
|
||||
"y": 1495.3582260526082
|
||||
"x": 412.1553443701381,
|
||||
"y": 1502.803576287845
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 328.97877955542225,
|
||||
"y": 1485.756019959969
|
||||
"x": 371.02190518754037,
|
||||
"y": 1495.6682401279145
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 285.87704576492825,
|
||||
"y": 1473.6886564035954
|
||||
"x": 328.9088012872336,
|
||||
"y": 1486.0627852435086
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 241.7465938922898,
|
||||
"y": 1459.1603388979738
|
||||
"x": 285.79221063594036,
|
||||
"y": 1473.9916496346968
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 196.56347626091042,
|
||||
"y": 1442.1752227113166
|
||||
"x": 241.64819947318352,
|
||||
"y": 1459.4592041443518
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 150.30371460077188,
|
||||
"y": 1422.7374153405683
|
||||
"x": 196.45275698176602,
|
||||
"y": 1442.4697445923873
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 102.94331495188868,
|
||||
"y": 1400.8509803944567
|
||||
"x": 150.1818247717201,
|
||||
"y": 1423.0274925143988
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 54.45827862060838,
|
||||
"y": 1376.5199431940014
|
||||
"x": 102.81132005517884,
|
||||
"y": 1401.1366011998023
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 29.507951730702608,
|
||||
"y": 1363.2146255965158
|
||||
"x": 54.31715268342318,
|
||||
"y": 1376.8011644006297
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 29.233766383669003,
|
||||
"y": 1363.4249985383867
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -212,13 +217,13 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 61.10102183090257,
|
||||
"x": 61.101021830902596,
|
||||
"y": -0.7096412239110919
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 70.80478764466314,
|
||||
"y": 53.4304855617782
|
||||
"y": 53.43048556177821
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -357,8 +362,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 706.3947511130126,
|
||||
"y": 568.7714782991122
|
||||
"x": 704.5565208119547,
|
||||
"y": 568.7679947166857
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -392,123 +397,128 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 912.2986372044141,
|
||||
"y": 611.1693728258188
|
||||
"x": 910.602492678925,
|
||||
"y": 610.4748223665233
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 940.2320789181749,
|
||||
"y": 623.4512702408151
|
||||
"x": 938.6418865052998,
|
||||
"y": 622.7101634184046
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 967.6899838064253,
|
||||
"y": 637.0740830891309
|
||||
"x": 966.2002201536427,
|
||||
"y": 636.295520401332
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 994.6408167524145,
|
||||
"y": 651.9702773145275
|
||||
"x": 993.2451901825277,
|
||||
"y": 651.1616239727255
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1021.0534381150906,
|
||||
"y": 668.0739275970849
|
||||
"x": 1019.7452614752041,
|
||||
"y": 667.2409400763465
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1046.8968187993657,
|
||||
"y": 685.3205629341362
|
||||
"x": 1045.6692943906153,
|
||||
"y": 684.4675433922748
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1072.1398306898122,
|
||||
"y": 703.64700505477
|
||||
"x": 1070.986259833687,
|
||||
"y": 702.7769629178445
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1096.7510983823208,
|
||||
"y": 722.9912133710887
|
||||
"x": 1095.6650296889775,
|
||||
"y": 722.106020382143
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1120.6988985644755,
|
||||
"y": 743.2921447345486
|
||||
"x": 1119.6742285523828,
|
||||
"y": 742.3926751972732
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1143.951094808868,
|
||||
"y": 764.4896323333478
|
||||
"x": 1142.982133111487,
|
||||
"y": 763.5758842146913
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1166.4750973318512,
|
||||
"y": 786.5242853956154
|
||||
"x": 1165.5566069388813,
|
||||
"y": 785.5954806225955
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1188.2378390526756,
|
||||
"y": 809.3374096594064
|
||||
"x": 1187.365060250919,
|
||||
"y": 808.3920736491149
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1209.2057608601567,
|
||||
"y": 832.8709475552462
|
||||
"x": 1208.3744259668497,
|
||||
"y": 831.9069690323043
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1229.3448002632733,
|
||||
"y": 857.0674364841201
|
||||
"x": 1228.55114497549,
|
||||
"y": 856.0821092026897
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1248.6203785442863,
|
||||
"y": 881.8699832733486
|
||||
"x": 1247.861154785818,
|
||||
"y": 880.8600315612556
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1266.9973821590536,
|
||||
"y": 907.2222527041721
|
||||
"x": 1266.269876680095,
|
||||
"y": 906.183842935323
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1284.4401344692822,
|
||||
"y": 933.0684678050294
|
||||
"x": 1283.742197114179,
|
||||
"y": 931.997208106132
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1300.9123539842592,
|
||||
"y": 959.3534192837141
|
||||
"x": 1300.2424394497762,
|
||||
"y": 958.244350102122
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1316.3770951840902,
|
||||
"y": 986.0224809214067
|
||||
"x": 1315.7343221961748,
|
||||
"y": 984.8700596310855
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1330.796667754822,
|
||||
"y": 1013.0216268521107
|
||||
"x": 1330.1808998334795,
|
||||
"y": 1011.8197104741997
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1344.1325297827989,
|
||||
"y": 1040.2974452621988
|
||||
"x": 1343.5444820477373,
|
||||
"y": 1039.0392767654812
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1356.3451502749065,
|
||||
"y": 1067.7971410001053
|
||||
"x": 1355.786526925293,
|
||||
"y": 1066.4753466912885
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1367.393836528276,
|
||||
"y": 1095.4685166974318
|
||||
"x": 1366.8675034730315,
|
||||
"y": 1094.075125100061
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1377.236522737057,
|
||||
"y": 1123.259918081096
|
||||
"x": 1376.746718988085,
|
||||
"y": 1121.7864146234008
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1385.3821076646018,
|
||||
"y": 1149.5575609882246
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -517,8 +527,8 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1391.2039211231315,
|
||||
"y": 1170.9444368424918
|
||||
"x": 1391.2011016775252,
|
||||
"y": 1170.934034850861
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2,125 +2,149 @@
|
|||
"vector": [
|
||||
{
|
||||
"angle": 2,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1122.8447244094489,
|
||||
"y": 91.85612598425197
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1122.8447244094489,
|
||||
"y": -664.0493858267716
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1122.8447244094489,
|
||||
"y": -664.0493858267716
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1123.2605071010314,
|
||||
"y": -692.1027566151841
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1125.5521344988651,
|
||||
"y": -746.904953834852
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1129.5018897097445,
|
||||
"y": -800.813185020781
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1135.005387617497,
|
||||
"y": -854.573547056137
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1141.9582431059482,
|
||||
"y": -908.9321368240863
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1150.2560710589246,
|
||||
"y": -964.635051207795
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1164.860792708483,
|
||||
"y": -1051.9409225168733
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1176.2406858386873,
|
||||
"y": -1114.83483747791
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1176.2406858386873,
|
||||
"y": -1114.83483747791
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1179.7035125223924,
|
||||
"y": -1136.9452686438185
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1186.627664934387,
|
||||
"y": -1177.145289266175
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1197.298845134993,
|
||||
"y": -1231.2802973446833
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1213.068331853193,
|
||||
"y": -1298.0112723855073
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1231.8133334949034,
|
||||
"y": -1369.0339174169235
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1242.934050298766,
|
||||
"y": -1410.35475
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1242.934050298766,
|
||||
"y": -1410.35475
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2006.3092913385829,
|
||||
"y": -1344.3643464566928
|
||||
},
|
||||
{
|
||||
"saAfter": 56.69291338582678,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2006.3092913385829,
|
||||
"y": -664.0493858267716
|
||||
},
|
||||
{
|
||||
"saBefore": 56.69291338582678,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2006.3092913385829,
|
||||
"y": 91.85612598425197
|
||||
|
|
|
@ -5,6 +5,11 @@
|
|||
"x": 1085.0694887145344,
|
||||
"y": 129.65140157480317
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1085.0494435032829,
|
||||
"y": 91.85612598425197
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1085.4656504337784,
|
||||
|
@ -12,28 +17,28 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1087.857898937872,
|
||||
"y": -749.6667399304415
|
||||
"x": 1087.7898601657712,
|
||||
"y": -748.4840339969
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1091.9031145734355,
|
||||
"y": -804.6622063529023
|
||||
"x": 1091.8076541487517,
|
||||
"y": -803.5749711163705
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1097.515539595737,
|
||||
"y": -859.3687688728184
|
||||
"x": 1097.406612481188,
|
||||
"y": -858.4225683882584
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1104.5754685306931,
|
||||
"y": -914.5008909056683
|
||||
"x": 1104.4683950841882,
|
||||
"y": -913.7273586407676
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1112.978768668652,
|
||||
"y": -970.8708818236878
|
||||
"x": 1112.8732964836695,
|
||||
"y": -970.2038052893769
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -42,18 +47,23 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1149.5459641167045,
|
||||
"y": -1184.4548940046989
|
||||
"x": 1142.4715598772536,
|
||||
"y": -1143.4463884855134
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1160.5166586790917,
|
||||
"y": -1239.9724556778692
|
||||
"x": 1149.3808605824634,
|
||||
"y": -1183.5607722982636
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1176.5244363705685,
|
||||
"y": -1307.6563001159316
|
||||
"x": 1160.2171443173104,
|
||||
"y": -1238.589902083207
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1176.2861453972919,
|
||||
"y": -1306.7034307186932
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
|
|
@ -2,124 +2,148 @@
|
|||
"vector": [
|
||||
{
|
||||
"angle": 2,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1122.8447244094489,
|
||||
"y": 91.85612598425197
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1122.8447244094489,
|
||||
"y": -664.0493858267716
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1122.8447244094489,
|
||||
"y": -664.0493858267716
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1123.2605071010314,
|
||||
"y": -692.1027566151841
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1125.5521344988651,
|
||||
"y": -746.904953834852
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1129.5018897097445,
|
||||
"y": -800.813185020781
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1135.005387617497,
|
||||
"y": -854.573547056137
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1141.9582431059482,
|
||||
"y": -908.9321368240863
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1150.2560710589246,
|
||||
"y": -964.635051207795
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1164.860792708483,
|
||||
"y": -1051.9409225168733
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1176.2406858386873,
|
||||
"y": -1114.83483747791
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1176.2406858386873,
|
||||
"y": -1114.83483747791
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1179.7035125223924,
|
||||
"y": -1136.9452686438185
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1186.627664934387,
|
||||
"y": -1177.145289266175
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1197.298845134993,
|
||||
"y": -1231.2802973446833
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1213.068331853193,
|
||||
"y": -1298.0112723855073
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1231.8133334949034,
|
||||
"y": -1369.0339174169235
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1242.934050298766,
|
||||
"y": -1410.35475
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 1242.934050298766,
|
||||
"y": -1410.35475
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2006.3092913385829,
|
||||
"y": -1344.3643464566928
|
||||
},
|
||||
{
|
||||
"saAfter": 56.69291338582678,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2006.3092913385829,
|
||||
"y": -664.0493858267716
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": 2006.3092913385829,
|
||||
"y": 91.85612598425197
|
||||
|
|
|
@ -5,6 +5,11 @@
|
|||
"x": 1085.0694887145344,
|
||||
"y": 129.65140157480317
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1085.0494435032829,
|
||||
"y": 91.85612598425197
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1085.4656504337784,
|
||||
|
@ -12,28 +17,28 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1087.857898937872,
|
||||
"y": -749.6667399304415
|
||||
"x": 1087.7898601657712,
|
||||
"y": -748.4840339969
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1091.9031145734355,
|
||||
"y": -804.6622063529023
|
||||
"x": 1091.8076541487517,
|
||||
"y": -803.5749711163705
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1097.515539595737,
|
||||
"y": -859.3687688728184
|
||||
"x": 1097.406612481188,
|
||||
"y": -858.4225683882584
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1104.5754685306931,
|
||||
"y": -914.5008909056683
|
||||
"x": 1104.4683950841882,
|
||||
"y": -913.7273586407676
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1112.978768668652,
|
||||
"y": -970.8708818236878
|
||||
"x": 1112.8732964836695,
|
||||
"y": -970.2038052893769
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -42,18 +47,23 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1149.5459641167045,
|
||||
"y": -1184.4548940046989
|
||||
"x": 1142.4715598772536,
|
||||
"y": -1143.4463884855134
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1160.5166586790917,
|
||||
"y": -1239.9724556778692
|
||||
"x": 1149.3808605824634,
|
||||
"y": -1183.5607722982636
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1176.5244363705685,
|
||||
"y": -1307.6563001159316
|
||||
"x": 1160.2171443173104,
|
||||
"y": -1238.589902083207
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": 1176.2861453972919,
|
||||
"y": -1306.7034307186932
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
{
|
||||
"saAfter": 0,
|
||||
"saBefore": 37.795275590551185,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -814.7149606299213,
|
||||
"y": 331.31319685039375
|
||||
|
@ -10,19 +11,23 @@
|
|||
{
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -814.7149606299213,
|
||||
"y": -8.844283464566928
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -814.7149606299213,
|
||||
"y": -8.844283464566928
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -31,6 +36,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -39,6 +45,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -47,6 +54,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -55,6 +63,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -63,6 +72,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -71,6 +81,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -79,6 +90,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -87,6 +99,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -95,6 +108,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -102,84 +116,103 @@
|
|||
"y": -69.04225265620269
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -590.4629921259842,
|
||||
"y": -72.52932283464567
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -590.4629921259842,
|
||||
"y": -72.52932283464567
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -231.11800695198497,
|
||||
"y": 95.87915857519384
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -231.11800695198497,
|
||||
"y": 95.87915857519384
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -238.40281543387266,
|
||||
"y": 116.44191216638788
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -251.05490182747536,
|
||||
"y": 155.85530707633535
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -261.5198582532174,
|
||||
"y": 193.3982017541216
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -269.9242477292619,
|
||||
"y": 229.27507897171068
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -276.39463327377155,
|
||||
"y": 263.69042150106657
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -281.0575779049093,
|
||||
"y": 296.8487121141533
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -284.03964464083833,
|
||||
"y": 328.95443358293466
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -284.1473856336994,
|
||||
"y": 331.31319685039375
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -284.1473856336994,
|
||||
"y": 331.31319685039375
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -284.1473856336994,
|
||||
"y": 331.31319685039375
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -188,6 +221,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -196,6 +230,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -204,6 +239,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -212,6 +248,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -220,6 +257,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -228,6 +266,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -236,6 +275,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -244,6 +284,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -252,6 +293,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -260,6 +302,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -268,6 +311,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -276,6 +320,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -284,6 +329,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -292,6 +338,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -300,6 +347,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -308,6 +356,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -316,6 +365,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -324,6 +374,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -332,6 +383,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -340,6 +392,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -348,6 +401,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -356,6 +410,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -364,6 +419,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -372,6 +428,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -380,6 +437,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -388,6 +446,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -396,6 +455,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -404,6 +464,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -412,6 +473,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -420,6 +482,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -428,6 +491,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -436,6 +500,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -444,6 +509,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -452,6 +518,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -460,6 +527,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -467,8 +535,10 @@
|
|||
"y": 331.90352529002166
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"saAfter": 0,
|
||||
"saBefore": 37.795275590551185,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -814.7149606299213,
|
||||
"y": 331.31319685039375
|
||||
|
|
|
@ -1,10 +1,30 @@
|
|||
{
|
||||
"vector": [
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -838.7026077978918,
|
||||
"y": 360.52065549216434
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -815.5965354330709,
|
||||
"y": 331.31319685039375
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -815.5965354330709,
|
||||
"y": 28.923105387765915
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -815.5965354330709,
|
||||
"y": -46.674417477891
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -814.2667801920632,
|
||||
"y": -46.77051665539527
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -778.5602746831936,
|
||||
|
@ -35,6 +55,11 @@
|
|||
"x": -652.0000133582188,
|
||||
"y": -80.53001488530833
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -647.5347421078782,
|
||||
"y": -82.70049226350477
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -631.5852394687809,
|
||||
|
@ -140,46 +165,91 @@
|
|||
"x": -374.97963878344376,
|
||||
"y": 385.6272715746786
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -394.4224543531813,
|
||||
"y": 386.9889713429367
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -414.7876067251059,
|
||||
"y": 388.13579550460213
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -435.9520270040894,
|
||||
"y": 389.07661798449516
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -457.7859582653625,
|
||||
"y": 389.818484035946
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -480.15529936788164,
|
||||
"y": 390.3673559353522
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -502.9230721502445,
|
||||
"y": 390.728524359008
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -525.9503830211974,
|
||||
"y": 390.90684349642925
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -549.0970864147907,
|
||||
"y": 390.9068680348474
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -572.2222728858704,
|
||||
"y": 390.7329321107656
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -595.1846601171007,
|
||||
"y": 390.3891909827686
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -617.8429427582322,
|
||||
"y": 389.87963542037477
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -640.0561486385066,
|
||||
"y": 389.208081776043
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -661.6840517509004,
|
||||
"y": 388.3781346110808
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -682.5877079123347,
|
||||
"y": 387.3931112039713
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -702.630213618707,
|
||||
"y": 386.255904969502
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -721.6778577696439,
|
||||
"y": 384.9687413227849
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -739.6019742862287,
|
||||
"y": 383.5327301728105
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -756.2820913691256,
|
||||
|
@ -207,13 +277,28 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -815.5965354330709,
|
||||
"y": 371.9998875942574
|
||||
"x": -818.0929557813755,
|
||||
"y": 371.2795759163598
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -815.5965354330709,
|
||||
"y": -46.674417477891
|
||||
"x": -823.6929755287612,
|
||||
"y": 369.27180555079025
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -829.5753368833404,
|
||||
"y": 366.62694879394627
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -835.8151397150936,
|
||||
"y": 362.8920896668543
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -838.7026077978918,
|
||||
"y": 360.52065549216434
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
{
|
||||
"saAfter": 151.18110236220474,
|
||||
"saBefore": 37.795275590551185,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -814.7149606299213,
|
||||
"y": 331.31319685039375
|
||||
|
@ -10,19 +11,23 @@
|
|||
{
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -814.7149606299213,
|
||||
"y": -8.844283464566928
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 0,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -814.7149606299213,
|
||||
"y": -8.844283464566928
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -31,6 +36,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -39,6 +45,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -47,6 +54,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -55,6 +63,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -63,6 +72,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -71,6 +81,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -79,6 +90,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -87,6 +99,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -95,6 +108,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -102,84 +116,103 @@
|
|||
"y": -69.04225265620269
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -590.4629921259842,
|
||||
"y": -72.52932283464567
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -590.4629921259842,
|
||||
"y": -72.52932283464567
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -231.11800695198497,
|
||||
"y": 95.87915857519384
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -231.11800695198497,
|
||||
"y": 95.87915857519384
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -238.40281543387266,
|
||||
"y": 116.44191216638788
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -251.05490182747536,
|
||||
"y": 155.85530707633535
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -261.5198582532174,
|
||||
"y": 193.3982017541216
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -269.9242477292619,
|
||||
"y": 229.27507897171068
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -276.39463327377155,
|
||||
"y": 263.69042150106657
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -281.0575779049093,
|
||||
"y": 296.8487121141533
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -284.03964464083833,
|
||||
"y": 328.95443358293466
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -284.1473856336994,
|
||||
"y": 331.31319685039375
|
||||
},
|
||||
{
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -284.1473856336994,
|
||||
"y": 331.31319685039375
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -284.1473856336994,
|
||||
"y": 331.31319685039375
|
||||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -188,6 +221,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -196,6 +230,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -204,6 +239,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -212,6 +248,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -220,6 +257,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -228,6 +266,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -236,6 +275,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -244,6 +284,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -252,6 +293,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -260,6 +302,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -268,6 +311,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -276,6 +320,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -284,6 +329,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -292,6 +338,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -300,6 +347,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -308,6 +356,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -316,6 +365,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -324,6 +374,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -332,6 +383,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -340,6 +392,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -348,6 +401,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -356,6 +410,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -364,6 +419,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -372,6 +428,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -380,6 +437,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -388,6 +446,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -396,6 +455,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -404,6 +464,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -412,6 +473,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -420,6 +482,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -428,6 +491,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -436,6 +500,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -444,6 +509,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -452,6 +518,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -460,6 +527,7 @@
|
|||
},
|
||||
{
|
||||
"angle": 6,
|
||||
"curvePoint": true,
|
||||
"saAfter": 37.795275590551185,
|
||||
"saBefore": 37.795275590551185,
|
||||
"type": "VSAPoint",
|
||||
|
@ -467,8 +535,10 @@
|
|||
"y": 331.90352529002166
|
||||
},
|
||||
{
|
||||
"curvePoint": true,
|
||||
"saAfter": 151.18110236220474,
|
||||
"saBefore": 37.795275590551185,
|
||||
"turnPoint": true,
|
||||
"type": "VSAPoint",
|
||||
"x": -814.7149606299213,
|
||||
"y": 331.31319685039375
|
||||
|
|
|
@ -2,8 +2,18 @@
|
|||
"vector": [
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -947.2972331766374,
|
||||
"y": 289.2203760039845
|
||||
"x": -920.795365621608,
|
||||
"y": 293.099106295665
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -941.498251666416,
|
||||
"y": 276.0961368866333
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -831.8430732289739,
|
||||
"y": 27.924836507053584
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
|
@ -40,6 +50,11 @@
|
|||
"x": -652.0000133582188,
|
||||
"y": -80.53001488530833
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -647.5347421078782,
|
||||
"y": -82.70049226350477
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -631.5852394687809,
|
||||
|
@ -145,46 +160,91 @@
|
|||
"x": -374.97963878344376,
|
||||
"y": 385.6272715746786
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -394.4224543531813,
|
||||
"y": 386.9889713429367
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -414.7876067251059,
|
||||
"y": 388.13579550460213
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -435.9520270040894,
|
||||
"y": 389.07661798449516
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -457.7859582653625,
|
||||
"y": 389.818484035946
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -480.15529936788164,
|
||||
"y": 390.3673559353522
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -502.9230721502445,
|
||||
"y": 390.728524359008
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -525.9503830211974,
|
||||
"y": 390.90684349642925
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -549.0970864147907,
|
||||
"y": 390.9068680348474
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -572.2222728858704,
|
||||
"y": 390.7329321107656
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -595.1846601171007,
|
||||
"y": 390.3891909827686
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -617.8429427582322,
|
||||
"y": 389.87963542037477
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -640.0561486385066,
|
||||
"y": 389.208081776043
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -661.6840517509004,
|
||||
"y": 388.3781346110808
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -682.5877079123347,
|
||||
"y": 387.3931112039713
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -702.630213618707,
|
||||
"y": 386.255904969502
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -721.6778577696439,
|
||||
"y": 384.9687413227849
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -739.6019742862287,
|
||||
"y": 383.5327301728105
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -756.2820913691256,
|
||||
|
@ -222,13 +282,18 @@
|
|||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -830.3240189199333,
|
||||
"y": 366.2903226290697
|
||||
"x": -829.5753368833404,
|
||||
"y": 366.62694879394627
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -947.2972331766374,
|
||||
"y": 289.2203760039845
|
||||
"x": -835.8151397150936,
|
||||
"y": 362.8920896668543
|
||||
},
|
||||
{
|
||||
"type": "QPointF",
|
||||
"x": -920.795365621608,
|
||||
"y": 293.099106295665
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user