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