Fixed issue #883. Fix right angle seam allowance angle type.

--HG--
branch : release
This commit is contained in:
Roman Telezhynskyi 2018-09-13 16:46:04 +03:00
parent 8a3d50520f
commit 3fe7709c40
10 changed files with 5018 additions and 3582 deletions

View File

@ -1,73 +1,72 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<pattern> <pattern>
<!--Valentina pattern format.--> <!--Pattern created with Valentina v0.6.0.0b (https://valentinaproject.bitbucket.io/).-->
<version>0.2.4</version> <version>0.7.10</version>
<unit>cm</unit> <unit>cm</unit>
<author/>
<description/> <description/>
<notes/> <notes/>
<measurements>../../../../../patterns/Susan.vit</measurements> <patternLabel/>
<measurements>Susan.vit</measurements>
<increments/> <increments/>
<previewCalculations/>
<draw name="Front"> <draw name="Front">
<calculation> <calculation>
<point type="single" x="0.926042" y="1.05833" id="1" name="A" mx="0.132292" my="0.264583"/> <point id="1" mx="0.132292" my="0.264583" name="A" type="single" x="0.926042" y="1.05833"/>
<point type="endLine" typeLine="hair" id="2" name="A1" basePoint="1" mx="0.132292" lineColor="black" angle="290" my="0.264583" length="50"/> <point angle="290" basePoint="1" id="2" length="50" lineColor="black" mx="0.132292" my="0.264583" name="A1" type="endLine" typeLine="hair"/>
<point type="endLine" typeLine="hair" id="3" name="A2" basePoint="1" mx="0.132292" lineColor="black" angle="0" my="0.264583" length="30"/> <point angle="0" basePoint="1" id="3" length="30" lineColor="black" mx="0.132292" my="0.264583" name="A2" type="endLine" typeLine="hair"/>
<spline type="simple" point4="2" kAsm1="0.962941" kAsm2="1.00054" angle1="229.381" angle2="41.6325" id="4" kCurve="1" color="black" point1="3"/> <spline angle1="229.381" angle2="41.6325" color="black" id="4" kAsm1="0.962941" kAsm2="1.00054" kCurve="1" point1="3" point4="2" type="simple"/>
<point type="cutSpline" id="5" name="A3" spline="4" color="black" mx="0.132292" my="0.264583" length="Spl_A2_A1/2"/> <point id="5" length="Spl_A2_A1/2" mx="0.132292" my="0.264583" name="A3" spline="4" type="cutSpline"/>
<line typeLine="hair" id="8" firstPoint="1" secondPoint="5" lineColor="black"/> <line firstPoint="1" id="8" lineColor="black" secondPoint="5" typeLine="hair"/>
<point type="alongLine" typeLine="hair" id="9" name="A4" firstPoint="1" secondPoint="5" mx="0.132292" lineColor="black" my="0.264583" length="Line_A_A3/2"/> <point firstPoint="1" id="9" length="Line_A_A3/2" lineColor="black" mx="0.132292" my="0.264583" name="A4" secondPoint="5" type="alongLine" typeLine="hair"/>
<line typeLine="hair" id="10" firstPoint="3" secondPoint="9" lineColor="black"/> <line firstPoint="3" id="10" lineColor="black" secondPoint="9" typeLine="hair"/>
<point type="pointOfIntersection" id="11" name="A5" firstPoint="1" secondPoint="2" mx="0.132292" my="0.264583"/> <point firstPoint="1" id="11" mx="0.132292" my="0.264583" name="A5" secondPoint="2" type="pointOfIntersection"/>
<line typeLine="hair" id="12" firstPoint="1" secondPoint="11" lineColor="black"/> <line firstPoint="1" id="12" lineColor="black" secondPoint="11" typeLine="hair"/>
<line typeLine="hair" id="13" firstPoint="2" secondPoint="11" lineColor="black"/> <line firstPoint="2" id="13" lineColor="black" secondPoint="11" typeLine="hair"/>
</calculation> </calculation>
<modeling> <modeling>
<point type="modeling" inUse="true" id="14" idObject="1" mx="0.132292" my="0.264583"/> <point id="14" idObject="1" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="15" idObject="2" mx="0.132292" my="0.264583"/> <point id="15" idObject="2" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="16" idObject="11" mx="0.132292" my="0.264583"/> <point id="16" idObject="11" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="17" idObject="1" mx="0.132292" my="0.264583"/> <point id="17" idObject="1" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="19" idObject="1" mx="0.132292" my="0.264583"/> <point id="19" idObject="1" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="20" idObject="5" mx="0.132292" my="0.264583"/> <point id="20" idObject="5" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<spline type="modelingSpline" inUse="true" id="21" idObject="4"/> <spline id="21" idObject="4" inUse="false" type="modelingSpline"/>
<point type="modeling" inUse="true" id="22" idObject="2" mx="0.132292" my="0.264583"/> <point id="22" idObject="2" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="23" idObject="1" mx="0.132292" my="0.264583"/> <point id="23" idObject="1" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="25" idObject="1" mx="0.132292" my="0.264583"/> <point id="25" idObject="1" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="26" idObject="3" mx="0.132292" my="0.264583"/> <point id="26" idObject="3" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="27" idObject="9" mx="0.132292" my="0.264583"/> <point id="27" idObject="9" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="28" idObject="1" mx="0.132292" my="0.264583"/> <point id="28" idObject="1" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="30" idObject="3" mx="0.132292" my="0.264583"/> <point id="30" idObject="3" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<spline type="modelingSpline" inUse="true" id="31" idObject="4"/> <spline id="31" idObject="4" inUse="false" type="modelingSpline"/>
<point type="modeling" inUse="true" id="32" idObject="5" mx="0.132292" my="0.264583"/> <point id="32" idObject="5" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="33" idObject="9" mx="0.132292" my="0.264583"/> <point id="33" idObject="9" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="false" id="34" idObject="3" mx="0.132292" my="0.264583"/>
</modeling> </modeling>
<details> <details>
<detail closed="1" id="18" name="Detail" supplement="1" width="1" mx="-24.6622" my="3.94145"> <detail closed="1" id="24" mx="-11.7117" my="4.05406" name="Detail" seamAllowance="1" version="2" width="1">
<node type="NodePoint" nodeType="Contour" idObject="14" mx="0" my="0"/> <data annotation="" foldPosition="" fontSize="0" height="" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="" rotationWay="" tilt="" visible="false" width=""/>
<node type="NodePoint" nodeType="Contour" idObject="15" mx="0" my="0"/> <patternInfo fontSize="0" height="" mx="0" my="0" rotation="" visible="false" width=""/>
<node type="NodePoint" nodeType="Contour" idObject="16" mx="0" my="0"/> <grainline arrows="0" length="" mx="0" my="0" rotation="" visible="false"/>
<node type="NodePoint" nodeType="Contour" idObject="17" mx="0" my="0"/> <nodes>
<node idObject="19" type="NodePoint"/>
<node idObject="20" type="NodePoint"/>
<node idObject="21" reverse="0" type="NodeSpline"/>
<node idObject="22" type="NodePoint"/>
<node idObject="23" type="NodePoint"/>
</nodes>
</detail> </detail>
<detail closed="1" id="24" name="Detail" supplement="1" width="1" mx="-11.7117" my="4.05406"> <detail closed="1" forbidFlipping="false" forceFlipping="false" hideMainPath="false" id="35" inLayout="true" mx="7.71397" my="-3.94145" name="Detail" seamAllowance="true" united="false" version="2" width="2">
<node type="NodePoint" nodeType="Contour" idObject="19" mx="0" my="0"/> <data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
<node type="NodePoint" nodeType="Contour" idObject="20" mx="0" my="0"/> <patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="21" mx="0" my="0"/> <grainline arrows="0" length="1" mx="0" my="0" rotation="0" visible="false"/>
<node type="NodePoint" nodeType="Contour" idObject="22" mx="0" my="0"/> <nodes>
<node type="NodePoint" nodeType="Contour" idObject="23" mx="0" my="0"/> <node idObject="30" type="NodePoint"/>
</detail> <node idObject="31" reverse="0" type="NodeSpline"/>
<detail closed="1" id="29" name="Detail" supplement="1" width="1" mx="0.337838" my="-6.47523"> <node idObject="32" type="NodePoint"/>
<node type="NodePoint" nodeType="Contour" idObject="25" mx="0" my="0"/> <node idObject="33" type="NodePoint"/>
<node type="NodePoint" nodeType="Contour" idObject="26" mx="0" my="0"/> </nodes>
<node type="NodePoint" nodeType="Contour" idObject="27" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="28" mx="0" my="0"/>
</detail>
<detail closed="1" id="35" name="Detail" supplement="1" width="1" mx="7.71397" my="-3.94145">
<node type="NodePoint" nodeType="Contour" idObject="30" mx="0" my="0"/>
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="31" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="32" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="33" mx="0" my="0"/>
</detail> </detail>
</details> </details>
<groups/>
</draw> </draw>
</pattern> </pattern>

View File

@ -0,0 +1,143 @@
<?xml version="1.0" encoding="UTF-8"?>
<pattern>
<!--Pattern created with Valentina v0.6.0.0b (https://valentinaproject.bitbucket.io/).-->
<version>0.7.10</version>
<unit>cm</unit>
<description/>
<notes/>
<measurements>Issue_#883_case1.vit</measurements>
<increments>
<increment description="Прибавка к талии" formula="1" name="#Пт"/>
<increment description="Прибавка к бедрам" formula="0.5" name="#Пб"/>
</increments>
<previewCalculations>
<increment description="Длина от низа юбки до пола." formula="@Дсб-@Дю" name="#Д_нп"/>
<increment description="Длина юбки спереди." formula="@Дсп-#Д_нп" name="#Дюп"/>
<increment description="Длина юбки сзади" formula="@Дсз-#Д_нп" name="#Дюз"/>
<increment description="Сумма всех вытачек юбки." formula="((hip_circ+#Пб)-(waist_circ+#Пт))/2" name="#СУМ_в"/>
<increment description="Раствор боковой вытачки" formula="1/2*#СУМ_в" name="#БВ"/>
<increment description="Раствор передней вытачки" formula="1/6*#СУМ_в" name="#ПВ"/>
<increment description="Раствор задней вытачки" formula="1/3*#СУМ_в" name="#ЗВ"/>
</previewCalculations>
<draw name="Прямая юбка">
<calculation>
<point id="1" mx="1.2745" my="-1.21331" name="Н" showLabel="true" type="single" x="7.3336" y="2.43036"/>
<point angle="90" basePoint="1" id="2" length="#Дюз" lineColor="black" mx="0.858873" my="-0.916111" name="Т" showLabel="true" type="endLine" typeLine="hair"/>
<point firstPoint="2" id="3" length="@Д_тб" lineColor="black" mx="-1.65003" my="-0.718767" name="Б" secondPoint="1" showLabel="true" type="alongLine" typeLine="none"/>
<point angle="180" firstPoint="3" id="4" length="(hip_circ+#Пб)/2" lineColor="black" mx="-1.84854" my="0.42139" name="Б1" secondPoint="2" showLabel="true" type="normal" typeLine="hair"/>
<point firstPoint="4" id="5" mx="-1.80362" my="0.432425" name="Н1" secondPoint="1" showLabel="true" type="pointOfIntersection"/>
<line firstPoint="1" id="6" lineColor="black" secondPoint="5" typeLine="hair"/>
<line firstPoint="4" id="7" lineColor="black" secondPoint="5" typeLine="hair"/>
<point firstPoint="3" id="8" length="Line_Б_Б1/2-0.5" lineColor="black" mx="0.707425" my="0.648005" name="Б2" secondPoint="4" showLabel="true" type="alongLine" typeLine="none"/>
<point basePoint="8" id="9" lineColor="black" mx="-0.762359" my="1.35095" name="Н2" p1Line="1" p2Line="5" showLabel="true" type="height" typeLine="hair"/>
<point firstPoint="9" id="10" length="@Дю" lineColor="black" mx="-0.570648" my="-2.22766" name="Т2" secondPoint="8" showLabel="true" type="alongLine" typeLine="hair"/>
<point firstPoint="5" id="11" length="#Дюп" lineColor="black" mx="0.899136" my="-0.949587" name="Т1" secondPoint="4" showLabel="true" type="alongLine" typeLine="hair"/>
<arc aScale="0" angle1="70" angle2="90" center="8" color="lime" id="12" penStyle="hair" radius="Line_Т2_Б2" type="simple"/>
<arc aScale="0" angle1="-30" angle2="30" center="10" color="deepskyblue" id="13" penStyle="hair" radius="#БВ/2" type="simple"/>
<point crossPoint="1" firstArc="12" id="14" mx="1.14054" my="-1.99197" name="Т3" secondArc="13" showLabel="true" type="pointOfIntersectionArcs"/>
<line firstPoint="14" id="15" lineColor="deeppink" secondPoint="8" typeLine="dashDotDotLine"/>
<point firstPoint="14" id="16" length="8" lineColor="black" mx="0.132292" my="0.264583" name="А1" secondPoint="8" showLabel="false" type="alongLine" typeLine="none"/>
<point angle="0" firstPoint="16" id="17" length="0.5" lineColor="deeppink" mx="-1.50011" my="-0.119511" name="А2" secondPoint="14" showLabel="true" type="normal" typeLine="dashDotDotLine"/>
<spline aScale="0" angle1="254.986" angle2="81.2596" color="black" id="18" length1="3.1425" length2="3.22366" penStyle="hair" point1="14" point4="17" type="simpleInteractive"/>
<spline aScale="0" angle1="259.668" angle2="89.4629" color="black" id="19" length1="4.60522" length2="3.98249" penStyle="hair" point1="17" point4="8" type="simpleInteractive"/>
<line firstPoint="14" id="20" lineColor="deeppink" secondPoint="11" typeLine="dashDotDotLine"/>
<arc aScale="0" angle1="90" angle2="115" center="8" color="deepskyblue" id="21" penStyle="hair" radius="Line_Т2_Б2" type="simple"/>
<point arc="21" id="22" length="#БВ/2" mx="-1.01999" my="-2.37606" name="Т4" showLabel="true" type="cutArc"/>
<line firstPoint="22" id="25" lineColor="deeppink" secondPoint="8" typeLine="dashDotDotLine"/>
<point firstPoint="22" id="26" length="8" lineColor="black" mx="-1.26005" my="0.360607" name="А3" secondPoint="8" showLabel="false" type="alongLine" typeLine="none"/>
<point angle="180" firstPoint="26" id="27" length="0.5" lineColor="black" mx="-0.251802" my="-2.23203" name="А4" secondPoint="22" showLabel="true" type="normal" typeLine="hair"/>
<spline aScale="0" color="black" id="28" penStyle="hair" type="pathInteractive">
<pathPoint angle1="106.618" angle2="286.618" length1="0" length2="4.4207" pSpline="22"/>
<pathPoint angle1="101.586" angle2="281.586" length1="1.67929" length2="3.25274" pSpline="27"/>
<pathPoint angle1="94.979" angle2="274.979" length1="2.88894" length2="1.80735" pSpline="8"/>
</spline>
<line firstPoint="22" id="29" lineColor="deeppink" secondPoint="2" typeLine="dotLine"/>
<point firstPoint="3" id="30" length="CurrentLength/2" lineColor="black" mx="-0.779932" my="0.792712" name="Б3" secondPoint="8" showLabel="true" type="alongLine" typeLine="none"/>
<point angle="90" basePoint="30" id="31" length="2" lineColor="black" mx="-1.88419" my="-0.695653" name="А5" showLabel="true" type="endLine" typeLine="hair"/>
<point id="32" mx="-0.73192" my="-2.23203" name="Т5" p1Line1="2" p1Line2="30" p2Line1="22" p2Line2="31" showLabel="true" type="lineIntersect"/>
<line firstPoint="31" id="33" lineColor="black" secondPoint="32" typeLine="dotLine"/>
<arc aScale="0" angle1="90" angle2="115" center="31" color="deepskyblue" id="34" penStyle="hair" radius="Line_А5_Т5" type="simple"/>
<arc aScale="0" angle1="130" angle2="200" center="32" color="deepskyblue" id="35" penStyle="hair" radius="#ЗВ/2" type="simple"/>
<point crossPoint="1" firstArc="34" id="36" mx="-1.94389" my="-1.61068" name="Т6" secondArc="35" showLabel="true" type="pointOfIntersectionArcs"/>
<spline aScale="0" angle1="271.659" angle2="100.774" color="black" id="37" length1="6.85181" length2="6.12695" penStyle="hair" point1="36" point4="31" type="simpleInteractive"/>
<operation id="38" p1Line="31" p2Line="32" suffix="а1" type="flippingByLine">
<source>
<item idObject="36"/>
<item idObject="37"/>
</source>
<destination>
<item idObject="39" mx="-0.537444" my="-2.28041" showLabel="true"/>
<item idObject="40"/>
</destination>
</operation>
<line firstPoint="2" id="41" lineColor="black" secondPoint="36" typeLine="hair"/>
<line firstPoint="39" id="42" lineColor="black" secondPoint="22" typeLine="hair"/>
<point firstPoint="8" id="43" length="CurrentLength/2-2" lineColor="black" mx="0.132292" my="0.264583" name="Б4" secondPoint="4" showLabel="true" type="alongLine" typeLine="none"/>
<point angle="0" basePoint="4" id="66" length="0.5" lineColor="black" mx="0.132292" my="0.264583" name="А6" showLabel="true" type="endLine" typeLine="none"/>
<point angle="0" basePoint="5" id="67" length="0.5" lineColor="black" mx="0.333213" my="-1.61068" name="А7" showLabel="true" type="endLine" typeLine="none"/>
</calculation>
<modeling>
<point id="44" idObject="1" inUse="false" mx="1.2745" my="-1.21331" showLabel="true" type="modeling"/>
<point id="45" idObject="3" inUse="false" mx="-1.65003" my="-0.718767" showLabel="true" type="modeling"/>
<point id="46" idObject="2" inUse="false" mx="0.858873" my="-0.916111" showLabel="true" type="modeling"/>
<point id="47" idObject="36" inUse="false" mx="-1.94389" my="-1.61068" showLabel="true" type="modeling"/>
<spline id="48" idObject="37" inUse="false" type="modelingSpline"/>
<point id="49" idObject="31" inUse="false" mx="-1.88419" my="-0.695653" showLabel="true" type="modeling"/>
<spline id="50" idObject="40" inUse="false" type="modelingSpline"/>
<point id="51" idObject="39" inUse="false" mx="-0.537444" my="-2.28041" showLabel="true" type="modeling"/>
<point id="52" idObject="22" inUse="false" mx="-1.01999" my="-2.37606" showLabel="true" type="modeling"/>
<spline id="53" idObject="28" inUse="false" type="modelingPath"/>
<point id="54" idObject="8" inUse="false" mx="0.707425" my="0.648005" showLabel="true" type="modeling"/>
<point id="55" idObject="9" inUse="false" mx="-0.762359" my="1.35095" showLabel="true" type="modeling"/>
<point id="57" idObject="9" inUse="false" mx="-0.762359" my="1.35095" showLabel="true" type="modeling"/>
<point id="58" idObject="8" inUse="false" mx="0.707425" my="0.648005" showLabel="true" type="modeling"/>
<spline id="59" idObject="19" inUse="false" type="modelingSpline"/>
<spline id="60" idObject="18" inUse="false" type="modelingSpline"/>
<point id="61" idObject="14" inUse="false" mx="1.14054" my="-1.99197" showLabel="true" type="modeling"/>
<point id="62" idObject="11" inUse="false" mx="-2.31842" my="-2.66805" showLabel="true" type="modeling"/>
<point id="63" idObject="4" inUse="false" mx="-2.04319" my="-0.914063" showLabel="true" type="modeling"/>
<point id="64" idObject="5" inUse="false" mx="0.942292" my="0.834266" showLabel="true" type="modeling"/>
<point id="68" idObject="9" inUse="true" mx="-0.762359" my="1.35095" showLabel="true" type="modeling"/>
<point id="69" idObject="8" inUse="true" mx="0.707425" my="0.648005" showLabel="true" type="modeling"/>
<spline id="70" idObject="19" inUse="true" type="modelingSpline"/>
<spline id="71" idObject="18" inUse="true" type="modelingSpline"/>
<point id="72" idObject="14" inUse="true" mx="1.14054" my="-1.99197" showLabel="true" type="modeling"/>
<point id="73" idObject="11" inUse="true" mx="0.899136" my="-0.949587" showLabel="true" type="modeling"/>
<point id="74" idObject="4" inUse="true" mx="-1.84854" my="0.42139" showLabel="true" type="modeling"/>
<point id="75" idObject="5" inUse="true" mx="-1.80362" my="0.432425" showLabel="true" type="modeling"/>
</modeling>
<details>
<detail forbidFlipping="true" forceFlipping="false" hideMainPath="false" id="65" inLayout="true" mx="5.94634" my="-0.668129" name="ledge" seamAllowance="true" united="false" version="2" width="1">
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
<nodes>
<node angle="2" idObject="57" type="NodePoint"/>
<node idObject="58" type="NodePoint"/>
<node idObject="59" reverse="1" type="NodeSpline"/>
<node idObject="60" reverse="1" type="NodeSpline"/>
<node idObject="61" type="NodePoint"/>
<node idObject="62" type="NodePoint"/>
<node after="CurrentSeamAllowance+0.5" idObject="63" passmark="true" passmarkAngle="straightforward" passmarkLine="one" showSecondPassmark="false" type="NodePoint"/>
<node before="CurrentSeamAllowance+0.5" idObject="64" type="NodePoint"/>
</nodes>
</detail>
<detail forbidFlipping="true" forceFlipping="false" hideMainPath="false" id="76" inLayout="true" mx="-24.0748" my="-1.45402" name="prong" seamAllowance="true" united="false" version="2" width="1">
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
<nodes>
<node angle="2" idObject="68" type="NodePoint"/>
<node idObject="69" type="NodePoint"/>
<node idObject="70" reverse="1" type="NodeSpline"/>
<node idObject="71" reverse="1" type="NodeSpline"/>
<node idObject="72" type="NodePoint"/>
<node idObject="73" type="NodePoint"/>
<node after="CurrentSeamAllowance+0.5" idObject="74" passmark="true" passmarkAngle="straightforward" passmarkLine="one" showSecondPassmark="false" type="NodePoint"/>
<node idObject="75" type="NodePoint"/>
</nodes>
</detail>
</details>
<groups/>
</draw>
</pattern>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<vit>
<!--Measurements created with Valentina v0.6.0.912b (https://valentinaproject.bitbucket.io/).-->
<version>0.5.0</version>
<read-only>false</read-only>
<notes/>
<unit>cm</unit>
<pm_system>998</pm_system>
<personal>
<customer/>
<birth-date>1800-01-01</birth-date>
<gender>unknown</gender>
<email/>
</personal>
<body-measurements>
<m name="waist_circ" value="65"/>
<m name="hip_circ" value="91"/>
<m description="Длина от талии до пола спереди." full_name=" Длина спереди" name="@Дсп" value="102"/>
<m description="Длина от талии до пола сбоку." full_name="Длина сбоку" name="@Дсб" value="104"/>
<m description="Длина от талии до пола сзади." full_name="Длина сзади" name="@Дсз" value="103"/>
<m description="Измеряется сзади от талии до выступающих точек ягодиц." full_name="Длина от талии до бедер." name="@Д_тб" value="19"/>
<m description="Измеряется сбоку." full_name="Длина юбки" name="@Дю" value="40"/>
</body-measurements>
</vit>

View File

@ -1,81 +1,82 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<pattern> <pattern>
<!--Pattern created with Valentina (http://www.valentina-project.org/).--> <!--Pattern created with Valentina v0.6.0.0b (https://valentinaproject.bitbucket.io/).-->
<version>0.4.0</version> <version>0.7.10</version>
<unit>cm</unit> <unit>cm</unit>
<author/>
<description/> <description/>
<notes/> <notes/>
<patternLabel/>
<measurements>merki27.vit</measurements> <measurements>merki27.vit</measurements>
<increments/> <increments/>
<previewCalculations/>
<draw name="Чертеж 1"> <draw name="Чертеж 1">
<calculation> <calculation>
<point type="single" x="0.79375" y="1.05833" id="1" name="А" mx="0.132292" my="0.264583"/> <point id="1" mx="0.132292" my="0.264583" name="А" type="single" x="0.79375" y="1.05833"/>
<point type="endLine" typeLine="hair" id="2" name="А1" basePoint="1" mx="0.132292" lineColor="black" angle="270" my="0.264583" length="neck_back_to_waist_b"/> <point angle="270" basePoint="1" id="2" length="neck_back_to_waist_b" lineColor="black" mx="0.132292" my="0.264583" name="А1" type="endLine" typeLine="hair"/>
<point type="endLine" typeLine="hair" id="3" name="А2" basePoint="2" mx="0.132292" lineColor="black" angle="0" my="0.264583" length="lowbust_circ/2+6"/> <point angle="0" basePoint="2" id="3" length="lowbust_circ/2+6" lineColor="black" mx="0.132292" my="0.264583" name="А2" type="endLine" typeLine="hair"/>
<point type="alongLine" typeLine="none" id="4" name="А3" firstPoint="1" secondPoint="2" mx="0.0821985" lineColor="black" my="0.21449" length="lowbust_circ/12+13.7"/> <point firstPoint="1" id="4" length="lowbust_circ/12+13.7" lineColor="black" mx="0.0821985" my="0.21449" name="А3" secondPoint="2" type="alongLine" typeLine="none"/>
<point type="pointOfIntersection" id="5" name="А4" firstPoint="3" secondPoint="4" mx="0.132292" my="0.264583"/> <point firstPoint="3" id="5" mx="0.132292" my="0.264583" name="А4" secondPoint="4" type="pointOfIntersection"/>
<line typeLine="hair" id="6" firstPoint="5" secondPoint="3" lineColor="black"/> <line firstPoint="5" id="6" lineColor="black" secondPoint="3" typeLine="hair"/>
<point type="endLine" typeLine="hair" id="7" name="А5" basePoint="4" mx="0.132292" lineColor="black" angle="0" my="0.264583" length="lowbust_circ/8+7.4"/> <point angle="0" basePoint="4" id="7" length="lowbust_circ/8+7.4" lineColor="black" mx="0.132292" my="0.264583" name="А5" type="endLine" typeLine="hair"/>
<point type="pointOfIntersection" id="8" name="А6" firstPoint="7" secondPoint="1" mx="0.132292" my="0.264583"/> <point firstPoint="7" id="8" mx="0.132292" my="0.264583" name="А6" secondPoint="1" type="pointOfIntersection"/>
<line typeLine="hair" id="9" firstPoint="1" secondPoint="8" lineColor="black"/> <line firstPoint="1" id="9" lineColor="black" secondPoint="8" typeLine="hair"/>
<point type="alongLine" typeLine="none" id="10" name="А7" firstPoint="1" secondPoint="4" mx="0.132292" lineColor="black" my="0.264583" length="8"/> <point firstPoint="1" id="10" length="8" lineColor="black" mx="0.132292" my="0.264583" name="А7" secondPoint="4" type="alongLine" typeLine="none"/>
<point type="pointOfIntersection" id="11" name="А8" firstPoint="8" secondPoint="10" mx="0.132292" my="0.264583"/> <point firstPoint="8" id="11" mx="0.132292" my="0.264583" name="А8" secondPoint="10" type="pointOfIntersection"/>
<line typeLine="hair" id="12" firstPoint="10" secondPoint="11" lineColor="black"/> <line firstPoint="10" id="12" lineColor="black" secondPoint="11" typeLine="hair"/>
<line typeLine="hair" id="14" firstPoint="11" secondPoint="7" lineColor="black"/> <line firstPoint="11" id="14" lineColor="black" secondPoint="7" typeLine="hair"/>
<point type="alongLine" typeLine="none" id="15" name="А9" firstPoint="11" secondPoint="7" mx="0.132292" lineColor="black" my="0.264583" length="(Line_А8_А5/2)+0.5"/> <point firstPoint="11" id="15" length="(Line_А8_А5/2)+0.5" lineColor="black" mx="0.132292" my="0.264583" name="А9" secondPoint="7" type="alongLine" typeLine="none"/>
<point type="endLine" typeLine="hair" id="16" name="А10" basePoint="5" mx="0.132292" lineColor="black" angle="90" my="0.264583" length="lowbust_circ/5+8.3+1"/> <point angle="90" basePoint="5" id="16" length="lowbust_circ/5+8.3+1" lineColor="black" mx="0.132292" my="0.264583" name="А10" type="endLine" typeLine="hair"/>
<point type="endLine" typeLine="hair" id="17" name="А11" basePoint="5" mx="0.132292" lineColor="black" angle="180" my="0.264583" length="lowbust_circ/8+6.2"/> <point angle="180" basePoint="5" id="17" length="lowbust_circ/8+6.2" lineColor="black" mx="0.132292" my="0.264583" name="А11" type="endLine" typeLine="hair"/>
<point type="pointOfIntersection" id="18" name="А12" firstPoint="17" secondPoint="16" mx="0.132292" my="0.264583"/> <point firstPoint="17" id="18" mx="0.132292" my="0.264583" name="А12" secondPoint="16" type="pointOfIntersection"/>
<line typeLine="hair" id="19" firstPoint="18" secondPoint="17" lineColor="black"/> <line firstPoint="18" id="19" lineColor="black" secondPoint="17" typeLine="hair"/>
<line typeLine="hair" id="20" firstPoint="18" secondPoint="16" lineColor="black"/> <line firstPoint="18" id="20" lineColor="black" secondPoint="16" typeLine="hair"/>
<point type="alongLine" typeLine="none" id="21" name="А13" firstPoint="17" secondPoint="7" mx="0.132292" lineColor="black" my="0.264583" length="lowbust_circ/32"/> <point firstPoint="17" id="21" length="lowbust_circ/32" lineColor="black" mx="0.132292" my="0.264583" name="А13" secondPoint="7" type="alongLine" typeLine="none"/>
<point type="pointOfIntersection" id="22" name="А14" firstPoint="21" secondPoint="15" mx="0.132292" my="0.264583"/> <point firstPoint="21" id="22" mx="0.132292" my="0.264583" name="А14" secondPoint="15" type="pointOfIntersection"/>
<point type="alongLine" typeLine="none" id="23" name="А15" firstPoint="5" secondPoint="17" mx="0.182385" lineColor="black" my="0.264583" length="(Line_А4_А11/2)+0.7"/> <point firstPoint="5" id="23" length="(Line_А4_А11/2)+0.7" lineColor="black" mx="0.182385" my="0.264583" name="А15" secondPoint="17" type="alongLine" typeLine="none"/>
<line typeLine="hair" id="24" firstPoint="22" secondPoint="23" lineColor="black"/> <line firstPoint="22" id="24" lineColor="black" secondPoint="23" typeLine="hair"/>
<line typeLine="hair" id="25" firstPoint="21" secondPoint="17" lineColor="black"/> <line firstPoint="21" id="25" lineColor="black" secondPoint="17" typeLine="hair"/>
<line typeLine="hair" id="26" firstPoint="21" secondPoint="22" lineColor="black"/> <line firstPoint="21" id="26" lineColor="black" secondPoint="22" typeLine="hair"/>
<line typeLine="hair" id="27" firstPoint="11" secondPoint="8" lineColor="black"/> <line firstPoint="11" id="27" lineColor="black" secondPoint="8" typeLine="hair"/>
<line typeLine="hair" id="28" firstPoint="7" secondPoint="21" lineColor="black"/> <line firstPoint="7" id="28" lineColor="black" secondPoint="21" typeLine="hair"/>
<point type="alongLine" typeLine="none" id="29" name="А16" firstPoint="7" secondPoint="21" mx="0.132292" lineColor="black" my="0.264583" length="Line_А5_А13/2"/> <point firstPoint="7" id="29" length="Line_А5_А13/2" lineColor="black" mx="0.132292" my="0.264583" name="А16" secondPoint="21" type="alongLine" typeLine="none"/>
<point type="pointOfIntersection" id="30" name="А17" firstPoint="29" secondPoint="2" mx="0.132292" my="0.264583"/> <point firstPoint="29" id="30" mx="0.132292" my="0.264583" name="А17" secondPoint="2" type="pointOfIntersection"/>
<line typeLine="hair" id="31" firstPoint="29" secondPoint="30" lineColor="black"/> <line firstPoint="29" id="31" lineColor="black" secondPoint="30" typeLine="hair"/>
<point type="alongLine" typeLine="none" id="32" name="А18" firstPoint="10" secondPoint="11" mx="0.132292" lineColor="black" my="0.264583" length="(Line_А7_А8/2)+1"/> <point firstPoint="10" id="32" length="(Line_А7_А8/2)+1" lineColor="black" mx="0.132292" my="0.264583" name="А18" secondPoint="11" type="alongLine" typeLine="none"/>
<point type="alongLine" typeLine="none" id="33" name="А19" firstPoint="16" secondPoint="18" mx="0.172819" lineColor="black" my="0.264583" length="lowbust_circ/24+3.4"/> <point firstPoint="16" id="33" length="lowbust_circ/24+3.4" lineColor="black" mx="0.172819" my="0.264583" name="А19" secondPoint="18" type="alongLine" typeLine="none"/>
<point type="alongLine" typeLine="none" id="34" name="А20" firstPoint="16" secondPoint="5" mx="0.132292" lineColor="black" my="0.264583" length="Line_А10_А19+0.5"/> <point firstPoint="16" id="34" length="Line_А10_А19+0.5" lineColor="black" mx="0.132292" my="0.264583" name="А20" secondPoint="5" type="alongLine" typeLine="none"/>
<point type="pointOfIntersection" id="35" name="А21" firstPoint="33" secondPoint="34" mx="0.132292" my="0.264583"/> <point firstPoint="33" id="35" mx="0.132292" my="0.264583" name="А21" secondPoint="34" type="pointOfIntersection"/>
<line typeLine="hair" id="38" firstPoint="35" secondPoint="16" lineColor="black"/> <line firstPoint="35" id="38" lineColor="black" secondPoint="16" typeLine="hair"/>
<point type="alongLine" typeLine="none" id="39" name="А22" firstPoint="35" secondPoint="16" mx="0.132292" lineColor="black" my="0.264583" length="(Line_А21_А10/3)-0.5"/> <point firstPoint="35" id="39" length="(Line_А21_А10/3)-0.5" lineColor="black" mx="0.132292" my="0.264583" name="А22" secondPoint="16" type="alongLine" typeLine="none"/>
<spline point4="34" type="simpleInteractive" angle1="cos=270" angle2="sin=180" id="40" length1="4.89524" color="black" length2="4.34579" point1="33"/> <spline angle1="270" angle2="180" color="black" id="40" length1="4.89524" length2="4.34579" point1="33" point4="34" type="simpleInteractive"/>
<line typeLine="hair" id="41" firstPoint="34" secondPoint="35" lineColor="black"/> <line firstPoint="34" id="41" lineColor="black" secondPoint="35" typeLine="hair"/>
<line typeLine="hair" id="42" firstPoint="33" secondPoint="35" lineColor="black"/> <line firstPoint="33" id="42" lineColor="black" secondPoint="35" typeLine="hair"/>
<point type="alongLine" typeLine="none" id="43" name="А23" firstPoint="33" secondPoint="18" mx="0.132292" lineColor="black" my="0.264583" length="8"/> <point firstPoint="33" id="43" length="8" lineColor="black" mx="0.132292" my="0.264583" name="А23" secondPoint="18" type="alongLine" typeLine="none"/>
<point type="endLine" typeLine="none" id="44" name="А24" basePoint="43" mx="0.132292" lineColor="black" angle="270" my="0.264583" length="3.2"/> <point angle="270" basePoint="43" id="44" length="3.2" lineColor="black" mx="0.132292" my="0.264583" name="А24" type="endLine" typeLine="none"/>
<point type="lineIntersect" id="45" name="А25" p2Line1="44" p2Line2="17" p1Line1="33" p1Line2="18" mx="0.132292" my="0.264583"/> <point id="45" mx="0.132292" my="0.264583" name="А25" p1Line1="33" p1Line2="18" p2Line1="44" p2Line2="17" type="lineIntersect"/>
<point type="alongLine" typeLine="none" id="46" name="А26" firstPoint="33" secondPoint="45" mx="0.132292" lineColor="black" my="0.264583" length="Line_А19_А25+1.8"/> <point firstPoint="33" id="46" length="Line_А19_А25+1.8" lineColor="black" mx="0.132292" my="0.264583" name="А26" secondPoint="45" type="alongLine" typeLine="none"/>
<point type="alongLine" typeLine="none" id="47" name="А27" firstPoint="1" secondPoint="8" mx="-0.514964" lineColor="black" my="0.552252" length="Line_А10_А19+0.2"/> <point firstPoint="1" id="47" length="Line_А10_А19+0.2" lineColor="black" mx="-0.514964" my="0.552252" name="А27" secondPoint="8" type="alongLine" typeLine="none"/>
<point type="endLine" typeLine="hair" id="48" name="А28" basePoint="47" mx="-1.00881" lineColor="black" angle="90" my="-1.66652" length="Line_А_А27/3"/> <point angle="90" basePoint="47" id="48" length="Line_А_А27/3" lineColor="black" mx="-1.00881" my="-1.66652" name="А28" type="endLine" typeLine="hair"/>
<spline point4="48" type="simpleInteractive" angle1="max=0" angle2="235.888" id="49" length1="2.42673" color="black" length2="3.03166" point1="1"/> <spline angle1="0" angle2="224.801" color="black" id="49" length1="2.42673" length2="2.89835" point1="1" point4="48" type="simpleInteractive"/>
<point type="endLine" typeLine="none" id="50" name="А29" basePoint="48" mx="-0.745481" lineColor="black" angle="0" my="-1.52022" length="8"/> <point angle="0" basePoint="48" id="50" length="8" lineColor="black" mx="-0.745481" my="-1.52022" name="А29" type="endLine" typeLine="none"/>
<point type="endLine" typeLine="none" id="51" name="А30" basePoint="50" mx="0.132292" lineColor="black" angle="270" my="0.264583" length="2.6"/> <point angle="270" basePoint="50" id="51" length="2.6" lineColor="black" mx="0.132292" my="0.264583" name="А30" type="endLine" typeLine="none"/>
<point type="pointOfIntersection" id="52" name="А31" firstPoint="32" secondPoint="48" mx="-0.921036" my="-1.57874"/> <point firstPoint="32" id="52" mx="-0.921036" my="-1.57874" name="А31" secondPoint="48" type="pointOfIntersection"/>
<point type="lineIntersect" id="53" name="А32" p2Line1="51" p2Line2="32" p1Line1="48" p1Line2="52" mx="-2.0914" my="-1.31541"/> <point id="53" mx="-2.0914" my="-1.31541" name="А32" p1Line1="48" p1Line2="52" p2Line1="51" p2Line2="32" type="lineIntersect"/>
<point type="alongLine" typeLine="none" id="54" name="А33" firstPoint="53" secondPoint="51" mx="-1.82807" lineColor="black" my="0.0305105" length="1.5"/> <point firstPoint="53" id="54" length="1.5" lineColor="black" mx="-1.82807" my="0.0305105" name="А33" secondPoint="51" type="alongLine" typeLine="none"/>
<point type="alongLine" typeLine="none" id="55" name="А34" firstPoint="54" secondPoint="51" mx="0.34558" lineColor="black" my="4.05045" length="lowbust_circ/32-0.8"/> <point firstPoint="54" id="55" length="lowbust_circ/32-0.8" lineColor="black" mx="0.34558" my="4.05045" name="А34" secondPoint="51" type="alongLine" typeLine="none"/>
<point type="alongLine" typeLine="none" id="56" name="А35" firstPoint="48" secondPoint="51" mx="0.132292" lineColor="black" my="0.264583" length="Line_А19_А26+Line_А33_А34"/> <point firstPoint="48" id="56" length="Line_А19_А26+Line_А33_А34" lineColor="black" mx="0.132292" my="0.264583" name="А35" secondPoint="51" type="alongLine" typeLine="none"/>
<point dartP3="55" type="trueDarts" my1="-1.63726" my2="-2.89101" id="57" mx1="-0.423631" mx2="2.30483" name1="А36" point1="58" baseLineP1="48" point2="59" name2="А37" dartP1="54" baseLineP2="56" dartP2="32"/> <point baseLineP1="48" baseLineP2="56" dartP1="54" dartP2="32" dartP3="55" id="57" mx1="-0.423631" mx2="2.30483" my1="-1.63726" my2="-2.89101" name1="А36" name2="А37" point1="58" point2="59" type="trueDarts"/>
<line typeLine="hair" id="60" firstPoint="48" secondPoint="58" lineColor="black"/> <line firstPoint="48" id="60" lineColor="black" secondPoint="58" typeLine="hair"/>
<line typeLine="hair" id="61" firstPoint="32" secondPoint="58" lineColor="black"/> <line firstPoint="32" id="61" lineColor="black" secondPoint="58" typeLine="hair"/>
<line typeLine="hair" id="62" firstPoint="32" secondPoint="59" lineColor="black"/> <line firstPoint="32" id="62" lineColor="black" secondPoint="59" typeLine="hair"/>
<line typeLine="hair" id="63" firstPoint="59" secondPoint="56" lineColor="black"/> <line firstPoint="59" id="63" lineColor="black" secondPoint="56" typeLine="hair"/>
<point type="alongLine" typeLine="none" id="64" name="А38" firstPoint="33" secondPoint="44" mx="0.132292" lineColor="black" my="0.264583" length="Line_А28_А36"/> <point firstPoint="33" id="64" length="Line_А28_А36" lineColor="black" mx="0.132292" my="0.264583" name="А38" secondPoint="44" type="alongLine" typeLine="none"/>
<line typeLine="hair" id="65" firstPoint="33" secondPoint="64" lineColor="black"/> <line firstPoint="33" id="65" lineColor="black" secondPoint="64" typeLine="hair"/>
<line typeLine="hair" id="66" firstPoint="23" secondPoint="64" lineColor="black"/> <line firstPoint="23" id="66" lineColor="black" secondPoint="64" typeLine="hair"/>
<arc type="simple" angle1="AngleLine_А15_А38" angle2="180" id="67" radius="Line_А14_А15" center="23" color="black"/> <arc angle1="AngleLine_А15_А38" angle2="180" center="23" color="black" id="67" radius="Line_А14_А15" type="simple"/>
<point type="cutArc" arc="67" id="68" name="А39" mx="0.132292" my="0.264583" length="lowbust_circ/12-3.2"/> <point arc="67" id="68" length="lowbust_circ/12-3.2" mx="0.132292" my="0.264583" name="А39" type="cutArc"/>
<point type="alongLine" typeLine="none" id="69" name="А40" firstPoint="23" secondPoint="68" mx="-1.12242" lineColor="black" my="-1.69277" length="Line_А15_А38"/> <point firstPoint="23" id="69" length="Line_А15_А38" lineColor="black" mx="-1.12242" my="-1.69277" name="А40" secondPoint="68" type="alongLine" typeLine="none"/>
<line typeLine="hair" id="70" firstPoint="23" secondPoint="69" lineColor="black"/> <line firstPoint="23" id="70" lineColor="black" secondPoint="69" typeLine="hair"/>
<operation type="rotation" suffix="а1" id="71" center="23" angle="AngleLine_А15_А40-AngleLine_А15_А38"> <operation angle="AngleLine_А15_А40-AngleLine_А15_А38" center="23" id="71" suffix="а1" type="rotation">
<source> <source>
<item idObject="46"/> <item idObject="46"/>
</source> </source>
@ -83,23 +84,23 @@
<item idObject="72" mx="0.132292" my="0.264583"/> <item idObject="72" mx="0.132292" my="0.264583"/>
</destination> </destination>
</operation> </operation>
<line typeLine="hair" id="73" firstPoint="69" secondPoint="72" lineColor="black"/> <line firstPoint="69" id="73" lineColor="black" secondPoint="72" typeLine="hair"/>
<point type="normal" typeLine="hair" id="74" name="А41" firstPoint="56" secondPoint="59" mx="0.132292" lineColor="black" angle="0" my="0.264583" length="7"/> <point angle="0" firstPoint="56" id="74" length="7" lineColor="black" mx="0.132292" my="0.264583" name="А41" secondPoint="59" type="normal" typeLine="hair"/>
<point type="normal" typeLine="hair" id="75" name="А42" firstPoint="72" secondPoint="69" mx="0.132292" lineColor="black" angle="180" my="0.264583" length="7"/> <point angle="180" firstPoint="72" id="75" length="7" lineColor="black" mx="0.132292" my="0.264583" name="А42" secondPoint="69" type="normal" typeLine="hair"/>
<point type="bisector" typeLine="hair" id="77" thirdPoint="22" name="А43" firstPoint="29" secondPoint="21" mx="0.132292" lineColor="black" my="0.264583" length="Line_А5_А16/3+0.5"/> <point firstPoint="29" id="77" length="Line_А5_А16/3+0.5" lineColor="black" mx="0.132292" my="0.264583" name="А43" secondPoint="21" thirdPoint="22" type="bisector" typeLine="hair"/>
<point type="bisector" typeLine="hair" id="78" thirdPoint="29" name="А44" firstPoint="15" secondPoint="7" mx="0.132292" lineColor="black" my="0.264583" length="Line_А5_А16/3+0.8"/> <point firstPoint="15" id="78" length="Line_А5_А16/3+0.8" lineColor="black" mx="0.132292" my="0.264583" name="А44" secondPoint="7" thirdPoint="29" type="bisector" typeLine="hair"/>
<spline type="pathInteractive" id="100" color="black"> <spline color="black" id="100" type="pathInteractive">
<pathPoint angle1="180.19" pSpline="29" angle2="0.189514" length1="0" length2="5.5002"/> <pathPoint angle1="180.19" angle2="0.189514" length1="0" length2="5.5002" pSpline="29"/>
<pathPoint angle1="261.299" pSpline="22" angle2="81.2993" length1="2.57033" length2="5.3812"/> <pathPoint angle1="261.299" angle2="81.2993" length1="2.57033" length2="5.3812" pSpline="22"/>
<pathPoint angle1="327.914" pSpline="72" angle2="147.914" length1="8.44184" length2="13.3029"/> <pathPoint angle1="327.914" angle2="147.914" length1="8.44184" length2="13.3029" pSpline="72"/>
</spline> </spline>
<point type="alongLine" typeLine="none" id="116" name="А45" firstPoint="11" secondPoint="15" mx="0.132292" lineColor="black" my="0.264583" length="(Line_А8_А5/2)"/> <point firstPoint="11" id="116" length="(Line_А8_А5/2)" lineColor="black" mx="0.132292" my="0.264583" name="А45" secondPoint="15" type="alongLine" typeLine="none"/>
<spline type="pathInteractive" id="117" color="black"> <spline color="black" id="117" type="pathInteractive">
<pathPoint angle1="63.8459" pSpline="56" angle2="243.846" length1="0" length2="8.76616"/> <pathPoint angle1="63.8459" angle2="243.846" length1="0" length2="8.76616" pSpline="56"/>
<pathPoint angle1="95.8866" pSpline="116" angle2="275.887" length1="1.32614" length2="2.74113"/> <pathPoint angle1="95.8866" angle2="275.887" length1="1.32614" length2="2.74113" pSpline="116"/>
<pathPoint angle1="180" pSpline="29" angle2="0" length1="5.03118" length2="1.36011"/> <pathPoint angle1="180" angle2="0" length1="5.03118" length2="1.36011" pSpline="29"/>
</spline> </spline>
<operation type="moving" suffix="a1" id="149" angle="90.6703" length="40.35"> <operation angle="90.6703" id="149" length="40.35" suffix="a1" type="moving">
<source> <source>
<item idObject="117"/> <item idObject="117"/>
<item idObject="100"/> <item idObject="100"/>
@ -111,30 +112,168 @@
</operation> </operation>
</calculation> </calculation>
<modeling> <modeling>
<point type="modeling" inUse="true" id="155" idObject="4" mx="0.0821985" my="0.21449"/> <point id="155" idObject="4" inUse="false" mx="0.0821985" my="0.21449" type="modeling"/>
<point type="modeling" inUse="true" id="156" idObject="1" mx="0.132292" my="0.264583"/> <point id="156" idObject="1" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<spline type="modelingSpline" inUse="true" id="157" idObject="49"/> <spline id="157" idObject="49" inUse="false" type="modelingSpline"/>
<point type="modeling" inUse="true" id="158" idObject="48" mx="-1.00881" my="-1.66652"/> <point id="158" idObject="48" inUse="false" mx="-1.00881" my="-1.66652" type="modeling"/>
<point type="modeling" inUse="true" id="159" idObject="58" mx="-0.423631" my="-1.63726"/> <point id="159" idObject="58" inUse="false" mx="-0.423631" my="-1.63726" type="modeling"/>
<point type="modeling" inUse="true" id="160" idObject="32" mx="0.132292" my="0.264583"/> <point id="160" idObject="32" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point type="modeling" inUse="true" id="161" idObject="59" mx="2.30483" my="-2.89101"/> <point id="161" idObject="59" inUse="false" mx="2.30483" my="-2.89101" type="modeling"/>
<point type="modeling" inUse="true" id="162" idObject="56" mx="0.132292" my="0.264583"/> <point id="162" idObject="56" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<spline type="modelingPath" inUse="true" id="163" idObject="117"/> <spline id="163" idObject="117" inUse="false" type="modelingPath"/>
<point type="modeling" inUse="true" id="164" idObject="29" mx="0.132292" my="0.264583"/> <point id="164" idObject="29" inUse="false" mx="0.132292" my="0.264583" type="modeling"/>
<point id="166" idObject="4" inUse="false" mx="0.0821985" my="0.21449" showLabel="true" type="modeling"/>
<point id="167" idObject="1" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<spline id="168" idObject="49" inUse="false" type="modelingSpline"/>
<point id="169" idObject="48" inUse="false" mx="-1.00881" my="-1.66652" showLabel="true" type="modeling"/>
<point id="170" idObject="58" inUse="false" mx="-0.423631" my="-1.63726" showLabel="true" type="modeling"/>
<point id="171" idObject="32" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="172" idObject="59" inUse="false" mx="2.30483" my="-2.89101" showLabel="true" type="modeling"/>
<point id="173" idObject="56" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<spline id="174" idObject="117" inUse="false" type="modelingPath"/>
<point id="175" idObject="29" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="177" idObject="4" inUse="false" mx="0.0821985" my="0.21449" showLabel="true" type="modeling"/>
<point id="178" idObject="1" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<spline id="179" idObject="49" inUse="false" type="modelingSpline"/>
<point id="180" idObject="48" inUse="false" mx="-1.00881" my="-1.66652" showLabel="true" type="modeling"/>
<point id="181" idObject="58" inUse="false" mx="-0.423631" my="-1.63726" showLabel="true" type="modeling"/>
<point id="182" idObject="32" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="183" idObject="59" inUse="false" mx="2.30483" my="-2.89101" showLabel="true" type="modeling"/>
<point id="184" idObject="56" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<spline id="185" idObject="117" inUse="false" type="modelingPath"/>
<point id="186" idObject="29" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="188" idObject="4" inUse="false" mx="0.0821985" my="0.21449" showLabel="true" type="modeling"/>
<point id="189" idObject="1" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<spline id="190" idObject="49" inUse="false" type="modelingSpline"/>
<point id="191" idObject="48" inUse="false" mx="-1.00881" my="-1.66652" showLabel="true" type="modeling"/>
<point id="192" idObject="58" inUse="false" mx="-0.423631" my="-1.63726" showLabel="true" type="modeling"/>
<point id="193" idObject="32" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="194" idObject="59" inUse="false" mx="2.30483" my="-2.89101" showLabel="true" type="modeling"/>
<point id="195" idObject="56" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<spline id="196" idObject="117" inUse="false" type="modelingPath"/>
<point id="197" idObject="29" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="199" idObject="4" inUse="false" mx="0.0821985" my="0.21449" showLabel="true" type="modeling"/>
<point id="200" idObject="1" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<spline id="201" idObject="49" inUse="false" type="modelingSpline"/>
<point id="202" idObject="48" inUse="false" mx="-1.00881" my="-1.66652" showLabel="true" type="modeling"/>
<point id="203" idObject="58" inUse="false" mx="-0.423631" my="-1.63726" showLabel="true" type="modeling"/>
<point id="204" idObject="32" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="205" idObject="59" inUse="false" mx="2.30483" my="-2.89101" showLabel="true" type="modeling"/>
<point id="206" idObject="56" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<spline id="207" idObject="117" inUse="false" type="modelingPath"/>
<point id="208" idObject="29" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="210" idObject="4" inUse="true" mx="0.0821985" my="0.21449" showLabel="true" type="modeling"/>
<point id="211" idObject="1" inUse="true" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<spline id="212" idObject="49" inUse="true" type="modelingSpline"/>
<point id="213" idObject="48" inUse="true" mx="-1.00881" my="-1.66652" showLabel="true" type="modeling"/>
<point id="214" idObject="58" inUse="true" mx="-0.423631" my="-1.63726" showLabel="true" type="modeling"/>
<point id="215" idObject="32" inUse="true" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="216" idObject="59" inUse="true" mx="2.30483" my="-2.89101" showLabel="true" type="modeling"/>
<point id="217" idObject="56" inUse="true" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<spline id="218" idObject="117" inUse="true" type="modelingPath"/>
<point id="219" idObject="29" inUse="true" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
</modeling> </modeling>
<details> <details>
<detail id="165" name="" forbidFlipping="true" seamAllowance="true" mx="1.41527" inLayout="true" width="1" my="3.02812" version="2"> <detail forbidFlipping="true" forceFlipping="false" hideMainPath="false" id="165" inLayout="true" mx="1.41527" my="3.02812" name="Piece. By angle" seamAllowance="true" united="false" version="2" width="1">
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
<nodes> <nodes>
<node before="2" type="NodePoint" after="0" idObject="155"/> <node after="0" before="2" idObject="155" type="NodePoint"/>
<node before="0" type="NodePoint" idObject="156"/> <node before="0" idObject="156" type="NodePoint"/>
<node type="NodeSpline" reverse="0" idObject="157"/> <node idObject="157" reverse="0" type="NodeSpline"/>
<node type="NodePoint" after="0" idObject="158"/> <node after="0.01" idObject="158" type="NodePoint"/>
<node before="0" type="NodePoint" idObject="159"/> <node before="0.01" idObject="159" type="NodePoint"/>
<node type="NodePoint" idObject="160"/> <node idObject="160" type="NodePoint"/>
<node type="NodePoint" after="0" idObject="161"/> <node after="0" idObject="161" type="NodePoint"/>
<node before="0" type="NodePoint" after="5" idObject="162"/> <node after="5" before="0" idObject="162" type="NodePoint"/>
<node type="NodeSplinePath" reverse="0" idObject="163"/> <node idObject="163" reverse="0" type="NodeSplinePath"/>
<node before="5" type="NodePoint" after="0" idObject="164"/> <node after="0" before="5" idObject="164" type="NodePoint"/>
</nodes>
</detail>
<detail forbidFlipping="true" forceFlipping="false" hideMainPath="false" id="176" inLayout="true" mx="49.8971" my="2.01173" name="Piece. By intersection" seamAllowance="true" united="false" version="2" width="1">
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
<nodes>
<node after="0" before="2" idObject="166" type="NodePoint"/>
<node before="0" idObject="167" type="NodePoint"/>
<node idObject="168" reverse="0" type="NodeSpline"/>
<node after="0.01" angle="1" idObject="169" type="NodePoint"/>
<node before="0.01" idObject="170" type="NodePoint"/>
<node idObject="171" type="NodePoint"/>
<node after="0" idObject="172" type="NodePoint"/>
<node after="5" before="0" idObject="173" type="NodePoint"/>
<node idObject="174" reverse="0" type="NodeSplinePath"/>
<node after="0" before="5" idObject="175" type="NodePoint"/>
</nodes>
</detail>
<detail forbidFlipping="true" forceFlipping="false" hideMainPath="false" id="187" inLayout="true" mx="50.7381" my="-34.9913" name="Piece. By First Edge Symmetry" seamAllowance="true" united="false" version="2" width="1">
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
<nodes>
<node after="0" before="2" idObject="177" type="NodePoint"/>
<node before="0" idObject="178" type="NodePoint"/>
<node idObject="179" reverse="0" type="NodeSpline"/>
<node after="0.01" angle="2" idObject="180" type="NodePoint"/>
<node before="0.01" idObject="181" type="NodePoint"/>
<node idObject="182" type="NodePoint"/>
<node after="0" idObject="183" type="NodePoint"/>
<node after="5" before="0" idObject="184" type="NodePoint"/>
<node idObject="185" reverse="0" type="NodeSplinePath"/>
<node after="0" before="5" idObject="186" type="NodePoint"/>
</nodes>
</detail>
<detail forbidFlipping="true" forceFlipping="false" hideMainPath="false" id="198" inLayout="true" mx="1.64602" my="-34.648" name="Piece. By Second Edge Symmetry" seamAllowance="true" united="false" version="2" width="1">
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
<nodes>
<node after="0" before="2" idObject="188" type="NodePoint"/>
<node before="0" idObject="189" type="NodePoint"/>
<node idObject="190" reverse="0" type="NodeSpline"/>
<node after="0.01" angle="3" idObject="191" type="NodePoint"/>
<node before="0.01" idObject="192" type="NodePoint"/>
<node idObject="193" type="NodePoint"/>
<node after="0" idObject="194" type="NodePoint"/>
<node after="5" before="0" idObject="195" type="NodePoint"/>
<node idObject="196" reverse="0" type="NodeSplinePath"/>
<node after="0" before="5" idObject="197" type="NodePoint"/>
</nodes>
</detail>
<detail forbidFlipping="true" forceFlipping="false" hideMainPath="false" id="209" inLayout="true" mx="54.2159" my="35.1676" name="Piece. By First Right Angle" seamAllowance="true" united="false" version="2" width="1">
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
<nodes>
<node after="0" before="2" idObject="199" type="NodePoint"/>
<node before="0" idObject="200" type="NodePoint"/>
<node idObject="201" reverse="0" type="NodeSpline"/>
<node after="0.01" angle="4" idObject="202" type="NodePoint"/>
<node before="0.01" idObject="203" type="NodePoint"/>
<node idObject="204" type="NodePoint"/>
<node after="0" idObject="205" type="NodePoint"/>
<node after="5" before="0" idObject="206" type="NodePoint"/>
<node idObject="207" reverse="0" type="NodeSplinePath"/>
<node after="0" before="5" idObject="208" type="NodePoint"/>
</nodes>
</detail>
<detail forbidFlipping="true" forceFlipping="false" hideMainPath="false" id="220" inLayout="true" mx="8.15941" my="34.6596" name="Piece. By Second Right Angle" seamAllowance="true" united="false" version="2" width="1">
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
<nodes>
<node after="0" before="2" idObject="210" type="NodePoint"/>
<node before="0" idObject="211" type="NodePoint"/>
<node idObject="212" reverse="0" type="NodeSpline"/>
<node after="0.01" angle="5" idObject="213" type="NodePoint"/>
<node before="0.01" idObject="214" type="NodePoint"/>
<node idObject="215" type="NodePoint"/>
<node after="0" idObject="216" type="NodePoint"/>
<node after="5" before="0" idObject="217" type="NodePoint"/>
<node idObject="218" reverse="0" type="NodeSplinePath"/>
<node after="0" before="5" idObject="219" type="NodePoint"/>
</nodes> </nodes>
</detail> </detail>
</details> </details>
@ -142,17 +281,17 @@
</draw> </draw>
<draw name="Чертеж 2"> <draw name="Чертеж 2">
<calculation> <calculation>
<point type="single" x="36.3125" y="34.6144" id="141" name="Б" mx="0.132292" my="0.264583"/> <point id="141" mx="0.132292" my="0.264583" name="Б" type="single" x="36.3125" y="34.6144"/>
<point type="endLine" typeLine="hair" id="142" name="Б1" basePoint="141" mx="0.132292" lineColor="black" angle="0" my="0.264583" length="Line_А5_А16"/> <point angle="0" basePoint="141" id="142" length="Line_А5_А16" lineColor="black" mx="0.132292" my="0.264583" name="Б1" type="endLine" typeLine="hair"/>
<point type="endLine" typeLine="hair" id="143" name="Б2" basePoint="141" mx="0.132292" lineColor="black" angle="90" my="0.264583" length="Line_А8_А5/2"/> <point angle="90" basePoint="141" id="143" length="Line_А8_А5/2" lineColor="black" mx="0.132292" my="0.264583" name="Б2" type="endLine" typeLine="hair"/>
<point type="endLine" typeLine="hair" id="144" name="Б3" basePoint="143" mx="0.132292" lineColor="black" angle="90" my="0.264583" length="Line_Б_Б2"/> <point angle="90" basePoint="143" id="144" length="Line_Б_Б2" lineColor="black" mx="0.132292" my="0.264583" name="Б3" type="endLine" typeLine="hair"/>
<point type="endLine" typeLine="hair" id="145" name="Б4" basePoint="144" mx="0.132292" lineColor="black" angle="180" my="0.264583" length="Line_А18_А8"/> <point angle="180" basePoint="144" id="145" length="Line_А18_А8" lineColor="black" mx="0.132292" my="0.264583" name="Б4" type="endLine" typeLine="hair"/>
<point type="endLine" typeLine="hair" id="146" name="Б5" basePoint="145" mx="0.132292" lineColor="black" angle="AngleLine_А18_А37" my="0.264583" length="Line_А18_А37"/> <point angle="AngleLine_А18_А37" basePoint="145" id="146" length="Line_А18_А37" lineColor="black" mx="0.132292" my="0.264583" name="Б5" type="endLine" typeLine="hair"/>
<point type="endLine" typeLine="hair" id="147" name="Б6" basePoint="146" mx="0.132292" lineColor="black" angle="AngleLine_А37_А35" my="0.264583" length="Line_А37_А35"/> <point angle="AngleLine_А37_А35" basePoint="146" id="147" length="Line_А37_А35" lineColor="black" mx="0.132292" my="0.264583" name="Б6" type="endLine" typeLine="hair"/>
<spline type="pathInteractive" id="148" color="black"> <spline color="black" id="148" type="pathInteractive">
<pathPoint angle1="64.6053" pSpline="147" angle2="243.846" length1="0" length2="8.76616"/> <pathPoint angle1="64.6053" angle2="243.846" length1="0" length2="8.76616" pSpline="147"/>
<pathPoint angle1="Angle2SplPath_А35_А16_Seg_1" pSpline="143" angle2="275.887" length1="C2LengthSplPath_А35_А16_Seg_1" length2="2.74113"/> <pathPoint angle1="Angle2SplPath_А35_А16_Seg_1" angle2="275.887" length1="C2LengthSplPath_А35_А16_Seg_1" length2="2.74113" pSpline="143"/>
<pathPoint angle1="Angle2SplPath_А35_А16" pSpline="142" angle2="0.12" length1="4.97078" length2="1.36701"/> <pathPoint angle1="Angle2SplPath_А35_А16" angle2="0.12" length1="4.97078" length2="1.36701" pSpline="142"/>
</spline> </spline>
</calculation> </calculation>
<modeling/> <modeling/>

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<pattern>
<!--Pattern created with Valentina v0.6.0.0b (https://valentinaproject.bitbucket.io/).-->
<version>0.7.10</version>
<unit>cm</unit>
<description/>
<notes/>
<measurements/>
<increments/>
<previewCalculations/>
<draw name="Выкройка 1">
<calculation>
<point id="1" mx="0.132292" my="0.264583" name="А" showLabel="true" type="single" x="0.79375" y="1.05833"/>
<point angle="242.551" basePoint="1" id="2" length="10" lineColor="black" mx="0.132292" my="0.264583" name="А1" showLabel="true" type="endLine" typeLine="hair"/>
<point angle="280.696" basePoint="1" id="3" length="11.4765" lineColor="black" mx="0.132292" my="0.264583" name="А2" showLabel="true" type="endLine" typeLine="hair"/>
<line firstPoint="2" id="4" lineColor="black" secondPoint="3" typeLine="hair"/>
<spline aScale="0" angle1="130.462" angle2="264.003" color="black" id="5" length1="3.65642" length2="3.88876" penStyle="hair" point1="2" point4="1" type="simpleInteractive"/>
<spline aScale="0" angle1="27.268" angle2="38.6591" color="black" id="6" length1="5.37972" length2="3.66743" penStyle="hair" point1="1" point4="3" type="simpleInteractive"/>
</calculation>
<modeling>
<point id="7" idObject="2" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="8" idObject="1" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="9" idObject="3" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="11" idObject="1" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="12" idObject="3" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="13" idObject="2" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<spline id="14" idObject="5" inUse="false" type="modelingSpline"/>
<point id="16" idObject="2" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<point id="17" idObject="1" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
<spline id="18" idObject="6" inUse="false" type="modelingSpline"/>
<point id="19" idObject="3" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
</modeling>
<details>
<detail forbidFlipping="false" forceFlipping="false" hideMainPath="false" id="10" inLayout="true" mx="0" my="0" name="Деталь" seamAllowance="true" united="false" version="2" width="1">
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
<nodes>
<node idObject="7" type="NodePoint"/>
<node after="CurrentSeamAllowance*0" idObject="8" type="NodePoint"/>
<node before="CurrentSeamAllowance*0" idObject="9" type="NodePoint"/>
</nodes>
</detail>
<detail forbidFlipping="false" forceFlipping="false" hideMainPath="false" id="15" inLayout="true" mx="20.6298" my="-0.389241" name="Деталь_1" seamAllowance="true" united="false" version="2" width="1">
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
<nodes>
<node after="CurrentSeamAllowance*0" idObject="11" type="NodePoint"/>
<node before="CurrentSeamAllowance*0" idObject="12" type="NodePoint"/>
<node idObject="13" type="NodePoint"/>
<node idObject="14" reverse="0" type="NodeSpline"/>
</nodes>
</detail>
<detail forbidFlipping="false" forceFlipping="false" hideMainPath="false" id="20" inLayout="true" mx="-22.4982" my="0.622786" name="Деталь_2" seamAllowance="true" united="false" version="2" width="1">
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
<nodes>
<node before="CurrentSeamAllowance*0" idObject="17" type="NodePoint"/>
<node idObject="18" reverse="0" type="NodeSpline"/>
<node idObject="19" type="NodePoint"/>
<node after="CurrentSeamAllowance*0" idObject="16" type="NodePoint"/>
</nodes>
</detail>
</details>
<groups/>
</draw>
</pattern>

View File

@ -36,7 +36,45 @@
#include <QVector> #include <QVector>
#include <QPainterPath> #include <QPainterPath>
const qreal maxL = 2.4; const qreal maxL = 2.5;
namespace
{
// Do we create a point outside of a path?
bool IsOutsidePoint(QPointF p1, QPointF p2, QPointF px)
{
QLineF line(p1, p2);
QLineF ext(p1, px);
return VFuzzyComparePossibleNulls(line.angle(), ext.angle());
}
//---------------------------------------------------------------------------------------------------------------------
// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points
QVector<QPointF> RollbackSeamAllowance(QVector<QPointF> points, const QLineF &cuttingEdge, bool *success)
{
*success = false;
QVector<QPointF> clipped;
clipped.reserve(points.count()+1);
for (int i = points.count()-1; i > 0; --i)
{
QLineF segment(points.at(i), points.at(i-1));
QPointF crosPoint;
const QLineF::IntersectType type = cuttingEdge.intersect(segment, &crosPoint);
if (type != QLineF::NoIntersection
&& VGObject::IsPointOnLineSegment(crosPoint, segment.p1(), segment.p2()))
{
clipped.append(crosPoint);
for (int j=i-1; j>=0; --j)
{
clipped.append(points.at(j));
}
points = VGObject::GetReversePoints(clipped);
*success = true;
}
}
return points;
}
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VAbstractPiece::VAbstractPiece() VAbstractPiece::VAbstractPiece()
@ -158,7 +196,7 @@ void VAbstractPiece::SetSAWidth(qreal value)
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> VAbstractPiece::Equidistant(const QVector<VSAPoint> &points, qreal width) QVector<QPointF> VAbstractPiece::Equidistant(QVector<VSAPoint> points, qreal width)
{ {
if (width < 0) if (width < 0)
{ {
@ -166,29 +204,29 @@ QVector<QPointF> VAbstractPiece::Equidistant(const QVector<VSAPoint> &points, qr
return QVector<QPointF>(); return QVector<QPointF>();
} }
QVector<VSAPoint> p = CorrectEquidistantPoints(points); points = CorrectEquidistantPoints(points);
if ( p.size() < 3 ) if ( points.size() < 3 )
{ {
qDebug()<<"Not enough points for building the equidistant."; qDebug()<<"Not enough points for building the equidistant.";
return QVector<QPointF>(); return QVector<QPointF>();
} }
if (p.last().toPoint() != p.first().toPoint()) if (points.last().toPoint() != points.first().toPoint())
{ {
p.append(p.at(0));// Should be always closed points.append(points.at(0));// Should be always closed
} }
QVector<QPointF> ekvPoints; QVector<QPointF> ekvPoints;
for (qint32 i = 0; i < p.size(); ++i ) for (qint32 i = 0; i < points.size(); ++i )
{ {
if ( i == 0) if ( i == 0)
{//first point {//first point
ekvPoints << EkvPoint(p.at(p.size()-2), p.at(p.size()-1), ekvPoints = EkvPoint(ekvPoints, points.at(points.size()-2), points.at(points.size()-1), points.at(1),
p.at(1), p.at(0), width); points.at(0), width);
continue; continue;
} }
if (i == p.size()-1) if (i == points.size()-1)
{//last point {//last point
if (not ekvPoints.isEmpty()) if (not ekvPoints.isEmpty())
{ {
@ -197,8 +235,7 @@ QVector<QPointF> VAbstractPiece::Equidistant(const QVector<VSAPoint> &points, qr
continue; continue;
} }
//points in the middle of polyline //points in the middle of polyline
ekvPoints << EkvPoint(p.at(i-1), p.at(i), ekvPoints = EkvPoint(ekvPoints, points.at(i-1), points.at(i), points.at(i+1), points.at(i), width);
p.at(i+1), p.at(i), width);
} }
const bool removeFirstAndLast = false; const bool removeFirstAndLast = false;
@ -414,7 +451,7 @@ qreal VAbstractPiece::MaxLocalSA(const VSAPoint &p, qreal width)
* @param width global seam allowance width. * @param width global seam allowance width.
* @return seam aloowance points. * @return seam aloowance points.
*/ */
QVector<QPointF> VAbstractPiece::EkvPoint(const VSAPoint &p1Line1, const VSAPoint &p2Line1, QVector<QPointF> VAbstractPiece::EkvPoint(QVector<QPointF> points, const VSAPoint &p1Line1, const VSAPoint &p2Line1,
const VSAPoint &p1Line2, const VSAPoint &p2Line2, qreal width) const VSAPoint &p1Line2, const VSAPoint &p2Line2, qreal width)
{ {
if (width < 0) if (width < 0)
@ -422,7 +459,6 @@ QVector<QPointF> VAbstractPiece::EkvPoint(const VSAPoint &p1Line1, const VSAPoin
return QVector<QPointF>(); return QVector<QPointF>();
} }
QVector<QPointF> points;
if (p2Line1 != p2Line2) if (p2Line1 != p2Line2)
{ {
qDebug()<<"Last points of two lines must be equal."; qDebug()<<"Last points of two lines must be equal.";
@ -431,22 +467,31 @@ QVector<QPointF> VAbstractPiece::EkvPoint(const VSAPoint &p1Line1, const VSAPoin
const QLineF bigLine1 = ParallelLine(p1Line1, p2Line1, width ); const QLineF bigLine1 = ParallelLine(p1Line1, p2Line1, width );
const QLineF bigLine2 = ParallelLine(p2Line2, p1Line2, width ); const QLineF bigLine2 = ParallelLine(p2Line2, p1Line2, width );
QPointF CrosPoint; QPointF crosPoint;
const QLineF::IntersectType type = bigLine1.intersect( bigLine2, &CrosPoint ); const QLineF::IntersectType type = bigLine1.intersect( bigLine2, &crosPoint );
switch (type) switch (type)
{// There are at least three big cases {// There are at least three big cases
case (QLineF::BoundedIntersection): case (QLineF::BoundedIntersection):
// The easiest, real intersection // The easiest, real intersection
points.append(CrosPoint); points.append(crosPoint);
return points; return points;
case (QLineF::UnboundedIntersection): case (QLineF::UnboundedIntersection):
{ // Most common case { // Most common case
/* Case when a path has point on line (both segments lie on the same line) and seam allowance creates
* prong. */
if (VGObject::IsPointOnLineSegment(p2Line1, p1Line1, p1Line2))
{
points.append(bigLine1.p2());
points.append(bigLine2.p1());
return points;
}
const qreal localWidth = MaxLocalSA(p2Line1, width); const qreal localWidth = MaxLocalSA(p2Line1, width);
QLineF line( p2Line1, CrosPoint ); QLineF line( p2Line1, crosPoint );
// Checking two subcases // Checking two subcases
const QLineF b1 = BisectorLine(p1Line1, p2Line1, p1Line2); const QLineF b1 = BisectorLine(p1Line1, p2Line1, p1Line2);
const QLineF b2 = BisectorLine(bigLine1.p1(), CrosPoint, bigLine2.p2()); const QLineF b2 = BisectorLine(bigLine1.p1(), crosPoint, bigLine2.p2());
const qreal angle = AngleBetweenBisectors(b1, b2); const qreal angle = AngleBetweenBisectors(b1, b2);
@ -459,22 +504,22 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default")
switch (p2Line1.GetAngleType()) switch (p2Line1.GetAngleType())
{ {
case PieceNodeAngle::ByLength: case PieceNodeAngle::ByLength:
return AngleByLength(p2Line1, bigLine1.p1(), CrosPoint, bigLine2.p2(), localWidth); return AngleByLength(points, p2Line1, bigLine1, crosPoint, bigLine2, p2Line1, width);
case PieceNodeAngle::ByPointsIntersection: case PieceNodeAngle::ByPointsIntersection:
return AngleByIntersection(p1Line1, p2Line1, p1Line2, bigLine1.p1(), CrosPoint, bigLine2.p2(), return AngleByIntersection(points, p1Line1, p2Line1, p1Line2, bigLine1, crosPoint, bigLine2,
localWidth); p2Line1, width);
case PieceNodeAngle::ByFirstEdgeSymmetry: case PieceNodeAngle::ByFirstEdgeSymmetry:
return AngleByFirstSymmetry(p1Line1, p2Line1, bigLine1.p1(), CrosPoint, bigLine2.p2(), return AngleByFirstSymmetry(points, p1Line1, p2Line1, bigLine1, crosPoint, bigLine2,
localWidth); p2Line1, width);
case PieceNodeAngle::BySecondEdgeSymmetry: case PieceNodeAngle::BySecondEdgeSymmetry:
return AngleBySecondSymmetry(p2Line1, p1Line2, bigLine1.p1(), CrosPoint,bigLine2.p2(), return AngleBySecondSymmetry(points, p2Line1, p1Line2, bigLine1, crosPoint, bigLine2,
localWidth); p2Line1, width);
case PieceNodeAngle::ByFirstEdgeRightAngle: case PieceNodeAngle::ByFirstEdgeRightAngle:
return AngleByFirstRightAngle(p1Line1, p2Line1, bigLine1.p1(), CrosPoint, bigLine2.p2(), return AngleByFirstRightAngle(points, p1Line1, p2Line1, bigLine1, crosPoint, bigLine2,
p2Line1.GetSABefore(width), localWidth); p2Line1, width);
case PieceNodeAngle::BySecondEdgeRightAngle: case PieceNodeAngle::BySecondEdgeRightAngle:
return AngleBySecondRightAngle(p2Line1, p1Line2, bigLine1.p1(), CrosPoint, bigLine2.p2(), return AngleBySecondRightAngle(points, p2Line1, p1Line2, bigLine1, crosPoint, bigLine2,
p2Line1.GetSAAfter(width), localWidth); p2Line1, width);
} }
QT_WARNING_POP QT_WARNING_POP
} }
@ -497,21 +542,21 @@ QT_WARNING_POP
{ {
if (line.length() < QLineF(p2Line1, px).length()) if (line.length() < QLineF(p2Line1, px).length())
{ {
points.append(CrosPoint); points.append(crosPoint);
return points; return points;
} }
} }
} }
else else
{ // New subcase. This is not a dart. An angle is acute and bisector watch inside. { // New subcase. This is not a dart. An angle is acute and bisector watch inside.
const qreal result1 = PointPosition(CrosPoint, QLineF(p1Line1, p2Line1)); const qreal result1 = PointPosition(crosPoint, QLineF(p1Line1, p2Line1));
const qreal result2 = PointPosition(CrosPoint, QLineF(p2Line2, p1Line2)); const qreal result2 = PointPosition(crosPoint, QLineF(p2Line2, p1Line2));
if ((result1 < 0 || qFuzzyIsNull(result1)) && (result2 < 0 || qFuzzyIsNull(result2))) if ((result1 < 0 || qFuzzyIsNull(result1)) && (result2 < 0 || qFuzzyIsNull(result2)))
{// The cross point is still outside of a piece {// The cross point is still outside of a piece
if (line.length() >= localWidth) if (line.length() >= localWidth)
{ {
points.append(CrosPoint); points.append(crosPoint);
return points; return points;
} }
else else
@ -533,8 +578,9 @@ QT_WARNING_POP
break; break;
} }
case (QLineF::NoIntersection): case (QLineF::NoIntersection):
/*If we have correct lines this means lines lie on a line.*/ /*If we have correct lines this means lines lie on a line or parallel.*/
points.append(bigLine1.p2()); points.append(bigLine1.p2());
points.append(bigLine2.p1()); // Second point for parallel line
return points; return points;
default: default:
break; break;
@ -543,193 +589,294 @@ QT_WARNING_POP
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> VAbstractPiece::AngleByLength(const QPointF &p2, const QPointF &sp1, const QPointF &sp2, QVector<QPointF> VAbstractPiece::AngleByLength(QVector<QPointF> points, QPointF p2, const QLineF &bigLine1, QPointF sp2,
const QPointF &sp3, qreal width) const QLineF &bigLine2, const VSAPoint &p, qreal width)
{ {
QVector<QPointF> points; const QPointF sp1 = bigLine1.p1();
const QPointF sp3 = bigLine2.p2();
const qreal localWidth = MaxLocalSA(p, width);
QLineF line(p2, sp2); if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), sp2) && IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), sp2) )
const qreal length = line.length(); {
if (length > width*maxL) QLineF line(p2, sp2);
{ // Cutting too long a cut angle const qreal length = line.length();
line.setLength(width); if (length > localWidth*maxL)
QLineF cutLine(line.p2(), sp2); // Cut line is a perpendicular { // Cutting too long acut angle
cutLine.setLength(length); // Decided take this length line.setLength(localWidth);
QLineF cutLine(line.p2(), sp2); // Cut line is a perpendicular
cutLine.setLength(length); // Decided take this length
// We do not check intersection type because intersection must alwayse exist // We do not check intersection type because intersection must alwayse exist
QPointF px; QPointF px;
cutLine.setAngle(cutLine.angle()+90); cutLine.setAngle(cutLine.angle()+90);
QLineF::IntersectType type = QLineF(sp1, sp2).intersect(cutLine, &px); QLineF::IntersectType type = QLineF(sp1, sp2).intersect(cutLine, &px);
if (type == QLineF::NoIntersection) if (type == QLineF::NoIntersection)
{ {
qDebug()<<"Couldn't find intersection with cut line."; qDebug()<<"Couldn't find intersection with cut line.";
}
points.append(px);
cutLine.setAngle(cutLine.angle()-180);
type = QLineF(sp2, sp3).intersect(cutLine, &px);
if (type == QLineF::NoIntersection)
{
qDebug()<<"Couldn't find intersection with cut line.";
}
points.append(px);
} }
points.append(px); else
{// The point just fine
cutLine.setAngle(cutLine.angle()-180); points.append(sp2);
type = QLineF(sp2, sp3).intersect(cutLine, &px);
if (type == QLineF::NoIntersection)
{
qDebug()<<"Couldn't find intersection with cut line.";
} }
points.append(px);
} }
else else
{ // The point just fine {
points.append(sp2); if (not IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), sp2))
{
bool success = false;
points = RollbackSeamAllowance(points, bigLine2, &success);
if (not success)
{
// Cannot find clipping point.
// Show at least something.
points.append(sp2);
}
}
else
{
// Need to create artificial loop
QLineF loop1(sp2, sp1);
loop1.setLength(loop1.length()*0.1);
points.append(loop1.p2()); // Nedd for the main path rule
loop1.setAngle(loop1.angle() + 180);
loop1.setLength(localWidth * 3.);
points.append(loop1.p2());
points.append(bigLine2.p1());
}
} }
return points; return points;
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> VAbstractPiece::AngleByIntersection(const QPointF &p1, const QPointF &p2, const QPointF &p3, QVector<QPointF> VAbstractPiece::AngleByIntersection(const QVector<QPointF> &points, QPointF p1, QPointF p2, QPointF p3,
const QPointF &sp1, const QPointF &sp2, const QPointF &sp3, const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2,
qreal width) const VSAPoint &p, qreal width)
{ {
QVector<QPointF> points; const qreal localWidth = MaxLocalSA(p, width);
QVector<QPointF> pointsIntr = points;
// First point
QLineF edge2(p2, p3); QLineF edge2(p2, p3);
QLineF sEdge1(sp1, sp2);
QPointF px; QPointF px;
QLineF::IntersectType type = edge2.intersect(sEdge1, &px); QLineF::IntersectType type = edge2.intersect(bigLine1, &px);
if (type == QLineF::NoIntersection) if (type == QLineF::NoIntersection)
{ {
return AngleByLength(p2, sp1, sp2, sp3, width); return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
} }
if (QLineF(p2, px).length() > width*maxL) if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px))
{ {
return AngleByLength(p2, sp1, sp2, sp3, width); if (QLineF(p2, px).length() > localWidth*maxL)
{
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
}
pointsIntr.append(px);
}
else
{// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points
bool success = false;
pointsIntr = RollbackSeamAllowance(pointsIntr, edge2, &success);
if (not success)
{
// Cannot find clipping point.
// Show at least something.
pointsIntr.append(px);
}
} }
points.append(px);
// Second point
QLineF edge1(p1, p2); QLineF edge1(p1, p2);
QLineF sEdge2(sp2, sp3);
type = edge1.intersect(sEdge2, &px); type = edge1.intersect(bigLine2, &px);
if (type == QLineF::NoIntersection) if (type == QLineF::NoIntersection)
{ {
return AngleByLength(p2, sp1, sp2, sp3, width); return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
} }
if (QLineF(p2, px).length() > width*maxL) if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px))
{ {
return AngleByLength(p2, sp1, sp2, sp3, width); pointsIntr.append(px);
}
else
{
QLineF allowance(p2, px);
pointsIntr.append(allowance.p2());
allowance.setLength(allowance.length() + localWidth * 3.);
pointsIntr.append(allowance.p2());
pointsIntr.append(bigLine2.p2());
} }
points.append(px);
return points; return pointsIntr;
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> VAbstractPiece::AngleByFirstSymmetry(const QPointF &p1, const QPointF &p2, QVector<QPointF> VAbstractPiece::AngleByFirstSymmetry(const QVector<QPointF> &points, QPointF p1, QPointF p2,
const QPointF &sp1, const QPointF &sp2, const QPointF &sp3, const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2,
qreal width) const VSAPoint &p, qreal width)
{ {
QVector<QPointF> points; const qreal localWidth = MaxLocalSA(p, width);
QVector<QPointF> pointsIntr = points;
QLineF sEdge2(sp2, sp3); QLineF sEdge(VPointF::FlipPF(bigLine2, p1), VPointF::FlipPF(bigLine2, p2));
QPointF fp1 = VPointF::FlipPF(sEdge2, p1);
QPointF fp2 = VPointF::FlipPF(sEdge2, p2);
QLineF fEdge(fp1, fp2);
QPointF px; QPointF px;
QLineF sEdge1(sp1, sp2); QLineF::IntersectType type = sEdge.intersect(bigLine1, &px);
QLineF::IntersectType type = fEdge.intersect(sEdge1, &px);
if (type == QLineF::NoIntersection) if (type == QLineF::NoIntersection)
{ {
return AngleByLength(p2, sp1, sp2, sp3, width); return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
} }
if (QLineF(p2, px).length() > width*maxL) if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px))
{ {
return AngleByLength(p2, sp1, sp2, sp3, width); if (QLineF(p2, px).length() > localWidth*maxL)
{
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
}
pointsIntr.append(px);
}
else
{// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points
bool success = false;
pointsIntr = RollbackSeamAllowance(pointsIntr, bigLine2, &success);
if (not success)
{
// Cannot find clipping point.
// Show at least something.
pointsIntr.append(px);
}
} }
points.append(px);
type = fEdge.intersect(sEdge2, &px); type = sEdge.intersect(bigLine2, &px);
if (type == QLineF::NoIntersection) if (type == QLineF::NoIntersection)
{ {
return AngleByLength(p2, sp1, sp2, sp3, width); return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
} }
if (QLineF(p2, px).length() > width*maxL) if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px))
{ {
return AngleByLength(p2, sp1, sp2, sp3, width); if (QLineF(p2, px).length() > localWidth*maxL)
{
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
}
pointsIntr.append(px);
}
else
{
QLineF allowance(px, p2);
allowance.setAngle(allowance.angle() + 90);
pointsIntr.append(allowance.p2());
pointsIntr.append(bigLine2.p1());
} }
points.append(px);
return points; return pointsIntr;
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> VAbstractPiece::AngleBySecondSymmetry(const QPointF &p2, const QPointF &p3, QVector<QPointF> VAbstractPiece::AngleBySecondSymmetry(const QVector<QPointF> &points, QPointF p2, QPointF p3,
const QPointF &sp1, const QPointF &sp2, const QPointF &sp3, const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2,
qreal width) const VSAPoint &p, qreal width)
{ {
QVector<QPointF> points; const qreal localWidth = MaxLocalSA(p, width);
QVector<QPointF> pointsIntr = points;
QLineF sEdge1(sp1, sp2); QLineF sEdge(VPointF::FlipPF(bigLine1, p2), VPointF::FlipPF(bigLine1, p3));
QPointF fp2 = VPointF::FlipPF(sEdge1, p2);
QPointF fp3 = VPointF::FlipPF(sEdge1, p3);
QLineF fEdge(fp2, fp3);
QPointF px; QPointF px;
QLineF::IntersectType type = fEdge.intersect(sEdge1, &px); QLineF::IntersectType type = sEdge.intersect(bigLine1, &px);
if (type == QLineF::NoIntersection) if (type == QLineF::NoIntersection)
{ {
return AngleByLength(p2, sp1, sp2, sp3, width); return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
} }
if (QLineF(p2, px).length() > width*maxL) if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px))
{ {
return AngleByLength(p2, sp1, sp2, sp3, width); if (QLineF(p2, px).length() > localWidth*maxL)
{
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
}
pointsIntr.append(px);
}
else
{// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points
bool success = false;
pointsIntr = RollbackSeamAllowance(pointsIntr, bigLine2, &success);
if (not success)
{
// Cannot find clipping point.
// Show at least something.
pointsIntr.append(px);
}
} }
points.append(px);
QLineF sEdge2(sp2, sp3); type = sEdge.intersect(bigLine2, &px);
type = fEdge.intersect(sEdge2, &px);
if (type == QLineF::NoIntersection) if (type == QLineF::NoIntersection)
{ {
return AngleByLength(p2, sp1, sp2, sp3, width); return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
} }
if (QLineF(p2, px).length() > width*maxL) if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px))
{ {
return AngleByLength(p2, sp1, sp2, sp3, width); if (QLineF(p2, px).length() > localWidth*maxL)
{
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
}
pointsIntr.append(px);
}
else
{
QLineF allowance(p2, px);
allowance.setLength(p.GetSAAfter(width)*0.98);
pointsIntr.append(allowance.p2());
allowance.setLength(allowance.length() + localWidth * 3.);
pointsIntr.append(allowance.p2());
pointsIntr.append(bigLine2.p2());
} }
points.append(px);
return points; return pointsIntr;
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> VAbstractPiece::AngleByFirstRightAngle(QPointF p1, QPointF p2, QPointF sp1, QPointF sp2, QPointF sp3, QVector<QPointF> VAbstractPiece::AngleByFirstRightAngle(const QVector<QPointF> &points, QPointF p1, QPointF p2,
qreal width, qreal localWidth) const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2,
const VSAPoint &p, qreal width)
{ {
const qreal localWidth = MaxLocalSA(p, width);
QVector<QPointF> pointsRA = points;
QLineF edge(p1, p2); QLineF edge(p1, p2);
QPointF px; QPointF px;
QLineF::IntersectType type = edge.intersect(QLineF(sp2, sp3), &px); QLineF::IntersectType type = edge.intersect(bigLine2, &px);
if (type == QLineF::NoIntersection) if (type == QLineF::NoIntersection)
{ {
return AngleByLength(p2, sp1, sp2, sp3, localWidth); return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
} }
QLineF seam(px, p1); QLineF seam(px, p1);
seam.setAngle(seam.angle()-90); seam.setAngle(seam.angle()-90);
seam.setLength(width); seam.setLength(p.GetSABefore(width));
QLineF spLine1(sp2, sp1); pointsRA.append(seam.p2());
QLineF spLine2(sp2, sp3);
QVector<QPointF> points; if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), seam.p1()))
points.append(seam.p2());
if (spLine1.angleTo(spLine2) <= 90)
{ {
points.append(seam.p1()); if (QLineF(p2, px).length() > localWidth*maxL)
{
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
}
pointsRA.append(seam.p1());
} }
else else
{ {
@ -740,50 +887,58 @@ QVector<QPointF> VAbstractPiece::AngleByFirstRightAngle(QPointF p1, QPointF p2,
QLineF tmp(seam.p2(), seam.p1()); QLineF tmp(seam.p2(), seam.p1());
tmp.setLength(tmp.length()+length); tmp.setLength(tmp.length()+length);
points.append(tmp.p2()); pointsRA.append(tmp.p2());
points.append(loopLine.p2()); pointsRA.append(loopLine.p2());
} }
return points; return pointsRA;
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> VAbstractPiece::AngleBySecondRightAngle(QPointF p2, QPointF p3, QPointF sp1, QPointF sp2, QPointF sp3, QVector<QPointF> VAbstractPiece::AngleBySecondRightAngle(QVector<QPointF> points, QPointF p2, QPointF p3,
qreal width, qreal localWidth) const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2,
const VSAPoint &p, qreal width)
{ {
const qreal localWidth = MaxLocalSA(p, width);
QLineF edge(p2, p3); QLineF edge(p2, p3);
QPointF px; QPointF px;
QLineF::IntersectType type = edge.intersect(QLineF(sp1, sp2), &px); QLineF::IntersectType type = edge.intersect(bigLine1, &px);
if (type == QLineF::NoIntersection) if (type == QLineF::NoIntersection)
{ {
return AngleByLength(p2, sp1, sp2, sp3, localWidth); return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
} }
QLineF seam(px, p2);
seam.setAngle(seam.angle()+90);
seam.setLength(width);
QLineF spLine1(sp2, sp1);
QLineF spLine2(sp2, sp3);
QVector<QPointF> points; if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px))
if (spLine1.angleTo(spLine2) <= 90)
{ {
points.append(seam.p1()); if (QLineF(p2, px).length() > localWidth*maxL)
{
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
}
points.append(px);
} }
else else
{ {
QLineF loopLine(px, sp2); // Because artificial loop can lead to wrong clipping we must rollback current seam allowance points
const qreal length = loopLine.length()*0.98; bool success = false;
loopLine.setLength(length); points = RollbackSeamAllowance(points, edge, &success);
points.append(loopLine.p2()); if (not success)
{
QLineF tmp(seam.p2(), seam.p1()); // Cannot find clipping point.
tmp.setLength(tmp.length() + length); // Show at least something.
points.append(tmp.p2()); points.append(px);
}
else
{
px = points.last();
}
} }
QLineF seam(px, p3);
seam.setAngle(seam.angle()+90);
seam.setLength(p.GetSAAfter(width));
points.append(seam.p2()); points.append(seam.p2());
return points; return points;

View File

@ -181,10 +181,10 @@ public:
qreal GetMy() const; qreal GetMy() const;
void SetMy(qreal value); void SetMy(qreal value);
static QVector<QPointF> Equidistant(const QVector<VSAPoint> &points, qreal width); static QVector<QPointF> Equidistant(QVector<VSAPoint> points, qreal width);
static qreal SumTrapezoids(const QVector<QPointF> &points); static qreal SumTrapezoids(const QVector<QPointF> &points);
static QVector<QPointF> CheckLoops(const QVector<QPointF> &points); static QVector<QPointF> CheckLoops(const QVector<QPointF> &points);
static QVector<QPointF> EkvPoint(const VSAPoint &p1Line1, const VSAPoint &p2Line1, static QVector<QPointF> EkvPoint(QVector<QPointF> points, const VSAPoint &p1Line1, const VSAPoint &p2Line1,
const VSAPoint &p1Line2, const VSAPoint &p2Line2, qreal width); const VSAPoint &p1Line2, const VSAPoint &p2Line2, qreal width);
static QLineF ParallelLine(const VSAPoint &p1, const VSAPoint &p2, qreal width); static QLineF ParallelLine(const VSAPoint &p1, const VSAPoint &p2, qreal width);
@ -209,21 +209,23 @@ private:
static bool Crossing(const QVector<QPointF> &sub1, const QVector<QPointF> &sub2); static bool Crossing(const QVector<QPointF> &sub1, const QVector<QPointF> &sub2);
static QVector<QPointF> SubPath(const QVector<QPointF> &path, int startIndex, int endIndex); static QVector<QPointF> SubPath(const QVector<QPointF> &path, int startIndex, int endIndex);
static Q_DECL_CONSTEXPR qreal PointPosition(const QPointF &p, const QLineF &line); static Q_DECL_CONSTEXPR qreal PointPosition(const QPointF &p, const QLineF &line);
static QVector<QPointF> AngleByLength(const QPointF &p2, const QPointF &sp1, const QPointF &sp2, const QPointF &sp3, static QVector<QPointF> AngleByLength(QVector<QPointF> points, QPointF p2, const QLineF &bigLine1, QPointF sp2,
qreal width); const QLineF &bigLine2, const VSAPoint &p, qreal width);
static QVector<QPointF> AngleByIntersection(const QPointF &p1, const QPointF &p2, const QPointF &p3, static QVector<QPointF> AngleByIntersection(const QVector<QPointF> &points, QPointF p1, QPointF p2, QPointF p3,
const QPointF &sp1, const QPointF &sp2, const QPointF &sp3, const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2,
qreal width); const VSAPoint &p, qreal width);
static QVector<QPointF> AngleByFirstSymmetry(const QPointF &p1, const QPointF &p2, static QVector<QPointF> AngleByFirstSymmetry(const QVector<QPointF> &points, QPointF p1, QPointF p2,
const QPointF &sp1, const QPointF &sp2, const QPointF &sp3, const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2,
qreal width); const VSAPoint &p, qreal width);
static QVector<QPointF> AngleBySecondSymmetry(const QPointF &p2, const QPointF &p3, static QVector<QPointF> AngleBySecondSymmetry(const QVector<QPointF> &points, QPointF p2, QPointF p3,
const QPointF &sp1, const QPointF &sp2, const QPointF &sp3, const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2,
qreal width); const VSAPoint &p, qreal width);
static QVector<QPointF> AngleByFirstRightAngle(QPointF p1, QPointF p2, QPointF sp1, QPointF sp2, QPointF sp3, static QVector<QPointF> AngleByFirstRightAngle(const QVector<QPointF> &points, QPointF p1, QPointF p2,
qreal width, qreal localWidth); const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2,
static QVector<QPointF> AngleBySecondRightAngle(QPointF p2, QPointF p3, QPointF sp1, QPointF sp2, QPointF sp3, const VSAPoint &p, qreal width);
qreal width, qreal localWidth); static QVector<QPointF> AngleBySecondRightAngle(QVector<QPointF> points, QPointF p2, QPointF p3,
const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2,
const VSAPoint &p, qreal width);
static QLineF ParallelLine(const QPointF &p1, const QPointF &p2, qreal width); static QLineF ParallelLine(const QPointF &p1, const QPointF &p2, qreal width);
static QPointF SingleParallelPoint(const QPointF &p1, const QPointF &p2, qreal angle, qreal width); static QPointF SingleParallelPoint(const QPointF &p1, const QPointF &p2, qreal angle, qreal width);
static QLineF BisectorLine(const QPointF &p1, const QPointF &p2, const QPointF &p3); static QLineF BisectorLine(const QPointF &p1, const QPointF &p2, const QPointF &p3);

View File

@ -1117,7 +1117,7 @@ bool VPiece::GetSeamPassmarkSAPoint(const VSAPoint &previousSAPoint, const VSAPo
} }
else else
{ {
ekvPoints = EkvPoint(previousSAPoint, passmarkSAPoint, nextSAPoint, passmarkSAPoint, width); ekvPoints = EkvPoint(ekvPoints, previousSAPoint, passmarkSAPoint, nextSAPoint, passmarkSAPoint, width);
} }
if (ekvPoints.isEmpty()) if (ekvPoints.isEmpty())

