Compare commits

...

6 commits

Author SHA1 Message Date
Roman Telezhynskyi 857e384221 New grainline type: Four way. 2023-04-07 10:05:29 +03:00
Roman Telezhynskyi 9cd31f1dd7 Fix notches. 2023-04-06 18:21:24 +03:00
Roman Telezhynskyi 6e295f7172 Fix list of dimension popup list. Make sure it will always has enough space for values. 2023-04-05 17:09:54 +03:00
Roman Telezhynskyi 433389b798 QScopedPointer::take() was deprecated since 6.1. 2023-04-03 13:44:20 +03:00
Roman Telezhynskyi e7e4e07162 Fix seam allowance. Loose requirements to case with prong. 2023-04-03 10:50:25 +03:00
Roman Telezhynskyi 944d9e71e0 Fix compatibility with Richpeace DXF-AAMA/ASTM R12. 2023-04-01 15:03:34 +03:00
50 changed files with 2987 additions and 1289 deletions

View file

@ -18,6 +18,10 @@
- Fix QT issue on MacOS version 11.0 "Big Sur". - Fix QT issue on MacOS version 11.0 "Big Sur".
- Fix excluding objects in internal path. - Fix excluding objects in internal path.
- Fix float-point accuracy issue in multisize measurements dimensions. - Fix float-point accuracy issue in multisize measurements dimensions.
- Fix compatibility with Richpeace DXF-AAMA/ASTM R12.
- Fix seam allowance. Loose requirements to case with prong.
- Fix list of dimension popup list. Make sure it will always has enough space for values.
- New grainline type: Four way.
# Valentina 0.7.52 September 12, 2022 # Valentina 0.7.52 September 12, 2022
- Fix crash when default locale is ru. - Fix crash when default locale is ru.

View file

@ -270,7 +270,7 @@ void VPPiece::RotateToGrainline(const VPTransformationOrigon &origin)
{ {
degrees = DegreesAtRear(); degrees = DegreesAtRear();
} }
else else if (type == GrainlineArrowDirection::atBoth)
{ {
const qreal atFront = DegreesAtFront(); const qreal atFront = DegreesAtFront();
if (atFront <= 90 || atFront >= 270) if (atFront <= 90 || atFront >= 270)
@ -282,6 +282,22 @@ void VPPiece::RotateToGrainline(const VPTransformationOrigon &origin)
degrees = DegreesAtRear(); degrees = DegreesAtRear();
} }
} }
else
{
const qreal atFront = DegreesAtFront();
if (atFront <= 45)
{
degrees = atFront;
}
else if (atFront > 45 && atFront < 90)
{
degrees = atFront - 90;
}
else
{
degrees = atFront - 90 * qFloor(atFront / 90);
}
}
if (origin.custom) if (origin.custom)
{ {

View file

@ -111,9 +111,10 @@ auto StringToGrainlineArrowDirrection(const QString &dirrection) -> GrainlineArr
{ {
const QStringList arrows const QStringList arrows
{ {
ML::atFrontStr, // 0 ML::atFrontStr, // 0
ML::atRearStr, // 1 ML::atRearStr, // 1
ML::atBothStr // 2 ML::atFourWayStr, // 2
ML::atBothStr // 3
}; };
GrainlineArrowDirection arrowDirection = GrainlineArrowDirection::atBoth; GrainlineArrowDirection arrowDirection = GrainlineArrowDirection::atBoth;
@ -125,7 +126,10 @@ auto StringToGrainlineArrowDirrection(const QString &dirrection) -> GrainlineArr
case 1:// at rear case 1:// at rear
arrowDirection = GrainlineArrowDirection::atRear; arrowDirection = GrainlineArrowDirection::atRear;
break; break;
case 2:// at both case 2:// at four way
arrowDirection = GrainlineArrowDirection::atFourWay;
break;
case 3:// at both
default: default:
arrowDirection = GrainlineArrowDirection::atBoth; arrowDirection = GrainlineArrowDirection::atBoth;
break; break;

View file

@ -121,6 +121,8 @@ auto GrainlineArrowDirrectionToString(GrainlineArrowDirection type) -> QString
return ML::atFrontStr; return ML::atFrontStr;
case GrainlineArrowDirection::atRear: case GrainlineArrowDirection::atRear:
return ML::atRearStr; return ML::atRearStr;
case GrainlineArrowDirection::atFourWay:
return ML::atFourWayStr;
case GrainlineArrowDirection::atBoth: case GrainlineArrowDirection::atBoth:
default: default:
return ML::atBothStr; return ML::atBothStr;

View file

@ -117,6 +117,7 @@ const QString AttrCurvePoint = QStringLiteral("curvePoint"); // NOLINT
const QString atFrontStr = QStringLiteral("atFront"); // NOLINT(cert-err58-cpp) const QString atFrontStr = QStringLiteral("atFront"); // NOLINT(cert-err58-cpp)
const QString atRearStr = QStringLiteral("atRear"); // NOLINT(cert-err58-cpp) const QString atRearStr = QStringLiteral("atRear"); // NOLINT(cert-err58-cpp)
const QString atFourWayStr = QStringLiteral("atFourWay"); // NOLINT(cert-err58-cpp)
const QString atBothStr = QStringLiteral("atBoth"); // NOLINT(cert-err58-cpp) const QString atBothStr = QStringLiteral("atBoth"); // NOLINT(cert-err58-cpp)
const QChar groupSep = QLatin1Char(';'); const QChar groupSep = QLatin1Char(';');

View file

@ -122,6 +122,7 @@ extern const QString AttrCurvePoint;
extern const QString atFrontStr; extern const QString atFrontStr;
extern const QString atRearStr; extern const QString atRearStr;
extern const QString atFourWayStr;
extern const QString atBothStr; extern const QString atBothStr;
extern const QChar groupSep; extern const QChar groupSep;

View file

@ -2905,6 +2905,21 @@ void TMainWindow::InitDimensionGradation(int index, const MeasurementDimension_p
InitDimensionYWZItems(bases, labels, control, unit, dimension->IsBodyMeasurement(), fc); InitDimensionYWZItems(bases, labels, control, unit, dimension->IsBodyMeasurement(), fc);
} }
// Calculate the width of the largest item using QFontMetrics
QFontMetrics fontMetrics(control->font());
int maxWidth = 0;
for (int i = 0; i < control->count(); ++i)
{
int itemWidth = TextWidth(fontMetrics, control->itemText(i));
if (itemWidth > maxWidth)
{
maxWidth = itemWidth;
}
}
// Set the minimum width of the view to the largest item width
control->view()->setMinimumWidth(maxWidth);
// after initialization the current index is 0. The signal for changing the index will not be triggered if not make // after initialization the current index is 0. The signal for changing the index will not be triggered if not make
// it invalid first // it invalid first
control->setCurrentIndex(-1); control->setCurrentIndex(-1);

View file

@ -4918,6 +4918,21 @@ void MainWindow::InitDimensionGradation(int index, const MeasurementDimension_p
InitDimensionYWZGradation(bases, labels, control, dimension->IsBodyMeasurement()); InitDimensionYWZGradation(bases, labels, control, dimension->IsBodyMeasurement());
} }
// Calculate the width of the largest item using QFontMetrics
QFontMetrics fontMetrics(control->font());
int maxWidth = 0;
for (int i = 0; i < control->count(); ++i)
{
int itemWidth = TextWidth(fontMetrics, control->itemText(i));
if (itemWidth > maxWidth)
{
maxWidth = itemWidth;
}
}
// Set the minimum width of the view to the largest item width
control->view()->setMinimumWidth(maxWidth);
// after initialization the current index is 0. The signal for changing the index will not be triggered if not make // after initialization the current index is 0. The signal for changing the index will not be triggered if not make
// it invalid first // it invalid first
control->setCurrentIndex(-1); control->setCurrentIndex(-1);
@ -5849,8 +5864,8 @@ auto MainWindow::LoadPattern(QString fileName, const QString& customMeasureFile)
QFuture<VPatternConverter *> futureConverter = QtConcurrent::run([fileName]() QFuture<VPatternConverter *> futureConverter = QtConcurrent::run([fileName]()
{ {
QScopedPointer<VPatternConverter> converter(new VPatternConverter(fileName)); std::unique_ptr<VPatternConverter> converter(new VPatternConverter(fileName));
return converter.take(); return converter.release();
}); });
//We have unsaved changes or load more then one file per time //We have unsaved changes or load more then one file per time

View file

@ -95,5 +95,6 @@
<file>schema/layout/v0.1.1.xsd</file> <file>schema/layout/v0.1.1.xsd</file>
<file>schema/layout/v0.1.2.xsd</file> <file>schema/layout/v0.1.2.xsd</file>
<file>schema/layout/v0.1.3.xsd</file> <file>schema/layout/v0.1.3.xsd</file>
<file>schema/layout/v0.1.4.xsd</file>
</qresource> </qresource>
</RCC> </RCC>

View file

@ -0,0 +1,568 @@
<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:attribute type="xs:boolean" name="builtIn" 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="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="uid" 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="xs:boolean" name="sewLineOnDrawing"/>
<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:attribute type="xs:boolean" name="builtIn" 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="uid" 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="xs:boolean" name="sewLineOnDrawing"/>
<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:enumeration value="atFourWay"/>
</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>

View file

@ -953,6 +953,8 @@
<!--Front--> <!--Front-->
<xs:enumeration value="2"/> <xs:enumeration value="2"/>
<!--Rear--> <!--Rear-->
<xs:enumeration value="3"/>
<!--For way-->
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
<xs:simpleType name="pieceVersion"> <xs:simpleType name="pieceVersion">

View file

@ -39,8 +39,8 @@
*/ */
const QString VLayoutConverter::LayoutMinVerStr = QStringLiteral("0.1.0"); const QString VLayoutConverter::LayoutMinVerStr = QStringLiteral("0.1.0");
const QString VLayoutConverter::LayoutMaxVerStr = QStringLiteral("0.1.3"); const QString VLayoutConverter::LayoutMaxVerStr = QStringLiteral("0.1.4");
const QString VLayoutConverter::CurrentSchema = QStringLiteral("://schema/layout/v0.1.3.xsd"); const QString VLayoutConverter::CurrentSchema = QStringLiteral("://schema/layout/v0.1.4.xsd");
//VLayoutConverter::LayoutMinVer; // <== DON'T FORGET TO UPDATE TOO!!!! //VLayoutConverter::LayoutMinVer; // <== DON'T FORGET TO UPDATE TOO!!!!
//VLayoutConverter::LayoutMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!! //VLayoutConverter::LayoutMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!!
@ -125,7 +125,8 @@ auto VLayoutConverter::XSDSchemas() -> QHash<unsigned int, QString>
std::make_pair(FormatVersion(0, 1, 0), QStringLiteral("://schema/layout/v0.1.0.xsd")), 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, 1), QStringLiteral("://schema/layout/v0.1.1.xsd")),
std::make_pair(FormatVersion(0, 1, 2), QStringLiteral("://schema/layout/v0.1.2.xsd")), std::make_pair(FormatVersion(0, 1, 2), QStringLiteral("://schema/layout/v0.1.2.xsd")),
std::make_pair(FormatVersion(0, 1, 3), CurrentSchema), std::make_pair(FormatVersion(0, 1, 3), QStringLiteral("://schema/layout/v0.1.3.xsd")),
std::make_pair(FormatVersion(0, 1, 4), CurrentSchema),
}; };
return schemas; return schemas;
@ -156,9 +157,12 @@ void VLayoutConverter::ApplyPatches()
case (FormatVersion(0, 1, 1)): case (FormatVersion(0, 1, 1)):
case (FormatVersion(0, 1, 2)): case (FormatVersion(0, 1, 2)):
ToV0_1_3(); ToV0_1_3();
ValidateXML(XSDSchema(FormatVersion(0, 1, 3)));
Q_FALLTHROUGH(); Q_FALLTHROUGH();
case (FormatVersion(0, 1, 3)): case (FormatVersion(0, 1, 3)):
ToV0_1_4();
ValidateXML(CurrentSchema);
Q_FALLTHROUGH();
case (FormatVersion(0, 1, 4)):
break; break;
default: default:
InvalidVersion(m_ver); InvalidVersion(m_ver);
@ -271,3 +275,13 @@ void VLayoutConverter::ToV0_1_3()
SetVersion(QStringLiteral("0.1.3")); SetVersion(QStringLiteral("0.1.3"));
Save(); Save();
} }
//---------------------------------------------------------------------------------------------------------------------
void VLayoutConverter::ToV0_1_4()
{
// TODO. Delete if minimal supported version is 0.1.4
Q_STATIC_ASSERT_X(VLayoutConverter::LayoutMinVer < FormatVersion(0, 1, 4),
"Time to refactor the code.");
SetVersion(QStringLiteral("0.1.4"));
Save();
}

View file

@ -46,7 +46,7 @@ public:
static const QString LayoutMaxVerStr; static const QString LayoutMaxVerStr;
static const QString CurrentSchema; static const QString CurrentSchema;
static Q_DECL_CONSTEXPR const unsigned LayoutMinVer = FormatVersion(0, 1, 0); static Q_DECL_CONSTEXPR const unsigned LayoutMinVer = FormatVersion(0, 1, 0);
static Q_DECL_CONSTEXPR const unsigned LayoutMaxVer = FormatVersion(0, 1, 3); static Q_DECL_CONSTEXPR const unsigned LayoutMaxVer = FormatVersion(0, 1, 4);
static auto XSDSchemas() -> QHash <unsigned, QString>; static auto XSDSchemas() -> QHash <unsigned, QString>;
@ -70,6 +70,7 @@ protected:
void ConvertPathToV0_1_3(QDomElement &node); void ConvertPathToV0_1_3(QDomElement &node);
void ToV0_1_3(); void ToV0_1_3();
void ToV0_1_4();
private: private:
Q_DISABLE_COPY_MOVE(VLayoutConverter) // NOLINT Q_DISABLE_COPY_MOVE(VLayoutConverter) // NOLINT

View file

@ -1002,7 +1002,7 @@ QString VPatternConverter::FixMeasurementInFormulaToV0_2_0(const QString &formul
QScopedPointer<qmu::QmuTokenParser> cal(new qmu::QmuTokenParser(formula, false, false));// Eval formula QScopedPointer<qmu::QmuTokenParser> cal(new qmu::QmuTokenParser(formula, false, false));// Eval formula
QMap<vsizetype, QString> tokens = cal->GetTokens();// Tokens (variables, measurements) QMap<vsizetype, QString> tokens = cal->GetTokens();// Tokens (variables, measurements)
delete cal.take(); cal.reset();
QList<vsizetype> tKeys = tokens.keys();// Take all tokens positions QList<vsizetype> tKeys = tokens.keys();// Take all tokens positions
QList<QString> tValues = tokens.values(); QList<QString> tValues = tokens.values();

View file

@ -287,12 +287,19 @@ void dx_iface::AddAAMALayers()
// layer.name = "26";// REF // layer.name = "26";// REF
// layer.color = DRW::black; // layer.color = DRW::black;
// cData.layers.push_back(layer); // cData.layers.push_back(layer);
}
void dx_iface::AddDefHeaderData()
{
cData.headerC.addInt("$HANDLING", 1, 70); // Enabled by default for flat version.
} }
void dx_iface::AddAAMAHeaderData() void dx_iface::AddAAMAHeaderData()
{ {
cData.headerC.addStr("$CLAYER", "1", 8); // Current layer name cData.headerC.addStr("$CLAYER", "1", 8); // Current layer name
// Looks like doesn't work with handling enabled.
// Missing or 0 for $HANDLING value disables handling.
} }
void dx_iface::AddASTMLayers() void dx_iface::AddASTMLayers()

View file

@ -101,6 +101,8 @@ public:
bool fileExport(bool binary); bool fileExport(bool binary);
void writeEntity(DRW_Entity* e); void writeEntity(DRW_Entity* e);
void AddXSpaceBlock(bool add) {dxfW->AddXSpaceBlock(add);}
std::string ErrorString() const; std::string ErrorString() const;
//reimplement virtual DRW_Interface functions //reimplement virtual DRW_Interface functions
@ -126,6 +128,7 @@ public:
void AddQtLTypes(); void AddQtLTypes();
void AddDefLayers(); void AddDefLayers();
void AddAAMALayers(); void AddAAMALayers();
void AddDefHeaderData();
void AddAAMAHeaderData(); void AddAAMAHeaderData();
void AddASTMLayers(); void AddASTMLayers();

View file

@ -234,9 +234,6 @@ class DRW_Point : public DRW_Entity {
SETENTFRIENDS SETENTFRIENDS
public: public:
DRW_Point() DRW_Point()
: basePoint(),
thickness(0),
extPoint(DRW_Coord(0, 0, 1))
{ {
eType = DRW::POINT; eType = DRW::POINT;
} }
@ -247,9 +244,9 @@ protected:
bool parseCode(int code, dxfReader *reader) override; bool parseCode(int code, dxfReader *reader) override;
public: public:
DRW_Coord basePoint; /*!< base point, code 10, 20 & 30 */ DRW_Coord basePoint{}; /*!< base point, code 10, 20 & 30 */
double thickness; /*!< thickness, code 39 */ double thickness{0}; /*!< thickness, code 39 */
DRW_Coord extPoint; /*!< Dir extrusion normal vector, code 210, 220 & 230 */ DRW_Coord extPoint{DRW_Coord(0, 0, 1)}; /*!< Dir extrusion normal vector, code 210, 220 & 230 */
// TNick: we're not handling code 50 - Angle of the X axis for // TNick: we're not handling code 50 - Angle of the X axis for
// the UCS in effect when the point was drawn // the UCS in effect when the point was drawn
}; };

View file

