Added Internal path.
--HG-- branch : feature
This commit is contained in:
parent
e93eacc655
commit
35f54c5cc7
|
@ -1,7 +1,7 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<pattern>
|
||||
<!--Pattern created with Valentina (http://www.valentina-project.org/).-->
|
||||
<version>0.3.1</version>
|
||||
<version>0.4.0</version>
|
||||
<unit>cm</unit>
|
||||
<author>Timo Virtaneva</author>
|
||||
<description>This a male shirt pattern.
|
||||
|
@ -14,7 +14,7 @@ The design is based on the measuring table. The table must be loaded, but the va
|
|||
Adjust/verify curves after parameter modifications.
|
||||
|
||||
Delete layouts which are not needed.</description>
|
||||
<notes></notes>
|
||||
<notes/>
|
||||
<measurements>MaleShirt.vit</measurements>
|
||||
<increments>
|
||||
<increment name="#ToBeVerified" description="" formula="0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0"/>
|
||||
|
@ -197,49 +197,55 @@ Delete layouts which are not needed.</description>
|
|||
<point type="modeling" inUse="true" id="440" idObject="55" mx="0.132292" my="0.264583"/>
|
||||
</modeling>
|
||||
<details>
|
||||
<detail closed="1" id="174" name="Yoke" supplement="1" mx="-8.05221" width="1" my="3.27846">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="167" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="168" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="169" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="170" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="171" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="172" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="173" mx="0" my="0"/>
|
||||
<detail closed="1" id="174" name="Yoke" seamAllowance="1" mx="-8.05221" width="1" my="3.27846" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="167" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="0" idObject="168" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="169" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="170" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" idObject="171" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="172" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="173" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
<detail closed="1" id="401" name="FrontPanel" supplement="1" mx="-11.0934" width="1" my="6.43098">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="389" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="390" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="391" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="392" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="393" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="394" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="395" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="396" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="397" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="398" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" nodeType="Contour" idObject="399" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="400" mx="0" my="0"/>
|
||||
<detail closed="1" id="401" name="FrontPanel" seamAllowance="1" mx="-11.0934" width="1" my="6.43098" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="389" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="390" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="391" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" idObject="392" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="393" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="394" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="0" idObject="395" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="396" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="397" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="398" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" idObject="399" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="400" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
<detail closed="1" id="441" name="BackPanel" supplement="1" mx="-7.55641" width="1" my="6.27021">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="422" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="423" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" nodeType="Contour" idObject="424" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="425" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="426" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="427" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="428" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="429" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="430" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="431" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" nodeType="Contour" idObject="432" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="433" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="434" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="435" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="436" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="437" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="438" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="439" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="440" mx="0" my="0"/>
|
||||
<detail closed="1" id="441" name="BackPanel" seamAllowance="1" mx="-7.55641" width="1" my="6.27021" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="422" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="423" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" idObject="424" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="425" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="426" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="427" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="428" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="429" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="430" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="431" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" idObject="432" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="433" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="434" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="435" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="0" idObject="436" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="437" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" idObject="438" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="439" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="440" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
</details>
|
||||
<groups/>
|
||||
|
@ -310,36 +316,44 @@ Delete layouts which are not needed.</description>
|
|||
<spline type="modelingPath" inUse="true" id="331" idObject="312"/>
|
||||
</modeling>
|
||||
<details>
|
||||
<detail closed="1" id="182" name="Pocket" supplement="1" mx="68.0595" width="1" my="45.4124">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="175" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="176" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="177" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="178" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="179" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="180" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="181" mx="0" my="0"/>
|
||||
<detail closed="1" id="182" name="Pocket" seamAllowance="1" mx="68.0595" width="1" my="45.4124" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="175" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="176" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="177" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="178" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="179" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="180" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="181" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
<detail closed="1" id="320" name="PocketRound" supplement="1" mx="81.7244" width="1" my="45.8357">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="314" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="315" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="316" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="317" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="318" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" nodeType="Contour" idObject="319" mx="0" my="0"/>
|
||||
<detail closed="1" id="320" name="PocketRound" seamAllowance="1" mx="81.7244" width="1" my="45.8357" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="314" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="315" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="0" idObject="316" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="317" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="318" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" idObject="319" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
<detail closed="1" id="326" name="PocketFlap" supplement="1" mx="67.876" width="1" my="32.9628">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="321" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="322" mx="0" my="0"/>
|
||||
<node type="NodePoint" 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"/>
|
||||
<detail closed="1" id="326" name="PocketFlap" seamAllowance="1" mx="67.876" width="1" my="32.9628" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="321" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="322" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="323" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="324" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="325" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
<detail closed="1" id="332" name="PocketFlapRound" supplement="1" mx="81.7244" width="1" my="32.9627">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="327" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="328" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="329" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="330" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" nodeType="Contour" idObject="331" mx="0" my="0"/>
|
||||
<detail closed="1" id="332" name="PocketFlapRound" seamAllowance="1" mx="81.7244" width="1" my="32.9627" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="327" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="328" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="329" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="330" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" idObject="331" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
</details>
|
||||
<groups/>
|
||||
|
@ -447,45 +461,53 @@ Delete layouts which are not needed.</description>
|
|||
<point type="modeling" inUse="true" id="299" idObject="97" mx="-0.222289" my="0.696084"/>
|
||||
</modeling>
|
||||
<details>
|
||||
<detail closed="1" id="204" name="Collar" supplement="1" mx="27.4551" width="1" my="0.587081">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="200" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="201" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="202" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="203" mx="0" my="0"/>
|
||||
<detail closed="1" id="204" name="Collar" seamAllowance="1" mx="27.4551" width="1" my="0.587081" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="200" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="201" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="202" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="203" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
<detail closed="1" id="209" name="CuffInterface" supplement="0" mx="26.9909" width="1" my="-8.22145">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="205" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="206" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="207" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="208" mx="0" my="0"/>
|
||||
<detail closed="1" id="209" name="CuffInterface" seamAllowance="0" mx="26.9909" width="1" my="-8.22145" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="205" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="206" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="207" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="208" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
<detail closed="1" id="217" name="ShortSleeve" supplement="1" mx="-16.9664" width="1" my="-23.4126">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="210" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="211" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="212" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="0" nodeType="Contour" idObject="213" mx="0" my="0"/>
|
||||
<node type="NodePoint" 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"/>
|
||||
<detail closed="1" id="217" name="ShortSleeve" seamAllowance="1" mx="-16.9664" width="1" my="-23.4126" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="210" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="211" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="212" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="0" idObject="213" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="214" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="215" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="216" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
<detail closed="1" id="300" name="FullSleeve" supplement="1" mx="-16.0896" width="1" my="15.2013">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="283" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="1" nodeType="Contour" idObject="284" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="285" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="286" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="0" 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="NodeSpline" reverse="0" nodeType="Contour" idObject="290" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="291" mx="0" my="0"/>
|
||||
<node type="NodePoint" 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"/>
|
||||
<detail closed="1" id="300" name="FullSleeve" seamAllowance="1" mx="-16.0896" width="1" my="15.2013" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="283" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="1" idObject="284" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="285" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="286" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="0" idObject="287" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="288" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="289" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" idObject="290" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="291" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="292" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="293" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="294" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="295" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="296" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="297" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="298" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="299" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
</details>
|
||||
<groups/>
|
||||
|
@ -543,37 +565,45 @@ Delete layouts which are not needed.</description>
|
|||
<spline type="modelingSpline" inUse="true" id="254" idObject="248"/>
|
||||
</modeling>
|
||||
<details>
|
||||
<detail closed="1" id="224" name="CollarBase" supplement="1" mx="28.4767" width="1" my="21.6501">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="218" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" nodeType="Contour" idObject="219" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="220" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="221" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="1" nodeType="Contour" idObject="222" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="223" mx="0" my="0"/>
|
||||
<detail closed="1" id="224" name="CollarBase" seamAllowance="1" mx="28.4767" width="1" my="21.6501" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="218" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" idObject="219" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="220" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="221" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="1" idObject="222" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="223" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
<detail closed="1" id="231" name="CollarBaseInterface" supplement="0" mx="28.6569" width="1" my="15.2047">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="225" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" 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="NodeSpline" reverse="1" nodeType="Contour" idObject="229" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="230" mx="0" my="0"/>
|
||||
<detail closed="1" id="231" name="CollarBaseInterface" seamAllowance="0" mx="28.6569" width="1" my="15.2047" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="225" mx="0" my="0"/>
|
||||
<node type="NodeSplinePath" reverse="1" idObject="226" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="227" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="228" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="1" idObject="229" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="230" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
<detail closed="1" id="238" name="CollarTop" supplement="1" mx="28.0866" width="1" my="9.53729">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="232" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" 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="NodeSpline" reverse="0" nodeType="Contour" idObject="236" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="237" mx="0" my="0"/>
|
||||
<detail closed="1" id="238" name="CollarTop" seamAllowance="1" mx="28.0866" width="1" my="9.53729" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="232" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" idObject="233" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="234" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="235" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" idObject="236" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="237" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
<detail closed="1" id="255" name="CollarTopInterface" supplement="0" mx="27.8619" width="1" my="-1.37137">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="249" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="250" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="251" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="252" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="253" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" nodeType="Contour" idObject="254" mx="0" my="0"/>
|
||||
<detail closed="1" id="255" name="CollarTopInterface" seamAllowance="0" mx="27.8619" width="1" my="-1.37137" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="249" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="250" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" idObject="251" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="252" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="253" mx="0" my="0"/>
|
||||
<node type="NodeSpline" reverse="0" idObject="254" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
</details>
|
||||
<groups/>
|
||||
|
@ -609,20 +639,24 @@ Delete layouts which are not needed.</description>
|
|||
<point type="modeling" inUse="true" id="281" idObject="260" mx="0.132292" my="0.264583"/>
|
||||
</modeling>
|
||||
<details>
|
||||
<detail closed="1" id="274" name="PlacketUnder" supplement="1" mx="27.725" width="1" my="-0.179464">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="270" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="271" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="272" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="273" mx="0" my="0"/>
|
||||
<detail closed="1" id="274" name="PlacketUnder" seamAllowance="1" mx="27.725" width="1" my="-0.179464" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="270" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="271" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="272" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="273" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
<detail closed="1" id="282" name="PlacketTop" supplement="1" mx="46.1968" width="1" my="-5.58778">
|
||||
<node type="NodePoint" nodeType="Contour" idObject="275" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="276" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="277" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="278" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="279" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="280" mx="0" my="0"/>
|
||||
<node type="NodePoint" nodeType="Contour" idObject="281" mx="0" my="0"/>
|
||||
<detail closed="1" id="282" name="PlacketTop" seamAllowance="1" mx="46.1968" width="1" my="-5.58778" version="1">
|
||||
<nodes>
|
||||
<node type="NodePoint" idObject="275" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="276" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="277" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="278" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="279" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="280" mx="0" my="0"/>
|
||||
<node type="NodePoint" idObject="281" mx="0" my="0"/>
|
||||
</nodes>
|
||||
</detail>
|
||||
</details>
|
||||
<groups/>
|
||||
|
|
|
@ -747,7 +747,8 @@ void VPattern::ParseDetailElement(const QDomElement &domElement, const Document
|
|||
<< TagData
|
||||
<< TagPatternInfo
|
||||
<< TagGrainline
|
||||
<< VToolSeamAllowance::TagCSA;
|
||||
<< VToolSeamAllowance::TagCSA
|
||||
<< VToolSeamAllowance::TagIPaths;
|
||||
|
||||
const QDomNodeList nodeList = domElement.childNodes();
|
||||
for (qint32 i = 0; i < nodeList.size(); ++i)
|
||||
|
@ -780,6 +781,8 @@ void VPattern::ParseDetailElement(const QDomElement &domElement, const Document
|
|||
case 4:// VToolSeamAllowance::TagCSA
|
||||
ParseDetailCSARecords(element, detail);
|
||||
break;
|
||||
case 5:// VToolSeamAllowance::TagIPaths
|
||||
ParseDetailInternalPaths(element, detail);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -875,7 +878,8 @@ void VPattern::ParseDetailNodes(const QDomElement &domElement, VPiece &detail, b
|
|||
for (qint32 i = 0; i < nodeList.size(); ++i)
|
||||
{
|
||||
const QDomElement element = nodeList.at(i).toElement();
|
||||
if (not element.isNull() && element.tagName() == VAbstractPattern::TagNode)
|
||||
if (not element.isNull()
|
||||
&& element.tagName() == VAbstractPattern::TagNode) // Old detail version need this check!
|
||||
{
|
||||
oldNodes.append(ParseDetailNode(element));
|
||||
}
|
||||
|
@ -891,7 +895,7 @@ void VPattern::ParsePieceNodes(const QDomElement &domElement, VPiece &detail) co
|
|||
for (qint32 i = 0; i < nodeList.size(); ++i)
|
||||
{
|
||||
const QDomElement element = nodeList.at(i).toElement();
|
||||
if (not element.isNull() && element.tagName() == VAbstractPattern::TagNode)
|
||||
if (not element.isNull())
|
||||
{
|
||||
detail.GetPath().Append(ParseSANode(element));
|
||||
}
|
||||
|
@ -906,7 +910,7 @@ void VPattern::ParseDetailCSARecords(const QDomElement &domElement, VPiece &deta
|
|||
for (qint32 i = 0; i < nodeList.size(); ++i)
|
||||
{
|
||||
const QDomElement element = nodeList.at(i).toElement();
|
||||
if (not element.isNull() && element.tagName() == VToolSeamAllowance::TagRecord)
|
||||
if (not element.isNull())
|
||||
{
|
||||
CustomSARecord record;
|
||||
record.startPoint = GetParametrUInt(element, VToolSeamAllowance::AttrStart, NULL_ID_STR);
|
||||
|
@ -922,6 +926,26 @@ void VPattern::ParseDetailCSARecords(const QDomElement &domElement, VPiece &deta
|
|||
detail.SetCustomSARecords(records);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VPattern::ParseDetailInternalPaths(const QDomElement &domElement, VPiece &detail) const
|
||||
{
|
||||
QVector<quint32> records;
|
||||
const QDomNodeList nodeList = domElement.childNodes();
|
||||
for (qint32 i = 0; i < nodeList.size(); ++i)
|
||||
{
|
||||
const QDomElement element = nodeList.at(i).toElement();
|
||||
if (not element.isNull())
|
||||
{
|
||||
const quint32 path = GetParametrUInt(element, VToolSeamAllowance::AttrPath, NULL_ID_STR);
|
||||
if (path > NULL_ID)
|
||||
{
|
||||
records.append(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
detail.SetInternalPaths(records);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief ParseDetails parse details tag.
|
||||
|
@ -3131,6 +3155,7 @@ void VPattern::ParsePathElement(VMainGraphicsScene *scene, QDomElement &domEleme
|
|||
const QString defType = QString().setNum(static_cast<int>(PiecePathType::CustomSeamAllowance));
|
||||
const PiecePathType type = static_cast<PiecePathType>(GetParametrUInt(domElement, AttrType, defType));
|
||||
const quint32 idTool = GetParametrUInt(domElement, VAbstractNode::AttrIdTool, NULL_ID_STR);
|
||||
const QString penType = GetParametrString(domElement, AttrTypeLine, TypeLineLine);
|
||||
|
||||
VPiecePath path;
|
||||
const QDomElement element = domElement.firstChildElement(VAbstractPattern::TagNodes);
|
||||
|
@ -3141,6 +3166,7 @@ void VPattern::ParsePathElement(VMainGraphicsScene *scene, QDomElement &domEleme
|
|||
|
||||
path.SetType(type);
|
||||
path.SetName(name);
|
||||
path.SetPenType(VAbstractTool::LineStyleToPenStyle(penType));
|
||||
|
||||
VToolPiecePath::Create(id, path, 0, scene, this, data, parse, Source::FromFile, "", idTool);
|
||||
}
|
||||
|
|
|
@ -123,6 +123,7 @@ private:
|
|||
void ParseDetailNodes(const QDomElement &domElement, VPiece &detail, bool closed) const;
|
||||
void ParsePieceNodes(const QDomElement &domElement, VPiece &detail) const;
|
||||
void ParseDetailCSARecords(const QDomElement &domElement, VPiece &detail) const;
|
||||
void ParseDetailInternalPaths(const QDomElement &domElement, VPiece &detail) const;
|
||||
void ParseDetails(const QDomElement &domElement, const Document &parse);
|
||||
|
||||
void ParsePointElement(VMainGraphicsScene *scene, QDomElement &domElement,
|
||||
|
|
|
@ -329,6 +329,7 @@
|
|||
<xs:attribute name="idTool" type="xs:unsignedInt"></xs:attribute>
|
||||
<xs:attribute name="inUse" type="xs:boolean"></xs:attribute>
|
||||
<xs:attribute name="name" type="xs:string"></xs:attribute>
|
||||
<xs:attribute name="typeLine" type="xs:string"></xs:attribute>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="tools" minOccurs="0" maxOccurs="unbounded">
|
||||
|
@ -451,6 +452,17 @@
|
|||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="iPaths" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="record" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="path" type="xs:unsignedInt" use="required"></xs:attribute>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:unsignedInt" use="required"></xs:attribute>
|
||||
<xs:attribute name="version" type="pieceVersion"></xs:attribute>
|
||||
|
|
|
@ -269,6 +269,18 @@ void VPiece::SetUnited(bool united)
|
|||
d->m_united = united;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<quint32> VPiece::GetInternalPaths() const
|
||||
{
|
||||
return d->m_internalPaths;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VPiece::SetInternalPaths(const QVector<quint32> &iPaths)
|
||||
{
|
||||
d->m_internalPaths = iPaths;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<CustomSARecord> VPiece::GetCustomSARecords() const
|
||||
{
|
||||
|
@ -324,6 +336,37 @@ QVector<quint32> VPiece::MissingCSAPath(const VPiece &det) const
|
|||
return r;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<quint32> VPiece::MissingInternalPaths(const VPiece &det) const
|
||||
{
|
||||
const QVector<quint32> detRecords = det.GetInternalPaths();
|
||||
if (d->m_internalPaths.size() == detRecords.size()) //-V807
|
||||
{
|
||||
return QVector<quint32>();
|
||||
}
|
||||
|
||||
QSet<quint32> set1;
|
||||
for (qint32 i = 0; i < d->m_internalPaths.size(); ++i)
|
||||
{
|
||||
set1.insert(d->m_internalPaths.at(i));
|
||||
}
|
||||
|
||||
QSet<quint32> set2;
|
||||
for (qint32 j = 0; j < detRecords.size(); ++j)
|
||||
{
|
||||
set2.insert(detRecords.at(j));
|
||||
}
|
||||
|
||||
const QList<quint32> set3 = set1.subtract(set2).toList();
|
||||
QVector<quint32> r;
|
||||
for (qint32 i = 0; i < set3.size(); ++i)
|
||||
{
|
||||
r.append(set3.at(i));
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<CustomSARecord> VPiece::GetValidRecords() const
|
||||
{
|
||||
|
|
|
@ -76,11 +76,15 @@ public:
|
|||
bool IsUnited() const;
|
||||
void SetUnited(bool united);
|
||||
|
||||
QVector<quint32> GetInternalPaths() const;
|
||||
void SetInternalPaths(const QVector<quint32> &iPaths);
|
||||
|
||||
QVector<CustomSARecord> GetCustomSARecords() const;
|
||||
void SetCustomSARecords(const QVector<CustomSARecord> &records);
|
||||
|
||||
QVector<quint32> MissingNodes(const VPiece &det) const;
|
||||
QVector<quint32> MissingCSAPath(const VPiece &det) const;
|
||||
QVector<quint32> MissingInternalPaths(const VPiece &det) const;
|
||||
|
||||
private:
|
||||
QSharedDataPointer<VPieceData> d;
|
||||
|
|
|
@ -49,7 +49,8 @@ public:
|
|||
m_my(0),
|
||||
m_inLayout(true),
|
||||
m_united(false),
|
||||
m_customSARecords()
|
||||
m_customSARecords(),
|
||||
m_internalPaths()
|
||||
{}
|
||||
|
||||
VPieceData(const VPieceData &detail)
|
||||
|
@ -59,7 +60,8 @@ public:
|
|||
m_my(detail.m_my),
|
||||
m_inLayout(detail.m_inLayout),
|
||||
m_united(detail.m_united),
|
||||
m_customSARecords(detail.m_customSARecords)
|
||||
m_customSARecords(detail.m_customSARecords),
|
||||
m_internalPaths(detail.m_internalPaths)
|
||||
{}
|
||||
|
||||
~VPieceData();
|
||||
|
@ -74,6 +76,7 @@ public:
|
|||
bool m_united;
|
||||
|
||||
QVector<CustomSARecord> m_customSARecords;
|
||||
QVector<quint32> m_internalPaths;
|
||||
|
||||
private:
|
||||
VPieceData &operator=(const VPieceData &) Q_DECL_EQ_DELETE;
|
||||
|
|
|
@ -130,6 +130,18 @@ void VPiecePath::SetName(const QString &name)
|
|||
d->m_name = name;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Qt::PenStyle VPiecePath::GetPenType() const
|
||||
{
|
||||
return d->m_penType;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VPiecePath::SetPenType(const Qt::PenStyle &type)
|
||||
{
|
||||
d->m_penType = type;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QVector<QPointF> VPiecePath::PathPoints(const VContainer *data) const
|
||||
{
|
||||
|
|
|
@ -68,6 +68,9 @@ public:
|
|||
QString GetName() const;
|
||||
void SetName(const QString &name);
|
||||
|
||||
Qt::PenStyle GetPenType() const;
|
||||
void SetPenType(const Qt::PenStyle &type);
|
||||
|
||||
QVector<QPointF> PathPoints(const VContainer *data) const;
|
||||
QVector<VPointF> PathNodePoints(const VContainer *data) const;
|
||||
QVector<VSAPoint> SeamAllowancePoints(const VContainer *data, qreal width, bool reverse) const;
|
||||
|
|
|
@ -44,20 +44,23 @@ public:
|
|||
VPiecePathData()
|
||||
: m_nodes(),
|
||||
m_type(PiecePathType::Unknown),
|
||||
m_name()
|
||||
m_name(),
|
||||
m_penType(Qt::SolidLine)
|
||||
{}
|
||||
|
||||
explicit VPiecePathData(PiecePathType type)
|
||||
: m_nodes(),
|
||||
m_type(type),
|
||||
m_name()
|
||||
m_name(),
|
||||
m_penType(Qt::SolidLine)
|
||||
{}
|
||||
|
||||
VPiecePathData(const VPiecePathData &path)
|
||||
: QSharedData(path),
|
||||
m_nodes(path.m_nodes),
|
||||
m_type(path.m_type),
|
||||
m_name(path.m_name)
|
||||
m_name(path.m_name),
|
||||
m_penType(path.m_penType)
|
||||
{}
|
||||
|
||||
~VPiecePathData();
|
||||
|
@ -65,6 +68,7 @@ public:
|
|||
QVector<VPieceNode> m_nodes;
|
||||
PiecePathType m_type;
|
||||
QString m_name;
|
||||
Qt::PenStyle m_penType;
|
||||
|
||||
private:
|
||||
VPiecePathData &operator=(const VPiecePathData &) Q_DECL_EQ_DELETE;
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include "ui_dialogpiecepath.h"
|
||||
#include "../vpatterndb/vpiecenode.h"
|
||||
#include "visualization/path/vistoolpiecepath.h"
|
||||
#include "../../tools/vabstracttool.h"
|
||||
|
||||
#include <QMenu>
|
||||
|
||||
|
@ -46,11 +47,17 @@ DialogPiecePath::DialogPiecePath(const VContainer *data, quint32 toolId, QWidget
|
|||
ui->lineEditName->setClearButtonEnabled(true);
|
||||
#endif
|
||||
|
||||
FillComboBoxTypeLine(ui->comboBoxPenType, VAbstractTool::LineStylesPics());
|
||||
|
||||
connect(ui->lineEditName, &QLineEdit::textChanged, this, &DialogPiecePath::NameChanged);
|
||||
|
||||
InitPathTypes();
|
||||
connect(ui->comboBoxType, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
|
||||
[this](){ValidObjects(PathIsValid());});
|
||||
[this]()
|
||||
{
|
||||
ui->comboBoxPenType->setEnabled(GetType() == PiecePathType::InternalPath);
|
||||
ValidObjects(PathIsValid());
|
||||
});
|
||||
|
||||
flagName = true;//We have default name of piece.
|
||||
flagError = PathIsValid();
|
||||
|
@ -376,7 +383,9 @@ void DialogPiecePath::ChangedSAAfter(double d)
|
|||
void DialogPiecePath::InitPathTypes()
|
||||
{
|
||||
ui->comboBoxType->addItem(tr("Custom seam allowance"), static_cast<int>(PiecePathType::CustomSeamAllowance));
|
||||
//ui->comboBoxType->addItem(tr("Internal path"), static_cast<int>(PiecePathType::InternalPath));
|
||||
ui->comboBoxType->addItem(tr("Internal path"), static_cast<int>(PiecePathType::InternalPath));
|
||||
|
||||
ui->comboBoxPenType->setEnabled(GetType() == PiecePathType::InternalPath);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -468,6 +477,7 @@ void DialogPiecePath::SetPiecePath(const VPiecePath &path)
|
|||
VisToolPiecePath *visPath = qobject_cast<VisToolPiecePath *>(vis);
|
||||
SCASSERT(visPath != nullptr);
|
||||
visPath->SetPath(path);
|
||||
SetPenType(path.GetPenType());
|
||||
|
||||
ValidObjects(PathIsValid());
|
||||
|
||||
|
@ -495,6 +505,21 @@ void DialogPiecePath::SetType(PiecePathType type)
|
|||
{
|
||||
ui->comboBoxType->setCurrentIndex(index);
|
||||
}
|
||||
|
||||
ui->comboBoxPenType->setEnabled(type == PiecePathType::InternalPath);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
Qt::PenStyle DialogPiecePath::GetPenType() const
|
||||
{
|
||||
return VAbstractTool::LineStyleToPenStyle(GetComboBoxCurrentData(ui->comboBoxPenType, TypeLineLine));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogPiecePath::SetPenType(const Qt::PenStyle &type)
|
||||
{
|
||||
ChangeCurrentData(ui->comboBoxPenType, VAbstractTool::PenStyleToLineStyle(type));
|
||||
vis->setLineStyle(type);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -635,6 +660,7 @@ VPiecePath DialogPiecePath::CreatePath() const
|
|||
|
||||
path.SetType(GetType());
|
||||
path.SetName(ui->lineEditName->text());
|
||||
path.SetPenType(GetType() == PiecePathType::InternalPath ? GetPenType() : Qt::SolidLine);
|
||||
|
||||
return path;
|
||||
}
|
||||
|
|
|
@ -94,6 +94,9 @@ private:
|
|||
PiecePathType GetType() const;
|
||||
void SetType(PiecePathType type);
|
||||
|
||||
Qt::PenStyle GetPenType() const;
|
||||
void SetPenType(const Qt::PenStyle &type);
|
||||
|
||||
QListWidgetItem *GetItemById(quint32 id);
|
||||
|
||||
void SetCurrentSABefore(qreal value);
|
||||
|
|
|
@ -60,16 +60,39 @@
|
|||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="comboBoxType"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="labelPiece">
|
||||
<property name="text">
|
||||
<string>Piece:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<item row="3" column="1">
|
||||
<widget class="QComboBox" name="comboBoxPiece"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="labelPenType">
|
||||
<property name="text">
|
||||
<string>Type of pen:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="comboBoxPenType">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>14</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
|
|
|
@ -106,6 +106,10 @@ DialogSeamAllowance::DialogSeamAllowance(const VContainer *data, const quint32 &
|
|||
connect(ui->comboBoxIncludeType, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
|
||||
&DialogSeamAllowance::CSAIncludeTypeChanged);
|
||||
|
||||
ui->listWidgetInternalPaths->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
connect(ui->listWidgetInternalPaths, &QListWidget::customContextMenuRequested, this,
|
||||
&DialogSeamAllowance::ShowInternalPathsContextMenu);
|
||||
|
||||
if (not applyAllowed)
|
||||
{
|
||||
vis = new VisToolPiece(data);
|
||||
|
@ -127,6 +131,7 @@ void DialogSeamAllowance::EnableApply(bool enable)
|
|||
bApply->setEnabled(enable);
|
||||
applyAllowed = enable;
|
||||
ui->tabSeamAllowance->setEnabled(applyAllowed);
|
||||
ui->tabInternalPaths->setEnabled(applyAllowed);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -153,6 +158,13 @@ void DialogSeamAllowance::SetPiece(const VPiece &piece)
|
|||
}
|
||||
ui->listWidgetCustomSA->blockSignals(false);
|
||||
|
||||
ui->listWidgetInternalPaths->clear();
|
||||
const QVector<quint32> iPaths = piece.GetInternalPaths();
|
||||
for (int i = 0; i < iPaths.size(); ++i)
|
||||
{
|
||||
NewInternalPath(iPaths.at(i));
|
||||
}
|
||||
|
||||
ui->comboBoxStartPoint->blockSignals(true);
|
||||
ui->comboBoxStartPoint->clear();
|
||||
ui->comboBoxStartPoint->blockSignals(false);
|
||||
|
@ -347,7 +359,7 @@ void DialogSeamAllowance::ShowCustomSAContextMenu(const QPoint &pos)
|
|||
{
|
||||
record.reverse = not record.reverse;
|
||||
rowItem->setData(Qt::UserRole, QVariant::fromValue(record));
|
||||
rowItem->setText(GetCustomSARecordName(record));
|
||||
rowItem->setText(GetPathName(record.path, record.reverse));
|
||||
}
|
||||
else if (selectedAction == actionOption)
|
||||
{
|
||||
|
@ -366,6 +378,42 @@ void DialogSeamAllowance::ShowCustomSAContextMenu(const QPoint &pos)
|
|||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogSeamAllowance::ShowInternalPathsContextMenu(const QPoint &pos)
|
||||
{
|
||||
const int row = ui->listWidgetInternalPaths->currentRow();
|
||||
if (ui->listWidgetInternalPaths->count() == 0 || row == -1 || row >= ui->listWidgetInternalPaths->count())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
QMenu *menu = new QMenu(this);
|
||||
QAction *actionDelete = menu->addAction(QIcon::fromTheme("edit-delete"), tr("Delete"));
|
||||
|
||||
QListWidgetItem *rowItem = ui->listWidgetInternalPaths->item(row);
|
||||
SCASSERT(rowItem != nullptr);
|
||||
const quint32 pathId = qvariant_cast<quint32>(rowItem->data(Qt::UserRole));
|
||||
|
||||
QAction *actionOption = menu->addAction(QIcon::fromTheme("preferences-other"), tr("Options"));
|
||||
|
||||
QAction *selectedAction = menu->exec(ui->listWidgetInternalPaths->viewport()->mapToGlobal(pos));
|
||||
if (selectedAction == actionDelete)
|
||||
{
|
||||
delete ui->listWidgetInternalPaths->item(row);
|
||||
}
|
||||
else if (selectedAction == actionOption)
|
||||
{
|
||||
auto *dialog = new DialogPiecePath(data, pathId, this);
|
||||
dialog->SetPiecePath(data->GetPiecePath(pathId));
|
||||
dialog->SetPieceId(toolId);
|
||||
dialog->EnbleShowMode(true);
|
||||
m_dialog = dialog;
|
||||
m_dialog->setModal(true);
|
||||
connect(m_dialog.data(), &DialogTool::DialogClosed, this, &DialogSeamAllowance::PathDialogClosed);
|
||||
m_dialog->show();
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogSeamAllowance::ListChanged()
|
||||
{
|
||||
|
@ -662,7 +710,8 @@ void DialogSeamAllowance::PathDialogClosed(int result)
|
|||
const_cast<VContainer *>(data),
|
||||
dialogTool->GetToolId());
|
||||
qApp->getUndoStack()->push(saveCommand);
|
||||
UpdateCurrentRecord();
|
||||
UpdateCurrentCustomSARecord();
|
||||
UpdateCurrentInternalPathRecord();
|
||||
}
|
||||
catch (const VExceptionBadId &e)
|
||||
{
|
||||
|
@ -691,6 +740,14 @@ VPiece DialogSeamAllowance::CreatePiece() const
|
|||
}
|
||||
piece.SetCustomSARecords(records);
|
||||
|
||||
QVector<quint32> iPaths;
|
||||
for (qint32 i = 0; i < ui->listWidgetInternalPaths->count(); ++i)
|
||||
{
|
||||
QListWidgetItem *item = ui->listWidgetInternalPaths->item(i);
|
||||
iPaths.append(qvariant_cast<quint32>(item->data(Qt::UserRole)));
|
||||
}
|
||||
piece.SetInternalPaths(iPaths);
|
||||
|
||||
piece.SetForbidFlipping(ui->checkBoxForbidFlipping->isChecked());
|
||||
piece.SetSeamAllowance(ui->checkBoxSeams->isChecked());
|
||||
piece.SetSAWidth(ui->doubleSpinBoxSeams->value());
|
||||
|
@ -711,7 +768,7 @@ void DialogSeamAllowance::NewCustomSA(const CustomSARecord &record)
|
|||
{
|
||||
if (record.path > NULL_ID)
|
||||
{
|
||||
const QString name = GetCustomSARecordName(record);
|
||||
const QString name = GetPathName(record.path, record.reverse);
|
||||
|
||||
QListWidgetItem *item = new QListWidgetItem(name);
|
||||
item->setFont(QFont("Times", 12, QFont::Bold));
|
||||
|
@ -722,16 +779,30 @@ void DialogSeamAllowance::NewCustomSA(const CustomSARecord &record)
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QString DialogSeamAllowance::GetCustomSARecordName(const CustomSARecord &record) const
|
||||
void DialogSeamAllowance::NewInternalPath(quint32 path)
|
||||
{
|
||||
if (path > NULL_ID)
|
||||
{
|
||||
const QString name = GetPathName(path);
|
||||
|
||||
QListWidgetItem *item = new QListWidgetItem(name);
|
||||
item->setFont(QFont("Times", 12, QFont::Bold));
|
||||
item->setData(Qt::UserRole, QVariant::fromValue(path));
|
||||
ui->listWidgetInternalPaths->addItem(item);
|
||||
ui->listWidgetInternalPaths->setCurrentRow(ui->listWidgetInternalPaths->count()-1);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QString DialogSeamAllowance::GetPathName(quint32 path, bool reverse) const
|
||||
{
|
||||
QString name;
|
||||
|
||||
if (record.path > NULL_ID)
|
||||
if (path > NULL_ID)
|
||||
{
|
||||
const VPiecePath path = data->GetPiecePath(record.path);
|
||||
name = path.GetName();
|
||||
name = data->GetPiecePath(path).GetName();
|
||||
|
||||
if (record.reverse)
|
||||
if (reverse)
|
||||
{
|
||||
name = QLatin1String("- ") + name;
|
||||
}
|
||||
|
@ -934,7 +1005,7 @@ void DialogSeamAllowance::InitSAIncludeType()
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogSeamAllowance::UpdateCurrentRecord()
|
||||
void DialogSeamAllowance::UpdateCurrentCustomSARecord()
|
||||
{
|
||||
const int row = ui->listWidgetCustomSA->currentRow();
|
||||
if (ui->listWidgetCustomSA->count() == 0 || row == -1)
|
||||
|
@ -945,5 +1016,20 @@ void DialogSeamAllowance::UpdateCurrentRecord()
|
|||
QListWidgetItem *item = ui->listWidgetCustomSA->item(row);
|
||||
SCASSERT(item != nullptr);
|
||||
const CustomSARecord record = qvariant_cast<CustomSARecord>(item->data(Qt::UserRole));
|
||||
item->setText(GetCustomSARecordName(record));
|
||||
item->setText(GetPathName(record.path, record.reverse));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogSeamAllowance::UpdateCurrentInternalPathRecord()
|
||||
{
|
||||
const int row = ui->listWidgetInternalPaths->currentRow();
|
||||
if (ui->listWidgetInternalPaths->count() == 0 || row == -1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
QListWidgetItem *item = ui->listWidgetInternalPaths->item(row);
|
||||
SCASSERT(item != nullptr);
|
||||
const quint32 path = qvariant_cast<quint32>(item->data(Qt::UserRole));
|
||||
item->setText(GetPathName(path));
|
||||
}
|
||||
|
|
|
@ -62,6 +62,8 @@ protected:
|
|||
private slots:
|
||||
void ShowMainPathContextMenu(const QPoint &pos);
|
||||
void ShowCustomSAContextMenu(const QPoint &pos);
|
||||
void ShowInternalPathsContextMenu(const QPoint &pos);
|
||||
|
||||
void ListChanged();
|
||||
void EnableSeamAllowance(bool enable);
|
||||
void NodeChanged(int index);
|
||||
|
@ -90,14 +92,16 @@ private:
|
|||
|
||||
void NewMainPathItem(const VPieceNode &node);
|
||||
void NewCustomSA(const CustomSARecord &record);
|
||||
QString GetCustomSARecordName(const CustomSARecord &record) const;
|
||||
void NewInternalPath(quint32 path);
|
||||
QString GetPathName(quint32 path, bool reverse = false) const;
|
||||
bool MainPathIsValid() const;
|
||||
void ValidObjects(bool value);
|
||||
bool MainPathIsClockwise() const;
|
||||
void InitNodesList();
|
||||
void InitCSAPoint(QComboBox *box);
|
||||
void InitSAIncludeType();
|
||||
void UpdateCurrentRecord();
|
||||
void UpdateCurrentCustomSARecord();
|
||||
void UpdateCurrentInternalPathRecord();
|
||||
|
||||
QListWidgetItem *GetItemById(quint32 id);
|
||||
|
||||
|
|
|
@ -385,6 +385,20 @@
|
|||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tabInternalPaths">
|
||||
<attribute name="title">
|
||||
<string>Internal paths</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="QListWidget" name="listWidgetInternalPaths">
|
||||
<property name="dragDropMode">
|
||||
<enum>QAbstractItemView::InternalMove</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
|
|
@ -173,6 +173,7 @@ void VToolPiecePath::AddAttributes(VAbstractPattern *doc, QDomElement &domElemen
|
|||
doc->SetAttribute(domElement, VDomDocument::AttrId, id);
|
||||
doc->SetAttribute(domElement, AttrName, path.GetName());
|
||||
doc->SetAttribute(domElement, AttrType, static_cast<int>(path.GetType()));
|
||||
doc->SetAttribute(domElement, AttrTypeLine, PenStyleToLineStyle(path.GetPenType()));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -219,7 +220,9 @@ void VToolPiecePath::AddToFile()
|
|||
|
||||
if (path.GetType() == PiecePathType::InternalPath)
|
||||
{
|
||||
|
||||
QVector<quint32> iPaths = newDet.GetInternalPaths();
|
||||
iPaths.append(id);
|
||||
newDet.SetInternalPaths(iPaths);
|
||||
}
|
||||
else if (path.GetType() == PiecePathType::CustomSeamAllowance)
|
||||
{
|
||||
|
@ -287,7 +290,11 @@ void VToolPiecePath::RefreshGeometry()
|
|||
{
|
||||
QPainterPath p = path.PainterPath(this->getData());
|
||||
p.setFillRule(Qt::OddEvenFill);
|
||||
|
||||
this->setPath(p);
|
||||
QPen pen = this->pen();
|
||||
pen.setStyle(path.GetPenType());
|
||||
this->setPen(pen);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -197,6 +197,35 @@ Qt::PenStyle VAbstractTool::LineStyleToPenStyle(const QString &typeLine)
|
|||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QString VAbstractTool::PenStyleToLineStyle(Qt::PenStyle penStyle)
|
||||
{
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_GCC("-Wswitch-default")
|
||||
|
||||
switch (penStyle)
|
||||
{
|
||||
case Qt::NoPen:
|
||||
return TypeLineNone;
|
||||
case Qt::DashLine:
|
||||
return TypeLineDashLine;
|
||||
case Qt::DotLine:
|
||||
return TypeLineDotLine;
|
||||
case Qt::DashDotLine:
|
||||
return TypeLineDashDotLine;
|
||||
case Qt::DashDotDotLine:
|
||||
return TypeLineDashDotDotLine;
|
||||
case Qt::SolidLine:
|
||||
case Qt::CustomDashLine:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
QT_WARNING_POP
|
||||
|
||||
return TypeLineLine;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QMap<QString, QIcon> VAbstractTool::LineStylesPics()
|
||||
{
|
||||
|
|
|
@ -75,6 +75,7 @@ public:
|
|||
|
||||
static const QStringList StylesList();
|
||||
static Qt::PenStyle LineStyleToPenStyle(const QString &typeLine);
|
||||
static QString PenStyleToLineStyle(Qt::PenStyle penStyle);
|
||||
static QMap<QString, QIcon> LineStylesPics();
|
||||
|
||||
static const QStringList Colors();
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include "nodeDetails/vnodepoint.h"
|
||||
#include "nodeDetails/vnodespline.h"
|
||||
#include "nodeDetails/vnodesplinepath.h"
|
||||
#include "nodeDetails/vtoolpiecepath.h"
|
||||
#include "../vgeometry/varc.h"
|
||||
#include "../vgeometry/vcubicbezier.h"
|
||||
#include "../vgeometry/vcubicbezierpath.h"
|
||||
|
@ -59,6 +60,7 @@ const quint8 VToolSeamAllowance::pieceVersion = 2;
|
|||
|
||||
const QString VToolSeamAllowance::TagCSA = QStringLiteral("csa");
|
||||
const QString VToolSeamAllowance::TagRecord = QStringLiteral("record");
|
||||
const QString VToolSeamAllowance::TagIPaths = QStringLiteral("iPaths");
|
||||
|
||||
const QString VToolSeamAllowance::AttrVersion = QStringLiteral("version");
|
||||
const QString VToolSeamAllowance::AttrForbidFlipping = QStringLiteral("forbidFlipping");
|
||||
|
@ -263,6 +265,22 @@ void VToolSeamAllowance::AddCSARecords(VAbstractPattern *doc, QDomElement &domEl
|
|||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VToolSeamAllowance::AddInternalPaths(VAbstractPattern *doc, QDomElement &domElement, const QVector<quint32> &paths)
|
||||
{
|
||||
if (paths.size() > 0)
|
||||
{
|
||||
QDomElement iPathsElement = doc->createElement(VToolSeamAllowance::TagIPaths);
|
||||
for (int i = 0; i < paths.size(); ++i)
|
||||
{
|
||||
QDomElement recordNode = doc->createElement(VToolSeamAllowance::TagRecord);
|
||||
doc->SetAttribute(recordNode, AttrPath, paths.at(i));
|
||||
iPathsElement.appendChild(recordNode);
|
||||
}
|
||||
domElement.appendChild(iPathsElement);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VToolSeamAllowance::AddPatternPieceData(VAbstractPattern *doc, QDomElement &domElement, const VPiece &piece)
|
||||
{
|
||||
|
@ -362,6 +380,7 @@ void VToolSeamAllowance::AddToFile()
|
|||
AddNodes(doc, domElement, piece);
|
||||
//custom seam allowance
|
||||
AddCSARecords(doc, domElement, piece.GetCustomSARecords());
|
||||
AddInternalPaths(doc, domElement, piece.GetInternalPaths());
|
||||
|
||||
AddPiece *addDet = new AddPiece(domElement, doc, piece, m_drawName);
|
||||
connect(addDet, &AddPiece::NeedFullParsing, doc, &VAbstractPattern::NeedFullParsing);
|
||||
|
@ -393,6 +412,7 @@ void VToolSeamAllowance::RefreshDataInFile()
|
|||
AddGrainline(doc, domElement, piece);
|
||||
AddNodes(doc, domElement, piece);
|
||||
AddCSARecords(doc, domElement, piece.GetCustomSARecords());
|
||||
AddInternalPaths(doc, domElement, piece.GetInternalPaths());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -637,6 +657,7 @@ VToolSeamAllowance::VToolSeamAllowance(VAbstractPattern *doc, VContainer *data,
|
|||
VPiece detail = data->GetPiece(id);
|
||||
InitNodes(detail, scene);
|
||||
InitCSAPaths(detail);
|
||||
InitInternalPaths(detail);
|
||||
this->setFlag(QGraphicsItem::ItemIsMovable, true);
|
||||
this->setFlag(QGraphicsItem::ItemIsSelectable, true);
|
||||
RefreshGeometry();
|
||||
|
@ -737,6 +758,22 @@ void VToolSeamAllowance::InitCSAPaths(const VPiece &detail)
|
|||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VToolSeamAllowance::InitInternalPaths(const VPiece &detail)
|
||||
{
|
||||
QVector<quint32> records = detail.GetInternalPaths();
|
||||
for (int i = 0; i < records.size(); ++i)
|
||||
{
|
||||
QHash<quint32, VDataTool*>* tools = doc->getTools();
|
||||
SCASSERT(tools != nullptr);
|
||||
VToolPiecePath *tool = qobject_cast<VToolPiecePath*>(tools->value(records.at(i)));
|
||||
SCASSERT(tool != nullptr);
|
||||
tool->setParentItem(this);
|
||||
tool->SetParentType(ParentType::Item);
|
||||
doc->IncrementReferens(records.at(i));
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VToolSeamAllowance::DeleteTool(bool ask)
|
||||
{
|
||||
|
|
|
@ -56,6 +56,7 @@ public:
|
|||
|
||||
static const QString TagCSA;
|
||||
static const QString TagRecord;
|
||||
static const QString TagIPaths;
|
||||
|
||||
static const QString AttrVersion;
|
||||
static const QString AttrForbidFlipping;
|
||||
|
@ -74,6 +75,7 @@ public:
|
|||
static void AddAttributes(VAbstractPattern *doc, QDomElement &domElement, quint32 id, const VPiece &piece);
|
||||
static void AddCSARecord(VAbstractPattern *doc, QDomElement &domElement, const CustomSARecord &record);
|
||||
static void AddCSARecords(VAbstractPattern *doc, QDomElement &domElement, const QVector<CustomSARecord> &records);
|
||||
static void AddInternalPaths(VAbstractPattern *doc, QDomElement &domElement, const QVector<quint32> &paths);
|
||||
static void AddPatternPieceData(VAbstractPattern *doc, QDomElement &domElement, const VPiece &piece);
|
||||
static void AddPatternInfo(VAbstractPattern *doc, QDomElement &domElement, const VPiece &piece);
|
||||
static void AddGrainline(VAbstractPattern *doc, QDomElement &domElement, const VPiece &piece);
|
||||
|
@ -131,6 +133,7 @@ private:
|
|||
|
||||
void InitNodes(const VPiece &detail, VMainGraphicsScene *scene);
|
||||
void InitCSAPaths(const VPiece &detail);
|
||||
void InitInternalPaths(const VPiece &detail);
|
||||
|
||||
template <typename Tool>
|
||||
Tool* InitTool(VMainGraphicsScene *scene, quint32 toolId);
|
||||
|
|
|
@ -64,6 +64,7 @@ void AddPiece::undo()
|
|||
|
||||
DecrementReferences(m_detail.GetPath().GetNodes());
|
||||
DecrementReferences(m_detail.GetCustomSARecords());
|
||||
DecrementReferences(m_detail.GetInternalPaths());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -108,6 +108,7 @@ void DeletePiece::redo()
|
|||
|
||||
DecrementReferences(m_detail.GetPath().GetNodes());
|
||||
DecrementReferences(m_detail.GetCustomSARecords());
|
||||
DecrementReferences(m_detail.GetInternalPaths());
|
||||
emit NeedFullParsing(); // Doesn't work when UnionDetail delete detail.
|
||||
}
|
||||
else
|
||||
|
|
|
@ -77,9 +77,11 @@ void SavePieceOptions::undo()
|
|||
VToolSeamAllowance::AddGrainline(doc, domElement, m_oldDet);
|
||||
VToolSeamAllowance::AddNodes(doc, domElement, m_oldDet);
|
||||
VToolSeamAllowance::AddCSARecords(doc, domElement, m_oldDet.GetCustomSARecords());
|
||||
VToolSeamAllowance::AddInternalPaths(doc, domElement, m_oldDet.GetInternalPaths());
|
||||
|
||||
IncrementReferences(m_oldDet.MissingNodes(m_newDet));
|
||||
IncrementReferences(m_oldDet.MissingCSAPath(m_newDet));
|
||||
IncrementReferences(m_oldDet.MissingInternalPaths(m_newDet));
|
||||
emit NeedLiteParsing(Document::LiteParse);
|
||||
}
|
||||
else
|
||||
|
@ -104,9 +106,11 @@ void SavePieceOptions::redo()
|
|||
VToolSeamAllowance::AddGrainline(doc, domElement, m_newDet);
|
||||
VToolSeamAllowance::AddNodes(doc, domElement, m_newDet);
|
||||
VToolSeamAllowance::AddCSARecords(doc, domElement, m_newDet.GetCustomSARecords());
|
||||
VToolSeamAllowance::AddInternalPaths(doc, domElement, m_newDet.GetInternalPaths());
|
||||
|
||||
DecrementReferences(m_oldDet.MissingNodes(m_newDet));
|
||||
DecrementReferences(m_oldDet.MissingCSAPath(m_newDet));
|
||||
DecrementReferences(m_oldDet.MissingInternalPaths(m_newDet));
|
||||
|
||||
emit NeedLiteParsing(Document::LiteParse);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user