File diff suppressed because it is too large Load Diff

View File

@ -61,8 +61,23 @@ private slots:
#endif #endif
private: private:
QVector<VSAPoint> InputPointsCase1() const; QVector<VSAPoint> InputPointsSeamTest1PieceByAngle() const;
QVector<QPointF> OutputPointsCase1() const; QVector<QPointF> OutputPointsSeamTest1PieceByAngle() const;
QVector<VSAPoint> InputPointsSeamTest1PieceByIntersection() const;
QVector<QPointF> OutputPointsSeamTest1PieceByIntersection() const;
QVector<VSAPoint> InputPointsSeamTest1PieceByFirstEdgeSymmerty() const;
QVector<QPointF> OutputPointsSeamTest1PieceByFirstEdgeSymmerty() const;
QVector<VSAPoint> InputPointsSeamTest1PieceBySecondEdgeSymmerty() const;
QVector<QPointF> OutputPointsSeamTest1PieceBySecondEdgeSymmerty() const;
QVector<VSAPoint> InputPointsSeamTest1PieceByFirstRightAngle() const;
QVector<QPointF> OutputPointsSeamTest1PieceByFirstRightAngle() const;
QVector<VSAPoint> InputPointsSeamTest1PieceBySecondRightAngle() const;
QVector<QPointF> OutputPointsSeamTest1PieceBySecondRightAngle() const;
QVector<VSAPoint> InputPointsCase2() const; QVector<VSAPoint> InputPointsCase2() const;
QVector<QPointF> OutputPointsCase2() const; QVector<QPointF> OutputPointsCase2() const;
@ -70,6 +85,21 @@ private:
QVector<VSAPoint> InputPointsCase3() const; QVector<VSAPoint> InputPointsCase3() const;
QVector<QPointF> OutputPointsCase3() const; QVector<QPointF> OutputPointsCase3() const;
QVector<VSAPoint> InputPointsIssue627() const;
QVector<QPointF> OutputPointsIssue627() const;
QVector<VSAPoint> InputPointsIssue767_Fabric_TopCollar() const;
QVector<QPointF> OutputPointsIssue767_Fabric_TopCollar() const;
QVector<VSAPoint> InputPointsIssue767_SkinFusing_TopCollar_Notch() const;
QVector<QPointF> OutputPointsIssue767_SkinFusing_TopCollar_Notch() const;
QVector<VSAPoint> InputPointsIssue880_Piece_Detail() const;
QVector<QPointF> OutputPointsIssue880_Piece_Detail() const;
QVector<VSAPoint> InputPointsIssue880_Piece_Detail_1() const;
QVector<QPointF> OutputPointsIssue880_Piece_Detail_1() const;
void Case3() const; void Case3() const;
void Case4() const; void Case4() const;
void Case5() const; void Case5() const;