@ -120,31 +120,32 @@ void DRW_Header::write(dxfWriter *writer, DRW::Version ver){
DRW_Coord varCoord; DRW_Coord varCoord;
writer->writeString(2, "HEADER"); writer->writeString(2, "HEADER");
writer->writeString(9, "$ACADVER"); writer->writeString(9, "$ACADVER");
switch (ver) { switch (ver)
case DRW::AC1006: //unsupported version acad 10 {
case DRW::AC1009: //acad 11 & 12 case DRW::AC1006: //unsupported version acad 10
varStr = "AC1009"; case DRW::AC1009: //acad 11 & 12
break; varStr = "AC1009";
case DRW::AC1012: //unsupported version acad 13 break;
case DRW::AC1014: //acad 14 case DRW::AC1012: //unsupported version acad 13
varStr = "AC1014"; case DRW::AC1014: //acad 14
break; varStr = "AC1014";
case DRW::AC1015: //acad 2000 break;
varStr = "AC1015"; case DRW::AC1015: //acad 2000
break; varStr = "AC1015";
case DRW::AC1018: //acad 2004 break;
varStr = "AC1018"; case DRW::AC1018: //acad 2004
break; varStr = "AC1018";
case DRW::AC1024: //acad 2010 break;
varStr = "AC1024"; case DRW::AC1024: //acad 2010
break; varStr = "AC1024";
case DRW::AC1027: //acad 2013 break;
varStr = "AC1027"; case DRW::AC1027: //acad 2013
break; varStr = "AC1027";
case DRW::AC1021: //acad 2007 break;
default: //acad 2007 default version case DRW::AC1021: //acad 2007
varStr = "AC1021"; default: //acad 2007 default version
break; varStr = "AC1021";
break;
} }
writer->writeString(1, varStr); writer->writeString(1, varStr);
writer->setVersion(varStr, true); writer->setVersion(varStr, true);
@ -271,14 +272,15 @@ void DRW_Header::write(dxfWriter *writer, DRW::Version ver){
writer->writeUtf8String(7, varStr); writer->writeUtf8String(7, varStr);
else else
writer->writeString(7, "STANDARD"); writer->writeString(7, "STANDARD");
writer->writeString(9, "$CLAYER");
if (getStr("$CLAYER", &varStr)) if (getStr("$CLAYER", &varStr))
{
writer->writeString(9, "$CLAYER");
if (ver == DRW::AC1009) if (ver == DRW::AC1009)
writer->writeUtf8Caps(8, varStr); writer->writeUtf8Caps(8, varStr);
else else
writer->writeUtf8String(8, varStr); writer->writeUtf8String(8, varStr);
else }
writer->writeString(8, "0");
writer->writeString(9, "$CELTYPE"); writer->writeString(9, "$CELTYPE");
if (getStr("$CELTYPE", &varStr)) if (getStr("$CELTYPE", &varStr))
if (ver == DRW::AC1009) if (ver == DRW::AC1009)
@ -878,7 +880,8 @@ void DRW_Header::write(dxfWriter *writer, DRW::Version ver){
writer->writeInt16(70, varInt); writer->writeInt16(70, varInt);
} else } else
writer->writeInt16(70, 8); writer->writeInt16(70, 8);
if (ver < DRW::AC1012) { if (ver < DRW::AC1012)
{
writer->writeString(9, "$ATTDIA"); writer->writeString(9, "$ATTDIA");
if (getInt("$ATTDIA", &varInt)) { if (getInt("$ATTDIA", &varInt)) {
writer->writeInt16(70, varInt); writer->writeInt16(70, varInt);
@ -889,11 +892,19 @@ void DRW_Header::write(dxfWriter *writer, DRW::Version ver){
writer->writeInt16(70, varInt); writer->writeInt16(70, varInt);
} else } else
writer->writeInt16(70, 1); writer->writeInt16(70, 1);
writer->writeString(9, "$HANDLING");
if (getInt("$HANDLING", &varInt)) { // A handle is an arbitrary but in your DXF file unique hex value as string like 10FF. It is common to to use
// uppercase letters for hex numbers. Handle can have up to 16 hexadecimal digits (8 bytes).
//
// For DXF R10 until R12 the usage of handles was optional. The header variable $HANDLING set to 1 indicate the
// usage of handles, else $HANDLING is 0 or missing.
//
// For DXF R13 and later the usage of handles is mandatory and the header variable $HANDLING was removed.
if (getInt("$HANDLING", &varInt))
{
writer->writeString(9, "$HANDLING");
writer->writeInt16(70, varInt); writer->writeInt16(70, varInt);
} else }
writer->writeInt16(70, 1);
} }
writer->writeString(9, "$HANDSEED"); writer->writeString(9, "$HANDSEED");
//RLZ dxfHex(5, 0xFFFF); //RLZ dxfHex(5, 0xFFFF);
@ -1694,37 +1705,39 @@ void DRW_Header::addCoord(std::string key, const DRW_Coord &value, int code){
vars[key] =curr; vars[key] =curr;
} }
bool DRW_Header::getDouble(const std::string &key, double *varDouble){ bool DRW_Header::getDouble(const std::string &key, double *varDouble) const
{
bool result = false; bool result = false;
auto it=vars.find( key); auto it=vars.find( key);
if (it != vars.end()) { if (it != vars.end())
{
DRW_Variant *var = (*it).second; DRW_Variant *var = (*it).second;
if (var->type == DRW_Variant::DOUBLE) { if (var->type == DRW_Variant::DOUBLE)
{
*varDouble = var->content.d; *varDouble = var->content.d;
result = true; result = true;
} }
delete var;
vars.erase (it);
} }
return result; return result;
} }
bool DRW_Header::getInt(const std::string &key, int *varInt){ bool DRW_Header::getInt(const std::string &key, int *varInt) const
{
bool result = false; bool result = false;
auto it=vars.find( key); auto it=vars.find( key);
if (it != vars.end()) { if (it != vars.end())
{
DRW_Variant *var = (*it).second; DRW_Variant *var = (*it).second;
if (var->type == DRW_Variant::INTEGER) { if (var->type == DRW_Variant::INTEGER)
{
*varInt = var->content.i; *varInt = var->content.i;
result = true; result = true;
} }
delete var;
vars.erase (it);
} }
return result; return result;
} }
bool DRW_Header::getStr(const std::string &key, std::string *varStr){ bool DRW_Header::getStr(const std::string &key, std::string *varStr) const{
bool result = false; bool result = false;
auto it=vars.find( key); auto it=vars.find( key);
if (it != vars.end()) { if (it != vars.end()) {
@ -1733,23 +1746,22 @@ bool DRW_Header::getStr(const std::string &key, std::string *varStr){
*varStr = *var->content.s; *varStr = *var->content.s;
result = true; result = true;
} }
delete var;
vars.erase (it);
} }
return result; return result;
} }
bool DRW_Header::getCoord(const std::string &key, DRW_Coord *varCoord){ bool DRW_Header::getCoord(const std::string &key, DRW_Coord *varCoord) const
{
bool result = false; bool result = false;
auto it=vars.find( key); auto it=vars.find( key);
if (it != vars.end()) { if (it != vars.end())
{
DRW_Variant *var = (*it).second; DRW_Variant *var = (*it).second;
if (var->type == DRW_Variant::COORD) { if (var->type == DRW_Variant::COORD)
{
*varCoord = *var->content.v; *varCoord = *var->content.v;
result = true; result = true;
} }
delete var;
vars.erase (it);
} }
return result; return result;
} }

View file

@ -117,10 +117,10 @@ public:
protected: protected:
bool parseCode(int code, dxfReader *reader); bool parseCode(int code, dxfReader *reader);
private: private:
bool getDouble(const std::string &key, double *varDouble); bool getDouble(const std::string &key, double *varDouble) const;
bool getInt(const std::string &key, int *varInt); bool getInt(const std::string &key, int *varInt) const;
bool getStr(const std::string &key, std::string *varStr); bool getStr(const std::string &key, std::string *varStr) const;
bool getCoord(const std::string &key, DRW_Coord *varCoord); bool getCoord(const std::string &key, DRW_Coord *varCoord) const;
void clearVars() void clearVars()
{ {
for (auto it=vars.begin(); it!=vars.end(); ++it) for (auto it=vars.begin(); it!=vars.end(); ++it)

View file

@ -142,10 +142,10 @@ bool dxfRW::write(DRW_Interface *interface_, DRW::Version ver, bool bin){
std::string comm = std::string("dxfrw ") + std::string(DRW_VERSION); std::string comm = std::string("dxfrw ") + std::string(DRW_VERSION);
writer->writeString(999, comm); writer->writeString(999, comm);
} }
DRW_Header header; this->header = DRW_Header();
iface->writeHeader(header); iface->writeHeader(header);
writer->writeString(0, "SECTION"); writer->writeString(0, "SECTION");
entCount =FIRSTHANDLE; entCount = FIRSTHANDLE;
header.write(writer, version); header.write(writer, version);
writer->writeString(0, "ENDSEC"); writer->writeString(0, "ENDSEC");
if (ver > DRW::AC1009) { if (ver > DRW::AC1009) {
@ -190,9 +190,33 @@ bool dxfRW::write(DRW_Interface *interface_, DRW::Version ver, bool bin){
return isOk; return isOk;
} }
bool dxfRW::writeEntity(DRW_Entity *ent) { bool dxfRW::writeEntity(DRW_Entity *ent)
ent->handle = static_cast<duint32>(++entCount); {
writer->writeString(5, toHexStr(static_cast<int>(ent->handle))); // A handle is an arbitrary but in your DXF file unique hex value as string like 10FF. It is common to to use
// uppercase letters for hex numbers. Handle can have up to 16 hexadecimal digits (8 bytes).
//
// For DXF R10 until R12 the usage of handles was optional. The header variable $HANDLING set to 1 indicate the
// usage of handles, else $HANDLING is 0 or missing.
//
// For DXF R13 and later the usage of handles is mandatory and the header variable $HANDLING was removed.
if (version < DRW::AC1012)
{
int varInt = 0;
if (header.getInt("$HANDLING", &varInt))
{
if (varInt != 0)
{
ent->handle = static_cast<duint32>(++entCount);
writer->writeString(5, toHexStr(static_cast<int>(ent->handle)));
}
}
}
else
{
ent->handle = static_cast<duint32>(++entCount);
writer->writeString(5, toHexStr(static_cast<int>(ent->handle)));
}
if (version > DRW::AC1009) { if (version > DRW::AC1009) {
writer->writeString(100, "AcDbEntity"); writer->writeString(100, "AcDbEntity");
} }
@ -467,6 +491,7 @@ bool dxfRW::writeDimstyle(DRW_Dimstyle *ent){
if (name == "STANDARD") if (name == "STANDARD")
dimstyleStd = true; dimstyleStd = true;
} }
if (version > DRW::AC1009) { if (version > DRW::AC1009) {
writer->writeString(105, toHexStr(++entCount)); writer->writeString(105, toHexStr(++entCount));
} }
@ -615,7 +640,10 @@ bool dxfRW::writeASTMNotch(DRW_ASTMNotch *ent)
{ {
writePoint(ent); writePoint(ent);
writer->writeDouble(50, ent->angle); writer->writeDouble(50, ent->angle);
writer->writeDouble(39, ent->thickness); // Defined, but not used in point if (not qFuzzyIsNull(ent->thickness))
{
writer->writeDouble(39, ent->thickness); // Defined, but not used in point
}
return true; return true;
} }
@ -1694,92 +1722,129 @@ bool dxfRW::writeTables() {
return true; return true;
} }
bool dxfRW::writeBlocks() { bool dxfRW::writeBlocks()
writer->writeString(0, "BLOCK"); {
if (version > DRW::AC1009) { if (version > DRW::AC1009 || m_xSpaceBlock)
writer->writeString(5, "20"); {
if (version > DRW::AC1014) { writer->writeString(0, "BLOCK");
writer->writeString(330, "1F"); if (version > DRW::AC1009)
{
writer->writeString(5, "20");
if (version > DRW::AC1014)
{
writer->writeString(330, "1F");
}
writer->writeString(100, "AcDbEntity");
} }
writer->writeString(100, "AcDbEntity"); writer->writeString(8, "0");
} if (version > DRW::AC1009)
writer->writeString(8, "0"); {
if (version > DRW::AC1009) { writer->writeString(100, "AcDbBlockBegin");
writer->writeString(100, "AcDbBlockBegin"); writer->writeString(2, "*Model_Space");
writer->writeString(2, "*Model_Space"); }
} else else
writer->writeString(2, "$MODEL_SPACE"); {
writer->writeInt16(70, 0); writer->writeString(2, "$MODEL_SPACE");
writer->writeDouble(10, 0.0); }
writer->writeDouble(20, 0.0); writer->writeInt16(70, 0);
writer->writeDouble(30, 0.0); writer->writeDouble(10, 0.0);
if (version > DRW::AC1009) writer->writeDouble(20, 0.0);
writer->writeString(3, "*Model_Space"); writer->writeDouble(30, 0.0);
else if (version > DRW::AC1009)
writer->writeString(3, "$MODEL_SPACE"); {
writer->writeString(1, ""); writer->writeString(3, "*Model_Space");
writer->writeString(0, "ENDBLK"); }
if (version > DRW::AC1009) { else
writer->writeString(5, "21"); {
if (version > DRW::AC1014) { writer->writeString(3, "$MODEL_SPACE");
writer->writeString(330, "1F"); }
writer->writeString(1, "");
writer->writeString(0, "ENDBLK");
if (version > DRW::AC1009)
{
writer->writeString(5, "21");
if (version > DRW::AC1014)
{
writer->writeString(330, "1F");
}
writer->writeString(100, "AcDbEntity");
}
writer->writeString(8, "0");
if (version > DRW::AC1009)
{
writer->writeString(100, "AcDbBlockEnd");
} }
writer->writeString(100, "AcDbEntity");
}
writer->writeString(8, "0");
if (version > DRW::AC1009)
writer->writeString(100, "AcDbBlockEnd");
writer->writeString(0, "BLOCK"); writer->writeString(0, "BLOCK");
if (version > DRW::AC1009) { if (version > DRW::AC1009)
writer->writeString(5, "1C"); {
if (version > DRW::AC1014) { writer->writeString(5, "1C");
writer->writeString(330, "1B"); if (version > DRW::AC1014)
{
writer->writeString(330, "1B");
}
writer->writeString(100, "AcDbEntity");
} }
writer->writeString(100, "AcDbEntity"); writer->writeString(8, "0");
} if (version > DRW::AC1009)
writer->writeString(8, "0"); {
if (version > DRW::AC1009) { writer->writeString(100, "AcDbBlockBegin");
writer->writeString(100, "AcDbBlockBegin"); writer->writeString(2, "*Paper_Space");
writer->writeString(2, "*Paper_Space"); }
} else else
writer->writeString(2, "$PAPER_SPACE"); {
writer->writeInt16(70, 0); writer->writeString(2, "$PAPER_SPACE");
writer->writeDouble(10, 0.0); }
writer->writeDouble(20, 0.0); writer->writeInt16(70, 0);
writer->writeDouble(30, 0.0); writer->writeDouble(10, 0.0);
if (version > DRW::AC1009) writer->writeDouble(20, 0.0);
writer->writeString(3, "*Paper_Space"); writer->writeDouble(30, 0.0);
else if (version > DRW::AC1009)
writer->writeString(3, "$PAPER_SPACE"); {
writer->writeString(1, ""); writer->writeString(3, "*Paper_Space");
writer->writeString(0, "ENDBLK"); }
if (version > DRW::AC1009) { else
writer->writeString(5, "1D"); {
if (version > DRW::AC1014) { writer->writeString(3, "$PAPER_SPACE");
writer->writeString(330, "1F"); }
writer->writeString(1, "");
writer->writeString(0, "ENDBLK");
if (version > DRW::AC1009)
{
writer->writeString(5, "1D");
if (version > DRW::AC1014)
{
writer->writeString(330, "1F");
}
writer->writeString(100, "AcDbEntity");
}
writer->writeString(8, "0");
if (version > DRW::AC1009)
{
writer->writeString(100, "AcDbBlockEnd");
} }
writer->writeString(100, "AcDbEntity");
} }
writer->writeString(8, "0");
if (version > DRW::AC1009)
writer->writeString(100, "AcDbBlockEnd");
writingBlock = false; writingBlock = false;
iface->writeBlocks(); iface->writeBlocks();
if (writingBlock) { if (writingBlock)
{
writingBlock = false; writingBlock = false;
writer->writeString(0, "ENDBLK"); writer->writeString(0, "ENDBLK");
if (version > DRW::AC1009) { if (version > DRW::AC1009)
{
writer->writeString(5, toHexStr(currHandle+2)); writer->writeString(5, toHexStr(currHandle+2));
// writer->writeString(5, "1D"); // writer->writeString(5, "1D");
if (version > DRW::AC1014) { if (version > DRW::AC1014)
{
writer->writeString(330, toHexStr(currHandle)); writer->writeString(330, toHexStr(currHandle));
} }
writer->writeString(100, "AcDbEntity"); writer->writeString(100, "AcDbEntity");
} }
writer->writeString(8, "0"); writer->writeString(8, "0");
if (version > DRW::AC1009) if (version > DRW::AC1009)
{
writer->writeString(100, "AcDbBlockEnd"); writer->writeString(100, "AcDbBlockEnd");
}
} }
return true; return true;
} }
@ -2702,11 +2767,11 @@ bool dxfRW::processPolyline() {
bool dxfRW::processVertex(DRW_Polyline *pl) { bool dxfRW::processVertex(DRW_Polyline *pl) {
DRW_DBG("dxfRW::processVertex"); DRW_DBG("dxfRW::processVertex");
int code; int code;
QScopedPointer<DRW_Vertex> v(new DRW_Vertex()); std::unique_ptr<DRW_Vertex> v(new DRW_Vertex());
while (reader->readRec(&code)) { while (reader->readRec(&code)) {
DRW_DBG(code); DRW_DBG("\n"); DRW_DBG(code); DRW_DBG("\n");
if (0 == code) { if (0 == code) {
pl->appendVertex(v.take()); pl->appendVertex(v.release());
nextentity = reader->getString(); nextentity = reader->getString();
DRW_DBG(nextentity); DRW_DBG("\n"); DRW_DBG(nextentity); DRW_DBG("\n");
if (nextentity == "SEQEND") { if (nextentity == "SEQEND") {

View file

@ -39,6 +39,7 @@ public:
*/ */
bool read(DRW_Interface *interface_, bool ext); bool read(DRW_Interface *interface_, bool ext);
void setBinary(bool b) {binFile = b;} void setBinary(bool b) {binFile = b;}
void AddXSpaceBlock(bool add) {m_xSpaceBlock = add;}
bool write(DRW_Interface *interface_, DRW::Version ver, bool bin); bool write(DRW_Interface *interface_, DRW::Version ver, bool bin);
bool writeLineType(DRW_LType *ent); bool writeLineType(DRW_LType *ent);
@ -138,6 +139,7 @@ private:
std::string fileName; std::string fileName;
std::string codePage; std::string codePage;
bool binFile; bool binFile;
bool m_xSpaceBlock{true};
dxfReader *reader; dxfReader *reader;
dxfWriter *writer; dxfWriter *writer;
DRW_Interface *iface; DRW_Interface *iface;

View file

@ -157,6 +157,7 @@ auto VDxfEngine::begin(QPaintDevice *pdev) -> bool
m_input = QSharedPointer<dx_iface>(new dx_iface(GetFileNameForLocale(), m_version, m_varMeasurement, m_input = QSharedPointer<dx_iface>(new dx_iface(GetFileNameForLocale(), m_version, m_varMeasurement,
m_varInsunits)); m_varInsunits));
m_input->AddDefHeaderData();
m_input->AddQtLTypes(); m_input->AddQtLTypes();
m_input->AddDefLayers(); m_input->AddDefLayers();
return true; return true;
@ -700,6 +701,7 @@ auto VDxfEngine::ExportToAAMA(const QVector<VLayoutPiece> &details) -> bool
} }
m_input = QSharedPointer<dx_iface>::create(GetFileNameForLocale(), m_version, m_varMeasurement, m_varInsunits); m_input = QSharedPointer<dx_iface>::create(GetFileNameForLocale(), m_version, m_varMeasurement, m_varInsunits);
m_input->AddXSpaceBlock(false);
m_input->AddAAMAHeaderData(); m_input->AddAAMAHeaderData();
if (m_version > DRW::AC1009) if (m_version > DRW::AC1009)
{ {
@ -730,6 +732,7 @@ auto VDxfEngine::ExportToAAMA(const QVector<VLayoutPiece> &details) -> bool
} }
detailBlock->name = blockName.toStdString(); detailBlock->name = blockName.toStdString();
detailBlock->flags = 64;
detailBlock->layer = *layer1; detailBlock->layer = *layer1;
detail.Scale(m_xscale, m_yscale); detail.Scale(m_xscale, m_yscale);
@ -744,11 +747,11 @@ auto VDxfEngine::ExportToAAMA(const QVector<VLayoutPiece> &details) -> bool
m_input->AddBlock(detailBlock.data()); m_input->AddBlock(detailBlock.data());
QScopedPointer<DRW_Insert> insert(new DRW_Insert()); std::unique_ptr<DRW_Insert> insert(new DRW_Insert());
insert->name = blockName.toStdString(); insert->name = blockName.toStdString();
insert->layer = *layer1; insert->layer = *layer1;
m_input->AddEntity(insert.take()); m_input->AddEntity(insert.release());
deleteBlock = false; // lose ownership deleteBlock = false; // lose ownership
} }
@ -844,13 +847,16 @@ void VDxfEngine::ExportAAMANotch(const QSharedPointer<dx_ifaceBlock> &detailBloc
const QVector<VLayoutPassmark> passmarks = detail.GetMappedPassmarks(); const QVector<VLayoutPassmark> passmarks = detail.GetMappedPassmarks();
for(const auto &passmark : passmarks) for(const auto &passmark : passmarks)
{ {
for (const auto &line : passmark.lines) std::unique_ptr<DRW_ASTMNotch> notch(new DRW_ASTMNotch());
{ const QPointF center = passmark.baseLine.p1();
if (DRW_Entity *e = AAMALine(line, *layer4))
{ notch->basePoint = DRW_Coord(FromPixel(center.x(), m_varInsunits),
detailBlock->ent.push_back(e); FromPixel(GetSize().height() - center.y(), m_varInsunits),
} FromPixel(passmark.baseLine.length(), m_varInsunits));
} notch->angle = passmark.baseLine.angle();
notch->layer = *layer4;
detailBlock->ent.push_back(notch.release());
} }
} }
} }
@ -928,7 +934,7 @@ auto VDxfEngine::ExportToASTM(const QVector<VLayoutPiece> &details) -> bool
m_input = QSharedPointer<dx_iface>(new dx_iface(GetFileNameForLocale(), m_version, m_varMeasurement, m_input = QSharedPointer<dx_iface>(new dx_iface(GetFileNameForLocale(), m_version, m_varMeasurement,
m_varInsunits)); m_varInsunits));
m_input->AddXSpaceBlock(false);
m_input->AddAAMAHeaderData(); m_input->AddAAMAHeaderData();
if (m_version > DRW::AC1009) if (m_version > DRW::AC1009)
{ {
@ -974,11 +980,11 @@ auto VDxfEngine::ExportToASTM(const QVector<VLayoutPiece> &details) -> bool
m_input->AddBlock(detailBlock.data()); m_input->AddBlock(detailBlock.data());
QScopedPointer<DRW_Insert> insert(new DRW_Insert()); std::unique_ptr<DRW_Insert> insert(new DRW_Insert());
insert->name = blockName.toStdString(); insert->name = blockName.toStdString();
insert->layer = *layer1; insert->layer = *layer1;
m_input->AddEntity(insert.take()); m_input->AddEntity(insert.release());
deleteBlock = false; // lose ownership deleteBlock = false; // lose ownership
} }
@ -1125,10 +1131,17 @@ void VDxfEngine::ExportASTMDrill(const QSharedPointer<dx_ifaceBlock> &detailBloc
|| label.Type() == PlaceLabelType::Circle) || label.Type() == PlaceLabelType::Circle)
{ {
const QPointF center = detail.GetMatrix().map(label.Center()); const QPointF center = detail.GetMatrix().map(label.Center());
detailBlock->ent.push_back(AAMAPoint(center, *layer13)); QLineF diameter = detail.GetMatrix().map(QLineF(label.Box().bottomLeft(), label.Box().topRight()));
std::unique_ptr<DRW_Point> point(new DRW_Point());
point->basePoint = DRW_Coord(FromPixel(center.x(), m_varInsunits),
FromPixel(GetSize().height() - center.y(), m_varInsunits),
FromPixel(diameter.length(), m_varInsunits));
point->layer = *layer13;
detailBlock->ent.push_back(point.release());
// TODO. Investigate drill category // TODO. Investigate drill category
// QPointF pos(center.x(), center.y() - ToPixel(AAMATextHeight, varInsunits)); // QPointF pos(center.x(), center.y() - ToPixel(AAMATextHeight, m_varInsunits));
// detailBlock->ent.push_back(AAMAText(pos, category, *layer13)); // detailBlock->ent.push_back(AAMAText(pos, category, *layer13));
} }
} }
@ -1157,34 +1170,33 @@ void VDxfEngine::ExportASTMNotch(const QSharedPointer<dx_ifaceBlock> &detailBloc
notch->layer = *layer4; notch->layer = *layer4;
} }
else if (passmark.type == PassmarkLineType::VMark || passmark.type == PassmarkLineType::VMark2) else if (passmark.type == PassmarkLineType::VMark || passmark.type == PassmarkLineType::VMark2)
{ { // V-Notch
QLineF boundaryLine(ConstFirst(passmark.lines).p2(), ConstLast(passmark.lines).p2()); QLineF boundaryLine(ConstFirst(passmark.lines).p2(), ConstLast(passmark.lines).p2());
notch->thickness = FromPixel(boundaryLine.length(), m_varInsunits); // width notch->thickness = FromPixel(boundaryLine.length(), m_varInsunits); // width
notch->layer = *layer4; notch->layer = *layer4;
} }
else if (passmark.type == PassmarkLineType::TMark) else if (passmark.type == PassmarkLineType::TMark)
{ { // T-Notch
qreal width = FromPixel(ConstLast(passmark.lines).length(), m_varInsunits); notch->thickness = FromPixel(ConstLast(passmark.lines).length(), m_varInsunits); // width
notch->thickness = FromPixel(width, m_varInsunits);
notch->layer = *layer80; notch->layer = *layer80;
} }
else if (passmark.type == PassmarkLineType::BoxMark) else if (passmark.type == PassmarkLineType::BoxMark)
{ { // Castle Notch
QPointF start = ConstFirst(passmark.lines).p1(); QPointF start = ConstFirst(passmark.lines).p1();
QPointF end = ConstLast(passmark.lines).p2(); QPointF end = ConstLast(passmark.lines).p2();
notch->layer = *layer81; notch->layer = *layer81;
notch->thickness = FromPixel(QLineF(start, end).length(), m_varInsunits); notch->thickness = FromPixel(QLineF(start, end).length(), m_varInsunits); // width
} }
else if (passmark.type == PassmarkLineType::UMark) else if (passmark.type == PassmarkLineType::UMark)
{ { // U-Notch
QPointF start = ConstFirst(passmark.lines).p1(); QPointF start = ConstFirst(passmark.lines).p1();
QPointF end = ConstLast(passmark.lines).p2(); QPointF end = ConstLast(passmark.lines).p2();
notch->thickness = FromPixel(QLineF(start, end).length(), m_varInsunits); notch->thickness = FromPixel(QLineF(start, end).length(), m_varInsunits); // width
notch->layer = *layer83; notch->layer = *layer83;
} }

