Fixed issue #883. Fix right angle seam allowance angle type.
--HG-- branch : release
This commit is contained in:
parent
8a3d50520f
commit
3fe7709c40
|
@ -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>
|
||||||
|
|
143
src/app/share/collection/bugs/Issue_#883_case1.val
Normal file
143
src/app/share/collection/bugs/Issue_#883_case1.val
Normal 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>
|
24
src/app/share/collection/bugs/Issue_#883_case1.vit
Normal file
24
src/app/share/collection/bugs/Issue_#883_case1.vit
Normal 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>
|
|
@ -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/>
|
||||||
|
|
69
src/app/share/collection/test/seamtest4.val
Normal file
69
src/app/share/collection/test/seamtest4.val
Normal 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>
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user