Merged with develop

--HG--
branch : feature
This commit is contained in:
BojanKverh 2016-09-27 22:00:02 +02:00
commit 744acbcd3b
88 changed files with 3103 additions and 282 deletions

View file

@ -62,7 +62,9 @@
- [#543] Detail loses details.
- [#548] Bug Detail tool. Case when seam allowance is wrong.
- Called the main app in console mode doesn't show opening file error in some cases.
- [#553] Tape.exe crash. Issue with the Search field.
- [#553] Tape.exe crash. Issue with the Search field.
- [#569] Tape app. Options that open new file open new instance even if a user doesn't want this.
- [#539] Infinite alert loop "Gradation doesn't support inches" when loading standard table.
# Version 0.4.4 April 12, 2016
- Updated measurement templates with all measurements. Added new template Aldrich/Women measurements.

View file

@ -0,0 +1,649 @@
<?xml version='1.0' encoding='UTF-8'?>
<pattern readOnly="true">
<!--Pattern created with Valentina (http://www.valentina-project.org/).-->
<version>0.3.5</version>
<unit>cm</unit>
<author>Timo Virtaneva</author>
<description>Female Basic Block</description>
<notes>Differen Dart locations available</notes>
<patternName>Female Basic Block</patternName>
<patternNumber>F-Basic-Bloack-2016</patternNumber>
<company>Stinde Design</company>
<customer>Customer</customer>
<size>Measured</size>
<showDate>true</showDate>
<showMeasurements>false</showMeasurements>
<measurements/>
<increments>
<increment name="#Primarymeasuremements" description="" formula="0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0"/>
<increment name="#BH" description="Body height&#xa;Measure the height from the top of the head to the floor&#xa;&#xa;Valentina: height" formula="168"/>
<increment name="#CG" description="Chest girth&#xa;Measure the fulles part of the bust&#xa;&#xa;Valentina: bust_circ" formula="92"/>
<increment name="#WG" description="Waist girth&#xa;Measure the narrowest part of the waist&#xa;&#xa;Valentina: waist_circ" formula="74"/>
<increment name="#HG" description="Hip Girth&#xa;Measure the fullest part of the hip&#xa;&#xa;Valentina: hip_circ" formula="98"/>
<increment name="#SL" description="Sleeve lenght&#xa;Measure over the bend elbow from shoulder tip to the wristbone&#xa;&#xa;Valentina: arm_shoulder_tip_to_wrist_bent" formula="60"/>
<increment name="#Auxiliarymeasurements" description="" formula="0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0"/>
<increment name="#SD" description="Skye depth&#xa;Measured from the neck &#xa;Calculated&#xa;CG &lt; 116 SD=CG/10+11, other wise CG/10+10,5 &#xa;&#xa;Valentina: height_neck_back - height_armpit" formula="#CG/10+(#CG&lt;116?11:10.5 )"/>
<increment name="#BWL" description="Back waist lenght&#xa;Measured from the neck&#xa;Calculated:&#xa;BH/4-0...1&#xa;&#xa;Valentina: height_neck_back - height_waist_side" formula="#BH/4-1"/>
<increment name="#HD" description="Hip depth&#xa;Measured from the neck&#xa;Calculated: SD+BWL&#xa;Valentina: height_neck_back - height_hip" formula="#SD+#BWL"/>
<increment name="#L" description="Length" formula="106"/>
<increment name="#NW" description="Nech width&#xa;Calculated: CG/20+2" formula="#CG/20+2"/>
<increment name="#BL_I" description="Bust lenght I&#xa;Measured from the nape of the neck&#xa;Valentina: bustpoint_to_bustpoint_halter/2" formula="34"/>
<increment name="#BL_II" description="Bust lenght II&#xa;Measured BL_I-NW&#xa;Calculated&#xa;CG &lt; 96 BL_II=CG/4+6&#xa;CG &lt; 116 BL_II=CG/4+5&#xa;other wise CG/4+4&#xa;" formula="#CG/4+6-(#CG>96?1:0)-(#CG>116?1:0)"/>
<increment name="#FWL_I" description="Front waist length I&#xa;Measured fron the nape of the neck&#xa;Valentina: " formula="52"/>
<increment name="#FWL_II" description="Front waist lenght II&#xa;Measured FWL_I-NW&#xa;Calculated&#xa;CG &lt; 90: BWL+4&#xa;CG &lt; 100: BWL+4+0,5&#xa;CG &lt; 110: BWL+4+0,5+(CG-100)/10&#xa;CG &lt; 120: BWL+4+0,5+0,5+(CG-100)/10&#xa;CG &lt; 130: BWL+4+0,5+0,5+0,5+(CG-100)/10&#xa;CG > 130: BWL+4+0,5+0,5+0,5+0,5+(CG-100)/10&#xa;&#xa;" formula="#BWL+4+(#CG > 90?0.5:0)+(#CG > 100?(#CG-100)/10:0)+(#CG >110?0.5:0)+(#CG >120?0.5:0)+(#CG >130?0.5:0)"/>
<increment name="#BW" description="Back width&#xa;CG/8+5,5" formula="#CG/8+5.5"/>
<increment name="#SW" description="Skye width&#xa;CG/8-1,5" formula="#CG/8-1.5"/>
<increment name="#CW" description="Chest width&#xa;CG/4-4" formula="#CG/4-4"/>
<increment name="#EaseValues" description="" formula="0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0"/>
<increment name="#SD_ease" description="Fitted w/o sleeve 0...0,5&#xa;Fitted with sleeve 1...1,5&#xa;Loose fitting with sleeve 2...3" formula="1"/>
<increment name="#BW_ease" description="Fitted w/o sleeve 0...0,5&#xa;Fitted with sleeve 0,5...1&#xa;Loose fitting with sleeve 1,5...2" formula="0.5"/>
<increment name="#SW_ease" description="Fitted w/o sleeve 0,5...1&#xa;Fitted with sleeve 1,5...2&#xa;Loose fitting with sleeve 2,5...3,5" formula="1.5"/>
<increment name="#CW_ease" description="Fitted w/o sleeve 1...1,5&#xa;Fitted with sleeve 1,5&#xa;Loose fitting with sleeve 1,5...2" formula="1.5"/>
<increment name="#WG_ease" description="2...4" formula="2"/>
<increment name="#HG_ease" description="1,5...2" formula="2"/>
<increment name="#DrawingParameters" description="" formula="0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0"/>
<increment name="#BackCenterInTake" description="" formula="2"/>
<increment name="#SeparationOfPanels" description="" formula="8"/>
<increment name="#NeckWidthReduction" description="Reduction of the neck width for large sizes&#xa;0,5" formula="0"/>
<increment name="#NecklineToShoulder" description="" formula="2"/>
<increment name="#BackShoulderDrop" description="" formula="1.5"/>
<increment name="#BackShoulderLineExtension" description="Larger sizes 0...1&#xa;Medium Sizes 1...1,5&#xa;Small Sizes 1,5...2" formula="1.5"/>
<increment name="#BackDartLocation" description="" formula="#BW/3+1"/>
<increment name="#BackDartHight1" description="14...16" formula="14"/>
<increment name="#BackDartHight2" description="12...14" formula="12"/>
<increment name="#WaistSideIntake" description="1...2" formula="1"/>
<increment name="#ShoulderDartLocation" description="3...5" formula="5"/>
<increment name="#Fixes" description="" formula="0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0"/>
<increment name="#PrintingFix" description="" formula="0"/>
<increment name="#Modifications" description="" formula="0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0"/>
<increment name="#ShoulderSeamMove" description="" formula="1"/>
</increments>
<draw name="Basic block women">
<calculation>
<point type="single" x="0.79" y="1.06" id="1" name="Neckline" mx="0.220841" my="-0.520282"/>
<point type="endLine" typeLine="dotLine" id="2" name="Hemline" basePoint="1" mx="0.132292" lineColor="black" my="0.264583" angle="270" length="#L"/>
<point type="alongLine" typeLine="none" id="3" name="ChestLine" firstPoint="1" secondPoint="2" mx="0.132292" lineColor="black" my="0.264583" length="#SD+#SD_ease"/>
<point type="alongLine" typeLine="none" id="4" name="Waistline" firstPoint="1" secondPoint="2" mx="0.132292" lineColor="black" my="0.264583" length="#BWL"/>
<point type="alongLine" typeLine="none" id="5" name="Hipline" firstPoint="1" secondPoint="2" mx="0.132292" lineColor="black" my="0.264583" length="#HD"/>
<point type="normal" typeLine="none" id="6" name="A1" firstPoint="4" secondPoint="1" mx="0.132292" lineColor="black" my="0.264583" angle="0" length="#BackCenterInTake"/>
<point type="pointOfIntersection" id="7" name="A2" firstPoint="6" secondPoint="5" mx="0.132292" my="0.264583"/>
<point type="pointOfIntersection" id="8" name="A3" firstPoint="6" secondPoint="2" mx="-1.48138" my="-1.25944"/>
<point type="lineIntersectAxis" typeLine="none" id="9" name="A4" basePoint="3" p2Line="6" mx="-1.64741" lineColor="black" my="0.199725" angle="180" p1Line="1"/>
<point type="normal" typeLine="dotLine" id="10" name="A5" firstPoint="9" secondPoint="3" mx="0.311589" lineColor="black" my="0.264583" angle="90" length="#CW+#CW_ease+#SW+#SW_ease+#BW+#BW_ease+#SeparationOfPanels"/>
<point type="alongLine" typeLine="none" id="11" name="A6" firstPoint="9" secondPoint="10" mx="0.132292" lineColor="black" my="0.264583" length="#BW+#BW_ease"/>
<point type="alongLine" typeLine="none" id="12" name="A7" firstPoint="10" secondPoint="9" mx="0.132292" lineColor="black" my="0.264583" length="#CW+#CW_ease"/>
<point type="alongLine" typeLine="none" id="13" name="A8" firstPoint="12" secondPoint="11" mx="-0.584895" lineColor="black" my="-1.16979" length="(#SW+#SW_ease)/3"/>
<point type="alongLine" typeLine="none" id="14" name="A9" firstPoint="11" secondPoint="12" mx="-0.699211" lineColor="black" my="-1.22632" length="(#SW+#SW_ease)-Line_A7_A8"/>
<point type="alongLine" typeLine="none" id="15" name="A10" firstPoint="10" secondPoint="12" mx="0.132292" lineColor="black" my="0.264583" length="#CG/10+0.5"/>
<point type="pointOfIntersection" id="16" name="A11" firstPoint="14" secondPoint="4" mx="0.132292" my="0.264583"/>
<point type="pointOfIntersection" id="17" name="A12" firstPoint="14" secondPoint="5" mx="-0.495247" my="0.264583"/>
<point type="pointOfIntersection" id="18" name="A13" firstPoint="13" secondPoint="4" mx="0.132292" my="0.264583"/>
<point type="pointOfIntersection" id="19" name="A14" firstPoint="13" secondPoint="5" mx="-0.711816" my="0.35685"/>
<point type="pointOfIntersection" id="20" name="A15" firstPoint="15" secondPoint="4" mx="-0.563944" my="0.264583"/>
<point type="pointOfIntersection" id="21" name="A16" firstPoint="15" secondPoint="5" mx="-0.738003" my="0.525672"/>
<point type="pointOfIntersection" id="22" name="A17" firstPoint="10" secondPoint="4" mx="0.401237" my="0.264583"/>
<point type="pointOfIntersection" id="23" name="A18" firstPoint="10" secondPoint="5" mx="0.22194" my="0.174935"/>
<point type="pointOfIntersection" id="24" name="A19" firstPoint="10" secondPoint="2" mx="0.311589" my="-1.34909"/>
<point type="pointOfIntersection" id="25" name="A20" firstPoint="11" secondPoint="1" mx="-1.48409" my="-1.91759"/>
<point type="alongLine" typeLine="none" id="26" name="A21" firstPoint="1" secondPoint="25" mx="-1.22732" lineColor="black" my="0.215744" length="#NW-#NeckWidthReduction"/>
<point type="normal" typeLine="none" id="27" name="A22" firstPoint="26" secondPoint="1" mx="0.401237" lineColor="black" my="-0.888637" angle="0" length="#NecklineToShoulder"/>
<point type="alongLine" typeLine="none" id="28" name="A23" firstPoint="25" secondPoint="11" mx="0.129168" lineColor="black" my="-0.204534" length="#BackShoulderDrop"/>
<point type="alongLine" typeLine="none" id="29" name="A24" firstPoint="28" secondPoint="11" mx="0.187988" lineColor="black" my="0.264583" length="CurrentLength/2"/>
<point type="alongLine" typeLine="none" id="30" name="A25" firstPoint="29" secondPoint="11" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength/2"/>
<point type="alongLine" typeLine="none" id="31" name="A26" firstPoint="27" secondPoint="28" mx="-3.43223" lineColor="black" my="-0.0695909" length="CurrentLength+#BackShoulderLineExtension"/>
<point type="normal" typeLine="none" id="32" name="A27" firstPoint="29" secondPoint="25" mx="-3.2628" lineColor="black" my="-1.25499" angle="0" length="1"/>
<point type="normal" typeLine="none" id="33" name="A28" firstPoint="30" secondPoint="25" mx="-3.36841" lineColor="black" my="-1.11897" angle="0" length="1.3"/>
<point type="pointOfIntersection" id="34" name="A29" firstPoint="12" secondPoint="30" mx="0.580534" my="-0.542253"/>
<point type="normal" typeLine="dashLine" id="35" name="A30" firstPoint="20" secondPoint="4" mx="-0.509264" lineColor="black" my="-1.9207" angle="0" length="#FWL_II"/>
<point type="alongLine" typeLine="none" id="36" name="A31" firstPoint="35" secondPoint="20" mx="0.132292" lineColor="black" my="0.264583" length="#BL_II"/>
<point type="normal" typeLine="dotLine" id="37" name="A32" firstPoint="12" secondPoint="3" mx="-2.01927" lineColor="black" my="0.0852861" angle="0" length="Line_A23_A6-2"/>
<point type="endLine" typeLine="none" id="38" name="A33" basePoint="12" mx="-0.0471048" lineColor="black" my="-1.08089" angle="AngleLine_A7_A32-((#CG/20)/(Line_A7_A32*2*3.14))*360" length="Line_A7_A32"/>
<point type="pointOfIntersectionCircles" c2Radius="Line_A15_A30" crossPoint="1" c1Radius="Line_A22_A26-1" c2Center="20" id="39" name="A34" c1Center="38" mx="-1.30208" my="-1.34909"/>
<point type="alongLine" typeLine="none" id="41" name="A35" firstPoint="38" secondPoint="34" mx="0.39338" lineColor="black" my="-0.257594" length="CurrentLength/2"/>
<point type="normal" typeLine="none" id="42" name="A36" firstPoint="41" secondPoint="38" mx="-1.86153" lineColor="black" my="-1.49696" angle="0" length="1"/>
<point type="pointOfIntersection" id="43" name="A37" firstPoint="10" secondPoint="35" mx="0.132292" my="0.264583"/>
<point type="alongLine" typeLine="none" id="44" name="A38" firstPoint="43" secondPoint="35" mx="-0.85439" lineColor="black" my="-1.17059" length="#NW-#NeckWidthReduction"/>
<point type="alongLine" typeLine="none" id="45" name="A39" firstPoint="43" secondPoint="10" mx="0.311589" lineColor="black" my="0.174935" length="#NW+1.5"/>
<point type="alongLine" typeLine="none" id="46" name="A40" firstPoint="39" secondPoint="38" mx="0.22194" lineColor="black" my="-1.16979" length="Line_A38_A30"/>
<line typeLine="dashLine" id="47" firstPoint="36" secondPoint="46" lineColor="black"/>
<point type="alongLine" typeLine="none" id="48" name="A41" firstPoint="36" secondPoint="35" mx="-1.28498" lineColor="black" my="-1.76282" length="Line_A31_A40"/>
<point type="pointOfIntersection" id="49" name="A42" firstPoint="12" secondPoint="20" mx="0.132292" my="0.264583"/>
<line typeLine="dotLine" id="50" firstPoint="22" secondPoint="49" lineColor="black"/>
<line typeLine="dotLine" id="51" firstPoint="49" secondPoint="18" lineColor="black"/>
<line typeLine="dotLine" id="52" firstPoint="16" secondPoint="6" lineColor="black"/>
<point type="alongLine" typeLine="none" id="53" name="A43" firstPoint="20" secondPoint="49" mx="0.39338" lineColor="black" my="-1.12789" length="max(0;((Line_A17_A42-(#WG/4-1))/2))"/>
<point type="alongLine" typeLine="none" id="54" name="A44" firstPoint="20" secondPoint="22" mx="-2.13048" lineColor="black" my="-1.21492" length="Line_A15_A43"/>
<point type="alongLine" typeLine="none" id="55" name="A45" firstPoint="6" secondPoint="16" mx="0.132292" lineColor="black" my="0.264583" length="#BackDartLocation"/>
<point type="pointOfIntersection" id="56" name="A46" firstPoint="11" secondPoint="4" mx="-0.738003" my="0.264583"/>
<point type="alongLine" typeLine="none" id="57" name="A47" firstPoint="56" secondPoint="11" mx="-0.650974" lineColor="black" my="-1.56304" length="0.5"/>
<point type="normal" typeLine="none" id="58" name="A48" firstPoint="55" secondPoint="4" mx="0.132292" lineColor="black" my="0.264583" angle="0" length="#BackDartHight1"/>
<point type="alongLine" typeLine="dashLine" id="59" name="A49" firstPoint="58" secondPoint="55" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength*2"/>
<point type="normal" typeLine="none" id="60" name="A50" firstPoint="57" secondPoint="56" mx="0.132292" lineColor="black" my="0.264583" angle="90" length="#BackDartHight2"/>
<point type="alongLine" typeLine="dashLine" id="61" name="A51" firstPoint="60" secondPoint="57" mx="0.132292" lineColor="black" my="0.264583" length="CurrentLength*2"/>
<point type="alongLine" typeLine="none" id="62" name="A52" firstPoint="55" secondPoint="6" mx="0.132292" lineColor="black" my="0.264583" length="min(2;(max(0;((Line_A17_A42+Line_A42_A13-2*Line_A15_A43+Line_A11_A1)-(#WG/2+#WG_ease))/2)))"/>
<point type="alongLine" typeLine="none" id="63" name="A53" firstPoint="55" secondPoint="16" mx="0.132292" lineColor="black" my="0.264583" length="Line_A45_A52"/>
<point type="normal" typeLine="none" id="64" name="A54" firstPoint="57" secondPoint="56" mx="0.48041" lineColor="black" my="-1.21492" angle="0" length="(max(0;((Line_A17_A42+Line_A42_A13-2*Line_A15_A43+Line_A11_A1)-(#WG/2+#WG_ease)-2*Line_A45_A52)/2))"/>
<point type="alongLine" typeLine="none" id="65" name="A55" firstPoint="64" secondPoint="57" mx="-2.04345" lineColor="black" my="-1.30195" length="CurrentLength*2"/>
<point type="pointOfIntersection" id="66" name="A56" firstPoint="49" secondPoint="5" mx="-0.764192" my="0.533528"/>
<line typeLine="dotLine" id="67" firstPoint="23" secondPoint="66" lineColor="black"/>
<line typeLine="dotLine" id="68" firstPoint="66" secondPoint="19" lineColor="black"/>
<point type="alongLine" typeLine="none" id="69" name="A57" firstPoint="21" secondPoint="66" mx="0.398618" lineColor="black" my="-0.856326" length="max(0;((Line_A18_A56-(#WG/4+1))/2))"/>
<point type="alongLine" typeLine="none" id="70" name="A58" firstPoint="21" secondPoint="23" mx="-2.13048" lineColor="black" my="-1.04086" length="Line_A16_A57"/>
<line typeLine="dotLine" id="71" firstPoint="17" secondPoint="7" lineColor="black"/>
<point type="alongLine" typeLine="none" id="72" name="A59" firstPoint="19" secondPoint="17" mx="0.56744" lineColor="black" my="-0.692742" length="max(0;(#HG/2+#HG_ease-(Line_A18_A56+Line_A56_A14+Line_A12_A2-2*Line_A16_A57))/2)"/>
<point type="alongLine" typeLine="none" id="73" name="A60" firstPoint="17" secondPoint="19" mx="-1.95642" lineColor="black" my="-0.344624" length="Line_A14_A59"/>
<point type="alongLine" typeLine="none" id="74" name="A61" firstPoint="16" secondPoint="14" mx="-1.86939" lineColor="black" my="-0.605712" length="1"/>
<point type="alongLine" typeLine="none" id="75" name="A62" firstPoint="18" secondPoint="13" mx="0.306351" lineColor="black" my="-0.605712" length="1"/>
<point type="normal" typeLine="none" id="76" name="A63" firstPoint="74" secondPoint="16" mx="0.488266" lineColor="black" my="-0.692741" angle="0" length="#WaistSideIntake"/>
<point type="normal" typeLine="none" id="77" name="A64" firstPoint="75" secondPoint="18" mx="-1.95904" lineColor="black" my="-0.595239" angle="180" length="#WaistSideIntake"/>
<point type="alongLine" typeLine="none" id="78" name="A65" firstPoint="27" secondPoint="31" mx="-1.03732" lineColor="black" my="0.43167" length="#ShoulderDartLocation"/>
<point type="pointOfIntersection" id="79" name="A66" firstPoint="78" secondPoint="32" mx="0.132292" my="0.264583"/>
<point type="normal" typeLine="none" id="80" name="A67" firstPoint="32" secondPoint="79" mx="-3.43584" lineColor="black" my="-2.2418" angle="0" length="1.5/2"/>
<point type="alongLine" typeLine="none" id="81" name="A68" firstPoint="80" secondPoint="32" mx="-3.34881" lineColor="black" my="0.00349476" length="CurrentLength*2"/>
<line typeLine="hair" id="82" firstPoint="24" secondPoint="45" lineColor="black"/>
<spline type="simpleInteractive" point4="44" angle1="4.81733" angle2="268.233" id="83" color="black" length1="5.92843" length2="4.77142" point1="45"/>
<line typeLine="hair" id="84" firstPoint="44" secondPoint="48" lineColor="black"/>
<line typeLine="hair" id="85" firstPoint="46" secondPoint="38" lineColor="black"/>
<spline type="pathInteractive" id="86" color="black">
<pathPoint angle1="54.2593" pSpline="38" angle2="234.259" length1="0" length2="2.56313"/>
<pathPoint angle1="68.4973" pSpline="42" angle2="248.497" length1="1.53956" length2="3.16154"/>
<pathPoint angle1="88.6841" pSpline="34" angle2="268.684" length1="1.4791" length2="1.36407"/>
<pathPoint angle1="185.711" pSpline="13" angle2="5.71084" length1="2.51067" length2="0.403221"/>
</spline>
<spline type="pathInteractive" id="87" color="black">
<pathPoint angle1="176.928" pSpline="14" angle2="356.928" length1="0" length2="3.09737"/>
<pathPoint angle1="253.51" pSpline="33" angle2="73.5103" length1="1.50216" length2="1.17981"/>
<pathPoint angle1="268.374" pSpline="81" angle2="88.374" length1="1.65047" length2="0.789833"/>
</spline>
<spline type="simpleInteractive" point4="31" angle1="90.2047" angle2="280.151" id="88" color="black" length1="2.61499" length2="2.77418" point1="80"/>
<line typeLine="hair" id="89" firstPoint="31" secondPoint="27" lineColor="black"/>
<spline type="simpleInteractive" point4="1" angle1="283.343" angle2="179.604" id="90" color="black" length1="1.35069" length2="3.55012" point1="27"/>
<line typeLine="hair" id="91" firstPoint="1" secondPoint="6" lineColor="black"/>
<line typeLine="hair" id="92" firstPoint="6" secondPoint="7" lineColor="black"/>
<line typeLine="hair" id="93" firstPoint="7" secondPoint="8" lineColor="black"/>
<point type="pointOfIntersection" id="94" name="A69" firstPoint="72" secondPoint="2" mx="-2.01927" my="-1.25944"/>
<point type="pointOfIntersection" id="95" name="A70" firstPoint="73" secondPoint="2" mx="0.311589" my="-1.25944"/>
<point type="pointOfIntersection" id="96" name="A71" firstPoint="59" secondPoint="2" mx="0.401237" my="-1.25944"/>
<point type="pointOfIntersection" id="97" name="A72" firstPoint="61" secondPoint="2" mx="0.311589" my="-1.16979"/>
<point type="pointOfIntersection" id="98" name="A73" firstPoint="70" secondPoint="2" mx="-1.75033" my="-1.25944"/>
<point type="pointOfIntersection" id="99" name="A74" firstPoint="69" secondPoint="2" mx="0.311589" my="-1.08015"/>
<point type="normal" typeLine="none" id="100" name="A75" firstPoint="61" secondPoint="57" mx="-1.84587" lineColor="black" my="-0.471478" angle="0" length="#PrintingFix"/>
<point type="normal" typeLine="none" id="101" name="A76" firstPoint="59" secondPoint="55" mx="-1.89188" lineColor="black" my="-0.471478" angle="0" length="#PrintingFix"/>
<point type="normal" typeLine="none" id="102" name="A77" firstPoint="96" secondPoint="59" mx="-1.83997" lineColor="black" my="-1.08014" angle="0" length="#PrintingFix"/>
<point type="normal" typeLine="none" id="103" name="A78" firstPoint="97" secondPoint="61" mx="-1.83997" lineColor="black" my="-1.08014" angle="0" length="#PrintingFix"/>
<line typeLine="hair" id="104" firstPoint="99" secondPoint="69" lineColor="black"/>
<line typeLine="hair" id="105" firstPoint="69" secondPoint="53" lineColor="black"/>
<line typeLine="hair" id="106" firstPoint="53" secondPoint="36" lineColor="black"/>
<line typeLine="hair" id="107" firstPoint="36" secondPoint="54" lineColor="black"/>
<line typeLine="hair" id="108" firstPoint="54" secondPoint="70" lineColor="black"/>
<line typeLine="hair" id="109" firstPoint="70" secondPoint="98" lineColor="black"/>
<line typeLine="hair" id="110" firstPoint="96" secondPoint="59" lineColor="black"/>
<line typeLine="hair" id="111" firstPoint="59" secondPoint="62" lineColor="black"/>
<line typeLine="hair" id="112" firstPoint="62" secondPoint="58" lineColor="black"/>
<line typeLine="hair" id="113" firstPoint="58" secondPoint="63" lineColor="black"/>
<line typeLine="hair" id="114" firstPoint="63" secondPoint="101" lineColor="black"/>
<line typeLine="hair" id="115" firstPoint="101" secondPoint="102" lineColor="black"/>
<line typeLine="hair" id="116" firstPoint="97" secondPoint="61" lineColor="black"/>
<line typeLine="hair" id="117" firstPoint="61" secondPoint="64" lineColor="black"/>
<line typeLine="hair" id="118" firstPoint="64" secondPoint="60" lineColor="black"/>
<line typeLine="hair" id="119" firstPoint="60" secondPoint="65" lineColor="black"/>
<line typeLine="hair" id="120" firstPoint="65" secondPoint="100" lineColor="black"/>
<line typeLine="hair" id="121" firstPoint="100" secondPoint="103" lineColor="black"/>
<line typeLine="hair" id="122" firstPoint="13" secondPoint="77" lineColor="black"/>
<line typeLine="hair" id="123" firstPoint="14" secondPoint="76" lineColor="black"/>
<spline type="pathInteractive" id="124" color="black">
<pathPoint angle1="90.9771" pSpline="77" angle2="270.977" length1="0" length2="9.68242"/>
<pathPoint angle1="90.8098" pSpline="72" angle2="270.81" length1="6.69919" length2="4.97643"/>
<pathPoint angle1="91.8167" pSpline="94" angle2="271.817" length1="3.83704" length2="0.722454"/>
</spline>
<spline type="pathInteractive" id="125" color="black">
<pathPoint angle1="91.7529" pSpline="76" angle2="271.753" length1="0" length2="6.72577"/>
<pathPoint angle1="90.1909" pSpline="73" angle2="270.191" length1="8.20711" length2="3.78595"/>
<pathPoint angle1="90.9461" pSpline="95" angle2="270.946" length1="9.66358" length2="0.825579"/>
</spline>
<line typeLine="hair" id="126" firstPoint="8" secondPoint="96" lineColor="black"/>
<line typeLine="hair" id="127" firstPoint="102" secondPoint="97" lineColor="black"/>
<line typeLine="hair" id="128" firstPoint="103" secondPoint="95" lineColor="black"/>
<line typeLine="hair" id="129" firstPoint="94" secondPoint="99" lineColor="black"/>
<line typeLine="hair" id="130" firstPoint="98" secondPoint="24" lineColor="black"/>
<line typeLine="dashLine" id="240" firstPoint="81" secondPoint="79" lineColor="black"/>
<line typeLine="dashLine" id="241" firstPoint="80" secondPoint="79" lineColor="black"/>
<point type="normal" typeLine="hair" id="243" name="A79" firstPoint="27" secondPoint="31" mx="-1.27241" lineColor="black" my="-2.20066" angle="180" length="#ShoulderSeamMove"/>
<point type="normal" typeLine="hair" id="244" name="A80" firstPoint="31" secondPoint="27" mx="-3.33547" lineColor="black" my="-1.41214" angle="0" length="#ShoulderSeamMove"/>
<line typeLine="hair" id="245" firstPoint="244" secondPoint="243" lineColor="black"/>
<point type="cutSpline" id="246" name="A81" spline="83" mx="-2.02047" my="-0.632401" length="Spl_A39_A38-#ShoulderSeamMove"/>
<point type="lineIntersectAxis" typeLine="hair" id="247" name="A82" basePoint="246" p2Line="35" mx="-2.71797" lineColor="black" my="-0.00170317" angle="AngleLine_A38_A41" p1Line="36"/>
<point type="alongLine" typeLine="none" id="248" name="A83" firstPoint="36" secondPoint="46" mx="-2.19987" lineColor="black" my="-0.0942106" length="Line_A31_A82"/>
<point type="curveIntersectAxis" typeLine="hair" id="249" name="A84" curve="86" basePoint="248" mx="0.132292" lineColor="black" my="0.264583" angle="AngleLine_A40_A33"/>
<point type="lineIntersectAxis" typeLine="dashLine" id="253" name="A85" basePoint="36" p2Line="13" mx="0.132292" lineColor="black" my="0.264583" angle="0" p1Line="77"/>
<operation type="rotation" suffix="a1" id="254" center="36" angle="AngleLine_A15_A30-AngleLine_A31_A40">
<source>
<item idObject="248"/>
<item idObject="46"/>
<item idObject="38"/>
<item idObject="249"/>
<item idObject="42"/>
<item idObject="34"/>
<item idObject="13"/>
<item idObject="253"/>
</source>
<destination>
<item idObject="255" mx="-0.716276" my="0.970934"/>
<item idObject="256" mx="0.716471" my="-0.903504"/>
<item idObject="257" mx="0.333304" my="-0.928726"/>
<item idObject="258" mx="0.398578" my="-0.30603"/>
<item idObject="259" mx="-3.80161" my="-0.964388"/>
<item idObject="260" mx="-3.75613" my="-0.504212"/>
<item idObject="261" mx="0.290045" my="-1.62628"/>
<item idObject="262" mx="0.436619" my="-1.33313"/>
</destination>
</operation>
<line typeLine="hair" id="263" firstPoint="256" secondPoint="257" lineColor="black"/>
<line typeLine="hair" id="264" firstPoint="255" secondPoint="258" lineColor="black"/>
<spline type="pathInteractive" id="265" color="black">
<pathPoint angle1="237.018" pSpline="257" angle2="57.0183" length1="0" length2="0.0817868"/>
<pathPoint angle1="75.0444" pSpline="258" angle2="255.044" length1="0" length2="1.7174"/>
<pathPoint angle1="84.6657" pSpline="259" angle2="264.666" length1="2.01974" length2="3.15983"/>
<pathPoint angle1="108.883" pSpline="260" angle2="288.883" length1="1.7209" length2="2.80344"/>
<pathPoint angle1="190.657" pSpline="261" angle2="10.657" length1="2.41743" length2="39.4222"/>
</spline>
<line typeLine="hair" id="266" firstPoint="261" secondPoint="262" lineColor="black"/>
<line typeLine="dashLine" id="267" firstPoint="262" secondPoint="36" lineColor="black"/>
<point type="lineIntersectAxis" typeLine="dashLine" id="269" name="A86" basePoint="79" p2Line="243" mx="-3.04236" lineColor="black" my="-2.40881" angle="90" p1Line="244"/>
<operation type="rotation" suffix="a2" id="271" center="79" angle="AngleLine_A68_A66-AngleLine_A67_A66+360">
<source>
<item idObject="80"/>
<item idObject="244"/>
<item idObject="269"/>
</source>
<destination>
<item idObject="272" mx="-5.32949" my="-1.85193"/>
<item idObject="273" mx="-5.28482" my="-1.24505"/>
<item idObject="274" mx="-5.38158" my="-1.57337"/>
</destination>
</operation>
<line typeLine="hair" id="275" firstPoint="273" secondPoint="274" lineColor="black"/>
<line typeLine="dashLine" id="276" firstPoint="274" secondPoint="79" lineColor="black"/>
<line typeLine="hair" id="277" firstPoint="269" secondPoint="243" lineColor="black"/>
<spline type="simpleInteractive" point4="273" angle1="93.5988" angle2="298.116" id="278" color="black" length1="4.93464" length2="2.21638" point1="272"/>
</calculation>
<modeling>
<point type="modeling" inUse="false" id="131" idObject="24" mx="0.311589" my="-1.34909"/>
<point type="modeling" inUse="false" id="132" idObject="45" mx="0.311589" my="0.174935"/>
<spline type="modelingSpline" inUse="false" id="133" idObject="83"/>
<point type="modeling" inUse="false" id="134" idObject="44" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="135" idObject="35" mx="0.22194" my="0.44388"/>
<point type="modeling" inUse="false" id="136" idObject="36" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="137" idObject="46" mx="0.22194" my="-1.16979"/>
<point type="modeling" inUse="false" id="138" idObject="38" mx="0.132292" my="0.264583"/>
<spline type="modelingPath" inUse="false" id="139" idObject="86"/>
<point type="modeling" inUse="false" id="140" idObject="13" mx="-0.584895" my="-1.16979"/>
<point type="modeling" inUse="false" id="141" idObject="77" mx="-1.95904" my="-0.595239"/>
<spline type="modelingPath" inUse="false" id="142" idObject="124"/>
<point type="modeling" inUse="false" id="143" idObject="94" mx="-2.01927" my="-1.25944"/>
<point type="modeling" inUse="false" id="144" idObject="99" mx="0.311589" my="-1.08015"/>
<point type="modeling" inUse="false" id="145" idObject="69" mx="0.398618" my="-0.856326"/>
<point type="modeling" inUse="false" id="146" idObject="53" mx="0.39338" my="-1.12789"/>
<point type="modeling" inUse="false" id="147" idObject="36" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="148" idObject="54" mx="-2.13048" my="-1.21492"/>
<point type="modeling" inUse="false" id="149" idObject="70" mx="-2.13048" my="-1.04086"/>
<point type="modeling" inUse="false" id="150" idObject="98" mx="-1.75033" my="-1.25944"/>
<point type="modeling" inUse="false" id="152" idObject="103" mx="-1.83997" my="-1.08014"/>
<point type="modeling" inUse="false" id="153" idObject="95" mx="0.311589" my="-1.25944"/>
<spline type="modelingPath" inUse="false" id="154" idObject="125"/>
<point type="modeling" inUse="false" id="155" idObject="76" mx="0.488266" my="-0.692741"/>
<point type="modeling" inUse="false" id="156" idObject="14" mx="-0.699211" my="-1.22632"/>
<spline type="modelingPath" inUse="false" id="157" idObject="87"/>
<point type="modeling" inUse="false" id="158" idObject="81" mx="-1.95642" my="0.00349476"/>
<point type="modeling" inUse="false" id="159" idObject="79" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="160" idObject="80" mx="-2.04345" my="-1.12789"/>
<point type="modeling" inUse="false" id="161" idObject="31" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="162" idObject="27" mx="0.401237" my="-0.72155"/>
<spline type="modelingSpline" inUse="false" id="163" idObject="90"/>
<point type="modeling" inUse="false" id="164" idObject="1" mx="0.220841" my="-0.520282"/>
<point type="modeling" inUse="false" id="165" idObject="6" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="166" idObject="7" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="167" idObject="8" mx="-1.48138" my="-1.25944"/>
<point type="modeling" inUse="false" id="168" idObject="96" mx="0.401237" my="-1.25944"/>
<point type="modeling" inUse="false" id="169" idObject="59" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="170" idObject="62" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="171" idObject="58" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="172" idObject="63" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="173" idObject="101" mx="-1.89188" my="-0.471478"/>
<point type="modeling" inUse="false" id="174" idObject="102" mx="-1.83997" my="-1.08014"/>
<point type="modeling" inUse="false" id="175" idObject="97" mx="0.311589" my="-1.16979"/>
<point type="modeling" inUse="false" id="176" idObject="61" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="177" idObject="64" mx="0.48041" my="-1.21492"/>
<point type="modeling" inUse="false" id="178" idObject="60" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="179" idObject="65" mx="-2.04345" my="-1.30195"/>
<point type="modeling" inUse="false" id="180" idObject="100" mx="-1.84587" my="-0.471478"/>
<point type="modeling" inUse="false" id="181" idObject="103" mx="-1.83997" my="-1.08014"/>
<point type="modeling" inUse="false" id="182" idObject="95" mx="0.311589" my="-1.25944"/>
<spline type="modelingPath" inUse="false" id="183" idObject="125"/>
<point type="modeling" inUse="false" id="184" idObject="76" mx="0.488266" my="-0.692741"/>
<point type="modeling" inUse="false" id="185" idObject="14" mx="-0.699211" my="-1.22632"/>
<spline type="modelingPath" inUse="false" id="186" idObject="87"/>
<point type="modeling" inUse="false" id="187" idObject="81" mx="-1.95642" my="0.00349476"/>
<point type="modeling" inUse="false" id="188" idObject="79" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="189" idObject="80" mx="-2.04345" my="-1.12789"/>
<spline type="modelingSpline" inUse="false" id="190" idObject="88"/>
<point type="modeling" inUse="false" id="191" idObject="31" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="192" idObject="27" mx="0.401237" my="-0.72155"/>
<spline type="modelingSpline" inUse="false" id="193" idObject="90"/>
<point type="modeling" inUse="false" id="194" idObject="1" mx="0.220841" my="-0.520282"/>
<point type="modeling" inUse="false" id="195" idObject="7" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="196" idObject="8" mx="-1.48138" my="-1.25944"/>
<point type="modeling" inUse="false" id="197" idObject="96" mx="0.401237" my="-1.25944"/>
<point type="modeling" inUse="false" id="198" idObject="59" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="199" idObject="62" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="200" idObject="63" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="201" idObject="101" mx="-1.89188" my="-0.471478"/>
<point type="modeling" inUse="false" id="202" idObject="102" mx="-1.83997" my="-1.08014"/>
<point type="modeling" inUse="false" id="203" idObject="97" mx="0.311589" my="-1.16979"/>
<point type="modeling" inUse="false" id="204" idObject="61" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="205" idObject="64" mx="0.48041" my="-1.21492"/>
<point type="modeling" inUse="false" id="206" idObject="60" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="207" idObject="65" mx="-2.04345" my="-1.30195"/>
<point type="modeling" inUse="false" id="208" idObject="100" mx="-1.84587" my="-0.471478"/>
<point type="modeling" inUse="true" id="209" idObject="103" mx="-1.83997" my="-1.08014"/>
<point type="modeling" inUse="true" id="210" idObject="95" mx="0.311589" my="-1.25944"/>
<spline type="modelingPath" inUse="true" id="211" idObject="125"/>
<point type="modeling" inUse="true" id="212" idObject="76" mx="0.488266" my="-0.692741"/>
<point type="modeling" inUse="true" id="213" idObject="14" mx="-0.699211" my="-1.22632"/>
<spline type="modelingPath" inUse="true" id="214" idObject="87"/>
<point type="modeling" inUse="true" id="215" idObject="81" mx="-1.95642" my="0.00349476"/>
<point type="modeling" inUse="true" id="216" idObject="79" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="217" idObject="80" mx="-2.04345" my="-1.12789"/>
<spline type="modelingSpline" inUse="true" id="218" idObject="88"/>
<point type="modeling" inUse="true" id="219" idObject="31" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="220" idObject="27" mx="0.401237" my="-0.72155"/>
<spline type="modelingSpline" inUse="true" id="221" idObject="90"/>
<point type="modeling" inUse="true" id="222" idObject="1" mx="0.220841" my="-0.520282"/>
<point type="modeling" inUse="true" id="223" idObject="6" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="224" idObject="7" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="225" idObject="8" mx="-1.48138" my="-1.25944"/>
<point type="modeling" inUse="true" id="226" idObject="96" mx="0.401237" my="-1.25944"/>
<point type="modeling" inUse="true" id="227" idObject="59" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="228" idObject="62" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="229" idObject="58" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="230" idObject="63" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="231" idObject="101" mx="-1.89188" my="-0.471478"/>
<point type="modeling" inUse="true" id="232" idObject="102" mx="-1.83997" my="-1.08014"/>
<point type="modeling" inUse="true" id="233" idObject="97" mx="0.311589" my="-1.16979"/>
<point type="modeling" inUse="true" id="234" idObject="61" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="235" idObject="64" mx="0.48041" my="-1.21492"/>
<point type="modeling" inUse="true" id="236" idObject="60" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="237" idObject="65" mx="-2.04345" my="-1.30195"/>
<point type="modeling" inUse="true" id="238" idObject="100" mx="-1.84587" my="-0.471478"/>
<point type="modeling" inUse="true" id="280" idObject="24" mx="0.311589" my="-1.34909"/>
<point type="modeling" inUse="true" id="281" idObject="45" mx="0.311589" my="0.174935"/>
<spline type="modelingSpline" inUse="true" id="282" idObject="83"/>
<point type="modeling" inUse="true" id="283" idObject="246" mx="-2.02047" my="-0.632401"/>
<point type="modeling" inUse="true" id="284" idObject="255" mx="-0.716276" my="0.970934"/>
<point type="modeling" inUse="true" id="285" idObject="258" mx="0.398578" my="-0.30603"/>
<spline type="modelingPath" inUse="true" id="286" idObject="265"/>
<point type="modeling" inUse="true" id="287" idObject="261" mx="0.290045" my="-1.62628"/>
<point type="modeling" inUse="true" id="288" idObject="262" mx="0.436619" my="-1.33313"/>
<point type="modeling" inUse="true" id="289" idObject="15" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="290" idObject="253" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="291" idObject="77" mx="-1.95904" my="-0.595239"/>
<spline type="modelingPath" inUse="true" id="292" idObject="124"/>
<point type="modeling" inUse="true" id="293" idObject="94" mx="-2.01927" my="-1.25944"/>
<point type="modeling" inUse="true" id="294" idObject="99" mx="0.311589" my="-1.08015"/>
<point type="modeling" inUse="true" id="295" idObject="69" mx="0.398618" my="-0.856326"/>
<point type="modeling" inUse="true" id="296" idObject="53" mx="0.39338" my="-1.12789"/>
<point type="modeling" inUse="true" id="297" idObject="36" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="298" idObject="54" mx="-2.13048" my="-1.21492"/>
<point type="modeling" inUse="true" id="299" idObject="70" mx="-2.13048" my="-1.04086"/>
<point type="modeling" inUse="true" id="300" idObject="98" mx="-1.75033" my="-1.25944"/>
<point type="modeling" inUse="false" id="302" idObject="24" mx="0.311589" my="-1.34909"/>
<point type="modeling" inUse="false" id="303" idObject="45" mx="0.311589" my="0.174935"/>
<point type="modeling" inUse="false" id="304" idObject="246" mx="-2.02047" my="-0.632401"/>
<point type="modeling" inUse="false" id="305" idObject="247" mx="-2.71797" my="-0.00170317"/>
<point type="modeling" inUse="false" id="306" idObject="36" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="307" idObject="248" mx="-2.19987" my="-0.0942106"/>
<point type="modeling" inUse="false" id="308" idObject="249" mx="0.132292" my="0.264583"/>
<spline type="modelingPath" inUse="false" id="309" idObject="86"/>
<point type="modeling" inUse="false" id="310" idObject="13" mx="-0.584895" my="-1.16979"/>
<point type="modeling" inUse="false" id="311" idObject="77" mx="-1.95904" my="-0.595239"/>
<spline type="modelingPath" inUse="false" id="312" idObject="124"/>
<point type="modeling" inUse="false" id="313" idObject="94" mx="-2.01927" my="-1.25944"/>
<point type="modeling" inUse="false" id="314" idObject="99" mx="0.311589" my="-1.08015"/>
<point type="modeling" inUse="false" id="315" idObject="69" mx="0.398618" my="-0.856326"/>
<point type="modeling" inUse="false" id="316" idObject="53" mx="0.39338" my="-1.12789"/>
<point type="modeling" inUse="false" id="317" idObject="36" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="false" id="318" idObject="54" mx="-2.13048" my="-1.21492"/>
<point type="modeling" inUse="false" id="319" idObject="70" mx="-2.13048" my="-1.04086"/>
<point type="modeling" inUse="false" id="320" idObject="98" mx="-1.75033" my="-1.25944"/>
<point type="modeling" inUse="true" id="321" idObject="24" mx="0.311589" my="-1.34909"/>
<point type="modeling" inUse="true" id="322" idObject="45" mx="0.311589" my="0.174935"/>
<spline type="modelingSpline" inUse="true" id="323" idObject="83"/>
<point type="modeling" inUse="true" id="324" idObject="246" mx="-2.02047" my="-0.632401"/>
<point type="modeling" inUse="true" id="325" idObject="247" mx="-2.71797" my="-0.00170317"/>
<point type="modeling" inUse="true" id="326" idObject="36" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="327" idObject="248" mx="-2.19987" my="-0.0942106"/>
<point type="modeling" inUse="true" id="328" idObject="249" mx="0.132292" my="0.264583"/>
<spline type="modelingPath" inUse="true" id="329" idObject="86"/>
<point type="modeling" inUse="true" id="330" idObject="13" mx="-0.584895" my="-1.16979"/>
<point type="modeling" inUse="true" id="331" idObject="77" mx="-1.95904" my="-0.595239"/>
<spline type="modelingPath" inUse="true" id="332" idObject="124"/>
<point type="modeling" inUse="true" id="333" idObject="94" mx="-2.01927" my="-1.25944"/>
<point type="modeling" inUse="true" id="334" idObject="99" mx="0.311589" my="-1.08015"/>
<point type="modeling" inUse="true" id="335" idObject="69" mx="0.398618" my="-0.856326"/>
<point type="modeling" inUse="true" id="336" idObject="53" mx="0.39338" my="-1.12789"/>
<point type="modeling" inUse="true" id="337" idObject="36" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="338" idObject="54" mx="-2.13048" my="-1.21492"/>
<point type="modeling" inUse="true" id="339" idObject="70" mx="-2.13048" my="-1.04086"/>
<point type="modeling" inUse="true" id="340" idObject="98" mx="-1.75033" my="-1.25944"/>
<point type="modeling" inUse="true" id="342" idObject="103" mx="-1.83997" my="-1.08014"/>
<point type="modeling" inUse="true" id="343" idObject="95" mx="0.311589" my="-1.25944"/>
<spline type="modelingPath" inUse="true" id="344" idObject="125"/>
<point type="modeling" inUse="true" id="345" idObject="76" mx="0.488266" my="-0.692741"/>
<spline type="modelingPath" inUse="true" id="346" idObject="87"/>
<point type="modeling" inUse="true" id="347" idObject="81" mx="-3.34881" my="0.00349476"/>
<point type="modeling" inUse="true" id="348" idObject="272" mx="-5.32949" my="-1.85193"/>
<spline type="modelingSpline" inUse="true" id="349" idObject="278"/>
<point type="modeling" inUse="true" id="350" idObject="273" mx="-5.28482" my="-1.24505"/>
<point type="modeling" inUse="true" id="351" idObject="274" mx="-5.38158" my="-1.57337"/>
<point type="modeling" inUse="true" id="352" idObject="79" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="353" idObject="269" mx="-3.04236" my="-2.40881"/>
<point type="modeling" inUse="true" id="354" idObject="243" mx="-1.27241" my="-2.20066"/>
<spline type="modelingSpline" inUse="true" id="355" idObject="90"/>
<point type="modeling" inUse="true" id="356" idObject="1" mx="0.220841" my="-0.520282"/>
<point type="modeling" inUse="true" id="357" idObject="6" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="358" idObject="8" mx="-1.48138" my="-1.25944"/>
<point type="modeling" inUse="true" id="359" idObject="96" mx="0.401237" my="-1.25944"/>
<point type="modeling" inUse="true" id="360" idObject="59" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="361" idObject="62" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="362" idObject="58" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="363" idObject="63" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="364" idObject="101" mx="-1.89188" my="-0.471478"/>
<point type="modeling" inUse="true" id="365" idObject="102" mx="-1.83997" my="-1.08014"/>
<point type="modeling" inUse="true" id="366" idObject="97" mx="0.311589" my="-1.16979"/>
<point type="modeling" inUse="true" id="367" idObject="61" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="368" idObject="64" mx="0.48041" my="-1.21492"/>
<point type="modeling" inUse="true" id="369" idObject="60" mx="0.132292" my="0.264583"/>
<point type="modeling" inUse="true" id="370" idObject="65" mx="-2.04345" my="-1.30195"/>
<point type="modeling" inUse="true" id="371" idObject="100" mx="-1.84587" my="-0.471478"/>
</modeling>
<details>
<detail closed="1" id="239" name="BackPanel1" supplement="1" mx="3.69534" width="1" my="1.0159">
<data rotation="0" letter="B1" fontSize="41" visible="true" mx="-560.184" width="120" my="681.681" height="60">
<mcp cutNumber="2" userDef="Fabric" material="0" placement="0"/>
</data>
<patternInfo rotation="0" fontSize="20" visible="true" mx="-588.357" width="207.371" my="896.24" height="163.257"/>
<node type="NodePoint" nodeType="Contour" idObject="209" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="210" mx="0" my="0"/>
<node type="NodeSplinePath" reverse="1" nodeType="Contour" idObject="211" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="212" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="213" mx="0" my="0"/>
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="214" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="215" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="216" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="217" mx="0" my="0"/>
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="218" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="219" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="220" mx="0" my="0"/>
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="221" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="222" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="223" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="224" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="225" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="226" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="227" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="228" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="229" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="230" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="231" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="232" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="233" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="234" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="235" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="236" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="237" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="238" mx="0" my="0"/>
</detail>
<detail closed="1" id="301" name="FrontPanel2" supplement="1" mx="78.898" width="1" my="0.221624">
<data rotation="0" letter="A2" fontSize="26" visible="true" mx="-1924.9" width="187.011" my="351.806" height="127.011">
<mcp cutNumber="2" userDef="Fabric" material="0" placement="0"/>
</data>
<patternInfo rotation="0" fontSize="17" visible="true" mx="-1924.89" width="245.645" my="577.967" height="143.763"/>
<node type="NodePoint" nodeType="Contour" idObject="280" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="281" mx="0" my="0"/>
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="282" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="283" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="284" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="285" mx="0" my="0"/>
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="286" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="287" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="288" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="289" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="290" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="291" mx="0" my="0"/>
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="292" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="293" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="294" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="295" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="296" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="297" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="298" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="299" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="300" mx="0" my="0"/>
</detail>
<detail closed="1" id="341" name="FrontPanel1" supplement="1" mx="0" width="1" my="0.221624">
<data rotation="0" letter="A1" fontSize="12" visible="true" mx="-1623.36" width="120" my="896.265" height="60">
<mcp cutNumber="2" userDef="Fabric" material="0" placement="0"/>
</data>
<patternInfo rotation="0" fontSize="12" visible="true" mx="-1623.35" width="120" my="1298.33" height="60"/>
<node type="NodePoint" nodeType="Contour" idObject="321" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="322" mx="0" my="0"/>
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="323" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="324" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="325" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="326" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="327" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="328" mx="0" my="0"/>
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="329" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="330" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="331" mx="0" my="0"/>
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="332" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="333" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="334" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="335" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="336" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="337" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="338" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="339" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="340" mx="0" my="0"/>
</detail>
<detail closed="1" id="372" name="BackPanel2" supplement="1" mx="85.7683" width="1" my="0">
<data rotation="0" letter="B2" fontSize="41" visible="true" mx="-508.459" width="120" my="636.601" height="60">
<mcp cutNumber="2" userDef="Fabric" material="0" placement="0"/>
</data>
<patternInfo rotation="0" fontSize="12" visible="true" mx="-519.332" width="120" my="871.138" height="60"/>
<node type="NodePoint" nodeType="Contour" idObject="342" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="343" mx="0" my="0"/>
<node type="NodeSplinePath" reverse="1" nodeType="Contour" idObject="344" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="345" mx="0" my="0"/>
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="346" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="347" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="348" mx="0" my="0"/>
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="349" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="350" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="351" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="352" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="353" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="354" mx="0" my="0"/>
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="355" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="356" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="357" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="358" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="359" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="360" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="361" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="362" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="363" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="364" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="365" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="366" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="367" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="368" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="369" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="370" mx="0" my="0"/>
<node type="NodePoint" nodeType="Contour" idObject="371" mx="0" my="0"/>
</detail>
</details>
<groups>
<group id="252" name="FrontDart1" visible="true">
<item tool="13" object="13"/>
<item tool="34" object="34"/>
<item tool="38" object="38"/>
<item tool="41" object="41"/>
<item tool="42" object="42"/>
<item tool="46" object="46"/>
<item tool="47" object="47"/>
<item tool="85" object="85"/>
<item tool="86" object="86"/>
<item tool="248" object="248"/>
<item tool="249" object="249"/>
</group>
<group id="268" name="FrontDart2" visible="false">
<item tool="254" object="255"/>
<item tool="254" object="256"/>
<item tool="254" object="257"/>
<item tool="254" object="258"/>
<item tool="254" object="259"/>
<item tool="254" object="260"/>
<item tool="254" object="261"/>
<item tool="254" object="262"/>
<item tool="263" object="263"/>
<item tool="264" object="264"/>
<item tool="265" object="265"/>
<item tool="266" object="266"/>
<item tool="267" object="267"/>
</group>
<group id="270" name="BackDart1" visible="true">
<item tool="25" object="25"/>
<item tool="28" object="28"/>
<item tool="31" object="31"/>
<item tool="32" object="32"/>
<item tool="78" object="78"/>
<item tool="80" object="80"/>
<item tool="88" object="88"/>
<item tool="89" object="89"/>
<item tool="241" object="241"/>
<item tool="244" object="244"/>
<item tool="245" object="245"/>
</group>
<group id="279" name="BackDart2" visible="false">
<item tool="271" object="272"/>
<item tool="271" object="273"/>
<item tool="271" object="274"/>
<item tool="275" object="275"/>
<item tool="276" object="276"/>
<item tool="277" object="277"/>
<item tool="278" object="278"/>
</group>
</groups>
</draw>
</pattern>

File diff suppressed because it is too large Load diff

View file

@ -108,6 +108,12 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
{
type = QtDebugMsg;
}
// See issue #568
if (msg.contains(QStringLiteral("Error receiving trust for a CA certificate")))
{
type = QtDebugMsg;
}
#endif
// this is another one that doesn't make sense as just a debug message. pretty serious

View file

@ -384,79 +384,60 @@ void TMainWindow::FileNew()
//---------------------------------------------------------------------------------------------------------------------
void TMainWindow::OpenIndividual()
{
if (m == nullptr)
{
const QString filter = tr("Individual measurements (*.vit);;Standard measurements (*.vst);;All files (*.*)");
//Use standard path to individual measurements
const QString pathTo = qApp->TapeSettings()->GetPathIndividualMeasurements();
Open(pathTo, filter);
}
else
{
qApp->NewMainWindow();
qApp->MainWindow()->OpenIndividual();
}
const QString filter = tr("Individual measurements") + QLatin1String(" (*.vit);;") + tr("Standard measurements") +
QLatin1String(" (*.vst);;") + tr("All files") + QLatin1String(" (*.*)");
//Use standard path to individual measurements
const QString pathTo = qApp->TapeSettings()->GetPathIndividualMeasurements();
Open(pathTo, filter);
}
//---------------------------------------------------------------------------------------------------------------------
void TMainWindow::OpenStandard()
{
if (m == nullptr)
{
const QString filter = tr("Standard measurements (*.vst);;Individual measurements (*.vit);;All files (*.*)");
//Use standard path to standard measurements
const QString pathTo = qApp->TapeSettings()->GetPathStandardMeasurements();
Open(pathTo, filter);
}
else
{
qApp->NewMainWindow();
qApp->MainWindow()->OpenStandard();
}
const QString filter = tr("Standard measurements") + QLatin1String(" (*.vst);;") + tr("Individual measurements") +
QLatin1String(" (*.vit);;") + tr("All files") + QLatin1String(" (*.*)");
//Use standard path to standard measurements
const QString pathTo = qApp->TapeSettings()->GetPathStandardMeasurements();
Open(pathTo, filter);
}
//---------------------------------------------------------------------------------------------------------------------
void TMainWindow::OpenTemplate()
{
if (m == nullptr)
{
const QString filter = tr("Measurements (*.vst *.vit);;All files (*.*)");
//Use standard path to template files
const QString pathTo = qApp->TapeSettings()->GetPathTemplate();
Open(pathTo, filter);
const QString filter = tr("Measurements") + QLatin1String(" (*.vst *.vit);;") + tr("All files") +
QLatin1String(" (*.*)");
//Use standard path to template files
const QString pathTo = qApp->TapeSettings()->GetPathTemplate();
if (m != nullptr)
{// The file was opened.
SetCurrentFile(""); // Force user to to save new file
lock.reset();// remove lock from template
}
}
else
{
qApp->NewMainWindow();
qApp->MainWindow()->OpenTemplate();
Open(pathTo, filter);
if (m != nullptr)
{// The file was opened.
SetCurrentFile(""); // Force user to to save new file
lock.reset();// remove lock from template
}
}
//---------------------------------------------------------------------------------------------------------------------
void TMainWindow::CreateFromExisting()
{
if (m == nullptr)
{
const QString filter = tr("Individual measurements (*.vit)");
//Use standard path to standard measurements
const QString pathTo = qApp->TapeSettings()->GetPathIndividualMeasurements();
const QString mPath = QFileDialog::getOpenFileName(this, tr("Select file"), pathTo, filter);
const QString filter = tr("Individual measurements") + QLatin1String(" (*.vit)");
//Use standard path to standard measurements
const QString pathTo = qApp->TapeSettings()->GetPathIndividualMeasurements();
const QString mPath = QFileDialog::getOpenFileName(this, tr("Select file"), pathTo, filter);
if (not mPath.isEmpty())
if (not mPath.isEmpty())
{
if (m == nullptr)
{
LoadFromExistingFile(mPath);
}
}
else
{
qApp->NewMainWindow();
qApp->MainWindow()->CreateFromExisting();
else
{
qApp->NewMainWindow()->CreateFromExisting();
}
}
}
@ -2522,13 +2503,16 @@ void TMainWindow::Open(const QString &pathTo, const QString &filter)
{
const QString mPath = QFileDialog::getOpenFileName(this, tr("Open file"), pathTo, filter);
if (mPath.isEmpty())
if (not mPath.isEmpty())
{
return;
}
else
{
LoadFile(mPath);
if (m == nullptr)
{
LoadFile(mPath);
}
else
{
qApp->NewMainWindow()->LoadFile(mPath);
}
}
}

View file

@ -103,6 +103,12 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
{
type = QtDebugMsg;
}
// See issue #568
if (msg.contains(QStringLiteral("Error receiving trust for a CA certificate")))
{
type = QtDebugMsg;
}
#endif
// this is another one that doesn't make sense as just a debug message. pretty serious

View file

@ -84,6 +84,7 @@ DialogIncrements::DialogIncrements(VContainer *data, VPattern *doc, QWidget *par
FillLengthsLines();
FillLengthLinesAngles();
FillLengthsCurves();
FillCurvesCLengths();
FillRadiusesArcs();
FillAnglesCurves();
@ -232,6 +233,12 @@ void DialogIncrements::FillLengthsCurves()
FillTable(data->DataLengthCurves(), ui->tableWidgetSplines);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::FillCurvesCLengths()
{
FillTable(data->DataCurvesCLength(), ui->tableWidgetCLength);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::FillRadiusesArcs()
{
@ -254,6 +261,7 @@ void DialogIncrements::ShowUnits()
ShowHeaderUnits(ui->tableWidgetLines, 1, unit);// lengths
ShowHeaderUnits(ui->tableWidgetSplines, 1, unit);// lengths
ShowHeaderUnits(ui->tableWidgetCLength, 1, unit);// lengths
ShowHeaderUnits(ui->tableWidgetLinesAngles, 1, degreeSymbol);// angle
ShowHeaderUnits(ui->tableWidgetRadiusesArcs, 1, unit);// radius
ShowHeaderUnits(ui->tableWidgetAnglesCurves, 1, degreeSymbol);// angle
@ -445,6 +453,7 @@ void DialogIncrements::FullUpdateFromFile()
FillLengthsLines();
FillLengthLinesAngles();
FillLengthsCurves();
FillCurvesCLengths();
FillRadiusesArcs();
FillAnglesCurves();

View file

@ -98,6 +98,7 @@ private:
void FillLengthsLines();
void FillLengthLinesAngles();
void FillLengthsCurves();
void FillCurvesCLengths();
void FillRadiusesArcs();
void FillAnglesCurves();

View file

@ -273,8 +273,7 @@
</property>
<property name="icon">
<iconset theme="list-add">
<normaloff/>
</iconset>
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
@ -288,8 +287,7 @@
</property>
<property name="icon">
<iconset theme="list-remove">
<normaloff/>
</iconset>
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
@ -572,6 +570,45 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_5">
<attribute name="title">
<string>Curves control point lengths</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QTableWidget" name="tableWidgetCLength">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<attribute name="horizontalHeaderCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>137</number>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>Curve</string>
</property>
</column>
<column>
<property name="text">
<string>Length</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_6">
<attribute name="title">
<string>Angles curves</string>

View file

@ -179,7 +179,7 @@ MainWindow::MainWindow(QWidget *parent)
{
mChangesAsked = true;
const auto answer = QMessageBox::question(this, tr("Measurements"),
tr("Measurements was changed. Do you want to sync measurements now?"),
tr("Measurements were changed. Do you want to sync measurements now?"),
QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes);
if (answer == QMessageBox::Yes)
{
@ -271,8 +271,8 @@ void MainWindow::AddPP(const QString &PPName)
comboBoxDraws->blockSignals(false);
// Show best for new PP
ui->view->fitInView(doc->ActiveDrawBoundingRect(), Qt::KeepAspectRatio);
VMainGraphicsView::NewSceneRect(ui->view->scene(), ui->view);
ui->view->fitInView(doc->ActiveDrawBoundingRect(), Qt::KeepAspectRatio);
ui->view->NewFactor(ui->view->transform().m11());
ui->actionNewDraw->setEnabled(true);
@ -446,6 +446,12 @@ bool MainWindow::LoadMeasurements(const QString &path)
return false;
}
if (qApp->patternUnit() == Unit::Inch && m->Type() == MeasurementsType::Standard)
{
qWarning()<<tr("Gradation doesn't support inches");
return false;
}
if (m->Type() == MeasurementsType::Standard)
{
m->SetDataSize();
@ -1495,7 +1501,7 @@ void MainWindow::SyncMeasurements()
{
watcher->addPath(path);
}
const QString msg = tr("Measurements was synced");
const QString msg = tr("Measurements have been synced");
qCDebug(vMainWindow, "%s", qUtf8Printable(msg));
helpLabel->setText(msg);
VWidgetPopup::PopupMessage(this, msg);

View file

@ -3369,6 +3369,7 @@ void VPattern::PrepareForParse(const Document &parse)
data->ClearVariables(VarType::LineAngle);
data->ClearVariables(VarType::LineLength);
data->ClearVariables(VarType::CurveLength);
data->ClearVariables(VarType::CurveCLength);
data->ClearVariables(VarType::ArcRadius);
data->ClearVariables(VarType::CurveAngle);
}

View file

@ -153,33 +153,36 @@ const QString ColorDarkBlue = QStringLiteral("darkBlue");
const QString ColorYellow = QStringLiteral("yellow");
//variables
const QString line_ = QStringLiteral("Line_");
const QString angleLine_ = QStringLiteral("AngleLine_");
const QString spl_ = QStringLiteral(SPL_);
const QString arc_ = QStringLiteral(ARC_);
const QString splPath = QStringLiteral("SplPath");
const QString radius_V = QStringLiteral("Radius");
const QString radiusArc_ = radius_V + arc_;
const QString angle1_V = QStringLiteral("Angle1");
const QString angle2_V = QStringLiteral("Angle2");
const QString angle1Arc_ = angle1_V + arc_;
const QString angle2Arc_ = angle2_V + arc_;
const QString angle1Spl_ = angle1_V + spl_;
const QString angle2Spl_ = angle2_V + spl_;
const QString angle1SplPath = angle1_V + splPath;
const QString angle2SplPath = angle2_V + splPath;
const QString seg_ = QStringLiteral("Seg_");
const QString currentLength = QStringLiteral("CurrentLength");
const QString line_ = QStringLiteral("Line_");
const QString angleLine_ = QStringLiteral("AngleLine_");
const QString spl_ = QStringLiteral(SPL_);
const QString arc_ = QStringLiteral(ARC_);
const QString splPath = QStringLiteral("SplPath");
const QString radius_V = QStringLiteral("Radius");
const QString radiusArc_ = radius_V + arc_;
const QString angle1_V = QStringLiteral("Angle1");
const QString angle2_V = QStringLiteral("Angle2");
const QString c1Length_V = QStringLiteral("C1Length");
const QString c2Length_V = QStringLiteral("C2Length");
const QString c1LengthSpl_ = c1Length_V + spl_;
const QString c2LengthSpl_ = c2Length_V + spl_;
const QString c1LengthSplPath = c1Length_V + splPath;
const QString c2LengthSplPath = c2Length_V + splPath;
const QString angle1Arc_ = angle1_V + arc_;
const QString angle2Arc_ = angle2_V + arc_;
const QString angle1Spl_ = angle1_V + spl_;
const QString angle2Spl_ = angle2_V + spl_;
const QString angle1SplPath = angle1_V + splPath;
const QString angle2SplPath = angle2_V + splPath;
const QString seg_ = QStringLiteral("Seg_");
const QString currentLength = QStringLiteral("CurrentLength");
const QStringList builInVariables = QStringList() << line_
<< angleLine_
<< arc_
<< spl_
<< splPath
<< radius_V
<< radiusArc_
<< angle1_V
<< angle2_V
<< angle1Arc_
<< angle2Arc_
<< angle1Spl_
@ -187,4 +190,8 @@ const QStringList builInVariables = QStringList() << line_
<< angle1SplPath
<< angle2SplPath
<< seg_
<< currentLength;
<< currentLength
<< c1LengthSpl_
<< c2LengthSpl_
<< c1LengthSplPath
<< c2LengthSplPath;

View file

@ -168,6 +168,12 @@ extern const QString radius_V;
extern const QString radiusArc_;
extern const QString angle1_V;
extern const QString angle2_V;
extern const QString c1Length_V;
extern const QString c2Length_V;
extern const QString c1LengthSpl_;
extern const QString c2LengthSpl_;
extern const QString c1LengthSplPath;
extern const QString c2LengthSplPath;
extern const QString angle1Arc_;
extern const QString angle2Arc_;
extern const QString angle1Spl_;

View file

@ -0,0 +1,57 @@
/************************************************************************
**
** @file
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 24 9, 2016
**
** @brief
** @copyright
** This source code is part of the Valentine project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2016 Valentina project
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#include "vabstractbezier.h"
//---------------------------------------------------------------------------------------------------------------------
VAbstractBezier::VAbstractBezier(const GOType &type, const quint32 &idObject, const Draw &mode)
: VAbstractCurve(type, idObject, mode)
{
}
//---------------------------------------------------------------------------------------------------------------------
VAbstractBezier::VAbstractBezier(const VAbstractBezier &curve)
: VAbstractCurve(curve)
{
}
//---------------------------------------------------------------------------------------------------------------------
VAbstractBezier &VAbstractBezier::operator=(const VAbstractBezier &curve)
{
if ( &curve == this )
{
return *this;
}
VAbstractCurve::operator=(curve);
return *this;
}
//---------------------------------------------------------------------------------------------------------------------
VAbstractBezier::~VAbstractBezier()
{
}

View file

@ -0,0 +1,48 @@
/************************************************************************
**
** @file
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 24 9, 2016
**
** @brief
** @copyright
** This source code is part of the Valentine project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2016 Valentina project
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#ifndef VABSTRACTBEZIER_H
#define VABSTRACTBEZIER_H
#include <QtGlobal>
#include "vabstractcurve.h"
class VAbstractBezier : public VAbstractCurve
{
public:
VAbstractBezier(const GOType &type, const quint32 &idObject = NULL_ID, const Draw &mode = Draw::Calculation);
VAbstractBezier(const VAbstractBezier &curve);
VAbstractBezier& operator= (const VAbstractBezier &curve);
virtual ~VAbstractBezier();
virtual qreal GetC1Length() const =0;
virtual qreal GetC2Length() const =0;
};
#endif // VABSTRACTBEZIER_H

View file

@ -39,13 +39,13 @@
//---------------------------------------------------------------------------------------------------------------------
VAbstractCubicBezier::VAbstractCubicBezier(const GOType &type, const quint32 &idObject, const Draw &mode)
: VAbstractCurve(type, idObject, mode)
: VAbstractBezier(type, idObject, mode)
{
}
//---------------------------------------------------------------------------------------------------------------------
VAbstractCubicBezier::VAbstractCubicBezier(const VAbstractCubicBezier &curve)
: VAbstractCurve(curve)
: VAbstractBezier(curve)
{
}
@ -56,7 +56,7 @@ VAbstractCubicBezier &VAbstractCubicBezier::operator=(const VAbstractCubicBezier
{
return *this;
}
VAbstractCurve::operator=(curve);
VAbstractBezier::operator=(curve);
return *this;
}

View file

@ -36,13 +36,13 @@
#include <QtGlobal>
#include "../ifc/ifcdef.h"
#include "vabstractcurve.h"
#include "vabstractbezier.h"
#include "vgeometrydef.h"
class QPointF;
class VPointF;
class VAbstractCubicBezier : public VAbstractCurve
class VAbstractCubicBezier : public VAbstractBezier
{
public:
VAbstractCubicBezier(const GOType &type, const quint32 &idObject = NULL_ID, const Draw &mode = Draw::Calculation);

View file

@ -40,13 +40,13 @@ class QPointF;
//---------------------------------------------------------------------------------------------------------------------
VAbstractCubicBezierPath::VAbstractCubicBezierPath(const GOType &type, const quint32 &idObject, const Draw &mode)
: VAbstractCurve(type, idObject, mode)
: VAbstractBezier(type, idObject, mode)
{
}
//---------------------------------------------------------------------------------------------------------------------
VAbstractCubicBezierPath::VAbstractCubicBezierPath(const VAbstractCubicBezierPath &curve)
: VAbstractCurve(curve)
: VAbstractBezier(curve)
{
}
@ -57,7 +57,7 @@ VAbstractCubicBezierPath &VAbstractCubicBezierPath::operator=(const VAbstractCub
{
return *this;
}
VAbstractCurve::operator=(curve);
VAbstractBezier::operator=(curve);
return *this;
}

View file

@ -36,7 +36,7 @@
#include <QVector>
#include <QtGlobal>
#include "vabstractcurve.h"
#include "vabstractbezier.h"
#include "vgeometrydef.h"
class QPainterPath;
@ -45,7 +45,7 @@ class VPointF;
class VSpline;
class VSplinePoint;
class VAbstractCubicBezierPath : public VAbstractCurve
class VAbstractCubicBezierPath : public VAbstractBezier
{
Q_DECLARE_TR_FUNCTIONS(VAbstractCubicBezierPath)
public:

View file

@ -175,6 +175,18 @@ QVector<QPointF> VCubicBezier::GetPoints() const
return GetCubicBezierPoints(GetP1(), GetP2(), GetP3(), GetP4());
}
//---------------------------------------------------------------------------------------------------------------------
qreal VCubicBezier::GetC1Length() const
{
return QLineF(GetP1(), GetP2()).length();
}
//---------------------------------------------------------------------------------------------------------------------
qreal VCubicBezier::GetC2Length() const
{
return QLineF(GetP4(), GetP3()).length();
}
//---------------------------------------------------------------------------------------------------------------------
QPointF VCubicBezier::GetControlPoint1() const
{

View file

@ -73,6 +73,9 @@ public:
virtual qreal GetLength() const Q_DECL_OVERRIDE;
virtual QVector<QPointF> GetPoints() const Q_DECL_OVERRIDE;
virtual qreal GetC1Length() const Q_DECL_OVERRIDE;
virtual qreal GetC2Length() const Q_DECL_OVERRIDE;
protected:
virtual QPointF GetControlPoint1() const Q_DECL_OVERRIDE;
virtual QPointF GetControlPoint2() const Q_DECL_OVERRIDE;

View file

@ -210,6 +210,33 @@ qreal VCubicBezierPath::GetEndAngle() const
}
}
//---------------------------------------------------------------------------------------------------------------------
qreal VCubicBezierPath::GetC1Length() const
{
if (CountSubSpl() > 0)
{
return GetSpline(1).GetC1Length();
}
else
{
return 0;
}
}
//---------------------------------------------------------------------------------------------------------------------
qreal VCubicBezierPath::GetC2Length() const
{
const qint32 count = CountSubSpl();
if (count > 0)
{
return GetSpline(count).GetC2Length();
}
else
{
return 0;
}
}
//---------------------------------------------------------------------------------------------------------------------
QVector<VSplinePoint> VCubicBezierPath::GetSplinePath() const
{

View file

@ -72,6 +72,9 @@ public:
virtual qreal GetStartAngle () const Q_DECL_OVERRIDE;
virtual qreal GetEndAngle () const Q_DECL_OVERRIDE;
virtual qreal GetC1Length() const Q_DECL_OVERRIDE;
virtual qreal GetC2Length() const Q_DECL_OVERRIDE;
virtual QVector<VSplinePoint> GetSplinePath() const Q_DECL_OVERRIDE;
QVector<VPointF> GetCubicPath() const;

View file

@ -14,7 +14,8 @@ SOURCES += \
$$PWD/vabstractcubicbezier.cpp \
$$PWD/vabstractcubicbezierpath.cpp \
$$PWD/vcubicbezierpath.cpp \
$$PWD/vabstractarc.cpp
$$PWD/vabstractarc.cpp \
$$PWD/vabstractbezier.cpp
win32-msvc*:SOURCES += $$PWD/stable.cpp
@ -44,4 +45,5 @@ HEADERS += \
$$PWD/vcubicbezierpath.h \
$$PWD/vcubicbezierpath_p.h \
$$PWD/vabstractarc.h \
$$PWD/vabstractarc_p.h
$$PWD/vabstractarc_p.h \
$$PWD/vabstractbezier.h

View file

@ -85,8 +85,8 @@ public:
void SetStartAngle(qreal angle, const QString &formula);
void SetEndAngle(qreal angle, const QString &formula);
qreal GetC1Length() const;
qreal GetC2Length() const;
virtual qreal GetC1Length() const Q_DECL_OVERRIDE;
virtual qreal GetC2Length() const Q_DECL_OVERRIDE;
QString GetC1LengthFormula() const;
QString GetC2LengthFormula() const;

View file

@ -317,6 +317,32 @@ qreal VSplinePath::GetEndAngle() const
}
}
//---------------------------------------------------------------------------------------------------------------------
qreal VSplinePath::GetC1Length() const
{
if (CountPoints() > 0)
{
return GetSplinePath().first().Length2();
}
else
{
return 0;
}
}
//---------------------------------------------------------------------------------------------------------------------
qreal VSplinePath::GetC2Length() const
{
if (CountPoints() > 0)
{
return GetSplinePath().last().Length1();
}
else
{
return 0;
}
}
//---------------------------------------------------------------------------------------------------------------------
VPointF VSplinePath::FirstPoint() const
{

View file

@ -80,6 +80,9 @@ public:
virtual qreal GetStartAngle () const Q_DECL_OVERRIDE;
virtual qreal GetEndAngle () const Q_DECL_OVERRIDE;
virtual qreal GetC1Length() const Q_DECL_OVERRIDE;
virtual qreal GetC2Length() const Q_DECL_OVERRIDE;
void UpdatePoint(qint32 indexSpline, const SplinePointPosition &pos, const VSplinePoint &point);
VSplinePoint GetSplinePoint(qint32 indexSpline, SplinePointPosition pos) const;

View file

@ -157,8 +157,8 @@ enum class Vis : ToolVisHolderType
ToolFlippingByAxis
};
enum class VarType : char { Measurement, Increment, LineLength, CurveLength, LineAngle, CurveAngle, ArcRadius,
Unknown };
enum class VarType : char { Measurement, Increment, LineLength, CurveLength, CurveCLength, LineAngle, CurveAngle,
ArcRadius, Unknown };
enum class GHeights : unsigned char { ALL,
H92=92, H98=98, H104=104, H110=110, H116=116, H122=122, H128=128, H134=134,

View file

@ -37,5 +37,6 @@
#include "variables/vlineangle.h"
#include "variables/varcradius.h"
#include "variables/vcurveangle.h"
#include "variables/vcurveclength.h"
#endif // VARIABLES_H

View file

@ -0,0 +1,105 @@
/************************************************************************
**
** @file
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 24 9, 2016
**
** @brief
** @copyright
** This source code is part of the Valentine project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2016 Valentina project
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#include "vcurveclength.h"
#include <QLatin1String>
#include <QMessageLogger>
#include "../vmisc/def.h"
#include "../ifc/ifcdef.h"
#include "../vgeometry/vabstractcurve.h"
#include "../vgeometry/vspline.h"
#include "vcurvevariable.h"
//---------------------------------------------------------------------------------------------------------------------
VCurveCLength::VCurveCLength()
: VCurveVariable()
{
SetType(VarType::CurveCLength);
}
//---------------------------------------------------------------------------------------------------------------------
VCurveCLength::VCurveCLength(const quint32 &id, const quint32 &parentId, const VAbstractBezier *curve,
CurveCLength cType, Unit patternUnit)
: VCurveVariable(id, parentId)
{
SetType(VarType::CurveCLength);
SCASSERT(curve != nullptr);
if (cType == CurveCLength::C1)
{
SetValue(FromPixel(curve->GetC1Length(), patternUnit));
SetName(c1Length_V + curve->name());
}
else
{
SetValue(FromPixel(curve->GetC2Length(), patternUnit));
SetName(c2Length_V + curve->name());
}
}
//---------------------------------------------------------------------------------------------------------------------
VCurveCLength::VCurveCLength(const quint32 &id, const quint32 &parentId, const QString &baseCurveName,
const VSpline &spl, CurveCLength cType, Unit patternUnit, qint32 segment)
: VCurveVariable(id, parentId)
{
SetType(VarType::CurveCLength);
if (cType == CurveCLength::C1)
{
SetValue(FromPixel(spl.GetC1Length(), patternUnit));
SetName(c1Length_V + baseCurveName + QLatin1String("_") + seg_ + QString().setNum(segment));
}
else
{
SetValue(FromPixel(spl.GetC2Length(), patternUnit));
SetName(c2Length_V + baseCurveName + QLatin1String("_") + seg_ + QString().setNum(segment));
}
}
//---------------------------------------------------------------------------------------------------------------------
VCurveCLength::VCurveCLength(const VCurveCLength &var)
: VCurveVariable(var)
{
}
//---------------------------------------------------------------------------------------------------------------------
VCurveCLength &VCurveCLength::operator=(const VCurveCLength &var)
{
if ( &var == this )
{
return *this;
}
VCurveVariable::operator=(var);
return *this;
}
//---------------------------------------------------------------------------------------------------------------------
VCurveCLength::~VCurveCLength()
{
}

View file

@ -0,0 +1,56 @@
/************************************************************************
**
** @file
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 24 9, 2016
**
** @brief
** @copyright
** This source code is part of the Valentine project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2016 Valentina project
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#ifndef VCURVECLENGTH_H
#define VCURVECLENGTH_H
#include <qcompilerdetection.h>
#include <QString>
#include <QtGlobal>
#include "vcurvevariable.h"
enum class CurveCLength : char { C1, C2 };
class VAbstractBezier;
class VSpline;
class VCurveCLength : public VCurveVariable
{
public:
VCurveCLength();
VCurveCLength(const quint32 &id, const quint32 &parentId, const VAbstractBezier *curve, CurveCLength cType,
Unit patternUnit);
VCurveCLength(const quint32 &id, const quint32 &parentId, const QString &baseCurveName, const VSpline &spl,
CurveCLength cType, Unit patternUnit, qint32 segment);
VCurveCLength(const VCurveCLength &var);
VCurveCLength &operator=(const VCurveCLength &var);
virtual ~VCurveCLength() Q_DECL_OVERRIDE;
};
#endif // VCURVECLENGTH_H

View file

@ -46,6 +46,7 @@
#include "variables/varcradius.h"
#include "variables/vcurveangle.h"
#include "variables/vcurvelength.h"
#include "variables/vcurveclength.h"
#include "variables/vincrement.h"
#include "variables/vlineangle.h"
#include "variables/vlinelength.h"
@ -276,6 +277,7 @@ void VContainer::ClearForFullParse()
ClearVariables(VarType::LineAngle);
ClearVariables(VarType::LineLength);
ClearVariables(VarType::CurveLength);
ClearVariables(VarType::CurveCLength);
ClearVariables(VarType::ArcRadius);
ClearVariables(VarType::CurveAngle);
ClearGObjects();
@ -407,11 +409,23 @@ void VContainer::AddCurve(const QSharedPointer<VAbstractCurve> &curve, const qui
AddVariable(endAngle->GetName(), endAngle);
}
//---------------------------------------------------------------------------------------------------------------------
void VContainer::AddSpline(const QSharedPointer<VAbstractBezier> &curve, quint32 id, quint32 parentId)
{
AddCurve(curve, id, parentId);
VCurveCLength *c1Length = new VCurveCLength(id, parentId, curve.data(), CurveCLength::C1, *GetPatternUnit());
AddVariable(c1Length->GetName(), c1Length);
VCurveCLength *c2Length = new VCurveCLength(id, parentId, curve.data(), CurveCLength::C2, *GetPatternUnit());
AddVariable(c2Length->GetName(), c2Length);
}
//---------------------------------------------------------------------------------------------------------------------
void VContainer::AddCurveWithSegments(const QSharedPointer<VAbstractCubicBezierPath> &curve, const quint32 &id,
quint32 parentId)
{
AddCurve(curve, id, parentId);
AddSpline(curve, id, parentId);
for (qint32 i = 1; i <= curve->CountSubSpl(); ++i)
{
@ -425,6 +439,14 @@ void VContainer::AddCurveWithSegments(const QSharedPointer<VAbstractCubicBezierP
VCurveAngle *endAngle = new VCurveAngle(id, parentId, curve->name(), spl, CurveAngle::EndAngle, i);
AddVariable(endAngle->GetName(), endAngle);
VCurveCLength *c1Length = new VCurveCLength(id, parentId, curve->name(), spl, CurveCLength::C1,
*GetPatternUnit(), i);
AddVariable(c1Length->GetName(), c1Length);
VCurveCLength *c2Length = new VCurveCLength(id, parentId, curve->name(), spl, CurveCLength::C2,
*GetPatternUnit(), i);
AddVariable(c2Length->GetName(), c2Length);
}
}
@ -524,6 +546,12 @@ const QMap<QString, QSharedPointer<VCurveLength> > VContainer::DataLengthCurves(
return DataVar<VCurveLength>(VarType::CurveLength);
}
//---------------------------------------------------------------------------------------------------------------------
const QMap<QString, QSharedPointer<VCurveCLength> > VContainer::DataCurvesCLength() const
{
return DataVar<VCurveCLength>(VarType::CurveCLength);
}
//---------------------------------------------------------------------------------------------------------------------
const QMap<QString, QSharedPointer<VLineAngle> > VContainer::DataAngleLines() const
{

View file

@ -140,9 +140,8 @@ public:
quint32 AddGObject(VGObject *obj);
quint32 AddDetail(const VDetail &detail);
void AddLine(const quint32 &firstPointId, const quint32 &secondPointId);
void AddArc(const QSharedPointer<VArc> &arc, const quint32 &arcId, const quint32 &parentId = 0);
void AddCurve(const QSharedPointer<VAbstractCurve> &curve, const quint32 &id,
quint32 parentId = NULL_ID);
void AddArc(const QSharedPointer<VArc> &arc, const quint32 &arcId, const quint32 &parentId = NULL_ID);
void AddSpline(const QSharedPointer<VAbstractBezier> &curve, quint32 id, quint32 parentId = NULL_ID);
void AddCurveWithSegments(const QSharedPointer<VAbstractCubicBezierPath> &curve, const quint32 &id,
quint32 parentId = NULL_ID);
@ -176,13 +175,14 @@ public:
const QHash<quint32, VDetail> *DataDetails() const;
const QHash<QString, QSharedPointer<VInternalVariable>> *DataVariables() const;
const QMap<QString, QSharedPointer<VMeasurement> > DataMeasurements() const;
const QMap<QString, QSharedPointer<VIncrement> > DataIncrements() const;
const QMap<QString, QSharedPointer<VLengthLine> > DataLengthLines() const;
const QMap<QString, QSharedPointer<VCurveLength> > DataLengthCurves() const;
const QMap<QString, QSharedPointer<VLineAngle> > DataAngleLines() const;
const QMap<QString, QSharedPointer<VArcRadius> > DataRadiusesArcs() const;
const QMap<QString, QSharedPointer<VCurveAngle> > DataAnglesCurves() const;
const QMap<QString, QSharedPointer<VMeasurement> > DataMeasurements() const;
const QMap<QString, QSharedPointer<VIncrement> > DataIncrements() const;
const QMap<QString, QSharedPointer<VLengthLine> > DataLengthLines() const;
const QMap<QString, QSharedPointer<VCurveLength> > DataLengthCurves() const;
const QMap<QString, QSharedPointer<VCurveCLength> > DataCurvesCLength() const;
const QMap<QString, QSharedPointer<VLineAngle> > DataAngleLines() const;
const QMap<QString, QSharedPointer<VArcRadius> > DataRadiusesArcs() const;
const QMap<QString, QSharedPointer<VCurveAngle> > DataAnglesCurves() const;
const QHash<QString, qreal *> PlainVariables() const;
@ -203,6 +203,8 @@ private:
QSharedDataPointer<VContainerData> d;
void AddCurve(const QSharedPointer<VAbstractCurve> &curve, const quint32 &id, quint32 parentId = NULL_ID);
template <class T>
uint qHash( const QSharedPointer<T> &p );

View file

@ -541,6 +541,12 @@ QVector<VNodeDetail> VDetail::listNodePoint() const
return list;
}
//---------------------------------------------------------------------------------------------------------------------
void VDetail::SetPatternPieceData(const VPatternPieceData &data)
{
d->m_ppData = data;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief Returns full access to the pattern piece data object
@ -561,6 +567,12 @@ const VPatternPieceData& VDetail::GetPatternPieceData() const
return d->m_ppData;
}
//---------------------------------------------------------------------------------------------------------------------
void VDetail::SetPatternInfo(const VPatternInfoGeometry &info)
{
d->m_piPatternInfo = info;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief Returns full access to the pattern info geometry object

View file

@ -98,9 +98,13 @@ public:
QPainterPath ContourPath(const VContainer *data) const;
QPainterPath SeamAllowancePath(const VContainer *data) const;
QVector<VNodeDetail> listNodePoint()const;
VPatternPieceData& GetPatternPieceData();
void SetPatternPieceData(const VPatternPieceData &data);
VPatternPieceData& GetPatternPieceData();
const VPatternPieceData& GetPatternPieceData() const;
VPatternInfoGeometry& GetPatternInfo();
void SetPatternInfo(const VPatternInfoGeometry &info);
VPatternInfoGeometry& GetPatternInfo();
const VPatternInfoGeometry& GetPatternInfo() const;
VGrainlineGeometry& GetGrainlineGeometry();
const VGrainlineGeometry& GetGrainlineGeometry() const;

View file

@ -20,7 +20,8 @@ SOURCES += \
$$PWD/vformula.cpp \
$$PWD/vpatternpiecedata.cpp \
$$PWD/vpatterninfogeometry.cpp \
$$PWD/vgrainlinegeometry.cpp
$$PWD/vgrainlinegeometry.cpp \
$$PWD/variables/vcurveclength.cpp
win32-msvc*:SOURCES += $$PWD/stable.cpp
@ -55,4 +56,5 @@ HEADERS += \
$$PWD/vformula.h \
$$PWD/vpatternpiecedata.h \
$$PWD/vpatterninfogeometry.h \
$$PWD/vgrainlinegeometry.h
$$PWD/vgrainlinegeometry.h \
$$PWD/variables/vcurveclength.h

View file

@ -390,6 +390,12 @@ void VTranslateVars::InitVariables()
"Do not add symbol _ to the end of the name"));
variables.insert(seg_, translate("VTranslateVars", "Seg_", "Segment. Left symbol _ in the name"));
variables.insert(currentLength, translate("VTranslateVars", "CurrentLength", "Do not add space between words"));
variables.insert(c1LengthSpl_, translate("VTranslateVars", "C1LengthSpl_", "Left symbol _ in the name"));
variables.insert(c2LengthSpl_, translate("VTranslateVars", "C2LengthSpl_", "Left symbol _ in the name"));
variables.insert(c1LengthSplPath, translate("VTranslateVars", "C1LengthSplPath",
"Do not add symbol _ to the end of the name"));
variables.insert(c2LengthSplPath, translate("VTranslateVars", "C2LengthSplPath",
"Do not add symbol _ to the end of the name"));
}
//---------------------------------------------------------------------------------------------------------------------

View file

@ -297,6 +297,13 @@ void DialogEditWrongFormula::LengthCurves()
ShowVariable(data->DataLengthCurves());
}
//---------------------------------------------------------------------------------------------------------------------
void DialogEditWrongFormula::CurvesCLength()
{
ui->checkBoxHideEmpty->setEnabled(false);
ShowVariable(data->DataCurvesCLength());
}
//---------------------------------------------------------------------------------------------------------------------
void DialogEditWrongFormula::AngleLines()
{
@ -399,6 +406,7 @@ void DialogEditWrongFormula::InitVariables()
connect(ui->checkBoxHideEmpty, &QCheckBox::stateChanged, this, &DialogEditWrongFormula::Measurements);
connect(ui->radioButtonRadiusesArcs, &QRadioButton::clicked, this, &DialogEditWrongFormula::RadiusArcs);
connect(ui->radioButtonAnglesCurves, &QRadioButton::clicked, this, &DialogEditWrongFormula::AnglesCurves);
connect(ui->radioButtonCLength, &QRadioButton::clicked, this, &DialogEditWrongFormula::CurvesCLength);
connect(ui->radioButtonFunctions, &QRadioButton::clicked, this, &DialogEditWrongFormula::Functions);
}

View file

@ -88,6 +88,7 @@ public slots:
void RadiusArcs();
void AnglesCurves();
void LengthCurves();
void CurvesCLength();
void AngleLines();
void Increments();
void Functions();

View file

@ -9,8 +9,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>390</width>
<height>453</height>
<width>448</width>
<height>425</height>
</rect>
</property>
<property name="windowTitle">
@ -329,6 +329,13 @@
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButtonCLength">
<property name="text">
<string>Lengths to control points</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButtonFunctions">
<property name="sizePolicy">

View file

@ -103,7 +103,7 @@ DestinationItem VAbstractFlipping::CreateCurve(quint32 idTool, quint32 idItem, c
const QPointF &secondPoint, const QString &suffix, VContainer *data)
{
const DestinationItem item = CreateItem<Item>(idTool, idItem, firstPoint, secondPoint, suffix, data);
data->AddCurve(data->GeometricObject<Item>(item.id), item.id);
data->AddSpline(data->GeometricObject<Item>(item.id), item.id);
return item;
}
@ -135,7 +135,7 @@ void VAbstractFlipping::UpdateCurve(quint32 idTool, quint32 idItem, const QPoint
const QPointF &secondPoint, const QString &suffix, VContainer *data, quint32 id)
{
UpdateItem<Item>(idTool, idItem, firstPoint, secondPoint, suffix, data, id);
data->AddCurve(data->GeometricObject<Item>(id), id);
data->AddSpline(data->GeometricObject<Item>(id), id);
}
//---------------------------------------------------------------------------------------------------------------------

View file

@ -174,7 +174,7 @@ void VToolFlippingByAxis::ShowVisualization(bool show)
//---------------------------------------------------------------------------------------------------------------------
void VToolFlippingByAxis::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolFlippingByAxis *visual = qobject_cast<VisToolFlippingByAxis *>(vis);
SCASSERT(visual != nullptr);

View file

@ -154,7 +154,7 @@ void VToolFlippingByLine::ShowVisualization(bool show)
//---------------------------------------------------------------------------------------------------------------------
void VToolFlippingByLine::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolFlippingByLine *visual = qobject_cast<VisToolFlippingByLine *>(vis);
SCASSERT(visual != nullptr);

View file

@ -156,7 +156,7 @@ void VAbstractOperation::ShowToolVisualization(bool show)
{
if (show)
{
if (vis == nullptr)
if (vis.isNull())
{
AddVisualization<T>();
SetVisualization();
@ -172,7 +172,6 @@ void VAbstractOperation::ShowToolVisualization(bool show)
else
{
delete vis;
vis = nullptr;
}
}

View file

@ -285,7 +285,7 @@ void VToolRotation::ShowVisualization(bool show)
//---------------------------------------------------------------------------------------------------------------------
void VToolRotation::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolRotation *visual = qobject_cast<VisToolRotation *>(vis);
SCASSERT(visual != nullptr);
@ -390,7 +390,7 @@ DestinationItem VToolRotation::CreateCurve(quint32 idTool, quint32 idItem, const
const QString &suffix, VContainer *data)
{
const DestinationItem item = CreateItem<Item>(idTool, idItem, origin, angle, suffix, data);
data->AddCurve(data->GeometricObject<Item>(item.id), item.id);
data->AddSpline(data->GeometricObject<Item>(item.id), item.id);
return item;
}
@ -429,7 +429,7 @@ void VToolRotation::UpdateItem(quint32 idTool, quint32 idItem, const QPointF &or
//---------------------------------------------------------------------------------------------------------------------
void VToolRotation::UpdateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle,
const QString &suffix, VContainer *data, quint32 id)
const QString &suffix, VContainer *data, quint32 id)
{
UpdateItem<VArc>(idTool, idItem, origin, angle, suffix, data, id);
data->AddArc(data->GeometricObject<VArc>(id), id);
@ -438,16 +438,16 @@ void VToolRotation::UpdateArc(quint32 idTool, quint32 idItem, const QPointF &ori
//---------------------------------------------------------------------------------------------------------------------
template <class Item>
void VToolRotation::UpdateCurve(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle,
const QString &suffix, VContainer *data, quint32 id)
const QString &suffix, VContainer *data, quint32 id)
{
UpdateItem<Item>(idTool, idItem, origin, angle, suffix, data, id);
data->AddCurve(data->GeometricObject<Item>(id), id);
data->AddSpline(data->GeometricObject<Item>(id), id);
}
//---------------------------------------------------------------------------------------------------------------------
template <class Item>
void VToolRotation::UpdateCurveWithSegments(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle,
const QString &suffix, VContainer *data, quint32 id)
const QString &suffix, VContainer *data, quint32 id)
{
UpdateItem<Item>(idTool, idItem, origin, angle, suffix, data, id);
data->AddCurveWithSegments(data->GeometricObject<Item>(id), id);

View file

@ -144,7 +144,7 @@ inline void VAbstractSpline::ShowToolVisualization(bool show)
{
if (show)
{
if (vis == nullptr)
if (vis.isNull())
{
AddVisualization<T>();
SetVisualization();
@ -160,7 +160,6 @@ inline void VAbstractSpline::ShowToolVisualization(bool show)
else
{
delete vis;
vis = nullptr;
}
if (detailsMode)

View file

@ -365,7 +365,7 @@ void VToolArc::SaveOptions(QDomElement &tag, QSharedPointer<VGObject> &obj)
//---------------------------------------------------------------------------------------------------------------------
void VToolArc::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
const QSharedPointer<VArc> arc = VAbstractTool::data.GeometricObject<VArc>(id);
VisToolArc *visual = qobject_cast<VisToolArc *>(vis);

View file

@ -322,7 +322,7 @@ void VToolArcWithLength::SaveOptions(QDomElement &tag, QSharedPointer<VGObject>
//---------------------------------------------------------------------------------------------------------------------
void VToolArcWithLength::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
const QSharedPointer<VArc> arc = VAbstractTool::data.GeometricObject<VArc>(id);
VisToolArcWithLength *visual = qobject_cast<VisToolArcWithLength *>(vis);

View file

@ -117,12 +117,12 @@ VToolCubicBezier *VToolCubicBezier::Create(const quint32 _id, VCubicBezier *spli
if (typeCreation == Source::FromGui)
{
id = data->AddGObject(spline);
data->AddCurve(data->GeometricObject<VAbstractCurve>(id), id);
data->AddSpline(data->GeometricObject<VAbstractBezier>(id), id);
}
else
{
data->UpdateGObject(id, spline);
data->AddCurve(data->GeometricObject<VAbstractCurve>(id), id);
data->AddSpline(data->GeometricObject<VAbstractBezier>(id), id);
if (parse != Document::FullParse)
{
doc->UpdateToolData(id, data);
@ -216,7 +216,7 @@ void VToolCubicBezier::SaveOptions(QDomElement &tag, QSharedPointer<VGObject> &o
//---------------------------------------------------------------------------------------------------------------------
void VToolCubicBezier::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
auto visual = qobject_cast<VisToolCubicBezier *>(vis);
SCASSERT(visual != nullptr);

View file

@ -226,7 +226,7 @@ void VToolCubicBezierPath::SaveOptions(QDomElement &tag, QSharedPointer<VGObject
//---------------------------------------------------------------------------------------------------------------------
void VToolCubicBezierPath::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
auto visual = qobject_cast<VisToolCubicBezierPath *>(vis);
SCASSERT(visual != nullptr);

View file

@ -196,12 +196,12 @@ VToolSpline* VToolSpline::Create(const quint32 _id, VSpline *spline, const QStri
if (typeCreation == Source::FromGui)
{
id = data->AddGObject(spline);
data->AddCurve(data->GeometricObject<VAbstractCurve>(id), id);
data->AddSpline(data->GeometricObject<VAbstractBezier>(id), id);
}
else
{
data->UpdateGObject(id, spline);
data->AddCurve(data->GeometricObject<VAbstractCurve>(id), id);
data->AddSpline(data->GeometricObject<VAbstractBezier>(id), id);
if (parse != Document::FullParse)
{
doc->UpdateToolData(id, data);
@ -500,7 +500,7 @@ void VToolSpline::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
//---------------------------------------------------------------------------------------------------------------------
void VToolSpline::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolSpline *visual = qobject_cast<VisToolSpline *>(vis);
SCASSERT(visual != nullptr);

View file

@ -621,7 +621,7 @@ void VToolSplinePath::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
//---------------------------------------------------------------------------------------------------------------------
void VToolSplinePath::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolSplinePath *visual = qobject_cast<VisToolSplinePath *>(vis);
SCASSERT(visual != nullptr);

View file

@ -376,7 +376,7 @@ void VToolTrueDarts::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolTrueDarts::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolTrueDarts *visual = qobject_cast<VisToolTrueDarts *>(vis);
SCASSERT(visual != nullptr);

View file

@ -89,7 +89,7 @@ inline void VToolCut::ShowToolVisualization(bool show)
{
if (show)
{
if (vis == nullptr)
if (vis.isNull())
{
AddVisualization<T>();
SetVisualization();
@ -105,7 +105,6 @@ inline void VToolCut::ShowToolVisualization(bool show)
else
{
delete vis;
vis = nullptr;
}
if (VAbstractSpline *parentCurve = qobject_cast<VAbstractSpline *>(doc->getTool(curveCutId)))
{

View file

@ -241,7 +241,7 @@ void VToolCutArc::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolCutArc::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolCutArc *visual = qobject_cast<VisToolCutArc *>(vis);
SCASSERT(visual != nullptr);

View file

@ -150,20 +150,20 @@ VToolCutSpline* VToolCutSpline::Create(const quint32 _id, const QString &pointNa
quint32 id = _id;
VPointF *p = new VPointF(point, pointName, mx, my);
auto spline1 = QSharedPointer<VAbstractCurve>(new VSpline(spl->GetP1(), spl1p2, spl1p3, *p));
auto spline2 = QSharedPointer<VAbstractCurve>(new VSpline(*p, spl2p2, spl2p3, spl->GetP4()));
auto spline1 = QSharedPointer<VAbstractBezier>(new VSpline(spl->GetP1(), spl1p2, spl1p3, *p));
auto spline2 = QSharedPointer<VAbstractBezier>(new VSpline(*p, spl2p2, spl2p3, spl->GetP4()));
if (typeCreation == Source::FromGui)
{
id = data->AddGObject(p);
data->AddCurve(spline1, NULL_ID, id);
data->AddCurve(spline2, NULL_ID, id);
data->AddSpline(spline1, NULL_ID, id);
data->AddSpline(spline2, NULL_ID, id);
}
else
{
data->UpdateGObject(id, p);
data->AddCurve(spline1, NULL_ID, id);
data->AddCurve(spline2, NULL_ID, id);
data->AddSpline(spline1, NULL_ID, id);
data->AddSpline(spline2, NULL_ID, id);
if (parse != Document::FullParse)
{
@ -241,7 +241,7 @@ void VToolCutSpline::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolCutSpline::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolCutSpline *visual = qobject_cast<VisToolCutSpline *>(vis);
SCASSERT(visual != nullptr);

View file

@ -166,15 +166,15 @@ VToolCutSplinePath* VToolCutSplinePath::Create(const quint32 _id, const QString
{
id = data->AddGObject(p);
data->AddCurve(QSharedPointer<VAbstractCurve>(splPath1), NULL_ID, id);
data->AddCurve(QSharedPointer<VAbstractCurve>(splPath2), NULL_ID, id);
data->AddSpline(QSharedPointer<VAbstractBezier>(splPath1), NULL_ID, id);
data->AddSpline(QSharedPointer<VAbstractBezier>(splPath2), NULL_ID, id);
}
else
{
data->UpdateGObject(id, p);
data->AddCurve(QSharedPointer<VAbstractCurve>(splPath1), NULL_ID, id);
data->AddCurve(QSharedPointer<VAbstractCurve>(splPath2), NULL_ID, id);
data->AddSpline(QSharedPointer<VAbstractBezier>(splPath1), NULL_ID, id);
data->AddSpline(QSharedPointer<VAbstractBezier>(splPath2), NULL_ID, id);
if (parse != Document::FullParse)
{
@ -329,7 +329,7 @@ void VToolCutSplinePath::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolCutSplinePath::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolCutSplinePath *visual = qobject_cast<VisToolCutSplinePath *>(vis);
SCASSERT(visual != nullptr);

View file

@ -164,7 +164,7 @@ void VToolAlongLine::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolAlongLine::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolAlongLine *visual = qobject_cast<VisToolAlongLine *>(vis);
SCASSERT(visual != nullptr)

View file

@ -320,7 +320,7 @@ void VToolBisector::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolBisector::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolBisector *visual = qobject_cast<VisToolBisector *>(vis);
SCASSERT(visual != nullptr);

View file

@ -313,7 +313,7 @@ void VToolCurveIntersectAxis::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolCurveIntersectAxis::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolCurveIntersectAxis *visual = qobject_cast<VisToolCurveIntersectAxis *>(vis);
SCASSERT(visual != nullptr);
@ -378,8 +378,8 @@ void VToolCurveIntersectAxis::InitSegments(const GOType &curveType, qreal segLen
case GOType::CubicBezier:
case GOType::Spline:
{
QSharedPointer<VAbstractCurve> spline1;
QSharedPointer<VAbstractCurve> spline2;
QSharedPointer<VAbstractBezier> spline1;
QSharedPointer<VAbstractBezier> spline2;
const auto spl = data->GeometricObject<VAbstractCubicBezier>(curveId);
QPointF spl1p2, spl1p3, spl2p2, spl2p3;
@ -397,13 +397,13 @@ void VToolCurveIntersectAxis::InitSegments(const GOType &curveType, qreal segLen
if (not VFuzzyComparePossibleNulls(segLength, -1))
{
spline1 = QSharedPointer<VAbstractCurve>(spl1);
spline2 = QSharedPointer<VAbstractCurve>(spl2);
spline1 = QSharedPointer<VAbstractBezier>(spl1);
spline2 = QSharedPointer<VAbstractBezier>(spl2);
}
else
{
spline1 = QSharedPointer<VAbstractCurve>(new VSpline());
spline2 = QSharedPointer<VAbstractCurve>(new VSpline());
spline1 = QSharedPointer<VAbstractBezier>(new VSpline());
spline2 = QSharedPointer<VAbstractBezier>(new VSpline());
// Take names for empty splines from donors.
spline1->setName(spl1->name());
@ -413,15 +413,15 @@ void VToolCurveIntersectAxis::InitSegments(const GOType &curveType, qreal segLen
delete spl2;
}
data->AddCurve(spline1, NULL_ID, p->id());
data->AddCurve(spline2, NULL_ID, p->id());
data->AddSpline(spline1, NULL_ID, p->id());
data->AddSpline(spline2, NULL_ID, p->id());
break;
}
case GOType::CubicBezierPath:
case GOType::SplinePath:
{
QSharedPointer<VAbstractCurve> splP1;
QSharedPointer<VAbstractCurve> splP2;
QSharedPointer<VAbstractBezier> splP1;
QSharedPointer<VAbstractBezier> splP2;
const auto splPath = data->GeometricObject<VAbstractCubicBezierPath>(curveId);
VSplinePath *splPath1 = nullptr;
@ -442,13 +442,13 @@ void VToolCurveIntersectAxis::InitSegments(const GOType &curveType, qreal segLen
if (not VFuzzyComparePossibleNulls(segLength, -1))
{
splP1 = QSharedPointer<VAbstractCurve>(splPath1);
splP2 = QSharedPointer<VAbstractCurve>(splPath2);
splP1 = QSharedPointer<VAbstractBezier>(splPath1);
splP2 = QSharedPointer<VAbstractBezier>(splPath2);
}
else
{
splP1 = QSharedPointer<VAbstractCurve>(new VSplinePath());
splP2 = QSharedPointer<VAbstractCurve>(new VSplinePath());
splP1 = QSharedPointer<VAbstractBezier>(new VSplinePath());
splP2 = QSharedPointer<VAbstractBezier>(new VSplinePath());
// Take names for empty spline paths from donors.
splP1->setName(splPath1->name());
@ -458,8 +458,8 @@ void VToolCurveIntersectAxis::InitSegments(const GOType &curveType, qreal segLen
delete splPath2;
}
data->AddCurve(splP1, NULL_ID, p->id());
data->AddCurve(splP2, NULL_ID, p->id());
data->AddSpline(splP1, NULL_ID, p->id());
data->AddSpline(splP2, NULL_ID, p->id());
break;
}
case GOType::EllipticalArc:

View file

@ -254,7 +254,7 @@ void VToolEndLine::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolEndLine::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolEndLine *visual = qobject_cast<VisToolEndLine *>(vis);
SCASSERT(visual != nullptr);

View file

@ -261,7 +261,7 @@ void VToolHeight::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolHeight::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolHeight *visual = qobject_cast<VisToolHeight *>(vis);
SCASSERT(visual != nullptr);

View file

@ -313,7 +313,7 @@ void VToolLineIntersectAxis::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolLineIntersectAxis::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolLineIntersectAxis *visual = qobject_cast<VisToolLineIntersectAxis *>(vis);
SCASSERT(visual != nullptr);

View file

@ -295,7 +295,7 @@ void VToolNormal::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolNormal::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolNormal *visual = qobject_cast<VisToolNormal *>(vis);
SCASSERT(visual != nullptr);

View file

@ -326,7 +326,7 @@ void VToolShoulderPoint::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolShoulderPoint::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolShoulderPoint *visual = qobject_cast<VisToolShoulderPoint *>(vis);
SCASSERT(visual != nullptr);

View file

@ -286,7 +286,7 @@ void VToolLineIntersect::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolLineIntersect::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolLineIntersect *visual = qobject_cast<VisToolLineIntersect *>(vis);
SCASSERT(visual != nullptr);
@ -295,7 +295,7 @@ void VToolLineIntersect::SetVisualization()
visual->setLine1P2Id(p2Line1);
visual->setLine2P1Id(p1Line2);
visual->setLine2P2Id(p2Line2);
vis->RefreshGeometry();
visual->RefreshGeometry();
}
}

View file

@ -336,7 +336,7 @@ void VToolPointFromArcAndTangent::ReadToolAttributes(const QDomElement &domEleme
//---------------------------------------------------------------------------------------------------------------------
void VToolPointFromArcAndTangent::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolPointFromArcAndTangent *visual = qobject_cast<VisToolPointFromArcAndTangent *>(vis);
SCASSERT(visual != nullptr);

View file

@ -323,7 +323,7 @@ void VToolPointFromCircleAndTangent::ReadToolAttributes(const QDomElement &domEl
//---------------------------------------------------------------------------------------------------------------------
void VToolPointFromCircleAndTangent::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolPointFromCircleAndTangent *visual = qobject_cast<VisToolPointFromCircleAndTangent *>(vis);
SCASSERT(visual != nullptr);

View file

@ -339,7 +339,7 @@ void VToolPointOfContact::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolPointOfContact::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolPointOfContact *visual = qobject_cast<VisToolPointOfContact *>(vis);
SCASSERT(visual != nullptr);

View file

@ -237,7 +237,7 @@ void VToolPointOfIntersection::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolPointOfIntersection::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolPointOfIntersection *visual = qobject_cast<VisToolPointOfIntersection *>(vis);
SCASSERT(visual != nullptr);

View file

@ -341,7 +341,7 @@ void VToolPointOfIntersectionArcs::ReadToolAttributes(const QDomElement &domElem
//---------------------------------------------------------------------------------------------------------------------
void VToolPointOfIntersectionArcs::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolPointOfIntersectionArcs *visual = qobject_cast<VisToolPointOfIntersectionArcs *>(vis);
SCASSERT(visual != nullptr);

View file

@ -362,7 +362,7 @@ void VToolPointOfIntersectionCircles::ReadToolAttributes(const QDomElement &domE
//---------------------------------------------------------------------------------------------------------------------
void VToolPointOfIntersectionCircles::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolPointOfIntersectionCircles *visual = qobject_cast<VisToolPointOfIntersectionCircles *>(vis);
SCASSERT(visual != nullptr);

View file

@ -404,7 +404,7 @@ void VToolPointOfIntersectionCurves::ReadToolAttributes(const QDomElement &domEl
//---------------------------------------------------------------------------------------------------------------------
void VToolPointOfIntersectionCurves::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
auto visual = qobject_cast<VisToolPointOfIntersectionCurves *>(vis);
SCASSERT(visual != nullptr);

View file

@ -307,7 +307,7 @@ void VToolTriangle::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolTriangle::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolTriangle * visual = qobject_cast<VisToolTriangle *>(vis);
SCASSERT(visual != nullptr);

View file

@ -95,7 +95,7 @@ void VAbstractPoint::ShowToolVisualization(bool show)
{
if (show)
{
if (vis == nullptr)
if (vis.isNull())
{
AddVisualization<T>();
SetVisualization();
@ -111,7 +111,6 @@ void VAbstractPoint::ShowToolVisualization(bool show)
else
{
delete vis;
vis = nullptr;
}
}

View file

@ -319,7 +319,7 @@ void VToolLine::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
void VToolLine::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event);
if (vis == nullptr)
if (vis.isNull())
{
this->setPen(QPen(CorrectColor(lineColor),
qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor,
@ -421,7 +421,7 @@ void VToolLine::ReadToolAttributes(const QDomElement &domElement)
//---------------------------------------------------------------------------------------------------------------------
void VToolLine::SetVisualization()
{
if (vis != nullptr)
if (not vis.isNull())
{
VisToolLine *visual = qobject_cast<VisToolLine *>(vis);
SCASSERT(visual != nullptr);
@ -456,7 +456,7 @@ void VToolLine::ShowVisualization(bool show)
{
if (show)
{
if (vis == nullptr)
if (vis.isNull())
{
AddVisualization<VisToolLine>();
SetVisualization();
@ -472,7 +472,6 @@ void VToolLine::ShowVisualization(bool show)
else
{
delete vis;
vis = nullptr;
hoverLeaveEvent(nullptr);
}
}

View file

@ -83,7 +83,7 @@ const QString VAbstractTool::AttrInUse = QStringLiteral("inUse");
* @param parent parent object.
*/
VAbstractTool::VAbstractTool(VAbstractPattern *doc, VContainer *data, quint32 id, QObject *parent)
:VDataTool(data, parent), doc(doc), id(id), baseColor(Qt::black), vis(nullptr),
:VDataTool(data, parent), doc(doc), id(id), baseColor(Qt::black), vis(),
selectionType(SelectionType::ByMouseRelease)
{
SCASSERT(doc != nullptr);
@ -94,7 +94,12 @@ VAbstractTool::VAbstractTool(VAbstractPattern *doc, VContainer *data, quint32 id
//---------------------------------------------------------------------------------------------------------------------
VAbstractTool::~VAbstractTool()
{}
{
if (not vis.isNull())
{
delete vis;
}
}
//---------------------------------------------------------------------------------------------------------------------
/**

View file

@ -122,7 +122,7 @@ protected:
/** @brief baseColor base color for tool. */
Qt::GlobalColor baseColor;
Visualization *vis;
QPointer<Visualization> vis;
SelectionType selectionType;
/**
@ -182,8 +182,8 @@ inline void VAbstractTool::AddVisualization()
connect(scene, &VMainGraphicsScene::NewFactor, visual, &Visualization::SetFactor);
scene->addItem(visual);
connect(visual, &Visualization::ToolTip, [=] (const QString &toolTip) {emit ToolTip(toolTip);});
vis = visual;
connect(vis, &Visualization::ToolTip, [=] (const QString &toolTip) {emit ToolTip(toolTip);});
}
#endif // VABSTRACTTOOL_H

View file

@ -313,6 +313,8 @@ void VToolDetail::Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstrac
det.setClosed(detail.getClosed());
det.setSeamAllowance(detail.getSeamAllowance());
det.setForbidFlipping(detail.getForbidFlipping());
det.SetPatternPieceData(detail.GetPatternPieceData());
det.SetPatternInfo(detail.GetPatternInfo());
Create(0, det, scene, doc, data, Document::FullParse, Source::FromGui);
}
@ -486,6 +488,7 @@ void VToolDetail::AddToFile()
doc->SetAttribute(domData, AttrHeight, geom.GetLabelHeight());
doc->SetAttribute(domData, AttrFont, geom.GetFontSize());
doc->SetAttribute(domData, AttrRotation, geom.GetRotation());
domElement.appendChild(domData);
// grainline
domData = doc->createElement(VAbstractPattern::TagGrainline);

View file

@ -28,6 +28,8 @@
#include "vabstractsimple.h"
const qreal VAbstractSimple::m_defFactor = 1;
//---------------------------------------------------------------------------------------------------------------------
VAbstractSimple::VAbstractSimple(quint32 id, const QColor &currentColor, Unit patternUnit, qreal *factor,
QObject *parent)
@ -39,7 +41,12 @@ VAbstractSimple::VAbstractSimple(quint32 id, const QColor &currentColor, Unit pa
patternUnit(patternUnit),
selectionType(SelectionType::ByMouseRelease),
type(GOType::Unknown)
{}
{
if (this->factor == nullptr)
{
this->factor = const_cast<qreal *>(&m_defFactor);
}
}
//---------------------------------------------------------------------------------------------------------------------
VAbstractSimple::~VAbstractSimple()
@ -71,6 +78,12 @@ QColor VAbstractSimple::GetCurrentColor() const
return currentColor;
}
//---------------------------------------------------------------------------------------------------------------------
void VAbstractSimple::SetEnabled(bool enabled)
{
this->enabled = enabled;
}
//---------------------------------------------------------------------------------------------------------------------
void VAbstractSimple::ContextMenu(QGraphicsSceneContextMenuEvent *event)
{

View file

@ -49,14 +49,14 @@ class VAbstractSimple : public QObject
Q_OBJECT
public:
VAbstractSimple(quint32 id, const QColor &currentColor, Unit patternUnit, qreal *factor = nullptr,
QObject *parent = 0);
QObject *parent = nullptr);
virtual ~VAbstractSimple();
virtual void ToolSelectionType(const SelectionType &type);
QColor GetCurrentColor() const;
virtual void SetEnabled(bool enabled) { Q_UNUSED(enabled); }
virtual void SetEnabled(bool enabled);
GOType GetType() const;
void SetType(const GOType &value);
@ -91,45 +91,18 @@ protected:
template <class T>
void SetPen(T *item, const QColor &color, qreal width);
template <class T>
void SimpleChangedActivDraw(T *item, const bool &flag);
template <class T>
void SetSimpleCurrentColor(T *item, const QColor &value);
private:
Q_DISABLE_COPY(VAbstractSimple)
const static qreal m_defFactor;
};
//---------------------------------------------------------------------------------------------------------------------
template <class T>
void VAbstractSimple::SetPen(T *item, const QColor &color, qreal width)
{
if (factor == nullptr)
{
item->setPen(QPen(CorrectColor(color), ToPixel(width, patternUnit), Qt::SolidLine, Qt::RoundCap));
}
else
{
item->setPen(QPen(CorrectColor(color), ToPixel(width, patternUnit)/ *factor, Qt::SolidLine, Qt::RoundCap));
}
}
//---------------------------------------------------------------------------------------------------------------------
template <class T>
void VAbstractSimple::SimpleChangedActivDraw(T *item, const bool &flag)
{
enabled = flag;
item->setEnabled(enabled);
SetPen(item, currentColor, WidthHairLine(patternUnit));
}
//---------------------------------------------------------------------------------------------------------------------
template <class T>
void VAbstractSimple::SetSimpleCurrentColor(T *item, const QColor &value)
{
currentColor = value;
SetPen(item, CorrectColor(currentColor), item->pen().widthF());
SCASSERT(item);
item->setPen(QPen(CorrectColor(color), ToPixel(width, patternUnit)/ *factor, Qt::SolidLine, Qt::RoundCap));
}
#endif // VABSTRACTSIMPLE_H

View file

@ -66,18 +66,6 @@ VSimpleCurve::~VSimpleCurve()
{
}
//---------------------------------------------------------------------------------------------------------------------
void VSimpleCurve::SetCurrentColor(const QColor &value)
{
SetSimpleCurrentColor(this, value);
}
//---------------------------------------------------------------------------------------------------------------------
void VSimpleCurve::ChangedActivDraw(bool flag)
{
SimpleChangedActivDraw(this, flag);
}
//---------------------------------------------------------------------------------------------------------------------
void VSimpleCurve::RefreshGeometry(const QSharedPointer<VAbstractCurve> &curve)
{
@ -85,6 +73,13 @@ void VSimpleCurve::RefreshGeometry(const QSharedPointer<VAbstractCurve> &curve)
ShowPath();
}
//---------------------------------------------------------------------------------------------------------------------
void VSimpleCurve::SetEnabled(bool enabled)
{
VAbstractSimple::SetEnabled(enabled);
SetPen(this, currentColor, WidthHairLine(patternUnit));
}
//---------------------------------------------------------------------------------------------------------------------
void VSimpleCurve::CurveChoosed()
{

View file

@ -61,10 +61,9 @@ public:
virtual int type() const Q_DECL_OVERRIDE {return Type;}
enum { Type = UserType + static_cast<int>(Vis::SimpleCurve)};
void SetCurrentColor(const QColor &value);
void ChangedActivDraw(bool flag);
void RefreshGeometry(const QSharedPointer<VAbstractCurve> &curve);
virtual void SetEnabled(bool enabled) Q_DECL_OVERRIDE;
signals:
/**
* @brief Choosed send id when clicked.

View file

@ -73,18 +73,6 @@ VSimplePoint::VSimplePoint(quint32 id, const QColor &currentColor, Unit patternU
VSimplePoint::~VSimplePoint()
{}
//---------------------------------------------------------------------------------------------------------------------
void VSimplePoint::SetCurrentColor(const QColor &value)
{
SetSimpleCurrentColor(this, value);
}
//---------------------------------------------------------------------------------------------------------------------
void VSimplePoint::ChangedActivDraw(bool flag)
{
SimpleChangedActivDraw(this, flag);
}
//---------------------------------------------------------------------------------------------------------------------
void VSimplePoint::RefreshLine()
{
@ -97,7 +85,7 @@ void VSimplePoint::RefreshLine()
VGObject::LineIntersectCircle(QPointF(), radius, QLineF(QPointF(), nameRec.center() - scenePos()), p1, p2);
const QPointF pRec = VGObject::LineIntersectRect(nameRec, QLineF(scenePos(), nameRec.center()));
lineName->setLine(QLineF(p1, pRec - scenePos()));
SetPen(lineName, QColor(Qt::black), WidthHairLine(patternUnit));
SetPen(lineName, Qt::black, WidthHairLine(patternUnit));
if (QLineF(p1, pRec - scenePos()).length() <= ToPixel(4, Unit::Mm))
{
@ -126,14 +114,7 @@ void VSimplePoint::RefreshGeometry(const VPointF &point)
this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
namePoint->blockSignals(true);
QFont font = namePoint->font();
if (factor == nullptr)
{
font.setPointSize(static_cast<qint32>(namePoint->FontSize()));
}
else
{
font.setPointSize(static_cast<qint32>(namePoint->FontSize()/ *factor));
}
font.setPointSize(static_cast<qint32>(namePoint->FontSize()/ *factor));
namePoint->setFont(font);
namePoint->setText(point.name());
namePoint->setPos(QPointF(point.mx(), point.my()));
@ -145,6 +126,9 @@ void VSimplePoint::RefreshGeometry(const VPointF &point)
//---------------------------------------------------------------------------------------------------------------------
void VSimplePoint::SetEnabled(bool enabled)
{
VAbstractSimple::SetEnabled(enabled);
SetPen(this, currentColor, WidthHairLine(patternUnit));
SetPen(lineName, Qt::black, WidthHairLine(patternUnit));
namePoint->setEnabled(enabled);
}

View file

@ -62,7 +62,6 @@ public:
virtual int type() const Q_DECL_OVERRIDE {return Type;}
enum { Type = UserType + static_cast<int>(Vis::SimplePoint)};
void ChangedActivDraw(bool flag);
void RefreshLine();
void RefreshGeometry(const VPointF &point);
virtual void SetEnabled(bool enabled) Q_DECL_OVERRIDE;
@ -70,8 +69,6 @@ public:
void AllowLabelHover(bool enabled);
void AllowLabelSelecting(bool enabled);
virtual void ToolSelectionType(const SelectionType &type) Q_DECL_OVERRIDE;
void SetCurrentColor(const QColor &value);
signals:
/**
* @brief Choosed send id when clicked.

View file

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

View file

@ -275,7 +275,9 @@ 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;
QTest::newRow("Basic block women") << "Basic_block_women-2016.val" << keyTest << true << V_EX_OK;
QTest::newRow("Gent Jacket with tummy") << "Gent_Jacket_with_tummy.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

@ -201,10 +201,7 @@ void TST_MeasurementRegExp::TestCheckUnderlineExists_data()
data.insert(arc_, true);
data.insert(spl_, true);
data.insert(splPath, false);
data.insert(radius_V, false);
data.insert(radiusArc_, true);
data.insert(angle1_V, false);
data.insert(angle2_V, false);
data.insert(angle1Arc_, true);
data.insert(angle2Arc_, true);
data.insert(angle1Spl_, true);
@ -213,6 +210,10 @@ void TST_MeasurementRegExp::TestCheckUnderlineExists_data()
data.insert(angle2SplPath, false);
data.insert(seg_, true);
data.insert(currentLength, false);
data.insert(c1LengthSpl_, true);
data.insert(c2LengthSpl_, true);
data.insert(c1LengthSplPath, false);
data.insert(c2LengthSplPath, false);
//Catch case when new internal variable appears.
QCOMPARE(data.size(), builInVariables.size());