View file

@ -115,7 +115,7 @@ private:
QSize m_size{}; QSize m_size{};
double m_resolution{PrintDPI}; double m_resolution{PrintDPI};
QString m_fileName{}; QString m_fileName{};
DRW::Version m_version{DRW::AC1014}; DRW::Version m_version{DRW::AC1009};
bool m_binary{false}; bool m_binary{false};
QTransform m_matrix{}; QTransform m_matrix{};
QSharedPointer<dx_iface> m_input{}; QSharedPointer<dx_iface> m_input{};

View file

@ -170,8 +170,8 @@ bool WatermarkWindow::Open(QString path)
QFuture<VWatermarkConverter *> futureConverter = QtConcurrent::run([path]() QFuture<VWatermarkConverter *> futureConverter = QtConcurrent::run([path]()
{ {
QScopedPointer<VWatermarkConverter> converter(new VWatermarkConverter(path)); std::unique_ptr<VWatermarkConverter> converter(new VWatermarkConverter(path));
return converter.take(); return converter.release();
}); });
//We have unsaved changes or load more then one file per time //We have unsaved changes or load more then one file per time

View file

@ -1275,7 +1275,8 @@ auto VAbstractPiece::EkvPoint(QVector<VRawSAPoint> points, const VSAPoint &p1Lin
return true; return true;
}; };
if (VGObject::IsPointOnLineSegment(p2Line1, p1Line1, p1Line2, ToPixel(0.5, Unit::Mm)) && if (VGObject::IsPointOnLineSegment(p2Line1, p1Line1, p1Line2, ToPixel(0.5, Unit::Mm)) &&
IsOnLine(p2Line1, bigLine1.p2(), bigLine2.p1(), ToPixel(0.5, Unit::Mm))) IsOnLine(p2Line1, bigLine1.p2(), bigLine2.p1(), ToPixel(0.5, Unit::Mm)) &&
p2Line1.GetAngleType() == PieceNodeAngle::ByLength)
{ {
points.append(VRawSAPoint(bigLine1.p2(), p2Line1.CurvePoint(), p2Line1.TurnPoint())); points.append(VRawSAPoint(bigLine1.p2(), p2Line1.CurvePoint(), p2Line1.TurnPoint()));
points.append(VRawSAPoint(bigLine2.p1(), p2Line1.CurvePoint(), p2Line1.TurnPoint())); points.append(VRawSAPoint(bigLine2.p1(), p2Line1.CurvePoint(), p2Line1.TurnPoint()));
@ -1777,14 +1778,44 @@ auto VAbstractPiece::GrainlinePoints(const VGrainlineData &geom, const VContaine
v << QPointF(pt1.x() + dArrowLen * qCos(rotation - dArrowAng), v << QPointF(pt1.x() + dArrowLen * qCos(rotation - dArrowAng),
pt1.y() - dArrowLen * qSin(rotation - dArrowAng)); pt1.y() - dArrowLen * qSin(rotation - dArrowAng));
v << pt1; v << pt1;
if (geom.GetArrowType() == GrainlineArrowDirection::atFourWay)
{ // second double arrow
QLineF line(pt2, pt1);
line.setLength(line.length() - dArrowLen - dArrowLen*0.5);
v << line.p2();
v << QPointF(line.p2().x() + dArrowLen * qCos(rotation + dArrowAng),
line.p2().y() - dArrowLen * qSin(rotation + dArrowAng));
v << QPointF(line.p2().x() + dArrowLen * qCos(rotation - dArrowAng),
line.p2().y() - dArrowLen * qSin(rotation - dArrowAng));
v << line.p2();
}
} }
v << pt2; if (geom.GetArrowType() != GrainlineArrowDirection::atFourWay)
{
v << pt2;
}
if (geom.GetArrowType() != GrainlineArrowDirection::atRear) if (geom.GetArrowType() != GrainlineArrowDirection::atRear)
{ {
rotation += M_PI; rotation += M_PI;
if (geom.GetArrowType() == GrainlineArrowDirection::atFourWay)
{ // first double arrow
QLineF line(pt1, pt2);
line.setLength(line.length() - dArrowLen - dArrowLen*0.5);
v << line.p2();
v << QPointF(line.p2().x() + dArrowLen * qCos(rotation + dArrowAng),
line.p2().y() - dArrowLen * qSin(rotation + dArrowAng));
v << QPointF(line.p2().x() + dArrowLen * qCos(rotation - dArrowAng),
line.p2().y() - dArrowLen * qSin(rotation - dArrowAng));
v << line.p2();
v << pt2;
}
v << QPointF(pt2.x() + dArrowLen * qCos(rotation + dArrowAng), v << QPointF(pt2.x() + dArrowLen * qCos(rotation + dArrowAng),
pt2.y() - dArrowLen * qSin(rotation + dArrowAng)); pt2.y() - dArrowLen * qSin(rotation + dArrowAng));
v << QPointF(pt2.x() + dArrowLen * qCos(rotation - dArrowAng), v << QPointF(pt2.x() + dArrowLen * qCos(rotation - dArrowAng),

View file

@ -588,7 +588,24 @@ void VPosition::FollowGrainline()
if (m_data.detail.GrainlineArrowType() == GrainlineArrowDirection::atBoth || if (m_data.detail.GrainlineArrowType() == GrainlineArrowDirection::atBoth ||
m_data.detail.GrainlineArrowType() == GrainlineArrowDirection::atRear) m_data.detail.GrainlineArrowType() == GrainlineArrowDirection::atRear)
{ {
RotateOnAngle(angle+180); RotateOnAngle(angle + 180);
}
if (stop->load())
{
return;
}
if (m_data.detail.GrainlineArrowType() == GrainlineArrowDirection::atFourWay)
{
RotateOnAngle(angle + 90);
if (stop->load())
{
return;
}
RotateOnAngle(angle - 90);
} }
} }

View file

@ -37,7 +37,8 @@ enum class GrainlineArrowDirection : qint8
{ {
atBoth, atBoth,
atFront, atFront,
atRear atRear,
atFourWay
}; };
#endif // FLOATITEMDEF_H #endif // FLOATITEMDEF_H

View file

@ -1051,7 +1051,7 @@ auto VTranslateVars::FormulaFromUser(const QString &formula, bool osSeparator) c
new qmu::QmuTokenParser(formula, osSeparator, true, GetTranslatedFunctions())); new qmu::QmuTokenParser(formula, osSeparator, true, GetTranslatedFunctions()));
QMap<vsizetype, QString> tokens = cal->GetTokens();// Tokens (variables, measurements) QMap<vsizetype, QString> tokens = cal->GetTokens();// Tokens (variables, measurements)
QMap<vsizetype, QString> numbers = cal->GetNumbers();// All numbers in expression for changing decimal separator QMap<vsizetype, QString> numbers = cal->GetNumbers();// All numbers in expression for changing decimal separator
delete cal.take(); cal.reset();
QString newFormula = formula;// Local copy for making changes QString newFormula = formula;// Local copy for making changes

View file

@ -3383,6 +3383,7 @@ void DialogSeamAllowance::InitGrainlineTab()
uiTabGrainline->comboBoxArrow->addItem(tr("Both")); uiTabGrainline->comboBoxArrow->addItem(tr("Both"));
uiTabGrainline->comboBoxArrow->addItem(tr("Just front")); uiTabGrainline->comboBoxArrow->addItem(tr("Just front"));
uiTabGrainline->comboBoxArrow->addItem(tr("Just rear")); uiTabGrainline->comboBoxArrow->addItem(tr("Just rear"));
uiTabGrainline->comboBoxArrow->addItem(tr("Four way"));
m_iRotBaseHeight = uiTabGrainline->lineEditRotFormula->height(); m_iRotBaseHeight = uiTabGrainline->lineEditRotFormula->height();
m_iLenBaseHeight = uiTabGrainline->lineEditLenFormula->height(); m_iLenBaseHeight = uiTabGrainline->lineEditLenFormula->height();

View file

@ -2050,7 +2050,7 @@ void VToolSeamAllowance::InitSpecialPoints(const QVector<quint32> &points) const
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VToolSeamAllowance::DeleteToolWithConfirm(bool ask) void VToolSeamAllowance::DeleteToolWithConfirm(bool ask)
{ {
QScopedPointer<DeletePiece> delDet(new DeletePiece(doc, m_id, VAbstractTool::data, m_sceneDetails)); std::unique_ptr<DeletePiece> delDet(new DeletePiece(doc, m_id, VAbstractTool::data, m_sceneDetails));
if (ask) if (ask)
{ {
if (ConfirmDeletion() == QMessageBox::No) if (ConfirmDeletion() == QMessageBox::No)
@ -2059,7 +2059,7 @@ void VToolSeamAllowance::DeleteToolWithConfirm(bool ask)
} }
} }
VAbstractApplication::VApp()->getUndoStack()->push(delDet.take()); VAbstractApplication::VApp()->getUndoStack()->push(delDet.release());
// Throw exception, this will help prevent case when we forget to immediately quit function. // Throw exception, this will help prevent case when we forget to immediately quit function.
VExceptionToolWasDeleted e(tr("Tool was used after deleting.")); VExceptionToolWasDeleted e(tr("Tool was used after deleting."));

View file

@ -393,22 +393,22 @@ quint32 AddNodePoint(const VPieceNode &node, const VToolUnionDetailsInitData &in
QVector<quint32> &children, const QString &drawName, qreal dx, qreal dy, QVector<quint32> &children, const QString &drawName, qreal dx, qreal dy,
quint32 pRotate, qreal angle) quint32 pRotate, qreal angle)
{ {
QScopedPointer<VPointF> point(new VPointF(*initData.data->GeometricObject<VPointF>(node.GetId()))); std::unique_ptr<VPointF> point(new VPointF(*initData.data->GeometricObject<VPointF>(node.GetId())));
point->setMode(Draw::Modeling); point->setMode(Draw::Modeling);
if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID)
{ {
BiasRotatePoint(point.data(), dx, dy, static_cast<QPointF>(*initData.data->GeometricObject<VPointF>(pRotate)), BiasRotatePoint(point.get(), dx, dy, static_cast<QPointF>(*initData.data->GeometricObject<VPointF>(pRotate)),
angle); angle);
} }
QScopedPointer<VPointF> point1(new VPointF(*point)); std::unique_ptr<VPointF> point1(new VPointF(*point));
const quint32 idObject = initData.data->AddGObject(point.take()); const quint32 idObject = initData.data->AddGObject(point.release());
children.append(idObject); children.append(idObject);
point1->setIdObject(idObject); point1->setIdObject(idObject);
point1->setMode(Draw::Modeling); point1->setMode(Draw::Modeling);
const quint32 id = initData.data->AddGObject(point1.take()); const quint32 id = initData.data->AddGObject(point1.release());
VAbstractNodeInitData initNodeData; VAbstractNodeInitData initNodeData;
initNodeData.id = id; initNodeData.id = id;
@ -429,21 +429,21 @@ quint32 AddNodePoint(const VPieceNode &node, const VToolUnionDetailsInitData &in
quint32 AddPin(quint32 id, const VToolUnionDetailsInitData &initData, QVector<quint32> &children, quint32 AddPin(quint32 id, const VToolUnionDetailsInitData &initData, QVector<quint32> &children,
const QString &drawName, qreal dx, qreal dy, quint32 pRotate, qreal angle) const QString &drawName, qreal dx, qreal dy, quint32 pRotate, qreal angle)
{ {
QScopedPointer<VPointF> point(new VPointF(*initData.data->GeometricObject<VPointF>(id))); std::unique_ptr<VPointF> point(new VPointF(*initData.data->GeometricObject<VPointF>(id)));
point->setMode(Draw::Modeling); point->setMode(Draw::Modeling);
if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID)
{ {
BiasRotatePoint(point.data(), dx, dy, static_cast<QPointF>(*initData.data->GeometricObject<VPointF>(pRotate)), BiasRotatePoint(point.get(), dx, dy, static_cast<QPointF>(*initData.data->GeometricObject<VPointF>(pRotate)),
angle); angle);
} }
QScopedPointer<VPointF> point1(new VPointF(*point)); std::unique_ptr<VPointF> point1(new VPointF(*point));
const quint32 idObject = initData.data->AddGObject(point.take()); const quint32 idObject = initData.data->AddGObject(point.release());
children.append(idObject); children.append(idObject);
point1->setMode(Draw::Modeling); point1->setMode(Draw::Modeling);
const quint32 idPin = initData.data->AddGObject(point1.take()); const quint32 idPin = initData.data->AddGObject(point1.release());
VToolPinInitData initNodeData; VToolPinInitData initNodeData;
initNodeData.id = idPin; initNodeData.id = idPin;
@ -464,11 +464,11 @@ quint32 AddPin(quint32 id, const VToolUnionDetailsInitData &initData, QVector<qu
quint32 AddPlaceLabel(quint32 id, const VToolUnionDetailsInitData &initData, QVector<quint32> &children, quint32 AddPlaceLabel(quint32 id, const VToolUnionDetailsInitData &initData, QVector<quint32> &children,
const QString &drawName, qreal dx, qreal dy, quint32 pRotate, qreal angle) const QString &drawName, qreal dx, qreal dy, quint32 pRotate, qreal angle)
{ {
QScopedPointer<VPlaceLabelItem> label(new VPlaceLabelItem(*initData.data->GeometricObject<VPlaceLabelItem>(id))); std::unique_ptr<VPlaceLabelItem> label(new VPlaceLabelItem(*initData.data->GeometricObject<VPlaceLabelItem>(id)));
if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID)
{ {
BiasRotatePoint(label.data(), dx, dy, static_cast<QPointF>(*initData.data->GeometricObject<VPointF>(pRotate)), BiasRotatePoint(label.get(), dx, dy, static_cast<QPointF>(*initData.data->GeometricObject<VPointF>(pRotate)),
angle); angle);
} }
@ -488,12 +488,12 @@ quint32 AddPlaceLabel(quint32 id, const VToolUnionDetailsInitData &initData, QVe
initNodeData.visibilityTrigger = label->GetVisibilityTrigger(); initNodeData.visibilityTrigger = label->GetVisibilityTrigger();
initNodeData.type = label->GetLabelType(); initNodeData.type = label->GetLabelType();
QScopedPointer<VPlaceLabelItem> label1(new VPlaceLabelItem(*label)); std::unique_ptr<VPlaceLabelItem> label1(new VPlaceLabelItem(*label));
initNodeData.centerPoint = initData.data->AddGObject(label.take()); initNodeData.centerPoint = initData.data->AddGObject(label.release());
children.append(initNodeData.centerPoint); children.append(initNodeData.centerPoint);
const quint32 idLabel = initData.data->AddGObject(label1.take()); const quint32 idLabel = initData.data->AddGObject(label1.release());
initNodeData.id = idLabel; initNodeData.id = idLabel;
VToolPlaceLabel::Create(initNodeData); VToolPlaceLabel::Create(initNodeData);
@ -508,7 +508,7 @@ quint32 AddNodeArc(const VPieceNode &node, const VToolUnionDetailsInitData &init
const QSharedPointer<VArc> arc = initData.data->GeometricObject<VArc>(node.GetId()); const QSharedPointer<VArc> arc = initData.data->GeometricObject<VArc>(node.GetId());
VPointF p1 = VPointF(arc->GetP1(), "A", 0, 0); VPointF p1 = VPointF(arc->GetP1(), "A", 0, 0);
VPointF p2 = VPointF(arc->GetP2(), "A", 0, 0); VPointF p2 = VPointF(arc->GetP2(), "A", 0, 0);
QScopedPointer<VPointF> center(new VPointF(arc->GetCenter())); std::unique_ptr<VPointF> center(new VPointF(arc->GetCenter()));
if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID)
{ {
@ -516,27 +516,27 @@ quint32 AddNodeArc(const VPieceNode &node, const VToolUnionDetailsInitData &init
BiasRotatePoint(&p1, dx, dy, p, angle); BiasRotatePoint(&p1, dx, dy, p, angle);
BiasRotatePoint(&p2, dx, dy, p, angle); BiasRotatePoint(&p2, dx, dy, p, angle);
BiasRotatePoint(center.data(), dx, dy, p, angle); BiasRotatePoint(center.get(), dx, dy, p, angle);
} }
QLineF l1(static_cast<QPointF>(*center), static_cast<QPointF>(p1)); QLineF l1(static_cast<QPointF>(*center), static_cast<QPointF>(p1));
QLineF l2(static_cast<QPointF>(*center), static_cast<QPointF>(p2)); QLineF l2(static_cast<QPointF>(*center), static_cast<QPointF>(p2));
center->setMode(Draw::Modeling); center->setMode(Draw::Modeling);
VPointF *tmpCenter = center.take(); VPointF *tmpCenter = center.release();
const quint32 idCenter = initData.data->AddGObject(tmpCenter); const quint32 idCenter = initData.data->AddGObject(tmpCenter);
Q_UNUSED(idCenter) Q_UNUSED(idCenter)
QScopedPointer<VArc> arc1(new VArc(*tmpCenter, arc->GetRadius(), arc->GetFormulaRadius(), l1.angle(), std::unique_ptr<VArc> arc1(new VArc(*tmpCenter, arc->GetRadius(), arc->GetFormulaRadius(), l1.angle(),
QString().setNum(l1.angle()), l2.angle(), QString().setNum(l2.angle()))); QString().setNum(l1.angle()), l2.angle(), QString().setNum(l2.angle())));
arc1->setMode(Draw::Modeling); arc1->setMode(Draw::Modeling);
QScopedPointer<VArc>arc2(new VArc(*arc1)); std::unique_ptr<VArc>arc2(new VArc(*arc1));
const quint32 idObject = initData.data->AddGObject(arc1.take()); const quint32 idObject = initData.data->AddGObject(arc1.release());
children.append(idObject); children.append(idObject);
arc2->setIdObject(idObject); arc2->setIdObject(idObject);
arc2->setMode(Draw::Modeling); arc2->setMode(Draw::Modeling);
const quint32 id = initData.data->AddGObject(arc2.take()); const quint32 id = initData.data->AddGObject(arc2.release());
VAbstractNodeInitData initNodeData; VAbstractNodeInitData initNodeData;
initNodeData.id = id; initNodeData.id = id;
@ -560,7 +560,7 @@ quint32 AddNodeElArc(const VPieceNode &node, const VToolUnionDetailsInitData &in
const QSharedPointer<VEllipticalArc> arc = initData.data->GeometricObject<VEllipticalArc>(node.GetId()); const QSharedPointer<VEllipticalArc> arc = initData.data->GeometricObject<VEllipticalArc>(node.GetId());
VPointF p1 = VPointF(arc->GetP1(), "A", 0, 0); VPointF p1 = VPointF(arc->GetP1(), "A", 0, 0);
VPointF p2 = VPointF(arc->GetP2(), "A", 0, 0); VPointF p2 = VPointF(arc->GetP2(), "A", 0, 0);
QScopedPointer<VPointF> center(new VPointF(arc->GetCenter())); std::unique_ptr<VPointF> center(new VPointF(arc->GetCenter()));
if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID)
{ {
@ -568,29 +568,29 @@ quint32 AddNodeElArc(const VPieceNode &node, const VToolUnionDetailsInitData &in
BiasRotatePoint(&p1, dx, dy, p, angle); BiasRotatePoint(&p1, dx, dy, p, angle);
BiasRotatePoint(&p2, dx, dy, p, angle); BiasRotatePoint(&p2, dx, dy, p, angle);
BiasRotatePoint(center.data(), dx, dy, p, angle); BiasRotatePoint(center.get(), dx, dy, p, angle);
} }
QLineF l1(static_cast<QPointF>(*center), static_cast<QPointF>(p1)); QLineF l1(static_cast<QPointF>(*center), static_cast<QPointF>(p1));
QLineF l2(static_cast<QPointF>(*center), static_cast<QPointF>(p2)); QLineF l2(static_cast<QPointF>(*center), static_cast<QPointF>(p2));
center->setMode(Draw::Modeling); center->setMode(Draw::Modeling);
VPointF *tmpCenter = center.take(); VPointF *tmpCenter = center.release();
quint32 idCenter = initData.data->AddGObject(tmpCenter); quint32 idCenter = initData.data->AddGObject(tmpCenter);
Q_UNUSED(idCenter) Q_UNUSED(idCenter)
QScopedPointer<VEllipticalArc> arc1(new VEllipticalArc (*tmpCenter, arc->GetRadius1(), arc->GetRadius2(), std::unique_ptr<VEllipticalArc> arc1(new VEllipticalArc (*tmpCenter, arc->GetRadius1(), arc->GetRadius2(),
arc->GetFormulaRadius1(), arc->GetFormulaRadius2(), arc->GetFormulaRadius1(), arc->GetFormulaRadius2(),
l1.angle(), QString().setNum(l1.angle()), l2.angle(), l1.angle(), QString().setNum(l1.angle()), l2.angle(),
QString().setNum(l2.angle()), 0, QChar('0'))); QString().setNum(l2.angle()), 0, QChar('0')));
arc1->setMode(Draw::Modeling); arc1->setMode(Draw::Modeling);
QScopedPointer<VEllipticalArc> arc2(new VEllipticalArc(*arc1)); std::unique_ptr<VEllipticalArc> arc2(new VEllipticalArc(*arc1));
const quint32 idObject = initData.data->AddGObject(arc1.take()); const quint32 idObject = initData.data->AddGObject(arc1.release());
children.append(idObject); children.append(idObject);
arc2->setIdObject(idObject); arc2->setIdObject(idObject);
arc2->setMode(Draw::Modeling); arc2->setMode(Draw::Modeling);
const quint32 id = initData.data->AddGObject(arc2.take()); const quint32 id = initData.data->AddGObject(arc2.release());
VAbstractNodeInitData initNodeData; VAbstractNodeInitData initNodeData;
initNodeData.id = id; initNodeData.id = id;
@ -657,7 +657,7 @@ quint32 AddNodeSplinePath(const VPieceNode &node, const VToolUnionDetailsInitDat
QVector<quint32> &children, const QString &drawName, qreal dx, qreal dy, QVector<quint32> &children, const QString &drawName, qreal dx, qreal dy,
quint32 pRotate, qreal angle) quint32 pRotate, qreal angle)
{ {
QScopedPointer<VSplinePath> path(new VSplinePath()); std::unique_ptr<VSplinePath> path(new VSplinePath());
path->setMode(Draw::Modeling); path->setMode(Draw::Modeling);
const QSharedPointer<VAbstractCubicBezierPath> splinePath = const QSharedPointer<VAbstractCubicBezierPath> splinePath =
initData.data->GeometricObject<VAbstractCubicBezierPath>(node.GetId()); initData.data->GeometricObject<VAbstractCubicBezierPath>(node.GetId());
@ -703,14 +703,14 @@ quint32 AddNodeSplinePath(const VPieceNode &node, const VToolUnionDetailsInitDat
path->append(VSplinePoint(*p4, spl.GetEndAngle(), spl.GetEndAngleFormula(), angle2, angle2F, path->append(VSplinePoint(*p4, spl.GetEndAngle(), spl.GetEndAngleFormula(), angle2, angle2F,
spline.GetC2Length(), spline.GetC2LengthFormula(), pL2, pL2F)); spline.GetC2Length(), spline.GetC2LengthFormula(), pL2, pL2F));
} }
QScopedPointer<VSplinePath> path1(new VSplinePath(*path)); std::unique_ptr<VSplinePath> path1(new VSplinePath(*path));
const quint32 idObject = initData.data->AddGObject(path.take()); const quint32 idObject = initData.data->AddGObject(path.release());
children.append(idObject); children.append(idObject);
path1->setIdObject(idObject); path1->setIdObject(idObject);
path1->setMode(Draw::Modeling); path1->setMode(Draw::Modeling);
const quint32 id = initData.data->AddGObject(path1.take()); const quint32 id = initData.data->AddGObject(path1.release());
VAbstractNodeInitData initNodeData; VAbstractNodeInitData initNodeData;
initNodeData.id = id; initNodeData.id = id;
@ -935,13 +935,13 @@ quint32 TakeNextId(QVector<quint32> &children)
void UpdateNodePoint(VContainer *data, const VPieceNode &node, QVector<quint32> &children, qreal dx, qreal dy, void UpdateNodePoint(VContainer *data, const VPieceNode &node, QVector<quint32> &children, qreal dx, qreal dy,
quint32 pRotate, qreal angle) quint32 pRotate, qreal angle)
{ {
QScopedPointer<VPointF> point(new VPointF(*data->GeometricObject<VPointF>(node.GetId()))); std::unique_ptr<VPointF> point(new VPointF(*data->GeometricObject<VPointF>(node.GetId())));
point->setMode(Draw::Modeling); point->setMode(Draw::Modeling);
if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID)
{ {
BiasRotatePoint(point.data(), dx, dy, static_cast<QPointF>(*data->GeometricObject<VPointF>(pRotate)), angle); BiasRotatePoint(point.get(), dx, dy, static_cast<QPointF>(*data->GeometricObject<VPointF>(pRotate)), angle);
} }
data->UpdateGObject(TakeNextId(children), point.take()); data->UpdateGObject(TakeNextId(children), point.release());
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -965,10 +965,10 @@ void UpdateNodeArc(VContainer *data, const VPieceNode &node, QVector<quint32> &c
QLineF l1(static_cast<QPointF>(*center), static_cast<QPointF>(p1)); QLineF l1(static_cast<QPointF>(*center), static_cast<QPointF>(p1));
QLineF l2(static_cast<QPointF>(*center), static_cast<QPointF>(p2)); QLineF l2(static_cast<QPointF>(*center), static_cast<QPointF>(p2));
QScopedPointer<VArc> arc1(new VArc(*center, arc->GetRadius(), arc->GetFormulaRadius(), l1.angle(), std::unique_ptr<VArc> arc1(new VArc(*center, arc->GetRadius(), arc->GetFormulaRadius(), l1.angle(),
QString().setNum(l1.angle()), l2.angle(), QString().setNum(l2.angle()))); QString().setNum(l1.angle()), l2.angle(), QString().setNum(l2.angle())));
arc1->setMode(Draw::Modeling); arc1->setMode(Draw::Modeling);
data->UpdateGObject(TakeNextId(children), arc1.take()); data->UpdateGObject(TakeNextId(children), arc1.release());
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -992,12 +992,12 @@ void UpdateNodeElArc(VContainer *data, const VPieceNode &node, QVector<quint32>
QLineF l1(static_cast<QPointF>(*center), static_cast<QPointF>(p1)); QLineF l1(static_cast<QPointF>(*center), static_cast<QPointF>(p1));
QLineF l2(static_cast<QPointF>(*center), static_cast<QPointF>(p2)); QLineF l2(static_cast<QPointF>(*center), static_cast<QPointF>(p2));
QScopedPointer<VEllipticalArc> arc1(new VEllipticalArc (*center, arc->GetRadius1(), arc->GetRadius2(), std::unique_ptr<VEllipticalArc> arc1(new VEllipticalArc (*center, arc->GetRadius1(), arc->GetRadius2(),
arc->GetFormulaRadius1(), arc->GetFormulaRadius2(), arc->GetFormulaRadius1(), arc->GetFormulaRadius2(),
l1.angle(), QString().setNum(l1.angle()), l2.angle(), l1.angle(), QString().setNum(l1.angle()), l2.angle(),
QString().setNum(l2.angle()), 0, QChar('0'))); QString().setNum(l2.angle()), 0, QChar('0')));
arc1->setMode(Draw::Modeling); arc1->setMode(Draw::Modeling);
data->UpdateGObject(TakeNextId(children), arc1.take()); data->UpdateGObject(TakeNextId(children), arc1.release());
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -1022,16 +1022,16 @@ void UpdateNodeSpline(VContainer *data, const VPieceNode &node, QVector<quint32>
BiasRotatePoint(p4.data(), dx, dy, p, angle); BiasRotatePoint(p4.data(), dx, dy, p, angle);
} }
QScopedPointer<VSpline> spl(new VSpline(*p1, static_cast<QPointF>(p2), static_cast<QPointF>(p3), *p4, 0, std::unique_ptr<VSpline> spl(new VSpline(*p1, static_cast<QPointF>(p2), static_cast<QPointF>(p3), *p4, 0,
Draw::Modeling)); Draw::Modeling));
data->UpdateGObject(TakeNextId(children), spl.take()); data->UpdateGObject(TakeNextId(children), spl.release());
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void UpdateNodeSplinePath(VContainer *data, const VPieceNode &node, QVector<quint32> &children, qreal dx, qreal dy, void UpdateNodeSplinePath(VContainer *data, const VPieceNode &node, QVector<quint32> &children, qreal dx, qreal dy,
quint32 pRotate, qreal angle) quint32 pRotate, qreal angle)
{ {
QScopedPointer<VSplinePath> path(new VSplinePath()); std::unique_ptr<VSplinePath> path(new VSplinePath());
path->setMode(Draw::Modeling); path->setMode(Draw::Modeling);
const QSharedPointer<VAbstractCubicBezierPath> splinePath = const QSharedPointer<VAbstractCubicBezierPath> splinePath =
data->GeometricObject<VAbstractCubicBezierPath>(node.GetId()); data->GeometricObject<VAbstractCubicBezierPath>(node.GetId());
@ -1080,7 +1080,7 @@ void UpdateNodeSplinePath(VContainer *data, const VPieceNode &node, QVector<quin
path->append(VSplinePoint(*p4, spl.GetEndAngle(), spl.GetEndAngleFormula(), angle2, angle2F, path->append(VSplinePoint(*p4, spl.GetEndAngle(), spl.GetEndAngleFormula(), angle2, angle2F,
spline.GetC2Length(), spline.GetC2LengthFormula(), pL2, pL2F)); spline.GetC2Length(), spline.GetC2LengthFormula(), pL2, pL2F));
} }
data->UpdateGObject(TakeNextId(children), path.take()); data->UpdateGObject(TakeNextId(children), path.release());
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -1498,14 +1498,14 @@ void UpdateUnitedDetailPins(const VToolUnionDetailsInitData &initData, qreal dx,
for (auto record : records) for (auto record : records)
{ {
QScopedPointer<VPointF> point(new VPointF(*initData.data->GeometricObject<VPointF>(record))); std::unique_ptr<VPointF> point(new VPointF(*initData.data->GeometricObject<VPointF>(record)));
point->setMode(Draw::Modeling); point->setMode(Draw::Modeling);
if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID)
{ {
BiasRotatePoint(point.data(), dx, dy, BiasRotatePoint(point.get(), dx, dy,
static_cast<QPointF>(*initData.data->GeometricObject<VPointF>(pRotate)), angle); static_cast<QPointF>(*initData.data->GeometricObject<VPointF>(pRotate)), angle);
} }
initData.data->UpdateGObject(TakeNextId(children), point.take()); initData.data->UpdateGObject(TakeNextId(children), point.release());
} }
} }
@ -1523,7 +1523,7 @@ void UpdateUnitedDetailPlaceLabels(const VToolUnionDetailsInitData &initData, qr
BiasRotatePoint(parentLabel.data(), dx, dy, BiasRotatePoint(parentLabel.data(), dx, dy,
static_cast<QPointF>(*initData.data->GeometricObject<VPointF>(pRotate)), angle); static_cast<QPointF>(*initData.data->GeometricObject<VPointF>(pRotate)), angle);
} }
QScopedPointer<VPlaceLabelItem> label(new VPlaceLabelItem()); std::unique_ptr<VPlaceLabelItem> label(new VPlaceLabelItem());
label->setName(parentLabel->name()); label->setName(parentLabel->name());
label->setX(parentLabel->x()); label->setX(parentLabel->x());
label->setY(parentLabel->y()); label->setY(parentLabel->y());
@ -1531,7 +1531,7 @@ void UpdateUnitedDetailPlaceLabels(const VToolUnionDetailsInitData &initData, qr
label->setMy(parentLabel->my()); label->setMy(parentLabel->my());
label->SetCorrectionAngle(parentLabel->GetCorrectionAngle()+angle); label->SetCorrectionAngle(parentLabel->GetCorrectionAngle()+angle);
initData.data->UpdateGObject(TakeNextId(children), label.take()); initData.data->UpdateGObject(TakeNextId(children), label.release());
} }
} }

View file

@ -122,12 +122,26 @@ void VGrainlineItem::paint(QPainter* pP, const QStyleOptionGraphicsItem* pOption
if (m_eArrowType != GrainlineArrowDirection::atRear) if (m_eArrowType != GrainlineArrowDirection::atRear)
{ {
// first arrow // first arrow
pP->drawPolygon(FirstArrow(dArrLen)); pP->drawPolygon(FirstArrow(MainLine().p2(), dArrLen));
if (m_eArrowType == GrainlineArrowDirection::atFourWay)
{ // first double arrow
QLineF line = MainLine();
line.setLength(line.length() - dArrLen - dArrLen*0.5);
pP->drawPolygon(FirstArrow(line.p2(), dArrLen));
}
} }
if (m_eArrowType != GrainlineArrowDirection::atFront) if (m_eArrowType != GrainlineArrowDirection::atFront)
{ {
// second arrow // second arrow
pP->drawPolygon(SecondArrow(dArrLen)); pP->drawPolygon(SecondArrow(MainLine().p1(), dArrLen));
if (m_eArrowType == GrainlineArrowDirection::atFourWay)
{ // second double arrow
QLineF line(MainLine().p2(), MainLine().p1());
line.setLength(line.length() - dArrLen - dArrLen*0.5);
pP->drawPolygon(SecondArrow(line.p2(), dArrLen));
}
} }
if (m_eMode != mNormal) if (m_eMode != mNormal)
@ -636,28 +650,26 @@ QLineF VGrainlineItem::MainLine() const
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
QPolygonF VGrainlineItem::FirstArrow(qreal dArrLen) const QPolygonF VGrainlineItem::FirstArrow(const QPointF &pt, qreal dArrLen) const
{ {
const QPointF pt2 = MainLine().p2();
QPolygonF poly; QPolygonF poly;
poly << pt2; poly << pt;
poly << QPointF(pt2.x() + dArrLen*cos(M_PI + m_dRotation + ARROW_ANGLE), poly << QPointF(pt.x() + dArrLen*cos(M_PI + m_dRotation + ARROW_ANGLE),
pt2.y() - dArrLen*sin(M_PI + m_dRotation + ARROW_ANGLE)); pt.y() - dArrLen*sin(M_PI + m_dRotation + ARROW_ANGLE));
poly << QPointF(pt2.x() + dArrLen*cos(M_PI + m_dRotation - ARROW_ANGLE), poly << QPointF(pt.x() + dArrLen*cos(M_PI + m_dRotation - ARROW_ANGLE),
pt2.y() - dArrLen*sin(M_PI + m_dRotation - ARROW_ANGLE)); pt.y() - dArrLen*sin(M_PI + m_dRotation - ARROW_ANGLE));
return poly; return poly;
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
QPolygonF VGrainlineItem::SecondArrow(qreal dArrLen) const QPolygonF VGrainlineItem::SecondArrow(const QPointF &pt, qreal dArrLen) const
{ {
const QPointF pt1 = MainLine().p1();
QPolygonF poly; QPolygonF poly;
poly << pt1; poly << pt;
poly << QPointF(pt1.x() + dArrLen*cos(m_dRotation + ARROW_ANGLE), poly << QPointF(pt.x() + dArrLen*cos(m_dRotation + ARROW_ANGLE),
pt1.y() - dArrLen*sin(m_dRotation + ARROW_ANGLE)); pt.y() - dArrLen*sin(m_dRotation + ARROW_ANGLE));
poly << QPointF(pt1.x() + dArrLen*cos(m_dRotation - ARROW_ANGLE), poly << QPointF(pt.x() + dArrLen*cos(m_dRotation - ARROW_ANGLE),
pt1.y() - dArrLen*sin(m_dRotation - ARROW_ANGLE)); pt.y() - dArrLen*sin(m_dRotation - ARROW_ANGLE));
return poly; return poly;
} }
@ -681,7 +693,15 @@ QPainterPath VGrainlineItem::MainShape() const
{ {
// first arrow // first arrow
QPainterPath polyPath; QPainterPath polyPath;
polyPath.addPolygon(FirstArrow(dArrLen)); polyPath.addPolygon(FirstArrow(MainLine().p2(), dArrLen));
if (m_eArrowType == GrainlineArrowDirection::atFourWay)
{ // first double arrow
QLineF line = MainLine();
line.setLength(line.length() - dArrLen - 0.5);
polyPath.addPolygon(FirstArrow(line.p2(), dArrLen));
}
path.addPath((stroker.createStroke(polyPath) + polyPath).simplified()); path.addPath((stroker.createStroke(polyPath) + polyPath).simplified());
path.closeSubpath(); path.closeSubpath();
} }
@ -690,7 +710,15 @@ QPainterPath VGrainlineItem::MainShape() const
{ {
// second arrow // second arrow
QPainterPath polyPath; QPainterPath polyPath;
polyPath.addPolygon(SecondArrow(dArrLen)); polyPath.addPolygon(SecondArrow(MainLine().p1(), dArrLen));
if (m_eArrowType == GrainlineArrowDirection::atFourWay)
{ // second double arrow
QLineF line(MainLine().p2(), MainLine().p1());
line.setLength(line.length() - dArrLen - 0.5);
polyPath.addPolygon(SecondArrow(line.p2(), dArrLen));
}
path.addPath((stroker.createStroke(polyPath) + polyPath).simplified()); path.addPath((stroker.createStroke(polyPath) + polyPath).simplified());
path.closeSubpath(); path.closeSubpath();
} }

View file

@ -84,12 +84,12 @@ private:
QPointF m_ptFinish; QPointF m_ptFinish;
QPointF m_ptCenter; QPointF m_ptCenter;
qreal m_dAngle; qreal m_dAngle;
GrainlineArrowDirection m_eArrowType; GrainlineArrowDirection m_eArrowType;
double m_penWidth{1}; double m_penWidth{1};
QLineF MainLine() const; QLineF MainLine() const;
QPolygonF FirstArrow(qreal dArrLen) const; QPolygonF FirstArrow(const QPointF &pt, qreal dArrLen) const;
QPolygonF SecondArrow(qreal dArrLen) const; QPolygonF SecondArrow(const QPointF &pt, qreal dArrLen) const;
QPainterPath MainShape() const; QPainterPath MainShape() const;

View file

@ -61,30 +61,30 @@ VHighlighter::VHighlighter(QTextDocument *document)
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VHighlighter::highlightBlock(const QString &text) void VHighlighter::highlightBlock(const QString &text)
{ {
QScopedPointer<VTextBlockData> data(new VTextBlockData); std::unique_ptr<VTextBlockData> data(new VTextBlockData);
vsizetype leftPos = text.indexOf('('); vsizetype leftPos = text.indexOf('(');
while (leftPos != -1) while (leftPos != -1)
{ {
QScopedPointer<ParenthesisInfo> info(new ParenthesisInfo); std::unique_ptr<ParenthesisInfo> info(new ParenthesisInfo);
info->character = '('; info->character = '(';
info->position = leftPos; info->position = leftPos;
data->insert(info.take()); data->insert(info.release());
leftPos = text.indexOf('(', leftPos + 1); leftPos = text.indexOf('(', leftPos + 1);
} }
vsizetype rightPos = text.indexOf(')'); vsizetype rightPos = text.indexOf(')');
while (rightPos != -1) while (rightPos != -1)
{ {
QScopedPointer<ParenthesisInfo> info(new ParenthesisInfo); std::unique_ptr<ParenthesisInfo> info(new ParenthesisInfo);
info->character = ')'; info->character = ')';
info->position = rightPos; info->position = rightPos;
data->insert(info.take()); data->insert(info.release());
rightPos = text.indexOf(')', rightPos +1); rightPos = text.indexOf(')', rightPos +1);
} }
setCurrentBlockUserData(data.take()); setCurrentBlockUserData(data.release());
} }

View file

@ -33,7 +33,7 @@
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -810.9147913912859, "x": -810.9147913912859,
"y": -9.118915311803084 "y": -9.118915311803082
}, },
{ {
"angle": 6, "angle": 6,
@ -41,8 +41,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -773.697565712941, "x": -773.6975657129408,
"y": -13.057776517652679 "y": -13.057776517652666
}, },
{ {
"angle": 6, "angle": 6,
@ -50,8 +50,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -731.3693960390717, "x": -731.3693960390715,
"y": -19.56419323976961 "y": -19.564193239769583
}, },
{ {
"angle": 6, "angle": 6,
@ -59,8 +59,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -700.8138618525178, "x": -700.8138618525176,
"y": -25.693917945236084 "y": -25.693917945236056
}, },
{ {
"angle": 6, "angle": 6,
@ -68,8 +68,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -670.5392892845426, "x": -670.5392892845424,
"y": -33.532046871057645 "y": -33.53204687105762
}, },
{ {
"angle": 6, "angle": 6,
@ -77,8 +77,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -649.4254060248002, "x": -649.4254060247999,
"y": -40.69070943425645 "y": -40.69070943425643
}, },
{ {
"angle": 6, "angle": 6,
@ -86,7 +86,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -636.4972481739836, "x": -636.4972481739833,
"y": -46.04184558720286 "y": -46.04184558720286
}, },
{ {
@ -95,7 +95,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -630.5509356263242, "x": -630.5509356263238,
"y": -48.932226964906654 "y": -48.932226964906654
}, },
{ {
@ -104,7 +104,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -612.7709374645625, "x": -612.7709374645622,
"y": -58.17881193899319 "y": -58.17881193899319
}, },
{ {

View file

@ -2,303 +2,283 @@
"vector": [ "vector": [
{ {
"type": "QPointF", "type": "QPointF",
"x": -838.7026077978918, "x": -814.7149606299213,
"y": 360.52065549216434 "y": 372.2542552635798
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 331.31319685039375 "y": 330.5891727033602
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 28.923105387765915 "y": 28.923105387766057
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": -46.674417477891 "y": -46.67441747789094
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -814.2667801920632, "x": -814.2667801920694,
"y": -46.77051665539527 "y": -46.77051665539475
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -778.5602746831936, "x": -778.5602746831969,
"y": -50.54949176119353 "y": -50.54949176119329
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -737.9608911970817, "x": -737.9608911970803,
"y": -56.79017047839188 "y": -56.790170478392334
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -709.2737849361833, "x": -709.2737849361882,
"y": -62.54507114228375 "y": -62.54507114228297
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -681.3583296765719, "x": -681.3583296765614,
"y": -69.77242131730468 "y": -69.77242131730785
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -662.7349969797737, "x": -662.7349969797801,
"y": -76.08666265976586 "y": -76.08666265976335
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -652.0000133582188, "x": -652.0000133582183,
"y": -80.53001488530833 "y": -80.53001488530862
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -647.5347421078782, "x": -647.5347421078806,
"y": -82.70049226350477 "y": -82.70049226350372
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -631.5852394687809, "x": -631.5852394687715,
"y": -90.99511806183605 "y": -90.99511806184105
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -616.3280202339708, "x": -616.3280202339932,
"y": -100.59426715699189 "y": -100.59426715697734
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -594.0963839106636, "x": -594.0963839106644,
"y": -115.9721553077516 "y": -115.97215530775206
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -184.04865014874542, "x": -184.04865014874576,
"y": 76.19837439910728 "y": 76.19837439910705
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -202.58871262669427, "x": -202.58871262669433,
"y": 128.53121708773386 "y": 128.5312170877332
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -214.84435298014208, "x": -214.84435298014535,
"y": 166.70961534534916 "y": 166.709615345359
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -224.9007219166651, "x": -224.9007219166664,
"y": 202.78670773496933 "y": 202.7867077349721
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -232.93434714099388, "x": -232.93434714099442,
"y": 237.08085683490162 "y": 237.0808568349011
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -239.0890371517, "x": -239.08903715169467,
"y": 269.81704595738483 "y": 269.8170459573539
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -243.50661138639492, "x": -243.50661138639543,
"y": 301.2305028748772 "y": 301.2305028748881
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -246.32424570745619, "x": -246.32424570745593,
"y": 331.5659013496832 "y": 331.5659013496859
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -247.4259188169727, "x": -247.42591881697234,
"y": 355.684725526716 "y": 355.68472552671597
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -274.1103616347323, "x": -274.1103616347226,
"y": 368.39650194198157 "y": 368.3965019419771
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -280.43082717423164, "x": -280.4308271742487,
"y": 370.73899686729357 "y": 370.73899686729897
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -285.6974576466219, "x": -286.53994881447335,
"y": 372.38739828360394 "y": 372.65108939343145
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -295.7605238049826, "x": -295.7605238049802,
"y": 375.0706690235611 "y": 375.07066902356064
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -308.3295870292442, "x": -309.1086607001497,
"y": 377.6522566136316 "y": 377.8122722714953
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -323.20961073643133, "x": -323.7918413406422,
"y": 380.0950323212031 "y": 380.189287868496
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -339.2933747725014, "x": -339.7464924132723,
"y": 382.20466538395215 "y": 382.2635758852316
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -356.571621703457, "x": -356.9362622181957,
"y": 384.0385765592796 "y": 384.07704503986554
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -374.97963878344376, "x": -375.2815276936278,
"y": 385.6272715746786 "y": 385.65320885961137
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -394.4224543531813, "x": -394.4224543531805,
"y": 386.9889713429367 "y": 386.98897134293713
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -414.7876067251065,
"y": 388.13579550460213 "y": 388.13579550460133
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -435.9520270040894, "x": -435.9520270040898,
"y": 389.07661798449516 "y": 389.07661798449567
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -457.7859582653625, "x": -457.785958265363,
"y": 389.818484035946 "y": 389.8184840359457
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -480.15529936788164, "x": -480.1552993678824,
"y": 390.3673559353522 "y": 390.36735593535275
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -502.9230721502445, "x": -502.9230721502437,
"y": 390.728524359008 "y": 390.7285243590086
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -525.9503830211974, "x": -525.950383021198,
"y": 390.90684349642925 "y": 390.9068434964294
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -549.0970864147907, "x": -549.0970864147915,
"y": 390.9068680348474 "y": 390.90686803484715
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -572.2222728858704, "x": -572.2222728858721,
"y": 390.7329321107656 "y": 390.7329321107654
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -595.1846601171007, "x": -595.1846601170994,
"y": 390.3891909827686 "y": 390.3891909827694
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -617.8429427582322, "x": -617.8429427582319,
"y": 389.87963542037477 "y": 389.8796354203741
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -640.0561486385066, "x": -640.0561486385068,
"y": 389.208081776043 "y": 389.2080817760433
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -661.6840517509004, "x": -661.6840517509002,
"y": 388.3781346110808 "y": 388.3781346110811
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -682.5877079123347, "x": -682.5877079123363,
"y": 387.3931112039713 "y": 387.3931112039708
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -702.630213618707, "x": -702.6302136187057,
"y": 386.255904969502 "y": 386.2559049695029
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -721.6778577696439, "x": -721.6778577696422,
"y": 384.9687413227849 "y": 384.9687413227853
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -739.6019742862287, "x": -739.6019742862303,
"y": 383.5327301728105 "y": 383.5327301728113
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -756.2820913691256, "x": -756.6283706367624,
"y": 381.94700726179155 "y": 381.91399989149096
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -771.6116072858362, "x": -772.0557074133295,
"y": 380.2069813195123 "y": 380.1563856315983
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -785.5087261025127, "x": -786.1074176186619,
"y": 378.3004611599152 "y": 378.2178680808823
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -797.9392812498397, "x": -798.8005062137145,
"y": 376.198189302873 "y": 376.0511796823399
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -810.1810632465665, "x": -810.1810632465617,
"y": 373.5624561175904 "y": 373.5624561175911
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -818.0929557813755, "x": -814.7149606299213,
"y": 371.2795759163598 "y": 372.2542552635798
},
{
"type": "QPointF",
"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
} }
] ]
} }

View file

@ -33,7 +33,7 @@
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -810.9147913912859, "x": -810.9147913912859,
"y": -9.118915311803084 "y": -9.118915311803082
}, },
{ {
"angle": 6, "angle": 6,
@ -41,8 +41,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -773.697565712941, "x": -773.6975657129408,
"y": -13.057776517652679 "y": -13.057776517652666
}, },
{ {
"angle": 6, "angle": 6,
@ -50,8 +50,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -731.3693960390717, "x": -731.3693960390715,
"y": -19.56419323976961 "y": -19.564193239769583
}, },
{ {
"angle": 6, "angle": 6,
@ -59,8 +59,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -700.8138618525178, "x": -700.8138618525176,
"y": -25.693917945236084 "y": -25.693917945236056
}, },
{ {
"angle": 6, "angle": 6,
@ -68,8 +68,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -670.5392892845426, "x": -670.5392892845424,
"y": -33.532046871057645 "y": -33.53204687105762
}, },
{ {
"angle": 6, "angle": 6,
@ -77,8 +77,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -649.4254060248002, "x": -649.4254060247999,
"y": -40.69070943425645 "y": -40.69070943425643
}, },
{ {
"angle": 6, "angle": 6,
@ -86,7 +86,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -636.4972481739836, "x": -636.4972481739833,
"y": -46.04184558720286 "y": -46.04184558720286
}, },
{ {
@ -95,7 +95,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -630.5509356263242, "x": -630.5509356263238,
"y": -48.932226964906654 "y": -48.932226964906654
}, },
{ {
@ -104,7 +104,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -612.7709374645625, "x": -612.7709374645622,
"y": -58.17881193899319 "y": -58.17881193899319
}, },
{ {

View file

@ -2,303 +2,303 @@
"vector": [ "vector": [
{ {
"type": "QPointF", "type": "QPointF",
"x": -838.7026077978918, "x": -863.5718297690097,
"y": 360.52065549216434 "y": 340.0959369535931
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 331.31319685039375 "y": 330.58917270335996
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 28.923105387765915 "y": 28.923105387766057
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": -46.674417477891 "y": -46.67441747789094
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -814.2667801920632, "x": -814.2667801920694,
"y": -46.77051665539527 "y": -46.77051665539475
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -778.5602746831936, "x": -778.5602746831969,
"y": -50.54949176119353 "y": -50.54949176119329
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -737.9608911970817, "x": -737.9608911970803,
"y": -56.79017047839188 "y": -56.790170478392334
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -709.2737849361833, "x": -709.2737849361882,
"y": -62.54507114228375 "y": -62.54507114228297
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -681.3583296765719, "x": -681.3583296765614,
"y": -69.77242131730468 "y": -69.77242131730785
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -662.7349969797737, "x": -662.7349969797801,
"y": -76.08666265976586 "y": -76.08666265976335
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -652.0000133582188, "x": -652.0000133582183,
"y": -80.53001488530833 "y": -80.53001488530862
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -647.5347421078782, "x": -647.5347421078806,
"y": -82.70049226350477 "y": -82.70049226350372
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -631.5852394687809, "x": -631.5852394687715,
"y": -90.99511806183605 "y": -90.99511806184105
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -616.3280202339708, "x": -616.3280202339932,
"y": -100.59426715699189 "y": -100.59426715697734
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -594.0963839106636, "x": -594.0963839106644,
"y": -115.9721553077516 "y": -115.97215530775206
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -184.04865014874542, "x": -184.04865014874576,
"y": 76.19837439910728 "y": 76.19837439910705
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -202.58871262669427, "x": -202.58871262669433,
"y": 128.53121708773386 "y": 128.5312170877332
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -214.84435298014208, "x": -214.84435298014535,
"y": 166.70961534534916 "y": 166.709615345359
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -224.9007219166651, "x": -224.9007219166664,
"y": 202.78670773496933 "y": 202.7867077349721
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -232.93434714099388, "x": -232.93434714099442,
"y": 237.08085683490162 "y": 237.0808568349011
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -239.0890371517, "x": -239.08903715169467,
"y": 269.81704595738483 "y": 269.8170459573539
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -243.50661138639492, "x": -243.50661138639543,
"y": 301.2305028748772 "y": 301.2305028748881
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -246.32424570745619, "x": -246.32424570745593,
"y": 331.5659013496832 "y": 331.5659013496859
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -247.4259188169727, "x": -247.42591881697234,
"y": 355.684725526716 "y": 355.68472552671597
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -274.1103616347323, "x": -274.1103616347226,
"y": 368.39650194198157 "y": 368.3965019419771
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -280.43082717423164, "x": -280.4308271742487,
"y": 370.73899686729357 "y": 370.73899686729897
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -285.6974576466219, "x": -286.53994881447335,
"y": 372.38739828360394 "y": 372.65108939343145
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -295.7605238049826, "x": -295.7605238049802,
"y": 375.0706690235611 "y": 375.07066902356064
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -308.3295870292442, "x": -309.1086607001497,
"y": 377.6522566136316 "y": 377.8122722714953
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -323.20961073643133, "x": -323.7918413406422,
"y": 380.0950323212031 "y": 380.189287868496
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -339.2933747725014, "x": -339.7464924132723,
"y": 382.20466538395215 "y": 382.2635758852316
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -356.571621703457, "x": -356.9362622181957,
"y": 384.0385765592796 "y": 384.07704503986554
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -374.97963878344376, "x": -375.2815276936278,
"y": 385.6272715746786 "y": 385.65320885961137
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -394.4224543531813, "x": -394.4224543531805,
"y": 386.9889713429367 "y": 386.98897134293713
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -414.7876067251065,
"y": 388.13579550460213 "y": 388.13579550460133
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -435.9520270040894, "x": -435.9520270040898,
"y": 389.07661798449516 "y": 389.07661798449567
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -457.7859582653625, "x": -457.785958265363,
"y": 389.818484035946 "y": 389.8184840359457
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -480.15529936788164, "x": -480.1552993678824,
"y": 390.3673559353522 "y": 390.36735593535275
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -502.9230721502445, "x": -502.9230721502437,
"y": 390.728524359008 "y": 390.7285243590086
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -525.9503830211974, "x": -525.950383021198,
"y": 390.90684349642925 "y": 390.9068434964294
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -549.0970864147907, "x": -549.0970864147915,
"y": 390.9068680348474 "y": 390.90686803484715
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -572.2222728858704, "x": -572.2222728858721,
"y": 390.7329321107656 "y": 390.7329321107654
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -595.1846601171007, "x": -595.1846601170994,
"y": 390.3891909827686 "y": 390.3891909827694
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -617.8429427582322, "x": -617.8429427582319,
"y": 389.87963542037477 "y": 389.8796354203741
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -640.0561486385066, "x": -640.0561486385068,
"y": 389.208081776043 "y": 389.2080817760433
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -661.6840517509004, "x": -661.6840517509002,
"y": 388.3781346110808 "y": 388.3781346110811
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -682.5877079123347, "x": -682.5877079123363,
"y": 387.3931112039713 "y": 387.3931112039708
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -702.630213618707, "x": -702.6302136187057,
"y": 386.255904969502 "y": 386.2559049695029
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -721.6778577696439, "x": -721.6778577696422,
"y": 384.9687413227849 "y": 384.9687413227853
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -739.6019742862287, "x": -739.6019742862303,
"y": 383.5327301728105 "y": 383.5327301728113
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -756.2820913691256, "x": -756.6283706367624,
"y": 381.94700726179155 "y": 381.91399989149096
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -771.6116072858362, "x": -772.0557074133295,
"y": 380.2069813195123 "y": 380.1563856315983
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -785.5087261025127, "x": -786.1074176186619,
"y": 378.3004611599152 "y": 378.2178680808823
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -797.9392812498397, "x": -798.8005062137145,
"y": 376.198189302873 "y": 376.0511796823399
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -810.1810632465665, "x": -810.1810632465617,
"y": 373.5624561175904 "y": 373.5624561175911
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -818.0929557813755, "x": -818.0929557813661,
"y": 371.2795759163598 "y": 371.27957591636186
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -823.6929755287612, "x": -823.6929755287717,
"y": 369.27180555079025 "y": 369.27180555078513
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -829.5753368833404, "x": -829.5753368833371,
"y": 366.62694879394627 "y": 366.62694879394735
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -835.8151397150936, "x": -835.8151397150926,
"y": 362.8920896668543 "y": 362.8920896668538
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -838.7026077978918, "x": -863.5718297690097,
"y": 360.52065549216434 "y": 340.0959369535931
} }
] ]
} }

View file

@ -33,7 +33,7 @@
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -810.9147913912859, "x": -810.9147913912859,
"y": -9.118915311803084 "y": -9.118915311803082
}, },
{ {
"angle": 6, "angle": 6,
@ -41,8 +41,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -773.697565712941, "x": -773.6975657129408,
"y": -13.057776517652679 "y": -13.057776517652666
}, },
{ {
"angle": 6, "angle": 6,
@ -50,8 +50,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -731.3693960390717, "x": -731.3693960390715,
"y": -19.56419323976961 "y": -19.564193239769583
}, },
{ {
"angle": 6, "angle": 6,
@ -59,8 +59,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -700.8138618525178, "x": -700.8138618525176,
"y": -25.693917945236084 "y": -25.693917945236056
}, },
{ {
"angle": 6, "angle": 6,
@ -68,8 +68,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -670.5392892845426, "x": -670.5392892845424,
"y": -33.532046871057645 "y": -33.53204687105762
}, },
{ {
"angle": 6, "angle": 6,
@ -77,8 +77,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -649.4254060248002, "x": -649.4254060247999,
"y": -40.69070943425645 "y": -40.69070943425643
}, },
{ {
"angle": 6, "angle": 6,
@ -86,7 +86,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -636.4972481739836, "x": -636.4972481739833,
"y": -46.04184558720286 "y": -46.04184558720286
}, },
{ {
@ -95,7 +95,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -630.5509356263242, "x": -630.5509356263238,
"y": -48.932226964906654 "y": -48.932226964906654
}, },
{ {
@ -104,7 +104,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -612.7709374645625, "x": -612.7709374645622,
"y": -58.17881193899319 "y": -58.17881193899319
}, },
{ {

View file

@ -2,303 +2,283 @@
"vector": [ "vector": [
{ {
"type": "QPointF", "type": "QPointF",
"x": -838.7026077978918, "x": -815.5965354330709,
"y": 360.52065549216434 "y": 28.923105387766057
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 331.31319685039375 "y": -46.67441747789094
},
{
"type": "QPointF",
"x": -814.2667801920694,
"y": -46.77051665539475
},
{
"type": "QPointF",
"x": -778.5602746831969,
"y": -50.54949176119329
},
{
"type": "QPointF",
"x": -737.9608911970803,
"y": -56.790170478392334
},
{
"type": "QPointF",
"x": -709.2737849361882,
"y": -62.54507114228297
},
{
"type": "QPointF",
"x": -681.3583296765614,
"y": -69.77242131730785
},
{
"type": "QPointF",
"x": -662.7349969797801,
"y": -76.08666265976335
},
{
"type": "QPointF",
"x": -652.0000133582183,
"y": -80.53001488530862
},
{
"type": "QPointF",
"x": -647.5347421078806,
"y": -82.70049226350372
},
{
"type": "QPointF",
"x": -631.5852394687715,
"y": -90.99511806184105
},
{
"type": "QPointF",
"x": -616.3280202339932,
"y": -100.59426715697734
},
{
"type": "QPointF",
"x": -594.0963839106644,
"y": -115.97215530775206
},
{
"type": "QPointF",
"x": -184.04865014874576,
"y": 76.19837439910705
},
{
"type": "QPointF",
"x": -202.58871262669433,
"y": 128.5312170877332
},
{
"type": "QPointF",
"x": -214.84435298014535,
"y": 166.709615345359
},
{
"type": "QPointF",
"x": -224.9007219166664,
"y": 202.7867077349721
},
{
"type": "QPointF",
"x": -232.93434714099442,
"y": 237.0808568349011
},
{
"type": "QPointF",
"x": -239.08903715169467,
"y": 269.8170459573539
},
{
"type": "QPointF",
"x": -243.50661138639543,
"y": 301.2305028748881
},
{
"type": "QPointF",
"x": -246.32424570745593,
"y": 331.5659013496859
},
{
"type": "QPointF",
"x": -247.42591881697234,
"y": 355.68472552671597
},
{
"type": "QPointF",
"x": -274.1103616347226,
"y": 368.3965019419771
},
{
"type": "QPointF",
"x": -280.4308271742487,
"y": 370.73899686729897
},
{
"type": "QPointF",
"x": -286.53994881447335,
"y": 372.65108939343145
},
{
"type": "QPointF",
"x": -295.7605238049802,
"y": 375.07066902356064
},
{
"type": "QPointF",
"x": -309.1086607001497,
"y": 377.8122722714953
},
{
"type": "QPointF",
"x": -323.7918413406422,
"y": 380.189287868496
},
{
"type": "QPointF",
"x": -339.7464924132723,
"y": 382.2635758852316
},
{
"type": "QPointF",
"x": -356.9362622181957,
"y": 384.07704503986554
},
{
"type": "QPointF",
"x": -375.2815276936278,
"y": 385.65320885961137
},
{
"type": "QPointF",
"x": -394.4224543531805,
"y": 386.98897134293713
},
{
"type": "QPointF",
"x": -414.7876067251065,
"y": 388.13579550460133
},
{
"type": "QPointF",
"x": -435.9520270040898,
"y": 389.07661798449567
},
{
"type": "QPointF",
"x": -457.785958265363,
"y": 389.8184840359457
},
{
"type": "QPointF",
"x": -480.1552993678824,
"y": 390.36735593535275
},
{
"type": "QPointF",
"x": -502.9230721502437,
"y": 390.7285243590086
},
{
"type": "QPointF",
"x": -525.950383021198,
"y": 390.9068434964294
},
{
"type": "QPointF",
"x": -549.0970864147915,
"y": 390.90686803484715
},
{
"type": "QPointF",
"x": -572.2222728858721,
"y": 390.7329321107654
},
{
"type": "QPointF",
"x": -595.1846601170994,
"y": 390.3891909827694
},
{
"type": "QPointF",
"x": -617.8429427582319,
"y": 389.8796354203741
},
{
"type": "QPointF",
"x": -640.0561486385068,
"y": 389.2080817760433
},
{
"type": "QPointF",
"x": -661.6840517509002,
"y": 388.3781346110811
},
{
"type": "QPointF",
"x": -682.5877079123363,
"y": 387.3931112039708
},
{
"type": "QPointF",
"x": -702.6302136187057,
"y": 386.2559049695029
},
{
"type": "QPointF",
"x": -721.6778577696422,
"y": 384.9687413227853
},
{
"type": "QPointF",
"x": -739.6019742862303,
"y": 383.5327301728113
},
{
"type": "QPointF",
"x": -756.6283706367624,
"y": 381.91399989149096
},
{
"type": "QPointF",
"x": -772.0557074133295,
"y": 380.1563856315983
},
{
"type": "QPointF",
"x": -786.1074176186619,
"y": 378.2178680808823
},
{
"type": "QPointF",
"x": -798.8005062137145,
"y": 376.0511796823399
},
{
"type": "QPointF",
"x": -810.1810632465617,
"y": 373.5624561175911
},
{
"type": "QPointF",
"x": -814.7149606299213,
"y": 372.2542552635798
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 28.923105387765915 "y": 372.2542552635798
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": -46.674417477891 "y": 28.923105387766057
},
{
"type": "QPointF",
"x": -814.2667801920632,
"y": -46.77051665539527
},
{
"type": "QPointF",
"x": -778.5602746831936,
"y": -50.54949176119353
},
{
"type": "QPointF",
"x": -737.9608911970817,
"y": -56.79017047839188
},
{
"type": "QPointF",
"x": -709.2737849361833,
"y": -62.54507114228375
},
{
"type": "QPointF",
"x": -681.3583296765719,
"y": -69.77242131730468
},
{
"type": "QPointF",
"x": -662.7349969797737,
"y": -76.08666265976586
},
{
"type": "QPointF",
"x": -652.0000133582188,
"y": -80.53001488530833
},
{
"type": "QPointF",
"x": -647.5347421078782,
"y": -82.70049226350477
},
{
"type": "QPointF",
"x": -631.5852394687809,
"y": -90.99511806183605
},
{
"type": "QPointF",
"x": -616.3280202339708,
"y": -100.59426715699189
},
{
"type": "QPointF",
"x": -594.0963839106636,
"y": -115.9721553077516
},
{
"type": "QPointF",
"x": -184.04865014874542,
"y": 76.19837439910728
},
{
"type": "QPointF",
"x": -202.58871262669427,
"y": 128.53121708773386
},
{
"type": "QPointF",
"x": -214.84435298014208,
"y": 166.70961534534916
},
{
"type": "QPointF",
"x": -224.9007219166651,
"y": 202.78670773496933
},
{
"type": "QPointF",
"x": -232.93434714099388,
"y": 237.08085683490162
},
{
"type": "QPointF",
"x": -239.0890371517,
"y": 269.81704595738483
},
{
"type": "QPointF",
"x": -243.50661138639492,
"y": 301.2305028748772
},
{
"type": "QPointF",
"x": -246.32424570745619,
"y": 331.5659013496832
},
{
"type": "QPointF",
"x": -247.4259188169727,
"y": 355.684725526716
},
{
"type": "QPointF",
"x": -274.1103616347323,
"y": 368.39650194198157
},
{
"type": "QPointF",
"x": -280.43082717423164,
"y": 370.73899686729357
},
{
"type": "QPointF",
"x": -285.6974576466219,
"y": 372.38739828360394
},
{
"type": "QPointF",
"x": -295.7605238049826,
"y": 375.0706690235611
},
{
"type": "QPointF",
"x": -308.3295870292442,
"y": 377.6522566136316
},
{
"type": "QPointF",
"x": -323.20961073643133,
"y": 380.0950323212031
},
{
"type": "QPointF",
"x": -339.2933747725014,
"y": 382.20466538395215
},
{
"type": "QPointF",
"x": -356.571621703457,
"y": 384.0385765592796
},
{
"type": "QPointF",
"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,
"y": 381.94700726179155
},
{
"type": "QPointF",
"x": -771.6116072858362,
"y": 380.2069813195123
},
{
"type": "QPointF",
"x": -785.5087261025127,
"y": 378.3004611599152
},
{
"type": "QPointF",
"x": -797.9392812498397,
"y": 376.198189302873
},
{
"type": "QPointF",
"x": -810.1810632465665,
"y": 373.5624561175904
},
{
"type": "QPointF",
"x": -818.0929557813755,
"y": 371.2795759163598
},
{
"type": "QPointF",
"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
} }
] ]
} }

View file

@ -451,7 +451,7 @@
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -810.9147913912859, "x": -810.9147913912859,
"y": -9.118915311803084 "y": -9.118915311803082
}, },
{ {
"angle": 6, "angle": 6,
@ -459,8 +459,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -773.697565712941, "x": -773.6975657129408,
"y": -13.057776517652679 "y": -13.057776517652666
}, },
{ {
"angle": 6, "angle": 6,
@ -468,8 +468,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -731.3693960390717, "x": -731.3693960390715,
"y": -19.56419323976961 "y": -19.564193239769583
}, },
{ {
"angle": 6, "angle": 6,
@ -477,8 +477,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -700.8138618525178, "x": -700.8138618525176,
"y": -25.693917945236084 "y": -25.693917945236056
}, },
{ {
"angle": 6, "angle": 6,
@ -486,8 +486,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -670.5392892845426, "x": -670.5392892845424,
"y": -33.532046871057645 "y": -33.53204687105762
}, },
{ {
"angle": 6, "angle": 6,
@ -495,8 +495,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -649.4254060248002, "x": -649.4254060247999,
"y": -40.69070943425645 "y": -40.69070943425643
}, },
{ {
"angle": 6, "angle": 6,
@ -504,7 +504,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -636.4972481739836, "x": -636.4972481739833,
"y": -46.04184558720286 "y": -46.04184558720286
}, },
{ {
@ -513,7 +513,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -630.5509356263242, "x": -630.5509356263238,
"y": -48.932226964906654 "y": -48.932226964906654
}, },
{ {
@ -522,7 +522,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -612.7709374645625, "x": -612.7709374645622,
"y": -58.17881193899319 "y": -58.17881193899319
}, },
{ {

View file

@ -2,313 +2,288 @@
"vector": [ "vector": [
{ {
"type": "QPointF", "type": "QPointF",
"x": -218.4362476442146, "x": -218.43624764421457,
"y": 60.082487681666066 "y": 60.082487681666
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -196.73040945651604, "x": -196.73040945651616,
"y": 111.99504529263494 "y": 111.99504529263479
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -196.73040945651593, "x": -202.58871262669425,
"y": 111.995045292635 "y": 128.53121708773293
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -202.58871262669427, "x": -214.84435298014535,
"y": 128.53121708773386 "y": 166.709615345359
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -214.84435298014208, "x": -224.9007219166664,
"y": 166.70961534534916 "y": 202.7867077349721
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -224.9007219166651, "x": -232.93434714099442,
"y": 202.78670773496933 "y": 237.0808568349011
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -232.93434714099388, "x": -239.08903715169467,
"y": 237.08085683490162 "y": 269.8170459573539
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -239.0890371517, "x": -243.50661138639543,
"y": 269.81704595738483 "y": 301.2305028748881
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -243.50661138639492, "x": -246.32424570745593,
"y": 301.2305028748772 "y": 331.5659013496859
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -246.32424570745619, "x": -247.42591881697234,
"y": 331.5659013496832 "y": 355.68472552671597
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -247.4259188169727, "x": -274.1103616347226,
"y": 355.684725526716 "y": 368.3965019419771
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -274.1103616347323, "x": -280.4308271742487,
"y": 368.39650194198157 "y": 370.73899686729897
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -280.43082717423164, "x": -286.53994881447335,
"y": 370.73899686729357 "y": 372.65108939343145
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -285.6974576466219, "x": -295.7605238049802,
"y": 372.38739828360394 "y": 375.07066902356064
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -295.7605238049826, "x": -309.1086607001497,
"y": 375.0706690235611 "y": 377.8122722714953
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -308.3295870292442, "x": -323.7918413406422,
"y": 377.6522566136316 "y": 380.189287868496
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -323.20961073643133, "x": -339.7464924132723,
"y": 380.0950323212031 "y": 382.2635758852316
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -339.2933747725014, "x": -356.9362622181957,
"y": 382.20466538395215 "y": 384.07704503986554
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -356.571621703457, "x": -375.2815276936278,
"y": 384.0385765592796 "y": 385.65320885961137
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -374.97963878344376, "x": -394.4224543531805,
"y": 385.6272715746786 "y": 386.98897134293713
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -394.4224543531813, "x": -414.7876067251065,
"y": 386.9889713429367 "y": 388.13579550460133
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -435.9520270040898,
"y": 388.13579550460213 "y": 389.07661798449567
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -435.9520270040894, "x": -457.785958265363,
"y": 389.07661798449516 "y": 389.8184840359457
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -457.7859582653625, "x": -480.1552993678824,
"y": 389.818484035946 "y": 390.36735593535275
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -480.15529936788164, "x": -502.9230721502437,
"y": 390.3673559353522 "y": 390.7285243590086
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -502.9230721502445, "x": -525.950383021198,
"y": 390.728524359008 "y": 390.9068434964294
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -525.9503830211974, "x": -549.0970864147915,
"y": 390.90684349642925 "y": 390.90686803484715
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -549.0970864147907, "x": -572.2222728858721,
"y": 390.9068680348474 "y": 390.7329321107654
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -572.2222728858704, "x": -595.1846601170994,
"y": 390.7329321107656 "y": 390.3891909827694
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -595.1846601171007, "x": -617.8429427582319,
"y": 390.3891909827686 "y": 389.8796354203741
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -617.8429427582322, "x": -640.0561486385068,
"y": 389.87963542037477 "y": 389.2080817760433
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -640.0561486385066, "x": -661.6840517509002,
"y": 389.208081776043 "y": 388.3781346110811
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -661.6840517509004, "x": -682.5877079123363,
"y": 388.3781346110808 "y": 387.3931112039708
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -682.5877079123347, "x": -702.6302136187057,
"y": 387.3931112039713 "y": 386.2559049695029
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -702.630213618707, "x": -721.6778577696422,
"y": 386.255904969502 "y": 384.9687413227853
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -721.6778577696439, "x": -739.6019742862303,
"y": 384.9687413227849 "y": 383.5327301728113
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -739.6019742862287, "x": -756.6283706367624,
"y": 383.5327301728105 "y": 381.91399989149096
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -756.2820913691256, "x": -772.0557074133295,
"y": 381.94700726179155 "y": 380.1563856315983
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -771.6116072858362, "x": -786.1074176186619,
"y": 380.2069813195123 "y": 378.2178680808823
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -785.5087261025127, "x": -798.8005062137145,
"y": 378.3004611599152 "y": 376.0511796823399
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -797.9392812498397, "x": -810.1810632465617,
"y": 376.198189302873 "y": 373.5624561175911
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -810.1810632465665, "x": -814.7149606299213,
"y": 373.5624561175904 "y": 372.2542552635798
},
{
"type": "QPointF",
"x": -818.0929557813755,
"y": 371.2795759163598
},
{
"type": "QPointF",
"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
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 331.31319685039375 "y": 330.5891727033602
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 28.923105387766014 "y": 28.923105387766057
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": -46.674417477891 "y": -46.67441747789091
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -814.2667801920633, "x": -814.2667801920695,
"y": -46.770516655395255 "y": -46.77051665539474
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -778.5602746831936, "x": -778.5602746831969,
"y": -50.54949176119353 "y": -50.54949176119329
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -737.9608911970817, "x": -737.9608911970803,
"y": -56.79017047839188 "y": -56.790170478392334
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -709.2737849361833, "x": -709.2737849361882,
"y": -62.54507114228375 "y": -62.54507114228297
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -681.3583296765719, "x": -681.3583296765614,
"y": -69.77242131730468 "y": -69.77242131730785
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -662.7349969797737, "x": -662.7349969797801,
"y": -76.08666265976586 "y": -76.08666265976335
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -652.0000133582188, "x": -652.0000133582183,
"y": -80.53001488530833 "y": -80.53001488530862
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -647.5347421078782, "x": -647.5347421078806,
"y": -82.70049226350477 "y": -82.70049226350372
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -631.5852394687809, "x": -631.5852394687715,
"y": -90.99511806183605 "y": -90.99511806184105
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -616.3280202339708, "x": -616.3280202339934,
"y": -100.59426715699185 "y": -100.59426715697732
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -594.0963839106636, "x": -594.0963839106644,
"y": -115.97215530775165 "y": -115.97215530775212
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -218.4362476442146, "x": -218.43624764421457,
"y": 60.082487681666066 "y": 60.082487681666
} }
] ]
} }

