Merge with develop.

--HG--
branch : feature
This commit is contained in:
Roman Telezhynskyi 2016-09-14 19:26:26 +03:00
commit 34338cc275
10 changed files with 966 additions and 67 deletions

View file

@ -0,0 +1,303 @@
<?xml version='1.0' encoding='UTF-8'?>
<pattern>
<!--Pattern created with Valentina (http://www.valentina-project.org/).-->
<version>0.3.4</version>
<unit>cm</unit>
<author>S.L.Spencer</author>
<description>Men's Trousers circa 1830-1870</description>
<notes/>
<patternName>Steampunk Trousers</patternName>
<patternNumber/>
<company>Seamly</company>
<customer/>
<size/>
<showDate>true</showDate>
<showMeasurements>true</showMeasurements>
<measurements>Steampunk_trousers.vit</measurements>
<increments>
<increment name="#CM_HEIGHT" description="Original pattern outseam is 112. &#xa;Use CM_HEIGHT for height formulas&#xa;" formula="leg_waist_side_to_floor/112"/>
<increment name="#CM_WIDTH" description="Original pattern's hip circumference is 102.&#xa;Use CM_WIDTH for circumference, arc, or width formulas." formula="hip_circ/102"/>
<increment name="#SCALE" description="Scale = 1/2 seat" formula="hip_circ/2"/>
<increment name="#SCALE_8" description="1/8 Scale" formula="#SCALE/8"/>
<increment name="#SCALE_4" description="1/4 Scale" formula="#SCALE/4"/>
<increment name="#HEM_WIDTH" description="Original pattern's hem width for each piece is 21.5cm" formula="21.5*#CM_WIDTH"/>
<increment name="#HEM_DEPTH" description="" formula="3.5*#CM_HEIGHT"/>
</increments>
<draw name="Front">
<calculation>
<point type="single" x="0.79" y="1.06" id="1" name="A0" mx="-1.58602" my="-0.622091"/>
<point type="endLine" typeLine="none" id="2" name="A1" basePoint="1" mx="-1.62896" lineColor="black" angle="270" my="-0.59059" length="4*#CM_HEIGHT"/>
<point type="alongLine" typeLine="hair" id="3" name="A2" firstPoint="1" secondPoint="2" mx="-1.64399" lineColor="blue" my="-1.11279" length="waist_to_hip_f"/>
<point type="alongLine" typeLine="dotLine" id="4" name="A3" firstPoint="1" secondPoint="2" mx="0.0462226" lineColor="black" my="0.130965" length="rise_length_side_sitting"/>
<point type="endLine" typeLine="dotLine" id="5" name="A4" basePoint="4" mx="-0.704107" lineColor="black" angle="270" my="-1.40822" length="leg_crotch_to_floor/2 - 5*#CM_HEIGHT"/>
<point type="alongLine" typeLine="dotLine" id="6" name="A5" firstPoint="4" secondPoint="5" mx="-0.881496" lineColor="black" my="-0.104292" length="leg_crotch_to_floor"/>
<point type="alongLine" typeLine="none" id="7" name="A6" firstPoint="2" secondPoint="3" mx="-1.74714" lineColor="black" my="-0.433492" length="CurrentLength/2"/>
<point type="normal" typeLine="dotLine" id="8" name="A7" firstPoint="4" secondPoint="3" mx="-3.2506" lineColor="black" angle="0" my="-1.09024" length="#SCALE_8 + 0.5*#CM_WIDTH"/>
<point type="normal" typeLine="hair" id="9" name="A8" firstPoint="4" secondPoint="8" mx="-2.21797" lineColor="black" angle="225" my="-1.23279" length="Line_A3_A7/2"/>
<point type="normal" typeLine="none" id="10" name="A9" firstPoint="5" secondPoint="4" mx="-1.67282" lineColor="black" angle="0" my="-0.710231" length="4*#CM_WIDTH"/>
<point type="normal" typeLine="dotLine" id="11" name="A10" firstPoint="6" secondPoint="5" mx="-2.38494" lineColor="black" angle="0" my="-0.253545" length="2.5*#CM_WIDTH"/>
<line typeLine="hair" id="12" firstPoint="11" secondPoint="10" lineColor="blue"/>
<point type="lineIntersectAxis" typeLine="dotLine" id="13" name="A11" basePoint="10" p2Line="4" mx="-3.95279" lineColor="black" angle="AngleLine_A10_A9" my="-2.39343" p1Line="8"/>
<point type="alongLine" typeLine="none" id="14" name="c1" firstPoint="8" secondPoint="4" mx="-0.549983" lineColor="black" my="0.176842" length="0.6*CurrentLength"/>
<point type="alongLine" typeLine="none" id="15" name="c2" firstPoint="3" secondPoint="4" mx="0.454481" lineColor="black" my="-0.594587" length="0.6*CurrentLength"/>
<spline point4="3" type="cubicBezier" id="16" color="blue" point1="8" point2="14" point3="15"/>
<point type="alongLine" typeLine="none" id="17" name="c3" firstPoint="10" secondPoint="13" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength/2"/>
<line typeLine="dotLine" id="18" firstPoint="8" secondPoint="17" lineColor="black"/>
<point type="alongLine" typeLine="none" id="19" name="c4" firstPoint="8" secondPoint="17" mx="0.188052" lineColor="black" my="-1.0179" length="CurrentLength/2"/>
<spline point4="8" type="cubicBezier" id="20" color="blue" point1="10" point2="17" point3="19"/>
<point type="normal" typeLine="hair" id="21" name="A12" firstPoint="2" secondPoint="7" mx="0.790977" lineColor="blue" angle="0" my="0.202702" length="waist_arc_f/2"/>
<point type="normal" typeLine="hair" id="22" name="A13" firstPoint="1" secondPoint="2" mx="0.0434438" lineColor="blue" angle="0" my="-0.287348" length="Line_A1_A12 + 0.5*#CM_WIDTH"/>
<line typeLine="hair" id="23" firstPoint="22" secondPoint="21" lineColor="blue"/>
<point type="normal" typeLine="dotLine" id="24" name="A14" firstPoint="7" secondPoint="3" mx="-1.69342" lineColor="black" angle="0" my="-0.0141612" length="highhip_arc_f/2"/>
<point type="normal" typeLine="dotLine" id="25" name="A15" firstPoint="3" secondPoint="4" mx="-1.7388" lineColor="black" angle="0" my="-0.783532" length="hip_arc_f/2"/>
<point type="normal" typeLine="dotLine" id="26" name="A16" firstPoint="4" secondPoint="5" mx="-1.67726" lineColor="black" angle="0" my="-0.0213748" length="leg_thigh_upper_circ/2 - Line_A3_A7"/>
<point type="alongLine" typeLine="dotLine" id="27" name="A17" firstPoint="10" secondPoint="5" mx="-1.40626" lineColor="black" my="-1.09748" length="leg_knee_circ/2"/>
<line typeLine="hair" id="28" firstPoint="5" secondPoint="27" lineColor="yellow"/>
<point type="normal" typeLine="dotLine" id="29" name="A18" firstPoint="6" secondPoint="5" mx="-1.20636" lineColor="black" angle="180" my="-0.172528" length="Line_A4_A17 - 1*#CM_WIDTH"/>
<line typeLine="hair" id="30" firstPoint="29" secondPoint="27" lineColor="blue"/>
<line typeLine="dotLine" id="31" firstPoint="26" secondPoint="27" lineColor="black"/>
<line typeLine="dotLine" id="32" firstPoint="25" secondPoint="27" lineColor="black"/>
<line typeLine="dotLine" id="33" firstPoint="24" secondPoint="26" lineColor="black"/>
<line typeLine="dotLine" id="34" firstPoint="21" secondPoint="25" lineColor="black"/>
<line typeLine="dotLine" id="35" firstPoint="21" secondPoint="24" lineColor="black"/>
<line typeLine="dotLine" id="36" firstPoint="24" secondPoint="25" lineColor="black"/>
<line typeLine="dotLine" id="37" firstPoint="25" secondPoint="26" lineColor="black"/>
<point type="endLine" typeLine="dotLine" id="38" name="c6" basePoint="24" mx="-1.69019" lineColor="black" angle="AngleLine_A12_A15 +180" my="-0.51726" length="Line_A12_A14/3"/>
<line typeLine="dotLine" id="39" firstPoint="21" secondPoint="38" lineColor="black"/>
<point type="alongLine" typeLine="none" id="40" name="c5" firstPoint="21" secondPoint="38" mx="-1.57569" lineColor="blue" my="-0.511301" length="CurrentLength/2"/>
<point type="normal" typeLine="dotLine" id="42" name="c7" firstPoint="24" secondPoint="38" mx="0.278998" lineColor="black" angle="90" my="-0.76236" length="Line_A14_A15/3"/>
<point type="endLine" typeLine="dotLine" id="43" name="c8" basePoint="25" mx="0.389028" lineColor="black" angle="AngleLine_A14_A16 + 180" my="-0.615654" length="Line_A14_A15/3"/>
<point type="normal" typeLine="dotLine" id="45" name="c9" firstPoint="25" secondPoint="43" mx="0.487321" lineColor="black" angle="90" my="-0.800503" length="Line_A15_A16/3"/>
<point type="endLine" typeLine="dotLine" id="46" name="c10" basePoint="26" mx="0.132292" lineColor="black" angle="AngleLine_A15_A17 +180" my="0.264583" length="Line_A15_A16/3"/>
<point type="alongLine" typeLine="none" id="52" name="A19" firstPoint="8" secondPoint="26" mx="-0.711268" lineColor="black" my="0.227906" length="CurrentLength/2"/>
<point type="lineIntersectAxis" typeLine="dotLine" id="53" name="A20" basePoint="52" p2Line="22" mx="-1.32463" lineColor="black" angle="90" my="0.454218" p1Line="1"/>
<point type="lineIntersectAxis" typeLine="dotLine" id="54" name="A21" basePoint="52" p2Line="29" mx="-0.78977" lineColor="black" angle="270" my="0.0729758" p1Line="6"/>
<point type="alongLine" typeLine="none" id="55" name="A22" firstPoint="11" secondPoint="29" mx="-1.59167" lineColor="black" my="0.00473358" length="CurrentLength/2"/>
<point type="normal" typeLine="dotLine" id="56" name="A23" firstPoint="55" secondPoint="29" mx="-1.11031" lineColor="black" angle="0" my="-1.82121" length="2*#CM_HEIGHT"/>
<point type="normal" typeLine="dotLine" id="57" name="c14" firstPoint="56" secondPoint="55" mx="-0.373055" lineColor="black" angle="0" my="-2.26167" length="Line_A5_A18/4"/>
<line typeLine="dotLine" id="58" firstPoint="29" secondPoint="57" lineColor="black"/>
<point type="alongLine" typeLine="none" id="59" name="c13" firstPoint="29" secondPoint="57" mx="0.026228" lineColor="black" my="-1.44578" length="CurrentLength/2"/>
<spline point4="56" type="cubicBezier" id="60" color="blue" point1="29" point2="59" point3="57"/>
<point type="normal" typeLine="dotLine" id="61" name="c15" firstPoint="56" secondPoint="57" mx="-1.82037" lineColor="black" angle="90" my="-1.95435" length="Line_A23_c14"/>
<line typeLine="dotLine" id="62" firstPoint="11" secondPoint="61" lineColor="black"/>
<point type="alongLine" typeLine="none" id="63" name="c16" firstPoint="11" secondPoint="61" mx="-2.21977" lineColor="black" my="-1.24429" length="CurrentLength/2"/>
<spline point4="11" type="cubicBezier" id="64" color="blue" point1="56" point2="61" point3="63"/>
<point type="normal" typeLine="dotLine" id="65" name="c11" firstPoint="26" secondPoint="46" mx="0.132292" lineColor="black" angle="90" my="0.264583" length="Line_A16_A17/3"/>
<point type="normal" typeLine="dotLine" id="66" name="c12" firstPoint="27" secondPoint="59" mx="-1.69256" lineColor="black" angle="90" my="-0.143966" length="Line_A16_A17/3"/>
<point type="endLine" typeLine="dotLine" id="69" name="A24" basePoint="8" mx="-2.20962" lineColor="black" angle="180" my="0.264578" length="3*#CM_WIDTH"/>
<line typeLine="dotLine" id="70" firstPoint="69" secondPoint="17" lineColor="black"/>
<point type="alongLine" typeLine="none" id="71" name="c17" firstPoint="69" secondPoint="17" mx="-2.09811" lineColor="black" my="-0.794856" length="CurrentLength/2"/>
<spline point4="69" type="cubicBezier" id="72" color="darkRed" point1="10" point2="17" point3="71"/>
<point type="alongLine" typeLine="none" id="73" name="A25" firstPoint="7" secondPoint="24" mx="0.132292" lineColor="black" my="0.264583" length="2*#CM_WIDTH"/>
<point type="alongLine" typeLine="none" id="74" name="A26" firstPoint="1" secondPoint="22" mx="-2.99027" lineColor="black" my="-1.96581" length="5*#CM_WIDTH"/>
<line typeLine="hair" id="75" firstPoint="3" secondPoint="73" lineColor="darkRed"/>
<line typeLine="hair" id="76" firstPoint="73" secondPoint="74" lineColor="darkRed"/>
<line typeLine="hair" id="77" firstPoint="3" secondPoint="4" lineColor="yellow"/>
<point type="normal" typeLine="dotLine" id="78" name="c18" firstPoint="3" secondPoint="73" mx="-2.04235" lineColor="black" angle="90" my="-1.46398" length="Line_A2_A3/2"/>
<point type="normal" typeLine="hair" id="80" name="A27" firstPoint="74" secondPoint="73" mx="-1.57043" lineColor="darkRed" angle="90" my="-1.46574" length="2*#CM_HEIGHT"/>
<point type="shoulder" typeLine="dotLine" id="81" name="A28" p2Line="21" pShoulder="80" mx="0.655497" lineColor="darkRed" my="-0.983501" length="waist_arc_b/2 + 2*#CM_WIDTH" p1Line="2"/>
<line typeLine="hair" id="82" firstPoint="80" secondPoint="81" lineColor="darkRed"/>
<point type="endLine" typeLine="hair" id="83" name="A29" basePoint="81" mx="0.634132" lineColor="darkRed" angle="AngleLine_A13_A12 + 180" my="-0.906376" length="Line_A13_A12"/>
<point type="normal" typeLine="hair" id="84" name="A30" firstPoint="80" secondPoint="74" mx="-1.79635" lineColor="darkRed" angle="90" my="-1.18176" length="5*#CM_HEIGHT"/>
<line typeLine="dotLine" id="85" firstPoint="84" secondPoint="83" lineColor="black"/>
<point type="alongLine" typeLine="none" id="86" name="A31" firstPoint="84" secondPoint="83" mx="-1.37323" lineColor="black" my="0.153063" length="4.5*#CM_WIDTH"/>
<point type="normal" typeLine="dotLine" id="87" name="A32" firstPoint="86" secondPoint="84" mx="-0.161375" lineColor="black" angle="180" my="-0.851351" length="2.5*#CM_HEIGHT"/>
<line typeLine="hair" id="88" firstPoint="84" secondPoint="87" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="89" name="A33" firstPoint="83" secondPoint="86" mx="0.0803721" lineColor="black" my="-1.27418" length="CurrentLength/3"/>
<point type="normal" typeLine="dotLine" id="90" name="A34" firstPoint="89" secondPoint="86" mx="-0.675292" lineColor="darkRed" angle="0" my="0.147116" length="11.5*#CM_HEIGHT"/>
<point type="alongLine" typeLine="none" id="91" name="A35" firstPoint="89" secondPoint="86" mx="-0.820793" lineColor="black" my="-1.08102" length="0.65*#CM_WIDTH"/>
<point type="alongLine" typeLine="none" id="92" name="A36" firstPoint="89" secondPoint="83" mx="0.562249" lineColor="black" my="-0.653962" length="0.65*#CM_WIDTH"/>
<point type="lineIntersect" id="93" name="A37" p2Line1="81" p2Line2="90" p1Line1="80" p1Line2="89" mx="-0.851496" my="0.132434"/>
<point type="alongLine" typeLine="none" id="94" name="A38" firstPoint="93" secondPoint="80" mx="-0.954275" lineColor="black" my="-0.880717" length="1*#CM_WIDTH"/>
<point type="alongLine" typeLine="none" id="95" name="A39" firstPoint="93" secondPoint="81" mx="0.279125" lineColor="black" my="-0.543001" length="1*#CM_WIDTH"/>
<line typeLine="hair" id="96" firstPoint="90" secondPoint="94" lineColor="darkRed"/>
<line typeLine="hair" id="97" firstPoint="90" secondPoint="95" lineColor="darkRed"/>
<line typeLine="hair" id="98" firstPoint="94" secondPoint="91" lineColor="darkRed"/>
<line typeLine="hair" id="99" firstPoint="95" secondPoint="92" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="100" name="c20" firstPoint="91" secondPoint="86" mx="-0.954274" lineColor="black" my="0.000282963" length="Line_A30_A29/6"/>
<line typeLine="dotLine" id="101" firstPoint="87" secondPoint="100" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="102" name="c19" firstPoint="87" secondPoint="100" mx="0.146975" lineColor="black" my="-0.866034" length="CurrentLength/2"/>
<spline point4="91" type="cubicBezier" id="103" color="darkRed" point1="87" point2="102" point3="100"/>
<line typeLine="hair" id="104" firstPoint="92" secondPoint="83" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="105" name="A40" firstPoint="80" secondPoint="3" mx="0.294622" lineColor="black" my="-0.763509" length="waist_to_hip_b"/>
<point type="normal" typeLine="dotLine" id="106" name="A41" firstPoint="105" secondPoint="80" mx="0.346177" lineColor="darkRed" angle="180" my="-0.529413" length="hip_arc_b/2"/>
<point type="alongLine" typeLine="none" id="107" name="A42" firstPoint="80" secondPoint="105" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength/2"/>
<point type="normal" typeLine="dotLine" id="108" name="A43" firstPoint="107" secondPoint="105" mx="0.502885" lineColor="black" angle="0" my="-0.53312" length="highhip_arc_b/2"/>
<line typeLine="hair" id="110" firstPoint="29" secondPoint="93" lineColor="yellow"/>
<line typeLine="hair" id="111" firstPoint="29" secondPoint="81" lineColor="yellow"/>
<operation type="rotation" suffix="a5" id="123" center="29" angle="-(AngleLine_A18_A37 - AngleLine_A18_A28)">
<source>
<item idObject="27"/>
</source>
<destination>
<item idObject="124" mx="0.144044" my="-1.24309"/>
</destination>
</operation>
<spline type="cubicBezierPath" id="129" color="blue">
<pathPoint pSpline="21"/>
<pathPoint pSpline="40"/>
<pathPoint pSpline="38"/>
<pathPoint pSpline="24"/>
<pathPoint pSpline="42"/>
<pathPoint pSpline="43"/>
<pathPoint pSpline="25"/>
<pathPoint pSpline="45"/>
<pathPoint pSpline="46"/>
<pathPoint pSpline="26"/>
<pathPoint pSpline="65"/>
<pathPoint pSpline="66"/>
<pathPoint pSpline="27"/>
</spline>
<line typeLine="dotLine" id="131" firstPoint="27" secondPoint="124" lineColor="black"/>
<point type="lineIntersectAxis" typeLine="hair" id="132" name="A44" basePoint="124" p2Line="29" mx="0.159611" lineColor="darkRed" angle="AngleLine_A18_A17" my="-1.01943" p1Line="11"/>
<point type="endLine" typeLine="dotLine" id="133" name="A45" basePoint="132" mx="0.268889" lineColor="darkRed" angle="270" my="-0.445722" length="2*#CM_HEIGHT"/>
<point type="endLine" typeLine="dotLine" id="134" name="A46" basePoint="11" mx="0.132292" lineColor="darkRed" angle="270" my="0.264583" length="2*#CM_HEIGHT"/>
<line typeLine="dotLine" id="135" firstPoint="134" secondPoint="133" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="136" name="A47" firstPoint="133" secondPoint="134" mx="-0.681943" lineColor="black" my="0.756516" length="CurrentLength/2"/>
<point type="alongLine" typeLine="none" id="137" name="c22" firstPoint="136" secondPoint="133" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength/3"/>
<line typeLine="dotLine" id="138" firstPoint="132" secondPoint="137" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="139" name="c21" firstPoint="132" secondPoint="137" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength/2"/>
<point type="alongLine" typeLine="none" id="140" name="c23" firstPoint="136" secondPoint="134" mx="-0.410531" lineColor="black" my="0.230657" length="CurrentLength/3"/>
<line typeLine="dotLine" id="141" firstPoint="11" secondPoint="140" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="142" name="c24" firstPoint="11" secondPoint="140" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength/2"/>
<spline type="cubicBezierPath" id="143" color="darkRed">
<pathPoint pSpline="132"/>
<pathPoint pSpline="139"/>
<pathPoint pSpline="137"/>
<pathPoint pSpline="136"/>
<pathPoint pSpline="142"/>
<pathPoint pSpline="142"/>
<pathPoint pSpline="11"/>
</spline>
<point type="cutSpline" id="155" name="A48" spline="72" mx="0.132292" my="0.264583" length="Spl_A9_A7"/>
<spline point4="3" type="cubicBezier" id="156" color="darkRed" point1="155" point2="14" point3="78"/>
<line typeLine="dotLine" id="184" firstPoint="81" secondPoint="108" lineColor="darkRed"/>
<line typeLine="dotLine" id="185" firstPoint="81" secondPoint="106" lineColor="darkRed"/>
<line typeLine="dotLine" id="186" firstPoint="108" secondPoint="106" lineColor="darkRed"/>
<line typeLine="dotLine" id="187" firstPoint="108" secondPoint="124" lineColor="darkRed"/>
<point type="endLine" typeLine="dotLine" id="188" name="c31" basePoint="124" mx="0.241238" lineColor="darkRed" angle="AngleLine_A17a5_A44 + 180" my="0.0466903" length="Line_A17_c12"/>
<point type="endLine" typeLine="dotLine" id="189" name="c27" basePoint="108" mx="0.198205" lineColor="darkRed" angle="AngleLine_A28_A41 + 180" my="-0.427499" length="Line_A28_A43/3"/>
<line typeLine="dotLine" id="190" firstPoint="81" secondPoint="189" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="191" name="c26" firstPoint="81" secondPoint="189" mx="0.198205" lineColor="black" my="-0.658193" length="CurrentLength/2"/>
<point type="normal" typeLine="dotLine" id="192" name="c28" firstPoint="108" secondPoint="189" mx="0.395942" lineColor="darkRed" angle="90" my="-0.59228" length="Line_A43_A41/3"/>
<line typeLine="dotLine" id="193" firstPoint="108" secondPoint="124" lineColor="darkRed"/>
<point type="endLine" typeLine="dotLine" id="194" name="c29" basePoint="106" mx="0.297073" lineColor="darkRed" angle="AngleLine_A43_A17a5 + 180" my="-0.460455" length="Line_A43_A41/3"/>
<line typeLine="dotLine" id="195" firstPoint="106" secondPoint="124" lineColor="darkRed"/>
<point type="normal" typeLine="dotLine" id="196" name="c30" firstPoint="106" secondPoint="194" mx="0.395942" lineColor="black" angle="90" my="-0.526368" length="Line_A41_A17a5/3"/>
<spline type="cubicBezierPath" id="197" color="darkRed" duplicate="1">
<pathPoint pSpline="81"/>
<pathPoint pSpline="191"/>
<pathPoint pSpline="189"/>
<pathPoint pSpline="108"/>
<pathPoint pSpline="192"/>
<pathPoint pSpline="194"/>
<pathPoint pSpline="106"/>
<pathPoint pSpline="196"/>
<pathPoint pSpline="188"/>
<pathPoint pSpline="124"/>
</spline>
</calculation>
<modeling>
<point type="modeling" inUse="true" id="150" idObject="92" mx="0.562249" my="-0.653962"/>
<point type="modeling" inUse="true" id="151" idObject="83" mx="0.634132" my="-0.906376"/>
<point type="modeling" inUse="true" id="152" idObject="81" mx="0.655497" my="-0.983501"/>
<point type="modeling" inUse="true" id="153" idObject="95" mx="0.279125" my="-0.543001"/>
<point type="modeling" inUse="true" id="157" idObject="84" mx="-1.79635" my="-1.18176"/>
<point type="modeling" inUse="true" id="158" idObject="87" mx="-0.161375" my="-0.851351"/>
<spline type="modelingSpline" inUse="true" id="159" idObject="103"/>
<point type="modeling" inUse="true" id="160" idObject="91" mx="-0.820793" my="-1.08102"/>
<point type="modeling" inUse="true" id="161" idObject="94" mx="-0.954275" my="-0.880717"/>
<point type="modeling" inUse="true" id="162" idObject="80" mx="-1.57043" my="-1.46574"/>
<tools type="unionDetails" inUse="true" id="164" indexD1="2" indexD2="3">
<det>
<node type="NodePoint" nodeType="Contour" idObject="157" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="158" mx="0" my="0"/>
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="159" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="160" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="161" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="162" mx="0" my="0"/>
</det>
<det>
<node type="NodePoint" nodeType="Contour" idObject="150" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="151" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="152" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="153" mx="0" my="0"/>
</det>
<children>
<child>165</child>
<child>167</child>
<child>169</child>
<child>171</child>
<child>173</child>
<child>175</child>
<child>177</child>
<child>179</child>
<child>181</child>
</children>
</tools>
<point type="modeling" inUse="true" id="166" idObject="165" idTool="164" mx="-1.79635" my="-1.18176"/>
<point type="modeling" inUse="true" id="168" idObject="167" idTool="164" mx="-0.161375" my="-0.851351"/>
<spline type="modelingSpline" inUse="true" id="170" idObject="169" idTool="164"/>
<point type="modeling" inUse="true" id="172" idObject="171" idTool="164" mx="-0.820793" my="-1.08102"/>
<point type="modeling" inUse="true" id="174" idObject="173" idTool="164" mx="0.634132" my="-0.906376"/>
<point type="modeling" inUse="true" id="176" idObject="175" idTool="164" mx="0.655497" my="-0.983501"/>
<point type="modeling" inUse="true" id="178" idObject="177" idTool="164" mx="0.279125" my="-0.543001"/>
<point type="modeling" inUse="true" id="180" idObject="179" idTool="164" mx="-1.5174" my="0.189229"/>
<point type="modeling" inUse="true" id="182" idObject="181" idTool="164" mx="-1.57043" my="-1.46574"/>
<point type="modeling" inUse="true" id="198" idObject="80" mx="-1.57043" my="-1.46574"/>
<point type="modeling" inUse="true" id="199" idObject="94" mx="-1.44115" my="-2.51837"/>
<point type="modeling" inUse="true" id="200" idObject="90" mx="-0.675292" my="0.147116"/>
<point type="modeling" inUse="true" id="201" idObject="95" mx="0.987301" my="-2.53475"/>
<point type="modeling" inUse="true" id="202" idObject="81" mx="0.655497" my="-0.983501"/>
<spline type="modelingPath" inUse="true" id="203" idObject="197"/>
<point type="modeling" inUse="true" id="204" idObject="124" mx="0.144044" my="-1.24309"/>
<point type="modeling" inUse="true" id="205" idObject="132" mx="0.159611" my="-1.01943"/>
<spline type="modelingPath" inUse="true" id="206" idObject="143"/>
<point type="modeling" inUse="true" id="207" idObject="11" mx="-2.38494" my="-0.253545"/>
<point type="modeling" inUse="true" id="208" idObject="10" mx="-1.67282" my="-0.710231"/>
<spline type="modelingSpline" inUse="true" id="209" idObject="72"/>
<point type="modeling" inUse="true" id="210" idObject="69" mx="-2.20962" my="0.264578"/>
<spline type="modelingSpline" inUse="true" id="211" idObject="156"/>
<point type="modeling" inUse="true" id="212" idObject="3" mx="-1.64399" my="-1.11279"/>
</modeling>
<details>
<detail closed="1" id="183" name="Waist Back" supplement="1" width="1" mx="-2.36866" my="-8.56189">
<data rotation="-55.2635" letter="A" fontSize="12" visible="true" width="120" mx="177.883" height="84.8309" my="-16.4239">
<mcp cutNumber="2" material="0" placement="0"/>
<mcp cutNumber="2" material="1" placement="0"/>
<mcp cutNumber="2" material="2" placement="0"/>
</data>
<patternInfo rotation="-59.2668" fontSize="12" visible="true" width="120" mx="98.565" height="61.419" my="-38.0245"/>
<node type="NodePoint" nodeType="Contour" idObject="166" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="168" mx="0" my="0"/>
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="170" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="172" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="174" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="176" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="178" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="180" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="182" mx="0" my="0"/>
</detail>
<detail closed="1" id="213" name="Back" supplement="1" width="1" mx="0" my="0">
<data rotation="0" letter="" fontSize="102" visible="false" width="285.613" mx="-20.0743" height="138.624" my="468.066"/>
<patternInfo rotation="0" fontSize="24" visible="false" width="247.137" mx="70.2595" height="167.063" my="255.613"/>
<node type="NodePoint" nodeType="Contour" idObject="198" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="199" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="200" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="201" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="202" mx="0" my="0"/>
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="203" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="204" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="205" mx="0" my="0"/>
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="206" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="207" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="208" mx="0" my="0"/>
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="209" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="210" mx="0" my="0"/>
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="211" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="212" mx="0" my="0"/>
</detail>
</details>
<groups/>
</draw>
</pattern>

View file

@ -0,0 +1,90 @@
<?xml version='1.0' encoding='UTF-8'?>
<vit>
<!--Measurements created with Valentina (http://www.valentina-project.org/).-->
<version>0.3.3</version>
<read-only>false</read-only>
<notes/>
<unit>cm</unit>
<pm_system>998</pm_system>
<personal>
<family-name/>
<given-name/>
<birth-date>1800-01-01</birth-date>
<gender>unknown</gender>
<email/>
</personal>
<body-measurements>
<m value="70.5" name="height"/>
<m value="38" name="height_hip"/>
<m value="19.5" name="height_knee"/>
<m value="2" name="height_ankle_high"/>
<m value="14.8" name="neck_circ"/>
<m value="32.8" name="highbust_circ"/>
<m value="34.9" name="bust_circ"/>
<m value="30.3" name="lowbust_circ"/>
<m value="23" name="waist_circ"/>
<m value="23" name="waist_natural_circ"/>
<m value="30" name="highhip_circ"/>
<m value="34" name="hip_circ"/>
<m value="7.2" name="neck_arc_f"/>
<m value="17.7" name="highbust_arc_f"/>
<m value="20.6" name="bust_arc_f"/>
<m value="16.8" name="lowbust_arc_f"/>
<m value="11.5" name="waist_arc_f"/>
<m value="14" name="highhip_arc_f"/>
<m value="15.3" name="hip_arc_f"/>
<m value="(neck_circ - neck_arc_f)" name="neck_arc_b"/>
<m value="(highbust_circ - highbust_arc_f)" name="highbust_arc_b"/>
<m value="(bust_circ - bust_arc_f)" name="bust_arc_b"/>
<m value="(lowbust_circ - lowbust_arc_f)" name="lowbust_arc_b"/>
<m value="(waist_circ - waist_arc_f)" name="waist_arc_b"/>
<m value="(highhip_circ - highhip_arc_f)" name="highhip_arc_b"/>
<m value="(hip_circ - hip_arc_f)" name="hip_arc_b"/>
<m value="16.7" name="neck_front_to_waist_f"/>
<m value="2.9" name="neck_front_to_highbust_f"/>
<m value="7.2" name="neck_front_to_bust_f"/>
<m value="18.9" name="neck_side_to_waist_f"/>
<m value="16.4 " name="neck_back_to_waist_b"/>
<m value="7 " name="neck_back_to_highbust_b"/>
<m value="9 " name="neck_back_to_bust_b"/>
<m value="17.5" name="neck_side_to_waist_b"/>
<m value="3.8" name="shoulder_length"/>
<m value="10.7" name="armpit_to_waist_side"/>
<m value="2.5" name="waist_to_highhip_f"/>
<m value="6.9" name="waist_to_hip_f"/>
<m value="2.5" name="waist_to_highhip_side"/>
<m value="7.5" name="waist_to_hip_side"/>
<m value="2.6" name="waist_to_highhip_b"/>
<m value="7.4" name="waist_to_hip_b"/>
<m value="0" name="waist_to_natural_waist_f"/>
<m value="12.6" name="shoulder_tip_to_shoulder_tip_f"/>
<m value="14.6" name="armfold_to_armfold_f"/>
<m value="13" name="shoulder_tip_to_shoulder_tip_b"/>
<m value="13" name="armfold_to_armfold_b"/>
<m value="4.7" name="neck_width"/>
<m value="6.5" name="bustpoint_to_bustpoint"/>
<m value="9.3" name="bustpoint_to_neck_side"/>
<m value="9.6" name="bustpoint_to_waist"/>
<m value="18.6" name="shoulder_tip_to_waist_front"/>
<m value="18" name="neck_front_to_waist_side"/>
<m value="16.7" name="shoulder_tip_to_waist_back"/>
<m value="18.2" name="neck_back_to_waist_side"/>
<m value="24.3" name="arm_shoulder_tip_to_wrist"/>
<m value="26 " name="arm_shoulder_tip_to_wrist_bent"/>
<m value="4.3" name="arm_shoulder_tip_to_armfold_line"/>
<m value="13.5" name="arm_shoulder_tip_to_elbow"/>
<m value="(arm_shoulder_tip_to_wrist - arm_shoulder_tip_to_elbow)" name="arm_elbow_to_wrist"/>
<m value="9.5" name="arm_upper_circ"/>
<m value="8" name="arm_elbow_circ"/>
<m value="5.7" name="arm_wrist_circ"/>
<m value="3.1" name="armscye_circ"/>
<m value="34.1" name="leg_crotch_to_floor"/>
<m value="45.5" name="leg_waist_side_to_floor"/>
<m value="20.3" name="leg_thigh_upper_circ"/>
<m value="12.5" name="leg_knee_circ"/>
<m value="13.9" name="leg_calf_circ"/>
<m value="8.8" name="leg_ankle_high_circ"/>
<m value="26.6" name="crotch_length"/>
<m value="11.4" name="rise_length_side_sitting"/>
</body-measurements>
</vit>

View file

@ -0,0 +1,222 @@
<?xml version='1.0' encoding='UTF-8'?>
<pattern>
<!--Pattern created with Valentina (http://www.valentina-project.org/).-->
<version>0.3.4</version>
<unit>cm</unit>
<author>S.L.Spencer</author>
<description>Men's Trousers circa 1830-1870</description>
<notes/>
<patternName>Steampunk Trousers</patternName>
<patternNumber/>
<company>Seamly</company>
<customer/>
<size/>
<showDate>true</showDate>
<showMeasurements>true</showMeasurements>
<measurements>marie_issue_#548.vit</measurements>
<increments>
<increment name="#CM_HEIGHT" description="Original pattern outseam is 112. &#xa;Use CM_HEIGHT for height formulas&#xa;" formula="leg_waist_side_to_floor/112"/>
<increment name="#CM_WIDTH" description="Original pattern's hip circumference is 102.&#xa;Use CM_WIDTH for circumference, arc, or width formulas." formula="hip_circ/102"/>
<increment name="#SCALE" description="Scale = 1/2 seat" formula="hip_circ/2"/>
<increment name="#SCALE_8" description="1/8 Scale" formula="#SCALE/8"/>
<increment name="#SCALE_4" description="1/4 Scale" formula="#SCALE/4"/>
<increment name="#HEM_WIDTH" description="Original pattern's hem width for each piece is 21.5cm" formula="21.5*#CM_WIDTH"/>
<increment name="#HEM_DEPTH" description="" formula="3.5*#CM_HEIGHT"/>
</increments>
<draw name="Front">
<calculation>
<point type="single" x="0.79" y="1.06" id="1" name="A0" mx="-1.58602" my="-0.622091"/>
<point type="endLine" typeLine="none" id="2" name="A1" basePoint="1" mx="-1.62896" lineColor="black" angle="270" my="-0.59059" length="4*#CM_HEIGHT"/>
<point type="alongLine" typeLine="hair" id="3" name="A2" firstPoint="1" secondPoint="2" mx="-1.64399" lineColor="blue" my="-1.11279" length="waist_to_hip_f"/>
<point type="alongLine" typeLine="dotLine" id="4" name="A3" firstPoint="1" secondPoint="2" mx="0.0462226" lineColor="black" my="0.130965" length="rise_length_side_sitting"/>
<point type="endLine" typeLine="dotLine" id="5" name="A4" basePoint="4" mx="-0.704107" lineColor="black" angle="270" my="-1.40822" length="leg_crotch_to_floor/2 - 5*#CM_HEIGHT"/>
<point type="alongLine" typeLine="dotLine" id="6" name="A5" firstPoint="4" secondPoint="5" mx="-0.881496" lineColor="black" my="-0.104292" length="leg_crotch_to_floor"/>
<point type="alongLine" typeLine="none" id="7" name="A6" firstPoint="2" secondPoint="3" mx="-1.74714" lineColor="black" my="-0.433492" length="CurrentLength/2"/>
<point type="normal" typeLine="dotLine" id="8" name="A7" firstPoint="4" secondPoint="3" mx="-3.2506" lineColor="black" angle="0" my="-1.09024" length="#SCALE_8 + 0.5*#CM_WIDTH"/>
<point type="normal" typeLine="hair" id="9" name="A8" firstPoint="4" secondPoint="8" mx="-2.21797" lineColor="black" angle="225" my="-1.23279" length="Line_A3_A7/2"/>
<point type="normal" typeLine="none" id="10" name="A9" firstPoint="5" secondPoint="4" mx="-1.67282" lineColor="black" angle="0" my="-0.710231" length="4*#CM_WIDTH"/>
<point type="normal" typeLine="dotLine" id="11" name="A10" firstPoint="6" secondPoint="5" mx="-2.38494" lineColor="black" angle="0" my="-0.253545" length="2.5*#CM_WIDTH"/>
<line typeLine="hair" id="12" firstPoint="11" secondPoint="10" lineColor="blue"/>
<point type="lineIntersectAxis" typeLine="dotLine" id="13" name="A11" basePoint="10" p2Line="4" mx="-3.95279" lineColor="black" angle="AngleLine_A10_A9" my="-2.39343" p1Line="8"/>
<point type="alongLine" typeLine="none" id="14" name="c1" firstPoint="8" secondPoint="4" mx="-0.549983" lineColor="black" my="0.176842" length="0.6*CurrentLength"/>
<point type="alongLine" typeLine="none" id="15" name="c2" firstPoint="3" secondPoint="4" mx="0.454481" lineColor="black" my="-0.594587" length="0.6*CurrentLength"/>
<spline point4="3" type="cubicBezier" id="16" color="blue" point1="8" point2="14" point3="15"/>
<point type="alongLine" typeLine="none" id="17" name="c3" firstPoint="10" secondPoint="13" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength/2"/>
<line typeLine="dotLine" id="18" firstPoint="8" secondPoint="17" lineColor="black"/>
<point type="alongLine" typeLine="none" id="19" name="c4" firstPoint="8" secondPoint="17" mx="0.188052" lineColor="black" my="-1.0179" length="CurrentLength/2"/>
<spline point4="8" type="cubicBezier" id="20" color="blue" point1="10" point2="17" point3="19"/>
<point type="normal" typeLine="hair" id="21" name="A12" firstPoint="2" secondPoint="7" mx="0.790977" lineColor="blue" angle="0" my="0.202702" length="waist_arc_f/2"/>
<point type="normal" typeLine="hair" id="22" name="A13" firstPoint="1" secondPoint="2" mx="0.0434438" lineColor="blue" angle="0" my="-0.287348" length="Line_A1_A12 + 0.5*#CM_WIDTH"/>
<line typeLine="hair" id="23" firstPoint="22" secondPoint="21" lineColor="blue"/>
<point type="normal" typeLine="dotLine" id="24" name="A14" firstPoint="7" secondPoint="3" mx="-1.69342" lineColor="black" angle="0" my="-0.0141612" length="highhip_arc_f/2"/>
<point type="normal" typeLine="dotLine" id="25" name="A15" firstPoint="3" secondPoint="4" mx="-1.7388" lineColor="black" angle="0" my="-0.783532" length="hip_arc_f/2"/>
<point type="normal" typeLine="dotLine" id="26" name="A16" firstPoint="4" secondPoint="5" mx="-1.67726" lineColor="black" angle="0" my="-0.0213748" length="leg_thigh_upper_circ/2 - Line_A3_A7"/>
<point type="alongLine" typeLine="dotLine" id="27" name="A17" firstPoint="10" secondPoint="5" mx="-1.40626" lineColor="black" my="-1.09748" length="leg_knee_circ/2"/>
<line typeLine="hair" id="28" firstPoint="5" secondPoint="27" lineColor="yellow"/>
<point type="normal" typeLine="dotLine" id="29" name="A18" firstPoint="6" secondPoint="5" mx="-1.20636" lineColor="black" angle="180" my="-0.172528" length="Line_A4_A17 - 1*#CM_WIDTH"/>
<line typeLine="hair" id="30" firstPoint="29" secondPoint="27" lineColor="blue"/>
<line typeLine="dotLine" id="31" firstPoint="26" secondPoint="27" lineColor="black"/>
<line typeLine="dotLine" id="32" firstPoint="25" secondPoint="27" lineColor="black"/>
<line typeLine="dotLine" id="33" firstPoint="24" secondPoint="26" lineColor="black"/>
<line typeLine="dotLine" id="34" firstPoint="21" secondPoint="25" lineColor="black"/>
<line typeLine="dotLine" id="35" firstPoint="21" secondPoint="24" lineColor="black"/>
<line typeLine="dotLine" id="36" firstPoint="24" secondPoint="25" lineColor="black"/>
<line typeLine="dotLine" id="37" firstPoint="25" secondPoint="26" lineColor="black"/>
<point type="endLine" typeLine="dotLine" id="38" name="c6" basePoint="24" mx="-1.69019" lineColor="black" angle="AngleLine_A12_A15 +180" my="-0.51726" length="Line_A12_A14/3"/>
<line typeLine="dotLine" id="39" firstPoint="21" secondPoint="38" lineColor="black"/>
<point type="alongLine" typeLine="none" id="40" name="c5" firstPoint="21" secondPoint="38" mx="-1.57569" lineColor="blue" my="-0.511301" length="CurrentLength/2"/>
<point type="normal" typeLine="dotLine" id="42" name="c7" firstPoint="24" secondPoint="38" mx="0.278998" lineColor="black" angle="90" my="-0.76236" length="Line_A14_A15/3"/>
<point type="endLine" typeLine="dotLine" id="43" name="c8" basePoint="25" mx="0.389028" lineColor="black" angle="AngleLine_A14_A16 + 180" my="-0.615654" length="Line_A14_A15/3"/>
<point type="normal" typeLine="dotLine" id="45" name="c9" firstPoint="25" secondPoint="43" mx="0.487321" lineColor="black" angle="90" my="-0.800503" length="Line_A15_A16/3"/>
<point type="endLine" typeLine="dotLine" id="46" name="c10" basePoint="26" mx="0.132292" lineColor="black" angle="AngleLine_A15_A17 +180" my="0.264583" length="Line_A15_A16/3"/>
<point type="alongLine" typeLine="none" id="52" name="A19" firstPoint="8" secondPoint="26" mx="-0.711268" lineColor="black" my="0.227906" length="CurrentLength/2"/>
<point type="lineIntersectAxis" typeLine="dotLine" id="53" name="A20" basePoint="52" p2Line="22" mx="-1.32463" lineColor="black" angle="90" my="0.454218" p1Line="1"/>
<point type="lineIntersectAxis" typeLine="dotLine" id="54" name="A21" basePoint="52" p2Line="29" mx="-0.78977" lineColor="black" angle="270" my="0.0729758" p1Line="6"/>
<point type="alongLine" typeLine="none" id="55" name="A22" firstPoint="11" secondPoint="29" mx="-1.59167" lineColor="black" my="0.00473358" length="CurrentLength/2"/>
<point type="normal" typeLine="dotLine" id="56" name="A23" firstPoint="55" secondPoint="29" mx="-1.11031" lineColor="black" angle="0" my="-1.82121" length="2*#CM_HEIGHT"/>
<point type="normal" typeLine="dotLine" id="57" name="c14" firstPoint="56" secondPoint="55" mx="-0.373055" lineColor="black" angle="0" my="-2.26167" length="Line_A5_A18/4"/>
<line typeLine="dotLine" id="58" firstPoint="29" secondPoint="57" lineColor="black"/>
<point type="alongLine" typeLine="none" id="59" name="c13" firstPoint="29" secondPoint="57" mx="0.026228" lineColor="black" my="-1.44578" length="CurrentLength/2"/>
<spline point4="56" type="cubicBezier" id="60" color="blue" point1="29" point2="59" point3="57"/>
<point type="normal" typeLine="dotLine" id="61" name="c15" firstPoint="56" secondPoint="57" mx="-1.82037" lineColor="black" angle="90" my="-1.95435" length="Line_A23_c14"/>
<line typeLine="dotLine" id="62" firstPoint="11" secondPoint="61" lineColor="black"/>
<point type="alongLine" typeLine="none" id="63" name="c16" firstPoint="11" secondPoint="61" mx="-2.21977" lineColor="black" my="-1.24429" length="CurrentLength/2"/>
<spline point4="11" type="cubicBezier" id="64" color="blue" point1="56" point2="61" point3="63"/>
<point type="normal" typeLine="dotLine" id="65" name="c11" firstPoint="26" secondPoint="46" mx="0.132292" lineColor="black" angle="90" my="0.264583" length="Line_A16_A17/3"/>
<point type="normal" typeLine="dotLine" id="66" name="c12" firstPoint="27" secondPoint="59" mx="-1.69256" lineColor="black" angle="90" my="-0.143966" length="Line_A16_A17/3"/>
<point type="endLine" typeLine="dotLine" id="69" name="A24" basePoint="8" mx="-2.20962" lineColor="black" angle="180" my="0.264578" length="3*#CM_WIDTH"/>
<line typeLine="dotLine" id="70" firstPoint="69" secondPoint="17" lineColor="black"/>
<point type="alongLine" typeLine="none" id="71" name="c17" firstPoint="69" secondPoint="17" mx="-2.09811" lineColor="black" my="-0.794856" length="CurrentLength/2"/>
<spline point4="69" type="cubicBezier" id="72" color="darkRed" point1="10" point2="17" point3="71"/>
<point type="alongLine" typeLine="none" id="73" name="A25" firstPoint="7" secondPoint="24" mx="0.132292" lineColor="black" my="0.264583" length="2*#CM_WIDTH"/>
<point type="alongLine" typeLine="none" id="74" name="A26" firstPoint="1" secondPoint="22" mx="-2.99027" lineColor="black" my="-1.96581" length="5*#CM_WIDTH"/>
<line typeLine="hair" id="75" firstPoint="3" secondPoint="73" lineColor="darkRed"/>
<line typeLine="hair" id="76" firstPoint="73" secondPoint="74" lineColor="darkRed"/>
<line typeLine="hair" id="77" firstPoint="3" secondPoint="4" lineColor="yellow"/>
<point type="normal" typeLine="dotLine" id="78" name="c18" firstPoint="3" secondPoint="73" mx="-2.04235" lineColor="black" angle="90" my="-1.46398" length="Line_A2_A3/2"/>
<point type="normal" typeLine="hair" id="80" name="A27" firstPoint="74" secondPoint="73" mx="-1.57043" lineColor="darkRed" angle="90" my="-1.46574" length="2*#CM_HEIGHT"/>
<point type="shoulder" typeLine="dotLine" id="81" name="A28" p2Line="21" pShoulder="80" mx="0.655497" lineColor="darkRed" my="-0.983501" length="waist_arc_b/2 + 2*#CM_WIDTH" p1Line="2"/>
<line typeLine="hair" id="82" firstPoint="80" secondPoint="81" lineColor="darkRed"/>
<point type="endLine" typeLine="hair" id="83" name="A29" basePoint="81" mx="0.634132" lineColor="darkRed" angle="AngleLine_A13_A12 + 180" my="-0.906376" length="Line_A13_A12"/>
<point type="normal" typeLine="hair" id="84" name="A30" firstPoint="80" secondPoint="74" mx="-1.79635" lineColor="darkRed" angle="90" my="-1.18176" length="5*#CM_HEIGHT"/>
<line typeLine="dotLine" id="85" firstPoint="84" secondPoint="83" lineColor="black"/>
<point type="alongLine" typeLine="none" id="86" name="A31" firstPoint="84" secondPoint="83" mx="-1.37323" lineColor="black" my="0.153063" length="4.5*#CM_WIDTH"/>
<point type="normal" typeLine="dotLine" id="87" name="A32" firstPoint="86" secondPoint="84" mx="-0.161375" lineColor="black" angle="180" my="-0.851351" length="2.5*#CM_HEIGHT"/>
<line typeLine="hair" id="88" firstPoint="84" secondPoint="87" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="89" name="A33" firstPoint="83" secondPoint="86" mx="0.0803721" lineColor="black" my="-1.27418" length="CurrentLength/3"/>
<point type="normal" typeLine="dotLine" id="90" name="A34" firstPoint="89" secondPoint="86" mx="-0.675292" lineColor="darkRed" angle="0" my="0.147116" length="11.5*#CM_HEIGHT"/>
<point type="alongLine" typeLine="none" id="91" name="A35" firstPoint="89" secondPoint="86" mx="-0.820793" lineColor="black" my="-1.08102" length="0.65*#CM_WIDTH"/>
<point type="alongLine" typeLine="none" id="92" name="A36" firstPoint="89" secondPoint="83" mx="0.562249" lineColor="black" my="-0.653962" length="0.65*#CM_WIDTH"/>
<point type="lineIntersect" id="93" name="A37" p2Line1="81" p2Line2="90" p1Line1="80" p1Line2="89" mx="-0.851496" my="0.132434"/>
<point type="alongLine" typeLine="none" id="94" name="A38" firstPoint="93" secondPoint="80" mx="-0.954275" lineColor="black" my="-0.880717" length="1*#CM_WIDTH"/>
<point type="alongLine" typeLine="none" id="95" name="A39" firstPoint="93" secondPoint="81" mx="0.279125" lineColor="black" my="-0.543001" length="1*#CM_WIDTH"/>
<line typeLine="hair" id="96" firstPoint="90" secondPoint="94" lineColor="darkRed"/>
<line typeLine="hair" id="97" firstPoint="90" secondPoint="95" lineColor="darkRed"/>
<line typeLine="hair" id="98" firstPoint="94" secondPoint="91" lineColor="darkRed"/>
<line typeLine="hair" id="99" firstPoint="95" secondPoint="92" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="100" name="c20" firstPoint="91" secondPoint="86" mx="-0.954274" lineColor="black" my="0.000282963" length="Line_A30_A29/6"/>
<line typeLine="dotLine" id="101" firstPoint="87" secondPoint="100" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="102" name="c19" firstPoint="87" secondPoint="100" mx="0.146975" lineColor="black" my="-0.866034" length="CurrentLength/2"/>
<spline point4="91" type="cubicBezier" id="103" color="darkRed" point1="87" point2="102" point3="100"/>
<line typeLine="hair" id="104" firstPoint="92" secondPoint="83" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="105" name="A40" firstPoint="80" secondPoint="3" mx="0.294622" lineColor="black" my="-0.763509" length="waist_to_hip_b"/>
<point type="normal" typeLine="dotLine" id="106" name="A41" firstPoint="105" secondPoint="80" mx="0.346177" lineColor="darkRed" angle="180" my="-0.529413" length="hip_arc_b/2"/>
<point type="alongLine" typeLine="none" id="107" name="A42" firstPoint="80" secondPoint="105" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength/2"/>
<point type="normal" typeLine="dotLine" id="108" name="A43" firstPoint="107" secondPoint="105" mx="0.502885" lineColor="black" angle="0" my="-0.53312" length="highhip_arc_b/2"/>
<line typeLine="hair" id="110" firstPoint="29" secondPoint="93" lineColor="yellow"/>
<line typeLine="hair" id="111" firstPoint="29" secondPoint="81" lineColor="yellow"/>
<operation type="rotation" suffix="a5" id="123" center="29" angle="-(AngleLine_A18_A37 - AngleLine_A18_A28)">
<source>
<item idObject="27"/>
</source>
<destination>
<item idObject="124" mx="0.144044" my="-1.24309"/>
</destination>
</operation>
<spline type="cubicBezierPath" id="129" color="blue">
<pathPoint pSpline="21"/>
<pathPoint pSpline="40"/>
<pathPoint pSpline="38"/>
<pathPoint pSpline="24"/>
<pathPoint pSpline="42"/>
<pathPoint pSpline="43"/>
<pathPoint pSpline="25"/>
<pathPoint pSpline="45"/>
<pathPoint pSpline="46"/>
<pathPoint pSpline="26"/>
<pathPoint pSpline="65"/>
<pathPoint pSpline="66"/>
<pathPoint pSpline="27"/>
</spline>
<line typeLine="dotLine" id="131" firstPoint="27" secondPoint="124" lineColor="black"/>
<point type="lineIntersectAxis" typeLine="hair" id="132" name="A44" basePoint="124" p2Line="29" mx="0.159611" lineColor="darkRed" angle="AngleLine_A18_A17" my="-1.01943" p1Line="11"/>
<point type="endLine" typeLine="dotLine" id="133" name="A45" basePoint="132" mx="0.268889" lineColor="darkRed" angle="270" my="-0.445722" length="2*#CM_HEIGHT"/>
<point type="endLine" typeLine="dotLine" id="134" name="A46" basePoint="11" mx="0.132292" lineColor="darkRed" angle="270" my="0.264583" length="2*#CM_HEIGHT"/>
<line typeLine="dotLine" id="135" firstPoint="134" secondPoint="133" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="136" name="A47" firstPoint="133" secondPoint="134" mx="-0.681943" lineColor="black" my="0.756516" length="CurrentLength/2"/>
<point type="alongLine" typeLine="none" id="137" name="c22" firstPoint="136" secondPoint="133" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength/3"/>
<line typeLine="dotLine" id="138" firstPoint="132" secondPoint="137" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="139" name="c21" firstPoint="132" secondPoint="137" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength/2"/>
<point type="alongLine" typeLine="none" id="140" name="c23" firstPoint="136" secondPoint="134" mx="-0.410531" lineColor="black" my="0.230657" length="CurrentLength/3"/>
<line typeLine="dotLine" id="141" firstPoint="11" secondPoint="140" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="142" name="c24" firstPoint="11" secondPoint="140" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength/2"/>
<spline type="cubicBezierPath" id="143" color="darkRed">
<pathPoint pSpline="132"/>
<pathPoint pSpline="139"/>
<pathPoint pSpline="137"/>
<pathPoint pSpline="136"/>
<pathPoint pSpline="142"/>
<pathPoint pSpline="142"/>
<pathPoint pSpline="11"/>
</spline>
<point type="cutSpline" id="155" name="A48" spline="72" mx="0.132292" my="0.264583" length="Spl_A9_A7"/>
<spline point4="3" type="cubicBezier" id="156" color="darkRed" point1="155" point2="14" point3="78"/>
<line typeLine="dotLine" id="184" firstPoint="81" secondPoint="108" lineColor="darkRed"/>
<line typeLine="dotLine" id="185" firstPoint="81" secondPoint="106" lineColor="darkRed"/>
<line typeLine="dotLine" id="186" firstPoint="108" secondPoint="106" lineColor="darkRed"/>
<line typeLine="dotLine" id="187" firstPoint="108" secondPoint="124" lineColor="darkRed"/>
<point type="endLine" typeLine="dotLine" id="188" name="c31" basePoint="124" mx="0.241238" lineColor="darkRed" angle="AngleLine_A17a5_A44 + 180" my="0.0466903" length="Line_A17_c12"/>
<point type="endLine" typeLine="dotLine" id="189" name="c27" basePoint="108" mx="0.198205" lineColor="darkRed" angle="AngleLine_A28_A41 + 180" my="-0.427499" length="Line_A28_A43/3"/>
<line typeLine="dotLine" id="190" firstPoint="81" secondPoint="189" lineColor="darkRed"/>
<point type="alongLine" typeLine="none" id="191" name="c26" firstPoint="81" secondPoint="189" mx="0.198205" lineColor="black" my="-0.658193" length="CurrentLength/2"/>
<point type="normal" typeLine="dotLine" id="192" name="c28" firstPoint="108" secondPoint="189" mx="0.395942" lineColor="darkRed" angle="90" my="-0.59228" length="Line_A43_A41/3"/>
<line typeLine="dotLine" id="193" firstPoint="108" secondPoint="124" lineColor="darkRed"/>
<point type="endLine" typeLine="dotLine" id="194" name="c29" basePoint="106" mx="0.297073" lineColor="darkRed" angle="AngleLine_A43_A17a5 + 180" my="-0.460455" length="Line_A43_A41/3"/>
<line typeLine="dotLine" id="195" firstPoint="106" secondPoint="124" lineColor="darkRed"/>
<point type="normal" typeLine="dotLine" id="196" name="c30" firstPoint="106" secondPoint="194" mx="0.395942" lineColor="black" angle="90" my="-0.526368" length="Line_A41_A17a5/3"/>
<spline type="cubicBezierPath" id="197" color="darkRed" duplicate="1">
<pathPoint pSpline="81"/>
<pathPoint pSpline="191"/>
<pathPoint pSpline="189"/>
<pathPoint pSpline="108"/>
<pathPoint pSpline="192"/>
<pathPoint pSpline="194"/>
<pathPoint pSpline="106"/>
<pathPoint pSpline="196"/>
<pathPoint pSpline="188"/>
<pathPoint pSpline="124"/>
</spline>
</calculation>
<modeling>
<point type="modeling" inUse="true" id="198" idObject="80" mx="-1.57043" my="-1.46574"/>
<point type="modeling" inUse="true" id="199" idObject="94" mx="-1.44115" my="-2.51837"/>
<point type="modeling" inUse="true" id="200" idObject="90" mx="-0.675292" my="0.147116"/>
<point type="modeling" inUse="true" id="201" idObject="95" mx="0.987301" my="-2.53475"/>
<point type="modeling" inUse="true" id="202" idObject="81" mx="0.655497" my="-0.983501"/>
<point type="modeling" inUse="true" id="212" idObject="3" mx="-1.64399" my="-1.11279"/>
</modeling>
<details>
<detail closed="1" id="213" name="Back" forbidFlipping="1" supplement="1" width="2" mx="0" my="0">
<data rotation="0" letter="" fontSize="102" visible="false" mx="-20.0743" width="285.613" my="468.066" height="138.624"/>
<patternInfo rotation="0" fontSize="24" visible="false" mx="70.2595" width="247.137" my="255.613" height="167.063"/>
<node type="NodePoint" nodeType="Contour" idObject="199" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="200" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="201" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="202" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="212" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="198" mx="0" my="0"/>
</detail>
</details>
<groups/>
</draw>
</pattern>

View file

@ -0,0 +1,90 @@
<?xml version='1.0' encoding='UTF-8'?>
<vit>
<!--Measurements created with Valentina (http://www.valentina-project.org/).-->
<version>0.3.3</version>
<read-only>false</read-only>
<notes/>
<unit>cm</unit>
<pm_system>998</pm_system>
<personal>
<family-name/>
<given-name/>
<birth-date>1800-01-01</birth-date>
<gender>unknown</gender>
<email/>
</personal>
<body-measurements>
<m value="70.5" name="height"/>
<m value="38" name="height_hip"/>
<m value="19.5" name="height_knee"/>
<m value="2" name="height_ankle_high"/>
<m value="14.8" name="neck_circ"/>
<m value="32.8" name="highbust_circ"/>
<m value="34.9" name="bust_circ"/>
<m value="30.3" name="lowbust_circ"/>
<m value="23" name="waist_circ"/>
<m value="23" name="waist_natural_circ"/>
<m value="30" name="highhip_circ"/>
<m value="34" name="hip_circ"/>
<m value="7.2" name="neck_arc_f"/>
<m value="17.7" name="highbust_arc_f"/>
<m value="20.6" name="bust_arc_f"/>
<m value="16.8" name="lowbust_arc_f"/>
<m value="11.5" name="waist_arc_f"/>
<m value="14" name="highhip_arc_f"/>
<m value="15.3" name="hip_arc_f"/>
<m value="(neck_circ - neck_arc_f)" name="neck_arc_b"/>
<m value="(highbust_circ - highbust_arc_f)" name="highbust_arc_b"/>
<m value="(bust_circ - bust_arc_f)" name="bust_arc_b"/>
<m value="(lowbust_circ - lowbust_arc_f)" name="lowbust_arc_b"/>
<m value="(waist_circ - waist_arc_f)" name="waist_arc_b"/>
<m value="(highhip_circ - highhip_arc_f)" name="highhip_arc_b"/>
<m value="(hip_circ - hip_arc_f)" name="hip_arc_b"/>
<m value="16.7" name="neck_front_to_waist_f"/>
<m value="2.9" name="neck_front_to_highbust_f"/>
<m value="7.2" name="neck_front_to_bust_f"/>
<m value="18.9" name="neck_side_to_waist_f"/>
<m value="16.4 " name="neck_back_to_waist_b"/>
<m value="7 " name="neck_back_to_highbust_b"/>
<m value="9 " name="neck_back_to_bust_b"/>
<m value="17.5" name="neck_side_to_waist_b"/>
<m value="3.8" name="shoulder_length"/>
<m value="10.7" name="armpit_to_waist_side"/>
<m value="2.5" name="waist_to_highhip_f"/>
<m value="6.9" name="waist_to_hip_f"/>
<m value="2.5" name="waist_to_highhip_side"/>
<m value="7.5" name="waist_to_hip_side"/>
<m value="2.6" name="waist_to_highhip_b"/>
<m value="7.4" name="waist_to_hip_b"/>
<m value="0" name="waist_to_natural_waist_f"/>
<m value="12.6" name="shoulder_tip_to_shoulder_tip_f"/>
<m value="14.6" name="armfold_to_armfold_f"/>
<m value="13" name="shoulder_tip_to_shoulder_tip_b"/>
<m value="13" name="armfold_to_armfold_b"/>
<m value="4.7" name="neck_width"/>
<m value="6.5" name="bustpoint_to_bustpoint"/>
<m value="9.3" name="bustpoint_to_neck_side"/>
<m value="9.6" name="bustpoint_to_waist"/>
<m value="18.6" name="shoulder_tip_to_waist_front"/>
<m value="18" name="neck_front_to_waist_side"/>
<m value="16.7" name="shoulder_tip_to_waist_back"/>
<m value="18.2" name="neck_back_to_waist_side"/>
<m value="24.3" name="arm_shoulder_tip_to_wrist"/>
<m value="26 " name="arm_shoulder_tip_to_wrist_bent"/>
<m value="4.3" name="arm_shoulder_tip_to_armfold_line"/>
<m value="13.5" name="arm_shoulder_tip_to_elbow"/>
<m value="(arm_shoulder_tip_to_wrist - arm_shoulder_tip_to_elbow)" name="arm_elbow_to_wrist"/>
<m value="9.5" name="arm_upper_circ"/>
<m value="8" name="arm_elbow_circ"/>
<m value="5.7" name="arm_wrist_circ"/>
<m value="3.1" name="armscye_circ"/>
<m value="34.1" name="leg_crotch_to_floor"/>
<m value="45.5" name="leg_waist_side_to_floor"/>
<m value="20.3" name="leg_thigh_upper_circ"/>
<m value="12.5" name="leg_knee_circ"/>
<m value="13.9" name="leg_calf_circ"/>
<m value="8.8" name="leg_ankle_high_circ"/>
<m value="26.6" name="crotch_length"/>
<m value="11.4" name="rise_length_side_sitting"/>
</body-measurements>
</vit>

View file

@ -226,7 +226,10 @@ QVector<QPointF> VAbstractDetail::Equidistant(const QVector<QPointF> &points, co
}
if (i == p.size()-1 && eqv == EquidistantType::CloseEquidistant)
{//last point, polyline closed
ekvPoints.append(ekvPoints.at(0));
if (not ekvPoints.isEmpty())
{
ekvPoints.append(ekvPoints.at(0));
}
continue;
}
else if (i == p.size()-1 && eqv == EquidistantType::OpenEquidistant)
@ -238,25 +241,35 @@ QVector<QPointF> VAbstractDetail::Equidistant(const QVector<QPointF> &points, co
//points in the middle of polyline
ekvPoints<<EkvPoint(QLineF(p.at(i-1), p.at(i)), QLineF(p.at(i+1), p.at(i)), width);
}
ekvPoints = CheckLoops(ekvPoints);//Result path can contain loops
bool removeFirstAndLast = true;
if (eqv == EquidistantType::CloseEquidistant)
{
removeFirstAndLast = false;
}
ekvPoints = CheckLoops(CorrectEquidistantPoints(ekvPoints, removeFirstAndLast));//Result path can contain loops
return ekvPoints;
}
//---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> VAbstractDetail::RemoveDublicates(const QVector<QPointF> &points)
QVector<QPointF> VAbstractDetail::RemoveDublicates(const QVector<QPointF> &points, bool removeFirstAndLast)
{
QVector<QPointF> p = points;
if (not p.isEmpty() && p.size() > 1)
if (removeFirstAndLast)
{
// Path can't be closed
if (p.first() == p.last())
if (not p.isEmpty() && p.size() > 1)
{
#if QT_VERSION < QT_VERSION_CHECK(5, 1, 0)
p.remove(p.size() - 1);
#else
p.removeLast();
#endif
// Path can't be closed
if (p.first() == p.last())
{
#if QT_VERSION < QT_VERSION_CHECK(5, 1, 0)
p.remove(p.size() - 1);
#else
p.removeLast();
#endif
}
}
}
@ -264,6 +277,11 @@ QVector<QPointF> VAbstractDetail::RemoveDublicates(const QVector<QPointF> &point
{
if (p.at(i) == p.at(i+1))
{
if (not removeFirstAndLast && (i == p.size()-1))
{
continue;
}
p.erase(p.begin() + i + 1);
--i;
continue;
@ -279,7 +297,7 @@ QVector<QPointF> VAbstractDetail::RemoveDublicates(const QVector<QPointF> &point
* @param points list of points equdistant.
* @return corrected list.
*/
QVector<QPointF> VAbstractDetail::CorrectEquidistantPoints(const QVector<QPointF> &points)
QVector<QPointF> VAbstractDetail::CorrectEquidistantPoints(const QVector<QPointF> &points, bool removeFirstAndLast)
{
if (points.size()<4)//Better don't check if only three points. We can destroy equidistant.
{
@ -288,12 +306,13 @@ QVector<QPointF> VAbstractDetail::CorrectEquidistantPoints(const QVector<QPointF
}
//Clear equivalent points
QVector<QPointF> correctPoints = RemoveDublicates(points);
QVector<QPointF> correctPoints = RemoveDublicates(points, removeFirstAndLast);
if (correctPoints.size()<3)
{
return correctPoints;
}
//Remove point on line
for (qint32 i = 1; i <correctPoints.size()-1; ++i)
{// In this case we alwayse will have bounded intersection, so all is need is to check if point i is on line.
@ -303,6 +322,7 @@ QVector<QPointF> VAbstractDetail::CorrectEquidistantPoints(const QVector<QPointF
correctPoints.remove(i);
}
}
return correctPoints;
}
@ -322,9 +342,11 @@ QVector<QPointF> VAbstractDetail::CheckLoops(const QVector<QPointF> &points)
return points;
}
const bool pathClosed = (points.first() == points.last());
QVector<QPointF> ekvPoints;
qint32 i, j;
qint32 i, j, jNext = 0;
for (i = 0; i < count; ++i)
{
/*Last three points no need check.*/
@ -344,8 +366,20 @@ QVector<QPointF> VAbstractDetail::CheckLoops(const QVector<QPointF> &points)
// That's why we parse from the end
for (j = count-1; j >= i+2; --j)
{
QLineF line2;
j == count-1 ? line2 = QLineF(points.at(j), points.at(0)) : line2 = QLineF(points.at(j), points.at(j+1));
j == count-1 ? jNext = 0 : jNext = j+1;
QLineF line2(points.at(j), points.at(jNext));
if(qFuzzyIsNull(line2.length()))
{//If a path is closed the edge (count-1;0) length will be 0
continue;
}
QSet<qint32> uniqueVertices;
uniqueVertices << i << i+1 << j;
// For closed path last point is equal to first. Using index of the first.
pathClosed && jNext == count-1 ? uniqueVertices << 0 : uniqueVertices << jNext;
const QLineF::IntersectType intersect = line1.intersect(line2, &crosPoint);
if (intersect == QLineF::NoIntersection)
@ -353,11 +387,12 @@ QVector<QPointF> VAbstractDetail::CheckLoops(const QVector<QPointF> &points)
// i.e. they are parallel. But parallel also mean they can be on the same line.
// Method IsPointOnLineviaPDP will check it.
if (VGObject::IsPointOnLineviaPDP(points.at(j), points.at(i), points.at(i+1))
// Next cases are valid for us.
&& line1.p2() != line2.p2()
&& line1.p1() != line2.p1()
&& line1.p2() != line2.p1()
&& line1.p1() != line2.p2())
// Lines are not neighbors
&& uniqueVertices.size() == 4
&& line1.p2() != line2.p2()
&& line1.p1() != line2.p1()
&& line1.p2() != line2.p1()
&& line1.p1() != line2.p2())
{
// Left to catch case where segments are on the same line, but do not have real intersections.
QLineF tmpLine1 = line1;
@ -380,11 +415,14 @@ QVector<QPointF> VAbstractDetail::CheckLoops(const QVector<QPointF> &points)
}
}
}
else if (intersect == QLineF::BoundedIntersection && not (i == 0 && j == count-1))
{ // Break, but not if intersects the first edge and the last edge in closed path
if (line1.p1() != crosPoint && line1.p2() != crosPoint &&
line2.p1() != crosPoint && line2.p2() != crosPoint)
{ // Break, but not if loop creates crosPoint when it is first or last point of lines
else if (intersect == QLineF::BoundedIntersection)
{
if (uniqueVertices.size() == 4
&& line1.p1() != crosPoint
&& line1.p2() != crosPoint
&& line2.p1() != crosPoint
&& line2.p2() != crosPoint)
{ // Break, but not if lines are neighbors
status = BoundedIntersection;
break;
}
@ -396,10 +434,10 @@ QVector<QPointF> VAbstractDetail::CheckLoops(const QVector<QPointF> &points)
{
case ParallelIntersection:
/*We have found a loop.*/
// Theoretically there is no big difference which point j or j+1 to select.
// Theoretically there is no big difference which point j or jNext to select.
// In the end we will draw a line in any case.
ekvPoints.append(points.at(i));
ekvPoints.append(points.at(j+1));
ekvPoints.append(points.at(jNext));
i = j;
break;
case BoundedIntersection:
@ -440,8 +478,8 @@ QVector<QPointF> VAbstractDetail::EkvPoint(const QLineF &line1, const QLineF &li
return QVector<QPointF>();
}
QPointF CrosPoint;
QLineF bigLine1 = ParallelLine(line1, width );
QLineF bigLine2 = ParallelLine(QLineF(line2.p2(), line2.p1()), width );
const QLineF bigLine1 = ParallelLine(line1, width );
const QLineF bigLine2 = ParallelLine(QLineF(line2.p2(), line2.p1()), width );
QLineF::IntersectType type = bigLine1.intersect( bigLine2, &CrosPoint );
switch (type)
{
@ -451,7 +489,13 @@ QVector<QPointF> VAbstractDetail::EkvPoint(const QLineF &line1, const QLineF &li
break;
case (QLineF::UnboundedIntersection):
{
QLineF line( line1.p2(), CrosPoint );
QLineF line( line1.p2(), CrosPoint );
const int angle1 = BisectorAngle(line1.p1(), line1.p2(), line2.p1());
const int angle2 = BisectorAngle(bigLine1.p1(), CrosPoint, bigLine2.p2());
if (angle1 == angle2)
{//Regular equdistant case
const qreal length = line.length();
if (length > width*2.4)
{ // Cutting too long a cut angle
@ -482,6 +526,18 @@ QVector<QPointF> VAbstractDetail::EkvPoint(const QLineF &line1, const QLineF &li
points.append(CrosPoint);
return points;
}
}
else
{// Dart. Ignore if going outside of equdistant
const QLineF bigEdge = ParallelLine(QLineF(line1.p1(), line2.p1()), width );
QPointF px;
const QLineF::IntersectType type = bigEdge.intersect(line, &px);
if (type != QLineF::BoundedIntersection)
{
points.append(CrosPoint);
return points;
}
}
break;
}
case (QLineF::NoIntersection):
@ -587,6 +643,30 @@ QPointF VAbstractDetail::SingleParallelPoint(const QLineF &line, const qreal &an
return pLine.p2();
}
//---------------------------------------------------------------------------------------------------------------------
int VAbstractDetail::BisectorAngle(const QPointF &p1, const QPointF &p2, const QPointF &p3)
{
QLineF line1(p2, p1);
QLineF line2(p2, p3);
QLineF bLine;
const qreal angle1 = line1.angleTo(line2);
const qreal angle2 = line2.angleTo(line1);
if (angle1 <= angle2)
{
bLine = line1;
bLine.setAngle(bLine.angle() + angle1/2.0);
}
else
{
bLine = line2;
bLine.setAngle(bLine.angle() + angle2/2.0);
}
return qRound(bLine.angle());
}
//---------------------------------------------------------------------------------------------------------------------
qreal VAbstractDetail::SumTrapezoids(const QVector<QPointF> &points)
{

View file

@ -73,10 +73,10 @@ public:
static QVector<QPointF> Equidistant(const QVector<QPointF> &points, const EquidistantType &eqv, qreal width);
static qreal SumTrapezoids(const QVector<QPointF> &points);
static QVector<QPointF> CheckLoops(const QVector<QPointF> &points);
static QVector<QPointF> CorrectEquidistantPoints(const QVector<QPointF> &points);
static QVector<QPointF> CorrectEquidistantPoints(const QVector<QPointF> &points, bool removeFirstAndLast = true);
protected:
static QVector<QPointF> RemoveDublicates(const QVector<QPointF> &points);
static QVector<QPointF> RemoveDublicates(const QVector<QPointF> &points, bool removeFirstAndLast = true);
private:
QSharedDataPointer<VAbstractDetailData> d;
@ -85,6 +85,7 @@ private:
static QPointF UnclosedEkvPoint(const QLineF &line, const QLineF &helpLine, const qreal &width);
static QLineF ParallelLine(const QLineF &line, qreal width );
static QPointF SingleParallelPoint(const QLineF &line, const qreal &angle, const qreal &width);
static int BisectorAngle(const QPointF &p1, const QPointF &p2, const QPointF &p3);
};
Q_DECLARE_TYPEINFO(VAbstractDetail, Q_MOVABLE_TYPE);

View file

@ -229,7 +229,9 @@ COLLECTION_FILES += \
$${PWD}/../../app/share/collection/MaleShirt/MaleShirt.val \
$${PWD}/../../app/share/collection/MaleShirt/MaleShirt.vit \
$${PWD}/../../app/share/collection/Trousers/Trousers.val \
$${PWD}/../../app/share/collection/Trousers/trousers.vit
$${PWD}/../../app/share/collection/Trousers/trousers.vit \
$${PWD}/../../app/share/collection/Steampunk_trousers.val \
$${PWD}/../../app/share/collection/Steampunk_trousers.vit
# Compilation will fail without this files after we added them to this section.
OTHER_FILES += \

View file

@ -275,6 +275,7 @@ void TST_ValentinaCommandLine::TestOpenCollection_data() const
QTest::newRow("TestDart") << "TestDart.val" << keyTest << true << V_EX_OK;
QTest::newRow("MaleShirt") << "MaleShirt.val" << keyTest << true << V_EX_OK;
QTest::newRow("Trousers") << "Trousers.val" << keyTest << true << V_EX_OK;
QTest::newRow("Steampunk_trousers") << "Steampunk_trousers.val" << keyTest << true << V_EX_OK;
#ifndef Q_OS_WIN
QTest::newRow("patrón_blusa") << "patrón_blusa.val" << keyTest << true << V_EX_OK;
QTest::newRow("PajamaTopWrap2") << "PajamaTopWrap2.val" << keyTest << true << V_EX_OK;

View file

@ -48,25 +48,45 @@ void TST_VAbstractDetail::EquidistantRemoveLoop_data()
QTest::addColumn<qreal>("width");
QTest::addColumn<QVector<QPointF>>("ekvOrig");
QTest::newRow("Case1") << InputPointsCase1()
<< static_cast<int>(EquidistantType::CloseEquidistant)
<< 75.5906 // seam allowance width
<< OutputPointsCase1();
// These are two real cases where equdistant has loop.
// See issue #298. Segmented Curve isn't selected in Seam Allowance tool.
// https://bitbucket.org/dismine/valentina/issue/298/segmented-curve-isnt-selected-in-seam
// Code should clean loops in path.
QTest::newRow("Issue 298. Case1") << InputPointsIssue298Case1()
<< static_cast<int>(EquidistantType::CloseEquidistant)
<< 75.5906 // seam allowance width
<< OutputPointsIssue298Case1();
QTest::newRow("Case2") << InputPointsCase2()
<< static_cast<int>(EquidistantType::CloseEquidistant)
<< 37.7953 // seam allowance width
<< OutputPointsCase2();
QTest::newRow("Issue 298. Case2") << InputPointsIssue298Case2()
<< static_cast<int>(EquidistantType::CloseEquidistant)
<< 37.7953 // seam allowance width
<< OutputPointsIssue298Case2();
// See issue #548. Bug Detail tool. Case when seam allowance is wrong.
// https://bitbucket.org/dismine/valentina/issues/548/bug-detail-tool-case-when-seam-allowance
// Files: Steampunk_trousers.val and marie.vit
// Actually buggy detail see in file src/app/share/collection/bugs/Steampunk_trousers_issue_#548.val
// Code should clean loops in path.
QTest::newRow("Issue 548. Case1") << InputPointsIssue548Case1()
<< static_cast<int>(EquidistantType::CloseEquidistant)
<< 11.338582677165354 // seam allowance width (0.3 cm)
<< OutputPointsIssue548Case1();
QTest::newRow("Issue 548. Case2") << InputPointsIssue548Case2()
<< static_cast<int>(EquidistantType::CloseEquidistant)
<< 37.795275590551185 // seam allowance width (1.0 cm)
<< OutputPointsIssue548Case2();
QTest::newRow("Issue 548. Case3") << InputPointsIssue548Case3()
<< static_cast<int>(EquidistantType::CloseEquidistant)
<< 75.59055118110237 // seam allowance width (2.0 cm)
<< OutputPointsIssue548Case3();
}
//---------------------------------------------------------------------------------------------------------------------
// cppcheck-suppress unusedFunction
void TST_VAbstractDetail::EquidistantRemoveLoop() const
{
// These are two real cases where equdistant has loop.
// See issue #298. Segmented Curve isn't selected in Seam Allowance tool.
// https://bitbucket.org/dismine/valentina/issue/298/segmented-curve-isnt-selected-in-seam
// Code should clean loops in path.
QFETCH(QVector<QPointF>, points);
QFETCH(int, eqv);
QFETCH(qreal, width);
@ -567,7 +587,7 @@ void TST_VAbstractDetail::Case5() const
}
//---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> TST_VAbstractDetail::InputPointsCase1() const
QVector<QPointF> TST_VAbstractDetail::InputPointsIssue298Case1() const
{
QVector<QPointF> points;
@ -641,7 +661,7 @@ QVector<QPointF> TST_VAbstractDetail::InputPointsCase1() const
}
//---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> TST_VAbstractDetail::OutputPointsCase1() const
QVector<QPointF> TST_VAbstractDetail::OutputPointsIssue298Case1() const
{
QVector<QPointF> points;
@ -650,20 +670,15 @@ QVector<QPointF> TST_VAbstractDetail::OutputPointsCase1() const
points += QPointF(493.3486932130227, 473.81998224542247);
points += QPointF(384.7625023736152, 506.7228642416019);
points += QPointF(326.77984549201204, 417.71265429523794);
points += QPointF(280.4343843787976, 340.220616520921);
points += QPointF(280.4634857863002, 340.20574652273);
points += QPointF(269.00223298277206, 346.06212334710335);
points += QPointF(239.6571136552229, 350.73379418002804);
points += QPointF(205.89523544191223, 345.8623563310819);
points += QPointF(173.89027296099863, 332.6512960877336);
points += QPointF(145.31523414712046, 315.34576260355936);
points += QPointF(117.9921341644787, 294.6948297428524);
points += QPointF(91.25349438209683, 270.93768759082707);
points += QPointF(65.22541125346564, 244.39379519957222);
points += QPointF(40.34791988062461, 215.4153238967542);
points += QPointF(17.205314383747528, 184.31949780808853);
points += QPointF(-3.534416178847685, 151.30687894362717);
points += QPointF(-21.090087790322336, 116.33389217738734);
points += QPointF(-33.795079640648055, 80.66898804409438);
points += QPointF(-38.441724866417594, 60.24852451858777);
points += QPointF(-52.3724798442221, -35.5907);
@ -671,7 +686,7 @@ QVector<QPointF> TST_VAbstractDetail::OutputPointsCase1() const
}
//---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> TST_VAbstractDetail::InputPointsCase2() const
QVector<QPointF> TST_VAbstractDetail::InputPointsIssue298Case2() const
{
QVector<QPointF> points;
@ -745,31 +760,25 @@ QVector<QPointF> TST_VAbstractDetail::InputPointsCase2() const
}
//---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> TST_VAbstractDetail::OutputPointsCase2() const
QVector<QPointF> TST_VAbstractDetail::OutputPointsIssue298Case2() const
{
QVector<QPointF> points;
points += QPointF(-2.7952999999999975, 5.7719918429762656);
points += QPointF(65.32544836315374, -0.992801551243895);
points += QPointF(75.43676015393824, 49.41505784459415);
points += QPointF(83.37769389516122, 71.70650391130641);
points += QPointF(95.36495808942361, 95.58656052818594);
points += QPointF(110.83634280812595, 120.21325109595534);
points += QPointF(128.9510900596877, 144.55333805162292);
points += QPointF(148.8122943732712, 167.68860240021857);
points += QPointF(169.48075280895182, 188.76665620458672);
points += QPointF(189.9439329177606, 206.94808512857375);
points += QPointF(209.03488292644147, 221.3771186982216);
points += QPointF(215.73126220022726, 225.4325608097815);
points += QPointF(215.50341461262016, 224.79215417684094);
points += QPointF(215.09342206269645, 222.63086681417994);
points += QPointF(205.6867557893074, 194.5606373284329);
points += QPointF(193.90240551299544, 154.91725528228594);
points += QPointF(189.00923093023508, 130.4332749760628);
points += QPointF(191.70730467606634, 97.53824783614445);
points += QPointF(229.19819583315143, 77.54897644999551);
points += QPointF(256.3345313737502, 91.70119126633715);
points += QPointF(270.9082046450185, 107.89162042078927);
points += QPointF(294.3626891097502, 142.42241251279827);
points += QPointF(355.51936324849004, 244.86019492195868);
points += QPointF(422.97357725399365, 357.6471728523805);
points += QPointF(486.8597146913536, 455.7199210117685);
@ -779,6 +788,98 @@ QVector<QPointF> TST_VAbstractDetail::OutputPointsCase2() const
return points;
}
//---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> TST_VAbstractDetail::InputPointsIssue548Case1() const
{
QVector<QPointF> points;
points += QPointF(236.97989607468364, 65.89325192030674);
points += QPointF(198.93409106041895, 172.04876297154925);
points += QPointF(260.32251114299453, 75.38027418944861);
points += QPointF(324.54110236213444, 101.48031496062993);
points += QPointF(29.858267716535437, 300.85039370078744);
points += QPointF(99.86433649395013, 10.166060970128015);
return points;
}
//---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> TST_VAbstractDetail::OutputPointsIssue548Case1() const
{
QVector<QPointF> points;
points += QPointF(251.32210577118798, 59.48301432799721);
points += QPointF(243.9841262159756, 79.95746530820585);
points += QPointF(255.82424817748586, 61.31279754390509);
points += QPointF(348.48337789725855, 98.9717841021069);
points += QPointF(29.780382054543473, 314.59289909613994);
points += QPointF(17.01672179602679, 305.7450049304056);
points += QPointF(91.92616539550944, -5.299480329501037);
points += QPointF(251.32210577118798, 59.48301432799721);
return points;
}
//---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> TST_VAbstractDetail::InputPointsIssue548Case2() const
{
QVector<QPointF> points;
points += QPointF(236.97989607468364, 65.89325192030674);
points += QPointF(198.93409106041895, 172.04876297154925);
points += QPointF(260.32251114299453, 75.38027418944861);
points += QPointF(324.54110236213444, 101.48031496062993);
points += QPointF(29.858267716535437, 300.85039370078744);
points += QPointF(99.86433649395013, 10.166060970128015);
return points;
}
//---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> TST_VAbstractDetail::OutputPointsIssue548Case2() const
{
QVector<QPointF> points;
points += QPointF(284.78726172969823, 44.52579327927505);
points += QPointF(404.3486874792147, 93.11854543221973);
points += QPointF(29.598648843228922, 346.6587450186291);
points += QPointF(-12.946885351826726, 317.1657644661815);
points += QPointF(73.40376616581447, -41.38574336196901);
points += QPointF(284.78726172969823, 44.52579327927505);
return points;
}
//---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> TST_VAbstractDetail::InputPointsIssue548Case3() const
{
QVector<QPointF> points;
points += QPointF(236.97989607468364, 65.89325192030674);
points += QPointF(198.93409106041895, 172.04876297154925);
points += QPointF(260.32251114299453, 75.38027418944861);
points += QPointF(324.54110236213444, 101.48031496062993);
points += QPointF(29.858267716535437, 300.85039370078744);
points += QPointF(99.86433649395013, 10.166060970128015);
return points;
}
//---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> TST_VAbstractDetail::OutputPointsIssue548Case3() const
{
QVector<QPointF> points;
points += QPointF(332.5946273847129, 23.158334638243502);
points += QPointF(484.15627259629446, 84.75677590380938);
points += QPointF(29.339029969922702, 392.46709633647066);
points += QPointF(-55.75203842018885, 333.48113523157537);
points += QPointF(46.94319583767885, -92.9375476940661);
points += QPointF(332.5946273847129, 23.158334638243502);
return points;
}
//---------------------------------------------------------------------------------------------------------------------
QVector<QPointF> TST_VAbstractDetail::InputPointsCase3() const
{

View file

@ -54,11 +54,20 @@ private:
void Case4() const;
void Case5() const;
QVector<QPointF> InputPointsCase1() const;
QVector<QPointF> OutputPointsCase1() const;
QVector<QPointF> InputPointsIssue298Case1() const;
QVector<QPointF> OutputPointsIssue298Case1() const;
QVector<QPointF> InputPointsCase2() const;
QVector<QPointF> OutputPointsCase2() const;
QVector<QPointF> InputPointsIssue298Case2() const;
QVector<QPointF> OutputPointsIssue298Case2() const;
QVector<QPointF> InputPointsIssue548Case1() const;
QVector<QPointF> OutputPointsIssue548Case1() const;
QVector<QPointF> InputPointsIssue548Case2() const;
QVector<QPointF> OutputPointsIssue548Case2() const;
QVector<QPointF> InputPointsIssue548Case3() const;
QVector<QPointF> OutputPointsIssue548Case3() const;
QVector<QPointF> InputPointsCase3() const;
QVector<QPointF> InputPointsCase4() const;