View file

@ -457,7 +457,7 @@
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -810.9147913912859, "x": -810.9147913912859,
"y": -9.118915311803084 "y": -9.118915311803082
}, },
{ {
"angle": 6, "angle": 6,
@ -465,8 +465,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -773.697565712941, "x": -773.6975657129408,
"y": -13.057776517652679 "y": -13.057776517652666
}, },
{ {
"angle": 6, "angle": 6,
@ -474,8 +474,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -731.3693960390717, "x": -731.3693960390715,
"y": -19.56419323976961 "y": -19.564193239769583
}, },
{ {
"angle": 6, "angle": 6,
@ -483,8 +483,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -700.8138618525178, "x": -700.8138618525176,
"y": -25.693917945236084 "y": -25.693917945236056
}, },
{ {
"angle": 6, "angle": 6,
@ -492,8 +492,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -670.5392892845426, "x": -670.5392892845424,
"y": -33.532046871057645 "y": -33.53204687105762
}, },
{ {
"angle": 6, "angle": 6,
@ -501,8 +501,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -649.4254060248002, "x": -649.4254060247999,
"y": -40.69070943425645 "y": -40.69070943425643
}, },
{ {
"angle": 6, "angle": 6,
@ -510,7 +510,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -636.4972481739836, "x": -636.4972481739833,
"y": -46.04184558720286 "y": -46.04184558720286
}, },
{ {
@ -519,7 +519,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -630.5509356263242, "x": -630.5509356263238,
"y": -48.932226964906654 "y": -48.932226964906654
}, },
{ {
@ -528,7 +528,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -612.7709374645625, "x": -612.7709374645622,
"y": -58.17881193899319 "y": -58.17881193899319
}, },
{ {

View file

@ -2,313 +2,288 @@
"vector": [ "vector": [
{ {
"type": "QPointF", "type": "QPointF",
"x": -594.0963839106636, "x": -594.0963839106644,
"y": -115.97215530775165 "y": -115.97215530775212
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -218.4362476442146, "x": -218.43624764421457,
"y": 60.082487681666066 "y": 60.082487681666
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -196.73040945651604, "x": -196.73040945651616,
"y": 111.99504529263494 "y": 111.99504529263479
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -196.73040945651593, "x": -202.58871262669425,
"y": 111.995045292635 "y": 128.53121708773293
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -202.58871262669427, "x": -214.84435298014535,
"y": 128.53121708773386 "y": 166.709615345359
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -214.84435298014208, "x": -224.9007219166664,
"y": 166.70961534534916 "y": 202.7867077349721
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -224.9007219166651, "x": -232.93434714099442,
"y": 202.78670773496933 "y": 237.0808568349011
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -232.93434714099388, "x": -239.08903715169467,
"y": 237.08085683490162 "y": 269.8170459573539
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -239.0890371517, "x": -243.50661138639543,
"y": 269.81704595738483 "y": 301.2305028748881
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -243.50661138639492, "x": -246.32424570745593,
"y": 301.2305028748772 "y": 331.5659013496859
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -246.32424570745619, "x": -247.42591881697234,
"y": 331.5659013496832 "y": 355.68472552671597
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -247.4259188169727, "x": -274.1103616347226,
"y": 355.684725526716 "y": 368.3965019419771
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -274.1103616347323, "x": -280.4308271742487,
"y": 368.39650194198157 "y": 370.73899686729897
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -280.43082717423164, "x": -286.53994881447335,
"y": 370.73899686729357 "y": 372.65108939343145
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -285.6974576466219, "x": -295.7605238049802,
"y": 372.38739828360394 "y": 375.07066902356064
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -295.7605238049826, "x": -309.1086607001497,
"y": 375.0706690235611 "y": 377.8122722714953
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -308.3295870292442, "x": -323.7918413406422,
"y": 377.6522566136316 "y": 380.189287868496
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -323.20961073643133, "x": -339.7464924132723,
"y": 380.0950323212031 "y": 382.2635758852316
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -339.2933747725014, "x": -356.9362622181957,
"y": 382.20466538395215 "y": 384.07704503986554
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -356.571621703457, "x": -375.2815276936278,
"y": 384.0385765592796 "y": 385.65320885961137
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -374.97963878344376, "x": -394.4224543531805,
"y": 385.6272715746786 "y": 386.98897134293713
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -394.4224543531813, "x": -414.7876067251065,
"y": 386.9889713429367 "y": 388.13579550460133
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -435.9520270040898,
"y": 388.13579550460213 "y": 389.07661798449567
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -435.9520270040894, "x": -457.785958265363,
"y": 389.07661798449516 "y": 389.8184840359457
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -457.7859582653625, "x": -480.1552993678824,
"y": 389.818484035946 "y": 390.36735593535275
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -480.15529936788164, "x": -502.9230721502437,
"y": 390.3673559353522 "y": 390.7285243590086
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -502.9230721502445, "x": -525.950383021198,
"y": 390.728524359008 "y": 390.9068434964294
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -525.9503830211974, "x": -549.0970864147915,
"y": 390.90684349642925 "y": 390.90686803484715
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -549.0970864147907, "x": -572.2222728858721,
"y": 390.9068680348474 "y": 390.7329321107654
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -572.2222728858704, "x": -595.1846601170994,
"y": 390.7329321107656 "y": 390.3891909827694
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -595.1846601171007, "x": -617.8429427582319,
"y": 390.3891909827686 "y": 389.8796354203741
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -617.8429427582322, "x": -640.0561486385068,
"y": 389.87963542037477 "y": 389.2080817760433
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -640.0561486385066, "x": -661.6840517509002,
"y": 389.208081776043 "y": 388.3781346110811
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -661.6840517509004, "x": -682.5877079123363,
"y": 388.3781346110808 "y": 387.3931112039708
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -682.5877079123347, "x": -702.6302136187057,
"y": 387.3931112039713 "y": 386.2559049695029
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -702.630213618707, "x": -721.6778577696422,
"y": 386.255904969502 "y": 384.9687413227853
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -721.6778577696439, "x": -739.6019742862303,
"y": 384.9687413227849 "y": 383.5327301728113
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -739.6019742862287, "x": -756.6283706367624,
"y": 383.5327301728105 "y": 381.91399989149096
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -756.2820913691256, "x": -772.0557074133295,
"y": 381.94700726179155 "y": 380.1563856315983
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -771.6116072858362, "x": -786.1074176186619,
"y": 380.2069813195123 "y": 378.2178680808823
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -785.5087261025127, "x": -798.8005062137145,
"y": 378.3004611599152 "y": 376.0511796823399
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -797.9392812498397, "x": -810.1810632465617,
"y": 376.198189302873 "y": 373.5624561175911
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -810.1810632465665, "x": -814.7149606299213,
"y": 373.5624561175904 "y": 372.2542552635798
},
{
"type": "QPointF",
"x": -818.0929557813755,
"y": 371.2795759163598
},
{
"type": "QPointF",
"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
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 331.31319685039375 "y": 330.5891727033602
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 28.923105387766014 "y": 28.923105387766057
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": -46.674417477891 "y": -46.67441747789091
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -814.2667801920633, "x": -814.2667801920695,
"y": -46.770516655395255 "y": -46.77051665539474
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -778.5602746831936, "x": -778.5602746831969,
"y": -50.54949176119353 "y": -50.54949176119329
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -737.9608911970817, "x": -737.9608911970803,
"y": -56.79017047839188 "y": -56.790170478392334
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -709.2737849361833, "x": -709.2737849361882,
"y": -62.54507114228375 "y": -62.54507114228297
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -681.3583296765719, "x": -681.3583296765614,
"y": -69.77242131730468 "y": -69.77242131730785
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -662.7349969797737, "x": -662.7349969797801,
"y": -76.08666265976586 "y": -76.08666265976335
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -652.0000133582188, "x": -652.0000133582183,
"y": -80.53001488530833 "y": -80.53001488530862
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -647.5347421078782, "x": -647.5347421078806,
"y": -82.70049226350477 "y": -82.70049226350372
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -631.5852394687809, "x": -631.5852394687715,
"y": -90.99511806183605 "y": -90.99511806184105
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -616.3280202339708, "x": -616.3280202339934,
"y": -100.59426715699185 "y": -100.59426715697732
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -594.0963839106636, "x": -594.0963839106644,
"y": -115.97215530775165 "y": -115.97215530775212
} }
] ]
} }

View file

@ -16,7 +16,7 @@
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -810.9147913912859, "x": -810.9147913912859,
"y": -9.118915311803084 "y": -9.118915311803082
}, },
{ {
"angle": 6, "angle": 6,
@ -24,8 +24,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -773.697565712941, "x": -773.6975657129408,
"y": -13.057776517652679 "y": -13.057776517652666
}, },
{ {
"angle": 6, "angle": 6,
@ -33,8 +33,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -731.3693960390717, "x": -731.3693960390715,
"y": -19.56419323976961 "y": -19.564193239769583
}, },
{ {
"angle": 6, "angle": 6,
@ -42,8 +42,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -700.8138618525178, "x": -700.8138618525176,
"y": -25.693917945236084 "y": -25.693917945236056
}, },
{ {
"angle": 6, "angle": 6,
@ -51,8 +51,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -670.5392892845426, "x": -670.5392892845424,
"y": -33.532046871057645 "y": -33.53204687105762
}, },
{ {
"angle": 6, "angle": 6,
@ -60,8 +60,8 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -649.4254060248002, "x": -649.4254060247999,
"y": -40.69070943425645 "y": -40.69070943425643
}, },
{ {
"angle": 6, "angle": 6,
@ -69,7 +69,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -636.4972481739836, "x": -636.4972481739833,
"y": -46.04184558720286 "y": -46.04184558720286
}, },
{ {
@ -78,7 +78,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -630.5509356263242, "x": -630.5509356263238,
"y": -48.932226964906654 "y": -48.932226964906654
}, },
{ {
@ -87,7 +87,7 @@
"saAfter": 37.795275590551185, "saAfter": 37.795275590551185,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
"x": -612.7709374645625, "x": -612.7709374645622,
"y": -58.17881193899319 "y": -58.17881193899319
}, },
{ {

View file

@ -3,312 +3,287 @@
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 28.864326962967652 "y": 28.864326962967752
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": -46.74789050888896 "y": -46.747890508888815
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -814.7887347652259, "x": -814.7887347652247,
"y": -46.8308714614612 "y": -46.83087146146117
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -778.5027796006967, "x": -778.5027796007051,
"y": -50.55832953918108 "y": -50.55832953918005
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -737.9608911970817, "x": -737.9608911970803,
"y": -56.79017047839188 "y": -56.790170478392334
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -709.2737849361833, "x": -709.2737849361882,
"y": -62.54507114228375 "y": -62.54507114228297
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -681.3583296765719, "x": -681.3583296765614,
"y": -69.77242131730468 "y": -69.77242131730785
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -662.7349969797737, "x": -662.7349969797801,
"y": -76.08666265976586 "y": -76.08666265976335
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -652.0000133582188, "x": -652.0000133582183,
"y": -80.53001488530833 "y": -80.53001488530862
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -647.5347421078782, "x": -647.5347421078806,
"y": -82.70049226350477 "y": -82.70049226350372
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -631.5852394687809, "x": -631.5852394687715,
"y": -90.99511806183605 "y": -90.99511806184105
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -616.3280202339708, "x": -616.3280202339934,
"y": -100.59426715699185 "y": -100.59426715697732
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -594.0963839106636, "x": -594.0963839106644,
"y": -115.97215530775165 "y": -115.97215530775212
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -218.4362476442146, "x": -218.43624764421457,
"y": 60.082487681666066 "y": 60.082487681666
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -196.73040945651604, "x": -196.73040945651616,
"y": 111.99504529263494 "y": 111.99504529263479
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -196.73040945651593, "x": -202.58871262669425,
"y": 111.995045292635 "y": 128.53121708773293
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -202.58871262669427, "x": -214.84435298014535,
"y": 128.53121708773386 "y": 166.709615345359
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -214.84435298014208, "x": -224.9007219166664,
"y": 166.70961534534916 "y": 202.7867077349721
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -224.9007219166651, "x": -232.93434714099442,
"y": 202.78670773496933 "y": 237.0808568349011
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -232.93434714099388, "x": -239.08903715169467,
"y": 237.08085683490162 "y": 269.8170459573539
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -239.0890371517, "x": -243.50661138639543,
"y": 269.81704595738483 "y": 301.2305028748881
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -243.50661138639492, "x": -246.32424570745593,
"y": 301.2305028748772 "y": 331.5659013496859
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -246.32424570745619, "x": -247.42591881697234,
"y": 331.5659013496832 "y": 355.68472552671597
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -247.4259188169727, "x": -274.1103616347226,
"y": 355.684725526716 "y": 368.3965019419771
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -274.1103616347323, "x": -280.4308271742487,
"y": 368.39650194198157 "y": 370.73899686729897
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -280.43082717423164, "x": -286.53994881447335,
"y": 370.73899686729357 "y": 372.65108939343145
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -285.6974576466219, "x": -295.7605238049802,
"y": 372.38739828360394 "y": 375.07066902356064
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -295.7605238049826, "x": -309.1086607001497,
"y": 375.0706690235611 "y": 377.8122722714953
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -308.3295870292442, "x": -323.7918413406422,
"y": 377.6522566136316 "y": 380.189287868496
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -323.20961073643133, "x": -339.7464924132723,
"y": 380.0950323212031 "y": 382.2635758852316
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -339.2933747725014, "x": -356.9362622181957,
"y": 382.20466538395215 "y": 384.07704503986554
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -356.571621703457, "x": -375.2815276936278,
"y": 384.0385765592796 "y": 385.65320885961137
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -374.97963878344376, "x": -394.4224543531805,
"y": 385.6272715746786 "y": 386.98897134293713
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -394.4224543531813, "x": -414.7876067251065,
"y": 386.9889713429367 "y": 388.13579550460133
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -435.9520270040898,
"y": 388.13579550460213 "y": 389.07661798449567
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -435.9520270040894, "x": -457.785958265363,
"y": 389.07661798449516 "y": 389.8184840359457
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -457.7859582653625, "x": -480.1552993678824,
"y": 389.818484035946 "y": 390.36735593535275
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -480.15529936788164, "x": -502.9230721502437,
"y": 390.3673559353522 "y": 390.7285243590086
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -502.9230721502445, "x": -525.950383021198,
"y": 390.728524359008 "y": 390.9068434964294
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -525.9503830211974, "x": -549.0970864147915,
"y": 390.90684349642925 "y": 390.90686803484715
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -549.0970864147907, "x": -572.2222728858721,
"y": 390.9068680348474 "y": 390.7329321107654
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -572.2222728858704, "x": -595.1846601170994,
"y": 390.7329321107656 "y": 390.3891909827694
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -595.1846601171007, "x": -617.8429427582319,
"y": 390.3891909827686 "y": 389.8796354203741
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -617.8429427582322, "x": -640.0561486385068,
"y": 389.87963542037477 "y": 389.2080817760433
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -640.0561486385066, "x": -661.6840517509002,
"y": 389.208081776043 "y": 388.3781346110811
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -661.6840517509004, "x": -682.5877079123363,
"y": 388.3781346110808 "y": 387.3931112039708
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -682.5877079123347, "x": -702.6302136187057,
"y": 387.3931112039713 "y": 386.2559049695029
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -702.630213618707, "x": -721.6778577696422,
"y": 386.255904969502 "y": 384.9687413227853
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -721.6778577696439, "x": -739.6019742862303,
"y": 384.9687413227849 "y": 383.5327301728113
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -739.6019742862287, "x": -756.6283706367624,
"y": 383.5327301728105 "y": 381.91399989149096
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -756.2820913691256, "x": -772.0557074133295,
"y": 381.94700726179155 "y": 380.1563856315983
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -771.6116072858362, "x": -786.1074176186619,
"y": 380.2069813195123 "y": 378.2178680808823
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -785.5087261025127, "x": -798.8005062137145,
"y": 378.3004611599152 "y": 376.0511796823399
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -797.9392812498397, "x": -810.1810632465617,
"y": 376.198189302873 "y": 373.5624561175911
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -810.1810632465665, "x": -814.7149606299213,
"y": 373.5624561175904 "y": 372.2542552635798
},
{
"type": "QPointF",
"x": -818.0929557813755,
"y": 371.2795759163598
},
{
"type": "QPointF",
"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
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 331.31319685039375 "y": 330.5891727033602
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -815.5965354330709, "x": -815.5965354330709,
"y": 28.864326962967652 "y": 28.864326962967752
} }
] ]
} }

View file

@ -0,0 +1,626 @@
{
"vector": [
{
"angle": 1,
"saBefore": 0,
"turnPoint": true,
"type": "VSAPoint",
"x": 29.999999999999943,
"y": 361.25971653543314
},
{
"angle": 1,
"curvePoint": true,
"saBefore": 0,
"turnPoint": true,
"type": "VSAPoint",
"x": 29.999999999999943,
"y": 361.25971653543314
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 31.73396290699989,
"y": 354.45851017139887
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 41.25493119356215,
"y": 316.26845068079757
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 53.21939514673762,
"y": 275.12569164692474
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 63.17801030657803,
"y": 245.33022656552694
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 74.79698588969273,
"y": 215.28054296635247
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 88.04014693829234,
"y": 186.63293747986256
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 95.32490579737316,
"y": 173.5144451866591
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 102.15423147111207,
"y": 162.06333466959018
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 117.87361973531404,
"y": 138.88507040105114
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 135.55721109055781,
"y": 116.18046604379055
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 154.63980419348007,
"y": 94.84386803398598
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 174.5561977007173,
"y": 75.76962280781511
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 189.69581722752943,
"y": 63.60622127567666
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 199.74948802498102,
"y": 56.60431303423299
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 209.6936831678694,
"y": 50.671062859047666
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 219.45775248827417,
"y": 45.91826405464286
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 228.97104581827483,
"y": 42.45770992554081
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 238.162912989951,
"y": 40.401193776263696
},
{
"curvePoint": true,
"turnPoint": true,
"type": "VSAPoint",
"x": 242.5984251968504,
"y": 39.99987401574802
},
{
"turnPoint": true,
"type": "VSAPoint",
"x": 242.5984251968504,
"y": 39.99987401574802
},
{
"curvePoint": true,
"turnPoint": true,
"type": "VSAPoint",
"x": 242.5984251968504,
"y": 39.99987401574802
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 247.0339374037498,
"y": 40.401193776263696
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 256.22580457542597,
"y": 42.45770992554081
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 265.73909790542666,
"y": 45.91826405464286
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 275.5031672258314,
"y": 50.671062859047666
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 285.44736236871984,
"y": 56.60431303423299
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 295.50103316617134,
"y": 63.606221275676646
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 310.6406526929835,
"y": 75.76962280781508
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 330.5570462002207,
"y": 94.84386803398598
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 349.63963930314287,
"y": 116.18046604379055
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 367.32323065838676,
"y": 138.88507040105114
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 383.04261892258876,
"y": 162.06333466959018
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 389.87194459632764,
"y": 173.5144451866591
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 397.15670345540843,
"y": 186.63293747986256
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 410.39986450400806,
"y": 215.28054296635247
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 422.0188400871228,
"y": 245.33022656552694
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 431.97745524696313,
"y": 275.12569164692474
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 443.94191920013867,
"y": 316.26845068079757
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 453.46288748670094,
"y": 354.45851017139887
},
{
"curvePoint": true,
"turnPoint": true,
"type": "VSAPoint",
"x": 455.19685039370086,
"y": 361.25971653543314
},
{
"turnPoint": true,
"type": "VSAPoint",
"x": 455.19685039370086,
"y": 361.25971653543314
},
{
"curvePoint": true,
"turnPoint": true,
"type": "VSAPoint",
"x": 455.19685039370086,
"y": 361.25971653543314
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 456.9308133007008,
"y": 354.45851017139887
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 466.45178158726304,
"y": 316.26845068079757
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 478.41624554043847,
"y": 275.12569164692474
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 488.37486070027893,
"y": 245.3302265655269
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 499.99383628339353,
"y": 215.28054296635247
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 513.2369973319932,
"y": 186.63293747986256
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 520.521756191074,
"y": 173.5144451866591
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 527.351081864813,
"y": 162.06333466959015
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 543.0704701290149,
"y": 138.8850704010511
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 560.7540614842587,
"y": 116.18046604379052
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 579.8366545871809,
"y": 94.84386803398596
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 599.7530480944181,
"y": 75.76962280781505
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 614.8926676212302,
"y": 63.60622127567662
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 624.9463384186819,
"y": 56.60431303423296
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 634.8905335615702,
"y": 50.67106285904764
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 644.654602881975,
"y": 45.91826405464284
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 654.1678962119756,
"y": 42.4577099255408
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 663.3597633836519,
"y": 40.40119377626369
},
{
"curvePoint": true,
"turnPoint": true,
"type": "VSAPoint",
"x": 667.7952755905513,
"y": 39.99987401574802
},
{
"turnPoint": true,
"type": "VSAPoint",
"x": 667.7952755905512,
"y": 39.999874015748
},
{
"curvePoint": true,
"turnPoint": true,
"type": "VSAPoint",
"x": 667.7952755905511,
"y": 39.99987401574802
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 672.2307877974506,
"y": 40.40119377626369
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 681.4226549691268,
"y": 42.4577099255408
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 690.9359482991274,
"y": 45.91826405464284
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 700.7000176195322,
"y": 50.67106285904762
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 710.6442127624206,
"y": 56.60431303423295
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 720.6978835598723,
"y": 63.60622127567662
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 735.8375030866844,
"y": 75.76962280781505
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 755.7538965939216,
"y": 94.84386803398593
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 774.8364896968437,
"y": 116.18046604379049
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 792.5200810520876,
"y": 138.8850704010511
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 808.2394693162895,
"y": 162.06333466959015
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 815.0687949900284,
"y": 173.5144451866591
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 822.3535538491093,
"y": 186.63293747986256
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 835.5967148977088,
"y": 215.28054296635247
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 847.2156904808235,
"y": 245.33022656552694
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 857.174305640664,
"y": 275.1256916469248
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 869.1387695938392,
"y": 316.26845068079757
},
{
"angle": 6,
"curvePoint": true,
"type": "VSAPoint",
"x": 878.6597378804015,
"y": 354.45851017139887
},
{
"curvePoint": true,
"turnPoint": true,
"type": "VSAPoint",
"x": 880.3937007874016,
"y": 361.25971653543314
},
{
"turnPoint": true,
"type": "VSAPoint",
"x": 880.3937007874015,
"y": 361.25971653543314
},
{
"turnPoint": true,
"type": "VSAPoint",
"x": 880.3937007874015,
"y": 928.1888503937009
},
{
"turnPoint": true,
"type": "VSAPoint",
"x": 880.3937007874014,
"y": 1136.0628661417325
},
{
"angle": 1,
"saAfter": 0,
"turnPoint": true,
"type": "VSAPoint",
"x": 29.999999999999808,
"y": 1136.0628661417325
},
{
"saAfter": 0,
"saBefore": 0,
"turnPoint": true,
"type": "VSAPoint",
"x": 29.999999999999844,
"y": 928.1888503937009
}
]
}

View file

@ -0,0 +1,359 @@
{
"vector": [
{
"type": "QPointF",
"x": 29.118425196850335,
"y": 364.7175599168278
},
{
"type": "QPointF",
"x": 29.94307799754262,
"y": 261.30591867833493
},
{
"type": "QPointF",
"x": 38.28034110598727,
"y": 236.36142309988847
},
{
"type": "QPointF",
"x": 50.42641664350457,
"y": 204.9485223442931
},
{
"type": "QPointF",
"x": 64.43563647205879,
"y": 174.64377853357186
},
{
"type": "QPointF",
"x": 72.39329255299187,
"y": 160.31352382108352
},
{
"type": "QPointF",
"x": 79.82602319478619,
"y": 147.85065060505283
},
{
"type": "QPointF",
"x": 96.46605143628082,
"y": 123.31490115126226
},
{
"type": "QPointF",
"x": 115.23721379286627,
"y": 99.21392493718594
},
{
"type": "QPointF",
"x": 135.60152983653606,
"y": 76.44420895441118
},
{
"type": "QPointF",
"x": 157.08834979360478,
"y": 55.86594146623459
},
{
"type": "QPointF",
"x": 173.83199157479038,
"y": 42.413843959149226
},
{
"type": "QPointF",
"x": 185.3936560720791,
"y": 34.361689123435625
},
{
"type": "QPointF",
"x": 197.10339835582204,
"y": 27.375017054145104
},
{
"type": "QPointF",
"x": 209.11808343103752,
"y": 21.526699207665782
},
{
"type": "QPointF",
"x": 221.5299864367533,
"y": 17.011747265524747
},
{
"type": "QPointF",
"x": 235.2394443108585,
"y": 13.944500862877867
},
{
"type": "QPointF",
"x": 249.9574060828423,
"y": 13.944500862877867
},
{
"type": "QPointF",
"x": 263.6668639569475,
"y": 17.01174726552474
},
{
"type": "QPointF",
"x": 276.07876696266345,
"y": 21.526699207665832
},
{
"type": "QPointF",
"x": 288.09345203787865,
"y": 27.37501705414501
},
{
"type": "QPointF",
"x": 299.8031943216219,
"y": 34.3616891234357
},
{
"type": "QPointF",
"x": 311.3648588189105,
"y": 42.4138439591493
},
{
"type": "QPointF",
"x": 328.1085006000962,
"y": 55.865941466234666
},
{
"type": "QPointF",
"x": 349.5953205571646,
"y": 76.44420895441102
},
{
"type": "QPointF",
"x": 369.95963660083424,
"y": 99.21392493718575
},
{
"type": "QPointF",
"x": 388.73079895742006,
"y": 123.31490115126236
},
{
"type": "QPointF",
"x": 405.37082719891447,
"y": 147.85065060505255
},
{
"type": "QPointF",
"x": 412.8035578407087,
"y": 160.3135238210832
},
{
"type": "QPointF",
"x": 420.761213921642,
"y": 174.64377853357206
},
{
"type": "QPointF",
"x": 434.7704337501962,
"y": 204.9485223442931
},
{
"type": "QPointF",
"x": 446.9165092877135,
"y": 236.36142309988838
},
{
"type": "QPointF",
"x": 455.1968503937008,
"y": 261.1356121136812
},
{
"type": "QPointF",
"x": 463.47719149968816,
"y": 236.3614230998884
},
{
"type": "QPointF",
"x": 475.6232670372052,
"y": 204.94852234429345
},
{
"type": "QPointF",
"x": 489.4457291590669,
"y": 175.04777279772534
},
{
"type": "QPointF",
"x": 497.41525548705096,
"y": 159.48566964361396
},
{
"type": "QPointF",
"x": 505.91960858174565,
"y": 147.49378076706674
},
{
"type": "QPointF",
"x": 521.5037972468683,
"y": 123.51918129653623
},
{
"type": "QPointF",
"x": 540.4340641865671,
"y": 99.21392493718614
},
{
"type": "QPointF",
"x": 560.7983802302371,
"y": 76.44420895441104
},
{
"type": "QPointF",
"x": 582.2852001873056,
"y": 55.86594146623453
},
{
"type": "QPointF",
"x": 599.0288419684916,
"y": 42.413843959148835
},
{
"type": "QPointF",
"x": 610.5905064657796,
"y": 34.36168912343576
},
{
"type": "QPointF",
"x": 622.3002487495228,
"y": 27.3750170541451
},
{
"type": "QPointF",
"x": 634.3149338247384,
"y": 21.526699207665764
},
{
"type": "QPointF",
"x": 646.7268368304541,
"y": 17.011747265524743
},
{
"type": "QPointF",
"x": 660.4362947045594,
"y": 13.94450086287786
},
{
"type": "QPointF",
"x": 675.1542564765431,
"y": 13.94450086287786
},
{
"type": "QPointF",
"x": 688.8637143506484,
"y": 17.011747265524743
},
{
"type": "QPointF",
"x": 701.275617356364,
"y": 21.526699207665743
},
{
"type": "QPointF",
"x": 713.2903024315797,
"y": 27.375017054145108
},
{
"type": "QPointF",
"x": 725.0000447153227,
"y": 34.36168912343571
},
{
"type": "QPointF",
"x": 736.5617092126108,
"y": 42.413843959148785
},
{
"type": "QPointF",
"x": 753.305350993797,
"y": 55.86594146623462
},
{
"type": "QPointF",
"x": 774.7921709508654,
"y": 76.44420895441098
},
{
"type": "QPointF",
"x": 795.156486994535,
"y": 99.21392493718571
},
{
"type": "QPointF",
"x": 813.9276493511209,
"y": 123.31490115126243
},
{
"type": "QPointF",
"x": 830.5676775926153,
"y": 147.85065060505264
},
{
"type": "QPointF",
"x": 838.0004082344087,
"y": 160.31352382108162
},
{
"type": "QPointF",
"x": 845.9580643153425,
"y": 174.64377853357124
},
{
"type": "QPointF",
"x": 859.9672841438971,
"y": 204.94852234429356
},
{
"type": "QPointF",
"x": 872.1133596814137,
"y": 236.36142309988713
},
{
"type": "QPointF",
"x": 882.4324649928317,
"y": 267.23544896017984
},
{
"type": "QPointF",
"x": 894.685954055627,
"y": 309.3720920900203
},
{
"type": "QPointF",
"x": 904.3306932614294,
"y": 348.05861566144995
},
{
"type": "QPointF",
"x": 906.8503937007875,
"y": 357.94025014347284
},
{
"type": "QPointF",
"x": 906.8503937007872,
"y": 1162.5195590551182
},
{
"type": "QPointF",
"x": 29.999999999999805,
"y": 1162.5195590551182
},
{
"type": "QPointF",
"x": 29.11842519685024,
"y": 1136.0628661417325
},
{
"type": "QPointF",
"x": 29.118425196850335,
"y": 364.7175599168278
}
]
}

View file

@ -161,5 +161,7 @@
<file>custom_seam_allwance_exclude_p1/output.json</file> <file>custom_seam_allwance_exclude_p1/output.json</file>
<file>custom_seam_allwance_exclude_p2/input.json</file> <file>custom_seam_allwance_exclude_p2/input.json</file>
<file>custom_seam_allwance_exclude_p2/output.json</file> <file>custom_seam_allwance_exclude_p2/output.json</file>
<file>hat/input.json</file>
<file>hat/output.json</file>
</qresource> </qresource>
</RCC> </RCC>

View file

@ -1140,6 +1140,12 @@ void TST_VAbstractPiece::EquidistantAngleType_data()
QStringLiteral("://smart_pattern_#133/input.json"), QStringLiteral("://smart_pattern_#133/input.json"),
QStringLiteral("://smart_pattern_#133/output.json"), QStringLiteral("://smart_pattern_#133/output.json"),
26.45669291338583 /*seam allowance width*/); 26.45669291338583 /*seam allowance width*/);
// See file valentina_private_collection/bugs/hat/hat.val
ASSERT_TEST_CASE("hat",
QStringLiteral("://hat/input.json"),
QStringLiteral("://hat/output.json"),
26.45669291338583 /*seam allowance width*/);
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------