Merge branch 'develop' into feature/manual-layout.

This commit is contained in:
Roman Telezhynskyi 2020-06-04 13:45:32 +03:00
parent 55c9103ef1
commit 20b797b2c5
45 changed files with 1789 additions and 229 deletions

View File

@ -47,7 +47,9 @@
- Setting scale factor for export and print. - Setting scale factor for export and print.
- New layout generator option: Prefer one sheet solution. - New layout generator option: Prefer one sheet solution.
- [smart-pattern/valentina#15] Organization of groups - groups categories - [smart-pattern/valentina#15] Organization of groups - groups categories
- Improve the property browser. Show full arc name. - Improve the property browser. Show full arc name.
- [smart-pattern/valentina#45] Optimize tool box position for big screen resolutions.
- [smart-pattern/valentina#40] Invalid name of arc in modeling mode.
# Version 0.6.2 (unreleased) # Version 0.6.2 (unreleased)
- [#903] Bug in tool Cut Spline path. - [#903] Bug in tool Cut Spline path.

View File

@ -5597,30 +5597,6 @@ Applicare la configurazione comunque?</translation>
<source>Add tags</source> <source>Add tags</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Enable to create a visibility gropup from original objects</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Visibility Group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name:</source>
<translation>Nome:</translation>
</message>
<message>
<source>Tags:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Separate each tag with comma.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add tags</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>DialogSaveLAyout</name> <name>DialogSaveLAyout</name>
@ -11437,25 +11413,6 @@ Vuoi salvare le tue modifiche?</translation>
</message> </message>
<message> <message>
<source>Can&apos;t open schema file %1: <source>Can&apos;t open schema file %1:
%2.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Could not load schema file &apos;%1&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Validation error file %3 in line %1 column %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Can&apos;t open file %1:
%2.</source>
<translation>Impossibile aprire file %1:
%2.</translation>
</message>
<message>
<source>Can&apos;t open schema file %1:
%2.</source> %2.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -11753,21 +11710,6 @@ Vuoi salvare le tue modifiche?</translation>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>VBank</name>
<message>
<source>Preparing data for layout error: Detail &apos;%1&apos; square &lt;= 0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Preparing data for layout error: Layout paper sheet &lt;= 0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Preparing data for layout error: List of details is empty</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>VCommandLine</name> <name>VCommandLine</name>
<message> <message>

View File

@ -60,6 +60,7 @@ public:
private: private:
Q_DISABLE_COPY(VPCarrouselPiece)
VPPiece *m_piece; VPPiece *m_piece;
private slots: private slots:

View File

@ -0,0 +1,388 @@
<?xml version="1.0" encoding="UTF-8"?>
<pattern>
<!--Pattern created with Valentina v0.7.0.0a (https://valentinaproject.bitbucket.io/).-->
<version>0.8.7</version>
<unit>mm</unit>
<description/>
<notes/>
<patternName>надсечка внутри детали</patternName>
<patternNumber/>
<company/>
<patternLabel dateFormat="MM-dd-yyyy" timeFormat="hh:mm:ss">
<line alignment="0" bold="false" italic="false" sfIncrement="0" text="%pName% %pLetter%"/>
</patternLabel>
<patternMaterials>
<material name="Virs" number="1"/>
</patternMaterials>
<finalMeasurements/>
<measurements>smart_pattern_#36.vit</measurements>
<increments>
<increment description="" formula="29&#10;+#stojka_shyrina_shva_snizu&#10;+ #stojka_shyrina_shva_sverxu" name="#model_stojka_shyrina"/>
</increments>
<previewCalculations/>
<draw name="Стойка">
<calculation>
<point id="6226" mx="8.65025" my="-2.56084" name="Центр0" showLabel="true" type="single" x="7.9375" y="5903.31"/>
<point angle="0" basePoint="6226" id="6227" length="150" lineColor="black" mx="1.32292" my="2.64583" name="нуль1" showLabel="true" type="endLine" typeLine="none"/>
<point angle="0" basePoint="6227" id="6229" length="40" lineColor="black" mx="1.32292" my="2.64583" name="нуль2" showLabel="true" type="endLine" typeLine="dotLine"/>
<point angle="0" basePoint="6229" id="6231" length="40" lineColor="black" mx="1.32292" my="2.64583" name="нуль3" showLabel="true" type="endLine" typeLine="dotLine"/>
<point angle="0" basePoint="6231" id="6233" length="40" lineColor="black" mx="1.32292" my="2.64583" name="нуль4" showLabel="true" type="endLine" typeLine="dotLine"/>
<point angle="270" basePoint="6233" id="6234" length="222.869" lineColor="deeppink" mx="1.32292" my="2.64583" name="Длина_стойки_по_выпукломураю_1_2_со_швом" showLabel="true" type="endLine" typeLine="dashLine"/>
<point angle="180" basePoint="6226" id="6236" length="#model_stojka_shyrina" lineColor="cornflowerblue" mx="-35.1237" my="-4.29639" name="Центр1" showLabel="true" type="endLine" typeLine="dotLine"/>
<point firstPoint="6226" id="6238" length="0.5" lineColor="black" mx="-177.478" my="4.2755" name="х1_4а" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6239" length="0.5" lineColor="black" mx="-180.785" my="19.8923" name="х1_4б" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6240" length="1.5" lineColor="black" mx="-182.568" my="36.0919" name="х1_4" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6241" length="1.9" lineColor="black" mx="-185.276" my="52.9302" name="х1_2а" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6242" length="2.5" lineColor="black" mx="-185.458" my="73.49" name="х1_2б" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6243" length="3.8" lineColor="black" mx="-184.491" my="90.1892" name="х1_2" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6244" length="6" lineColor="black" mx="-183.776" my="102.273" name="х3_4а" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6245" length="10" lineColor="black" mx="-182.144" my="114.794" name="х3_4б" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6246" length="15.5" lineColor="black" mx="-177.918" my="129.855" name="х3_4" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6247" length="23.5" lineColor="black" mx="-170.951" my="145.663" name="х1а" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6248" length="30" lineColor="black" mx="-167.834" my="159.459" name="х1б" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6249" length="28+14" lineColor="black" mx="-154.42" my="172.459" name="х_1" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<point angle="270" basePoint="6226" id="6261" length="Line_нуль4_Длина_стойки_по_выпукломураю_1_2_со_швом *219/222 -5" lineColor="black" mx="1.32292" my="2.64583" name="Расчётная_длина_по_у0" showLabel="true" type="endLine" typeLine="hair"/>
<point firstPoint="6226" id="6263" length="CurrentLength/2" lineColor="black" mx="1.32292" my="2.64583" name="у1_2_0" secondPoint="6261" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6264" length="CurrentLength/2" lineColor="black" mx="1.32292" my="2.64583" name="у_1_4_0" secondPoint="6263" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6263" id="6265" length="CurrentLength/2" lineColor="black" mx="1.32292" my="2.64583" name="у3_4_0" secondPoint="6261" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6240" id="6266" mx="1.32292" my="2.64583" name="H9" secondPoint="6264" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6243" id="6267" mx="1.32292" my="2.64583" name="H10" secondPoint="6263" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6246" id="6268" mx="1.32292" my="2.64583" name="H11" secondPoint="6265" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6249" id="6269" mx="1.32292" my="2.64583" name="Длина_итер0" secondPoint="6261" showLabel="true" type="pointOfIntersection"/>
<spline aScale="0" color="black" id="6270" penStyle="hair" type="pathInteractive">
<pathPoint angle1="180" angle2="0" length1="0" length2="0" pSpline="6226"/>
<pathPoint angle1="180" angle2="0" length1="0" length2="0" pSpline="6266"/>
<pathPoint angle1="180" angle2="0" length1="0" length2="0" pSpline="6267"/>
<pathPoint angle1="180" angle2="0" length1="0" length2="0" pSpline="6268"/>
<pathPoint angle1="180" angle2="0" length1="0" length2="0" pSpline="6269"/>
</spline>
<point angle="270" basePoint="6226" id="6272" length="#raznica_plana_i_fakta = Line_нуль4_Длина_стойки_по_выпукломураю_1_2_со_швом - SplPath_Центр0_Длина_итер0;&#10;&#10;Line_Центр0_Расчётная_длина_по_у0 + #raznica_plana_i_fakta " lineColor="black" mx="-3.03236" my="10.812" name="Расчётная_длина_по_у1" showLabel="true" type="endLine" typeLine="hair"/>
<point firstPoint="6226" id="6273" length="CurrentLength/2" lineColor="black" mx="1.32292" my="2.64583" name="у1_2_и1" secondPoint="6272" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6226" id="6274" length="CurrentLength/2" lineColor="black" mx="1.32292" my="2.64583" name="у1_4_и1" secondPoint="6273" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6273" id="6275" length="CurrentLength/2" lineColor="black" mx="1.32292" my="2.64583" name="у3_4_и1" secondPoint="6272" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6240" id="6276" mx="1.32292" my="2.64583" name="H12" secondPoint="6274" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6243" id="6277" mx="1.32292" my="2.64583" name="H13" secondPoint="6273" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6246" id="6278" mx="1.32292" my="2.64583" name="H14" secondPoint="6275" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6249" id="6279" mx="-46.5852" my="17.3449" name="Длина_итер1" secondPoint="6272" showLabel="true" type="pointOfIntersection"/>
<spline aScale="0" color="black" id="6280" penStyle="hair" type="pathInteractive">
<pathPoint angle1="180" angle2="0" length1="0" length2="0" pSpline="6226"/>
<pathPoint angle1="180" angle2="0" length1="0" length2="0" pSpline="6276"/>
<pathPoint angle1="180" angle2="0" length1="0" length2="0" pSpline="6277"/>
<pathPoint angle1="180" angle2="0" length1="0" length2="0" pSpline="6278"/>
<pathPoint angle1="180" angle2="0" length1="0" length2="0" pSpline="6279"/>
</spline>
<point angle="0" basePoint="6226" id="6282" length="90" lineColor="darkGreen" mx="1.32292" my="2.64583" name="у0" showLabel="true" type="endLine" typeLine="dotLine"/>
<point angle="270" basePoint="6282" id="6237" length="#raznica_dlin_krivyx = SplPath_Центр0_Длина_итер1 - SplPath_Центр0_Длина_итер0;&#10;#raznica_po_y = Line_Центр0_Расчётная_длина_по_у1 - Line_Центр0_Расчётная_длина_по_у0;&#10;&#10;&#10;#dlina_nedostajusciaja = Line_нуль4_Длина_стойки_по_выпукломураю_1_2_со_швом - SplPath_Центр0_Длина_итер1;&#10;&#10;#dobavka_vysoty = #raznica_po_y * #dlina_nedostajusciaja / #raznica_dlin_krivyx;&#10;Line_Центр0_Расчётная_длина_по_у1 + #dobavka_vysoty -1" lineColor="black" mx="4.30862" my="12.901" name="Расчётная_длина_по_у3" showLabel="true" type="endLine" typeLine="dotLine"/>
<point firstPoint="6282" id="6250" length="CurrentLength/2" lineColor="black" mx="1.32292" my="2.64583" name="у1_2" secondPoint="6237" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6282" id="6251" length="CurrentLength/2" lineColor="black" mx="1.32292" my="2.64583" name="у1_4" secondPoint="6250" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6250" id="6252" length="CurrentLength/2" lineColor="black" mx="1.32292" my="2.64583" name="у3_4" secondPoint="6237" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6282" id="6253" length="CurrentLength/3" lineColor="black" mx="1.32292" my="2.64583" name="у1_4а" secondPoint="6251" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6282" id="6254" length="CurrentLength*2/3" lineColor="black" mx="1.32292" my="2.64583" name="у1_4б" secondPoint="6251" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6251" id="6255" length="CurrentLength/3" lineColor="black" mx="1.32292" my="2.64583" name="у1_2а" secondPoint="6250" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6251" id="6256" length="CurrentLength*2/3" lineColor="black" mx="1.32292" my="2.64583" name="у1_2б" secondPoint="6250" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6250" id="6257" length="CurrentLength/3" lineColor="black" mx="1.32292" my="2.64583" name="у3_4а" secondPoint="6252" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6250" id="6258" length="CurrentLength*2/3&#10;" lineColor="black" mx="1.32292" my="2.64583" name="у3_4б" secondPoint="6252" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6252" id="6259" length="CurrentLength/3" lineColor="black" mx="1.32292" my="2.64583" name="у1а" secondPoint="6237" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6252" id="6260" length="CurrentLength*2/3" lineColor="black" mx="1.32292" my="2.64583" name="у1б" secondPoint="6237" showLabel="true" type="alongLine" typeLine="none"/>
<point firstPoint="6240" id="6283" mx="8.40025" my="-4.4315" name="т1_4" secondPoint="6251" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6243" id="6284" mx="1.32292" my="2.64583" name="т1_2" secondPoint="6250" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6246" id="6285" mx="1.32292" my="2.64583" name="т3_4" secondPoint="6252" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6249" id="6286" mx="1.32292" my="2.64583" name="т_1" secondPoint="6237" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6238" id="6287" mx="5.67817" my="-3.88709" name="т1_4а" secondPoint="6253" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6239" id="6288" mx="7.31143" my="-5.52032" name="т1_4б" secondPoint="6254" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6241" id="6289" mx="10.0335" my="-3.34268" name="т1_2а" secondPoint="6255" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6242" id="6290" mx="10.0335" my="-2.25386" name="т1_2б" secondPoint="6256" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6244" id="6291" mx="1.32292" my="2.64583" name="т3_4а" secondPoint="6257" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6245" id="6292" mx="1.32292" my="2.64583" name="т3_4б" secondPoint="6258" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6247" id="6293" mx="5.6782" my="-0.0762208" name="т1а" secondPoint="6259" showLabel="true" type="pointOfIntersection"/>
<point firstPoint="6248" id="6294" mx="0.675707" my="-1.56106" name="т1б" secondPoint="6260" showLabel="true" type="pointOfIntersection"/>
<spline aScale="0" color="deeppink" id="6295" penStyle="hair" type="cubicBezierPath">
<pathPoint pSpline="6226"/>
<pathPoint pSpline="6287"/>
<pathPoint pSpline="6288"/>
<pathPoint pSpline="6283"/>
<pathPoint pSpline="6289"/>
<pathPoint pSpline="6290"/>
<pathPoint pSpline="6284"/>
<pathPoint pSpline="6291"/>
<pathPoint pSpline="6292"/>
<pathPoint pSpline="6285"/>
<pathPoint pSpline="6293"/>
<pathPoint pSpline="6294"/>
<pathPoint pSpline="6286"/>
</spline>
<point id="6305" length="SplPath_Центр0_т_1 -23 +8" mx="-7.65623" my="-10.8771" name="вс1" showLabel="true" splinePath="6295" type="cutSplinePath"/>
<point angle="-180" firstPoint="6305" id="6306" length="#model_stojka_shyrina -2" lineColor="cornflowerblue" mx="3.22115" my="7.57243" name="вс2" secondPoint="6286" showLabel="false" type="normal" typeLine="dashLine"/>
<point firstPoint="6306" id="6311" length="14.74" lineColor="black" mx="-18.5724" my="-18.5964" name="вс_ц_окр" secondPoint="6305" showLabel="true" type="alongLine" typeLine="none"/>
<point angle="245" basePoint="6311" id="6312" length="14.74" lineColor="deepskyblue" mx="8.83361" my="-14.7041" name="вс3" showLabel="false" type="endLine" typeLine="dotLine"/>
<line firstPoint="6311" id="6314" lineColor="deepskyblue" secondPoint="6306" typeLine="dashLine"/>
<arc aScale="0" angle1="AngleLine_вс_ц_окрс2" angle2="AngleLine_вс_ц_окрс3" center="6311" color="deeppink" id="6315" penStyle="hair" radius="Line_вс_ц_окрс2" type="simple"/>
<point arc="6315" crossPoint="2" id="6316" mx="-51.7153" my="6.24505" name="вс_т_кстлной" showLabel="true" tangent="6286" type="pointFromArcAndTangent"/>
<line firstPoint="6316" id="6317" lineColor="blue" secondPoint="6286" typeLine="hair"/>
<point angle="-180" firstPoint="6285" id="6318" length="#model_stojka_shyrina/2" lineColor="cornflowerblue" mx="-14.465" my="7.00111" name="т3_4ц" secondPoint="6286" showLabel="true" type="normal" typeLine="dashLine"/>
<point angle="-180" firstPoint="6283" id="6320" length="#model_stojka_shyrina/2" lineColor="cornflowerblue" mx="-10.1097" my="-14.7753" name="т1_4ц" secondPoint="6284" showLabel="true" type="normal" typeLine="dashLine"/>
<point firstPoint="6226" id="6321" length="CurrentLength/2" lineColor="black" mx="-10.6541" my="8.08993" name="т0_ц" secondPoint="6236" showLabel="true" type="alongLine" typeLine="none"/>
<operation id="6322" p1Line="6318" p2Line="6311" suffix="_з" type="flippingByLine">
<source>
<item idObject="6285"/>
<item idObject="6293"/>
</source>
<destination>
<item idObject="6323" mx="-31.8861" my="-12.5977" showLabel="true"/>
<item idObject="6324" mx="-29.164" my="-9.87557" showLabel="true"/>
</destination>
</operation>
<operation id="6327" p1Line="6321" p2Line="6320" suffix="_зр" type="flippingByLine">
<source>
<item idObject="6287"/>
<item idObject="6288"/>
<item idObject="6283"/>
<item idObject="6289"/>
<item idObject="6290"/>
</source>
<destination>
<item idObject="6328" mx="-44.4076" my="-7.15355" showLabel="true"/>
<item idObject="6329" mx="-44.4076" my="-4.4315" showLabel="true"/>
<item idObject="6330" mx="-41.1411" my="-4.4315" showLabel="true"/>
<item idObject="6331" mx="-47.674" my="-6.06473" showLabel="true"/>
<item idObject="6332" mx="-49.8516" my="-7.15355" showLabel="true"/>
</destination>
</operation>
<point arc="6315" crossPoint="1" id="6333" mx="-97.4093" my="-0.392649" name="Ндсчкас_т_кстлной1" showLabel="true" tangent="6324" type="pointFromArcAndTangent"/>
<arc aScale="0" angle1="90" angle2="270" center="6284" color="cornflowerblue" id="6335" penStyle="dotLine" radius="#model_stojka_shyrina" type="simple"/>
<point arc="6335" crossPoint="1" id="6336" mx="-43.8166" my="-5.5829" name="т1_2_в" showLabel="true" tangent="6332" type="pointFromArcAndTangent"/>
<arc aScale="0" angle1="90" angle2="270" center="6291" color="darkGreen" id="6337" penStyle="dotLine" radius="#model_stojka_shyrina" type="simple"/>
<point arc="6337" crossPoint="1" id="6338" mx="-44.1733" my="-8.34428" name="т3_4а_в" showLabel="true" tangent="6336" type="pointFromArcAndTangent"/>
<arc aScale="0" angle1="90" angle2="270" center="6292" color="darkviolet" id="6339" penStyle="dotLine" radius="#model_stojka_shyrina" type="simple"/>
<point arc="6339" crossPoint="1" id="6340" mx="21.8893" my="-8.52888" name="т3_4б_в" showLabel="true" tangent="6338" type="pointFromArcAndTangent"/>
<point firstPoint="6333" id="6394" length="CurrentLength/2" lineColor="black" mx="-28.8368" my="-6.79064" name="вс_в3" secondPoint="6324" showLabel="true" type="alongLine" typeLine="none"/>
<spline aScale="0" color="blue" id="6396" penStyle="hair" type="cubicBezierPath">
<pathPoint pSpline="6236"/>
<pathPoint pSpline="6328"/>
<pathPoint pSpline="6329"/>
<pathPoint pSpline="6330"/>
<pathPoint pSpline="6331"/>
<pathPoint pSpline="6332"/>
<pathPoint pSpline="6336"/>
<pathPoint pSpline="6338"/>
<pathPoint pSpline="6340"/>
<pathPoint pSpline="6323"/>
<pathPoint pSpline="6324"/>
<pathPoint pSpline="6394"/>
<pathPoint pSpline="6333"/>
</spline>
<point id="6398" length="@e" mx="65.3343" my="-1.06243" name="Стйка_ндсчк_плеча" showLabel="true" splinePath="6295" type="cutSplinePath"/>
<operation axisType="2" center="6282" id="7244" suffix="h1" type="flippingByAxis">
<source>
<item idObject="6338"/>
<item idObject="6396"/>
<item idObject="6337"/>
<item idObject="6336"/>
<item idObject="6335"/>
<item idObject="6332"/>
<item idObject="6339"/>
<item idObject="6331"/>
<item idObject="6330"/>
<item idObject="6329"/>
<item idObject="6328"/>
<item idObject="6323"/>
<item idObject="6321"/>
<item idObject="6320"/>
<item idObject="6340"/>
<item idObject="6295"/>
<item idObject="6324"/>
<item idObject="6318"/>
<item idObject="6292"/>
<item idObject="6291"/>
<item idObject="6285"/>
<item idObject="6284"/>
<item idObject="6293"/>
<item idObject="6394"/>
<item idObject="6333"/>
<item idObject="6315"/>
<item idObject="6287"/>
<item idObject="6290"/>
<item idObject="6289"/>
<item idObject="6288"/>
<item idObject="6283"/>
<item idObject="6294"/>
<item idObject="6316"/>
<item idObject="6286"/>
</source>
<destination>
<item idObject="7245" mx="-44.1733" my="-8.34428" showLabel="true"/>
<item idObject="7246"/>
<item idObject="7247"/>
<item idObject="7248" mx="-43.8166" my="-5.5829" showLabel="true"/>
<item idObject="7249"/>
<item idObject="7250" mx="-49.8516" my="-7.15355" showLabel="true"/>
<item idObject="7251"/>
<item idObject="7252" mx="-47.674" my="-6.06473" showLabel="true"/>
<item idObject="7253" mx="-41.1411" my="-4.4315" showLabel="true"/>
<item idObject="7254" mx="-44.4076" my="-4.4315" showLabel="true"/>
<item idObject="7255" mx="-44.4076" my="-7.15355" showLabel="true"/>
<item idObject="7256" mx="-31.8861" my="-12.5977" showLabel="true"/>
<item idObject="7257" mx="-10.6541" my="8.08993" showLabel="true"/>
<item idObject="7258" mx="-10.1097" my="-14.7753" showLabel="true"/>
<item idObject="7259" mx="21.8893" my="-8.52888" showLabel="true"/>
<item idObject="7260"/>
<item idObject="7261" mx="-29.164" my="-9.87557" showLabel="true"/>
<item idObject="7262" mx="-14.465" my="7.00111" showLabel="true"/>
<item idObject="7263" mx="1.32292" my="2.64583" showLabel="true"/>
<item idObject="7264" mx="1.32292" my="2.64583" showLabel="true"/>
<item idObject="7265" mx="1.32292" my="2.64583" showLabel="true"/>
<item idObject="7266" mx="1.32292" my="2.64583" showLabel="true"/>
<item idObject="7267" mx="5.6782" my="-0.0762208" showLabel="true"/>
<item idObject="7268" mx="-28.8368" my="-6.79064" showLabel="true"/>
<item idObject="7269" mx="-97.4093" my="-0.392649" showLabel="true"/>
<item idObject="7270"/>
<item idObject="7271" mx="5.67817" my="-3.88709" showLabel="true"/>
<item idObject="7272" mx="10.0335" my="-2.25386" showLabel="true"/>
<item idObject="7273" mx="10.0335" my="-3.34268" showLabel="true"/>
<item idObject="7274" mx="7.31143" my="-5.52032" showLabel="true"/>
<item idObject="7275" mx="8.40025" my="-4.4315" showLabel="true"/>
<item idObject="7276" mx="0.675707" my="-1.56106" showLabel="true"/>
<item idObject="7277" mx="-51.7153" my="6.24505" showLabel="true"/>
<item idObject="7278" mx="1.32292" my="2.64583" showLabel="true"/>
</destination>
</operation>
<spline aScale="0" color="black" duplicate="1" id="7279" penStyle="hair" type="cubicBezierPath">
<pathPoint pSpline="6226"/>
<pathPoint pSpline="7271"/>
<pathPoint pSpline="7274"/>
<pathPoint pSpline="7275"/>
<pathPoint pSpline="7273"/>
<pathPoint pSpline="7272"/>
<pathPoint pSpline="7266"/>
<pathPoint pSpline="7264"/>
<pathPoint pSpline="7263"/>
<pathPoint pSpline="7265"/>
<pathPoint pSpline="7267"/>
<pathPoint pSpline="7276"/>
<pathPoint pSpline="7278"/>
</spline>
<point id="7280" length="79.6956" mx="51.7718" my="-3.90097" name="Cтйка_ндсчк_плеча1" showLabel="true" splinePath="7279" type="cutSplinePath"/>
<spline aScale="0" color="black" duplicate="1" id="7281" penStyle="hair" type="cubicBezierPath">
<pathPoint pSpline="6236"/>
<pathPoint pSpline="7255"/>
<pathPoint pSpline="7254"/>
<pathPoint pSpline="7253"/>
<pathPoint pSpline="7252"/>
<pathPoint pSpline="7250"/>
<pathPoint pSpline="7248"/>
<pathPoint pSpline="7245"/>
<pathPoint pSpline="7259"/>
<pathPoint pSpline="7256"/>
<pathPoint pSpline="7261"/>
<pathPoint pSpline="7268"/>
<pathPoint pSpline="7269"/>
</spline>
</calculation>
<modeling>
<point id="7366" idObject="6226" inUse="false" mx="8.65025" my="-2.56084" showLabel="false" type="modeling"/>
<spline id="7367" idObject="6295" inUse="false" type="modelingPath"/>
<point id="7368" idObject="6398" inUse="false" mx="65.3343" my="-1.06243" showLabel="true" type="modeling"/>
<spline id="7369" idObject="6295" inUse="false" type="modelingPath"/>
<point id="7370" idObject="6286" inUse="false" mx="1.32292" my="2.64583" showLabel="false" type="modeling"/>
<point id="7371" idObject="6316" inUse="false" mx="-51.7153" my="6.24505" showLabel="false" type="modeling"/>
<arc id="7372" idObject="6315" inUse="false" type="modeling"/>
<point id="7373" idObject="6333" inUse="false" mx="22.0564" my="-8.96418" showLabel="true" type="modeling"/>
<spline id="7374" idObject="6396" inUse="false" type="modelingPath"/>
<point id="7375" idObject="6236" inUse="false" mx="-28.9538" my="24.2392" showLabel="false" type="modeling"/>
<spline id="7376" idObject="7281" inUse="false" type="modelingPath"/>
<point id="7377" idObject="7269" inUse="false" mx="16.6992" my="-13.2499" showLabel="true" type="modeling"/>
<arc id="7378" idObject="7270" inUse="false" type="modeling"/>
<point id="7379" idObject="7277" inUse="false" mx="-33.977" my="-48.5124" showLabel="false" type="modeling"/>
<point id="7380" idObject="7278" inUse="false" mx="1.32292" my="2.64583" showLabel="false" type="modeling"/>
<spline id="7381" idObject="7279" inUse="false" type="modelingPath"/>
<point id="7382" idObject="7280" inUse="false" mx="51.7718" my="-3.90097" showLabel="true" type="modeling"/>
<spline id="7383" idObject="7279" inUse="false" type="modelingPath"/>
</modeling>
<details>
<detail forbidFlipping="true" forceFlipping="false" hideMainPath="true" id="7384" mx="3634.01" my="-3811.19" name="Стойка1" seamAllowance="true" version="2" width="8">
<data annotation="" foldPosition="" fontSize="10" height="8.93415" letter="" mx="-108.468" my="22346.2" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="true" width="36.6364">
<line alignment="0" bold="false" italic="false" sfIncrement="0" text="%pName% %pLetter%"/>
</data>
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
<nodes>
<node idObject="7377" passmark="true" passmarkAngle="straightforward" passmarkLine="one" type="NodePoint"/>
<node idObject="7378" reverse="0" type="NodeArc"/>
<node idObject="7379" type="NodePoint"/>
<node idObject="7380" type="NodePoint"/>
<node idObject="7381" reverse="1" type="NodeSplinePath"/>
<node idObject="7382" type="NodePoint"/>
<node idObject="7383" reverse="1" type="NodeSplinePath"/>
<node idObject="7366" type="NodePoint"/>
<node idObject="7367" reverse="0" type="NodeSplinePath"/>
<node idObject="7368" type="NodePoint"/>
<node idObject="7369" reverse="0" type="NodeSplinePath"/>
<node idObject="7370" type="NodePoint"/>
<node idObject="7371" type="NodePoint"/>
<node idObject="7372" reverse="1" type="NodeArc"/>
<node idObject="7373" type="NodePoint"/>
<node idObject="7374" reverse="1" type="NodeSplinePath"/>
<node idObject="7375" type="NodePoint"/>
<node idObject="7376" reverse="0" type="NodeSplinePath"/>
</nodes>
</detail>
</details>
<groups>
<group id="6235" name="Вспомогательные начальные мерки" visible="true">
<item object="6227" tool="6227"/>
<item object="6228" tool="6228"/>
<item object="6229" tool="6229"/>
<item object="6230" tool="6230"/>
<item object="6231" tool="6231"/>
<item object="6232" tool="6232"/>
<item object="6233" tool="6233"/>
<item object="6234" tool="6234"/>
</group>
<group id="6262" name="Итерация 3" visible="true">
<item object="6237" tool="6237"/>
<item object="6250" tool="6250"/>
<item object="6251" tool="6251"/>
<item object="6252" tool="6252"/>
<item object="6253" tool="6253"/>
<item object="6254" tool="6254"/>
<item object="6255" tool="6255"/>
<item object="6256" tool="6256"/>
<item object="6257" tool="6257"/>
<item object="6258" tool="6258"/>
<item object="6259" tool="6259"/>
<item object="6260" tool="6260"/>
</group>
<group id="6271" name="Итерация 0" visible="true">
<item object="6261" tool="6261"/>
<item object="6263" tool="6263"/>
<item object="6264" tool="6264"/>
<item object="6265" tool="6265"/>
<item object="6267" tool="6267"/>
<item object="6268" tool="6268"/>
<item object="6269" tool="6269"/>
<item object="6270" tool="6270"/>
<item object="6266" tool="6266"/>
</group>
<group id="6281" name="Итерация 1" visible="true">
<item object="6272" tool="6272"/>
<item object="6273" tool="6273"/>
<item object="6274" tool="6274"/>
<item object="6275" tool="6275"/>
<item object="6277" tool="6277"/>
<item object="6278" tool="6278"/>
<item object="6279" tool="6279"/>
<item object="6280" tool="6280"/>
<item object="6276" tool="6276"/>
</group>
<group id="6400" name="Закруглуние вспом построения" visible="true">
<item object="6305" tool="6305"/>
<item object="6306" tool="6306"/>
<item object="6312" tool="6312"/>
<item object="6383" tool="6383"/>
<item object="6384" tool="6384"/>
<item object="6311" tool="6311"/>
<item object="6401" tool="6401"/>
</group>
</groups>
</draw>
</pattern>

View File

@ -0,0 +1,24 @@
<?xml version='1.0' encoding='UTF-8'?>
<vit>
<version>0.5.0</version>
<read-only>true</read-only>
<notes/>
<unit>cm</unit>
<pm_system>998</pm_system>
<personal>
<customer>
336
</customer>
<birth-date>1800-01-01</birth-date>
<gender>female</gender>
<email/>
</personal>
<body-measurements>
<m name='@d' value='22.2869'/>
<m name='@e' value='7.96956'/>
</body-measurements>
</vit>

View File

@ -728,14 +728,7 @@ bool TMainWindow::FileSave()
return false; return false;
} }
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup++; // turn checking on
#endif /*Q_OS_WIN32*/
const bool isFileWritable = QFileInfo(curFile).isWritable(); const bool isFileWritable = QFileInfo(curFile).isWritable();
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup--; // turn it off again
#endif /*Q_OS_WIN32*/
if (not isFileWritable) if (not isFileWritable)
{ {
QMessageBox messageBox(this); QMessageBox messageBox(this);
@ -2593,13 +2586,7 @@ void TMainWindow::UpdateWindowTitle()
bool isFileWritable = true; bool isFileWritable = true;
if (not curFile.isEmpty()) if (not curFile.isEmpty())
{ {
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup++; // turn checking on
#endif /*Q_OS_WIN32*/
isFileWritable = QFileInfo(curFile).isWritable(); isFileWritable = QFileInfo(curFile).isWritable();
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup--; // turn it off again
#endif /*Q_OS_WIN32*/
showName = StrippedName(curFile); showName = StrippedName(curFile);
} }
else else

View File

@ -53,6 +53,8 @@ Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationLabelLanguage,
(QLatin1String("configuration/label_language"))) (QLatin1String("configuration/label_language")))
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingAutoRefreshPatternMessage, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingAutoRefreshPatternMessage,
(QLatin1String("configuration/autoRefreshPatternMessage"))) (QLatin1String("configuration/autoRefreshPatternMessage")))
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingToolPanelScaling,
(QLatin1String("configuration/toolPanelScaling")))
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsLayout, (QLatin1String("paths/layout"))) Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsLayout, (QLatin1String("paths/layout")))
@ -670,3 +672,15 @@ void VValentinaSettings::SetWatermarkEditorSize(const QSize &sz)
{ {
setValue(*settingWatermarkEditorSize, sz); setValue(*settingWatermarkEditorSize, sz);
} }
//---------------------------------------------------------------------------------------------------------------------
bool VValentinaSettings::GetToolPanelScaling() const
{
return value(*settingToolPanelScaling, false).toBool();
}
//---------------------------------------------------------------------------------------------------------------------
void VValentinaSettings::SetToolPanelScaling(const bool &value)
{
setValue(*settingToolPanelScaling, value);
}

View File

@ -170,6 +170,9 @@ public:
QSize GetWatermarkEditorSize() const; QSize GetWatermarkEditorSize() const;
void SetWatermarkEditorSize(const QSize& sz); void SetWatermarkEditorSize(const QSize& sz);
bool GetToolPanelScaling() const;
void SetToolPanelScaling(const bool &value);
private: private:
Q_DISABLE_COPY(VValentinaSettings) Q_DISABLE_COPY(VValentinaSettings)
}; };

View File

@ -127,6 +127,9 @@ PreferencesConfigurationPage::PreferencesConfigurationPage(QWidget *parent)
// Theme // Theme
ui->darkModeCheck->setChecked(settings->GetDarkMode()); ui->darkModeCheck->setChecked(settings->GetDarkMode());
// Tool panel
ui->checkBoxToolPanelScaling->setChecked(settings->GetToolPanelScaling());
// Tab Scrolling // Tab Scrolling
ui->spinBoxDuration->setMinimum(VValentinaSettings::scrollingDurationMin); ui->spinBoxDuration->setMinimum(VValentinaSettings::scrollingDurationMin);
ui->spinBoxDuration->setMaximum(VValentinaSettings::scrollingDurationMax); ui->spinBoxDuration->setMaximum(VValentinaSettings::scrollingDurationMax);
@ -178,6 +181,11 @@ QStringList PreferencesConfigurationPage::Apply()
preferences.append(tr("dark mode")); preferences.append(tr("dark mode"));
} }
if (settings->GetToolPanelScaling() != ui->checkBoxToolPanelScaling->isChecked())
{
settings->SetToolPanelScaling(ui->checkBoxToolPanelScaling->isChecked());
}
settings->SetFreeCurveMode(ui->checkBoxFreeCurve->isChecked()); settings->SetFreeCurveMode(ui->checkBoxFreeCurve->isChecked());
settings->SetDoubleClickZoomFitBestCurrentPP(ui->checkBoxZoomFitBestCurrentPP->isChecked()); settings->SetDoubleClickZoomFitBestCurrentPP(ui->checkBoxZoomFitBestCurrentPP->isChecked());

View File

@ -33,9 +33,9 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>-152</y> <y>-161</y>
<width>624</width> <width>624</width>
<height>707</height> <height>717</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
@ -273,6 +273,16 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="checkBoxToolPanelScaling">
<property name="toolTip">
<string>Change the position of the tool panel to optimize for big screen resolutions. By default, the tool panel will take all available space.</string>
</property>
<property name="text">
<string>Tool panel scaling</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>

View File

@ -652,6 +652,7 @@ void MainWindow::SetToolButton(bool checked, Tool t, const QString &cursor, cons
case Tool::Move: case Tool::Move:
case Tool::FlippingByAxis: case Tool::FlippingByAxis:
case Tool::FlippingByLine: case Tool::FlippingByLine:
case Tool::Group:
dialogTool->SetGroupCategories(doc->GetGroupCategories()); dialogTool->SetGroupCategories(doc->GetGroupCategories());
break; break;
default: default:
@ -3048,20 +3049,14 @@ bool MainWindow::on_actionSave_triggered()
{ {
return false; return false;
} }
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup++; // turn checking on
#endif /*Q_OS_WIN32*/
const bool isFileWritable = QFileInfo(qApp->GetPatternPath()).isWritable();
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup--; // turn it off again
#endif /*Q_OS_WIN32*/
const bool isFileWritable = QFileInfo(qApp->GetPatternPath()).isWritable();
if (not isFileWritable) if (not isFileWritable)
{ {
QMessageBox messageBox(this); QMessageBox messageBox(this);
messageBox.setIcon(QMessageBox::Question); messageBox.setIcon(QMessageBox::Question);
messageBox.setText(tr("The document has no write permissions.")); messageBox.setText(tr("The document has no write permissions."));
messageBox.setInformativeText("Do you want to change the premissions?"); messageBox.setInformativeText(tr("Do you want to change the premissions?"));
messageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel); messageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);
messageBox.setDefaultButton(QMessageBox::Yes); messageBox.setDefaultButton(QMessageBox::Yes);
@ -4222,6 +4217,9 @@ void MainWindow::ReadSettings()
// Text under tool buton icon // Text under tool buton icon
ToolBarStyles(); ToolBarStyles();
// Tool box scaling
ToolBoxSizePolicy();
isDockToolOptionsVisible = ui->dockWidgetToolOptions->isEnabled(); isDockToolOptionsVisible = ui->dockWidgetToolOptions->isEnabled();
isDockGroupsVisible = ui->dockWidgetGroups->isEnabled(); isDockGroupsVisible = ui->dockWidgetGroups->isEnabled();
@ -5229,6 +5227,14 @@ void MainWindow::ToolBarStyles()
ToolBarStyle(ui->mainToolBar); ToolBarStyle(ui->mainToolBar);
} }
//---------------------------------------------------------------------------------------------------------------------
void MainWindow::ToolBoxSizePolicy()
{
ui->toolBox->setSizePolicy(ui->toolBox->sizePolicy().horizontalPolicy(),
qApp->ValentinaSettings()->GetToolPanelScaling() ? QSizePolicy::Fixed
: QSizePolicy::Preferred);
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void MainWindow::ShowPaper(int index) void MainWindow::ShowPaper(int index)
{ {
@ -5260,6 +5266,7 @@ void MainWindow::Preferences()
connect(dlg.data(), &DialogPreferences::UpdateProperties, toolOptions, connect(dlg.data(), &DialogPreferences::UpdateProperties, toolOptions,
&VToolOptionsPropertyBrowser::RefreshOptions); &VToolOptionsPropertyBrowser::RefreshOptions);
connect(dlg.data(), &DialogPreferences::UpdateProperties, this, &MainWindow::ToolBarStyles); connect(dlg.data(), &DialogPreferences::UpdateProperties, this, &MainWindow::ToolBarStyles);
connect(dlg.data(), &DialogPreferences::UpdateProperties, this, &MainWindow::ToolBoxSizePolicy);
connect(dlg.data(), &DialogPreferences::UpdateProperties, this, [this](){emit doc->FullUpdateFromFile();}); connect(dlg.data(), &DialogPreferences::UpdateProperties, this, [this](){emit doc->FullUpdateFromFile();});
connect(dlg.data(), &DialogPreferences::UpdateProperties, ui->view, connect(dlg.data(), &DialogPreferences::UpdateProperties, ui->view,
&VMainGraphicsView::ResetScrollingAnimation); &VMainGraphicsView::ResetScrollingAnimation);
@ -5995,13 +6002,7 @@ void MainWindow::UpdateWindowTitle()
bool isFileWritable = true; bool isFileWritable = true;
if (not qApp->GetPatternPath().isEmpty()) if (not qApp->GetPatternPath().isEmpty())
{ {
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup++; // turn checking on
#endif /*Q_OS_WIN32*/
isFileWritable = QFileInfo(qApp->GetPatternPath()).isWritable(); isFileWritable = QFileInfo(qApp->GetPatternPath()).isWritable();
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup--; // turn it off again
#endif /*Q_OS_WIN32*/
} }
if (not patternReadOnly && isFileWritable) if (not patternReadOnly && isFileWritable)

View File

@ -122,6 +122,7 @@ private slots:
void PreviousPatternPiece(); void PreviousPatternPiece();
void NextPatternPiece(); void NextPatternPiece();
void ToolBarStyles(); void ToolBarStyles();
void ToolBoxSizePolicy();
void ShowPaper(int index); void ShowPaper(int index);
void Preferences(); void Preferences();
#if defined(Q_OS_MAC) #if defined(Q_OS_MAC)

View File

@ -358,20 +358,14 @@ bool WatermarkWindow::on_actionSave_triggered()
{ {
return false; return false;
} }
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup++; // turn checking on
#endif /*Q_OS_WIN32*/
const bool isFileWritable = QFileInfo(m_curFile).isWritable();
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup--; // turn it off again
#endif /*Q_OS_WIN32*/
const bool isFileWritable = QFileInfo(m_curFile).isWritable();
if (not isFileWritable) if (not isFileWritable)
{ {
QMessageBox messageBox(this); QMessageBox messageBox(this);
messageBox.setIcon(QMessageBox::Question); messageBox.setIcon(QMessageBox::Question);
messageBox.setText(tr("The document has no write permissions.")); messageBox.setText(tr("The document has no write permissions."));
messageBox.setInformativeText("Do you want to change the premissions?"); messageBox.setInformativeText(tr("Do you want to change the premissions?"));
messageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel); messageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);
messageBox.setDefaultButton(QMessageBox::Yes); messageBox.setDefaultButton(QMessageBox::Yes);
@ -494,13 +488,7 @@ void WatermarkWindow::UpdateWindowTitle()
bool isFileWritable = true; bool isFileWritable = true;
if (not m_curFile.isEmpty()) if (not m_curFile.isEmpty())
{ {
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup++; // turn checking on
#endif /*Q_OS_WIN32*/
isFileWritable = QFileInfo(m_curFile).isWritable(); isFileWritable = QFileInfo(m_curFile).isWritable();
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup--; // turn it off again
#endif /*Q_OS_WIN32*/
} }
if (isFileWritable) if (isFileWritable)

View File

@ -165,14 +165,7 @@ void VAbstractConverter::ReserveFile() const
.arg(info.absoluteDir().absolutePath(), info.baseName(), GetFormatVersionStr(), info.completeSuffix()); .arg(info.absoluteDir().absolutePath(), info.baseName(), GetFormatVersionStr(), info.completeSuffix());
if (not SafeCopy(m_convertedFileName, reserveFileName, error)) if (not SafeCopy(m_convertedFileName, reserveFileName, error))
{ {
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup++; // turn checking on
#endif /*Q_OS_WIN32*/
const bool isFileWritable = info.isWritable(); const bool isFileWritable = info.isWritable();
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup--; // turn it off again
#endif /*Q_OS_WIN32*/
if (not IsReadOnly() && isFileWritable) if (not IsReadOnly() && isFileWritable)
{ {
const QString errorMsg(tr("Error creating a reserv copy: %1.").arg(error)); const QString errorMsg(tr("Error creating a reserv copy: %1.").arg(error));

View File

@ -323,8 +323,11 @@ QString NameRegExp()
//Same regexp in pattern.xsd shema file. Don't forget to synchronize. //Same regexp in pattern.xsd shema file. Don't forget to synchronize.
// \p{Nd} - \p{Decimal_Digit_Number} // \p{Nd} - \p{Decimal_Digit_Number}
// \p{Zs} - \p{Space_Separator} // \p{Zs} - \p{Space_Separator}
regex = QString("^([^\\p{Nd}\\p{Zs}*/&|!<>^\n\\()%1%2%3%4=?:;'\"]){1,1}" // Here we use permanent start of string and end of string anchors \A and \z to match whole pattern as one
"([^\\p{Zs}*/&|!<>^\n\\()%1%2%3%4=?:;\"]){0,}$") // string. In some cases, a user may pass multiline or line that ends with a new line. To cover case with a new
// line at the end of string use /z anchor.
regex = QString("\\A([^\\p{Nd}\\p{Zs}*/&|!<>^\\n\\()%1%2%3%4=?:;'\"]){1,1}"
"([^\\p{Zs}*/&|!<>^\\n\\()%1%2%3%4=?:;\"]){0,}\\z")
.arg(negativeSigns, positiveSigns, decimalPoints, groupSeparators); .arg(negativeSigns, positiveSigns, decimalPoints, groupSeparators);
} }

View File

@ -379,7 +379,11 @@ void VArc::CreateName()
{ {
QString name = ARC_ + QString("%1").arg(this->GetCenter().name()); QString name = ARC_ + QString("%1").arg(this->GetCenter().name());
if (VAbstractCurve::id() != NULL_ID) if (getMode() == Draw::Modeling && getIdObject() != NULL_ID)
{
name += QString("_%1").arg(getIdObject());
}
else if (VAbstractCurve::id() != NULL_ID)
{ {
name += QString("_%1").arg(VAbstractCurve::id()); name += QString("_%1").arg(VAbstractCurve::id());
} }

View File

@ -381,7 +381,11 @@ void VEllipticalArc::CreateName()
{ {
QString name = ELARC_ + QString("%1").arg(this->GetCenter().name()); QString name = ELARC_ + QString("%1").arg(this->GetCenter().name());
if (VAbstractCurve::id() != NULL_ID) if (getMode() == Draw::Modeling && getIdObject() != NULL_ID)
{
name += QString("_%1").arg(getIdObject());
}
else if (VAbstractCurve::id() != NULL_ID)
{ {
name += QString("_%1").arg(VAbstractCurve::id()); name += QString("_%1").arg(VAbstractCurve::id());
} }

View File

@ -97,7 +97,7 @@ private:
}; };
Q_DECLARE_METATYPE(VLayoutPassmark) Q_DECLARE_METATYPE(VLayoutPassmark)
constexpr qreal accuracyPointOnLine = (0.12/*mm*/ / 25.4) * PrintDPI; constexpr qreal accuracyPointOnLine = (0.117/*mm*/ / 25.4) * PrintDPI;
Q_REQUIRED_RESULT static inline bool VFuzzyComparePoints(const QPointF &p1, const QPointF &p2); Q_REQUIRED_RESULT static inline bool VFuzzyComparePoints(const QPointF &p1, const QPointF &p2);
static inline bool VFuzzyComparePoints(const QPointF &p1, const QPointF &p2) static inline bool VFuzzyComparePoints(const QPointF &p1, const QPointF &p2)

View File

@ -1527,6 +1527,7 @@ bool VAbstractPiece::IsAllowanceValid(const QVector<QPointF> &base, const QVecto
// DumpVector(base); // Uncomment for dumping test data // DumpVector(base); // Uncomment for dumping test data
// DumpVector(allowance); // Uncomment for dumping test data // DumpVector(allowance); // Uncomment for dumping test data
// First check direction
const qreal baseDirection = VPiece::SumTrapezoids(base); const qreal baseDirection = VPiece::SumTrapezoids(base);
const qreal allowanceDirection = VPiece::SumTrapezoids(allowance); const qreal allowanceDirection = VPiece::SumTrapezoids(allowance);
@ -1535,6 +1536,7 @@ bool VAbstractPiece::IsAllowanceValid(const QVector<QPointF> &base, const QVecto
return false; // Wrong direction return false; // Wrong direction
} }
// Edges must not intersect
for (auto i = 0; i < base.count(); ++i) for (auto i = 0; i < base.count(); ++i)
{ {
int nextI = -1; int nextI = -1;
@ -1585,6 +1587,17 @@ bool VAbstractPiece::IsAllowanceValid(const QVector<QPointF> &base, const QVecto
} }
} }
// Just instersection edges is not enough. The base must be inside of the allowance.
QPolygonF allowancePolygon(allowance);
for (auto &point : base)
{
if (not allowancePolygon.containsPoint(point, Qt::WindingFill))
{
return false;
}
}
return true; return true;
} }

View File

@ -1204,10 +1204,10 @@ void VLayoutPiece::CreateLabelStrings(QGraphicsItem *parent, const QVector<QPoin
const qreal dH = QLineF(labelShape.at(1), labelShape.at(2)).length(); const qreal dH = QLineF(labelShape.at(1), labelShape.at(2)).length();
const qreal angle = - QLineF(labelShape.at(0), labelShape.at(1)).angle(); const qreal angle = - QLineF(labelShape.at(0), labelShape.at(1)).angle();
qreal dY = 0; qreal dY = 0;
qreal dX = 0;
for (int i = 0; i < tm.GetSourceLinesCount(); ++i) for (int i = 0; i < tm.GetSourceLinesCount(); ++i)
{ {
const TextLine& tl = tm.GetSourceLine(i); const TextLine& tl = tm.GetSourceLine(i);
QFont fnt = tm.GetFont(); QFont fnt = tm.GetFont();
fnt.setPixelSize(tm.GetFont().pixelSize() + tl.m_iFontSize); fnt.setPixelSize(tm.GetFont().pixelSize() + tl.m_iFontSize);
@ -1235,7 +1235,9 @@ void VLayoutPiece::CreateLabelStrings(QGraphicsItem *parent, const QVector<QPoin
{ {
qsText = fm.elidedText(qsText, Qt::ElideMiddle, static_cast<int>(dW)); qsText = fm.elidedText(qsText, Qt::ElideMiddle, static_cast<int>(dW));
} }
if ((tl.m_eAlign & Qt::AlignLeft) > 0)
qreal dX = 0;
if (tl.m_eAlign == 0 || (tl.m_eAlign & Qt::AlignLeft) > 0)
{ {
dX = 0; dX = 0;
} }
@ -1247,7 +1249,7 @@ void VLayoutPiece::CreateLabelStrings(QGraphicsItem *parent, const QVector<QPoin
dX = (dW - fm.width(qsText))/2; dX = (dW - fm.width(qsText))/2;
#endif #endif
} }
else else if ((tl.m_eAlign & Qt::AlignRight) > 0)
{ {
#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0) #if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
dX = dW - fm.horizontalAdvance(qsText); dX = dW - fm.horizontalAdvance(qsText);

View File

@ -121,6 +121,8 @@ void DialogCubicBezierPath::SetPath(const VCubicBezierPath &value)
{ {
ui->listWidget->setCurrentRow(0); ui->listWidget->setCurrentRow(0);
} }
ValidatePath();
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -219,7 +221,6 @@ void DialogCubicBezierPath::PointChanged(int row)
void DialogCubicBezierPath::currentPointChanged(int index) void DialogCubicBezierPath::currentPointChanged(int index)
{ {
const quint32 id = qvariant_cast<quint32>(ui->comboBoxPoint->itemData(index)); const quint32 id = qvariant_cast<quint32>(ui->comboBoxPoint->itemData(index));
QColor color;
try try
{ {
@ -228,50 +229,16 @@ void DialogCubicBezierPath::currentPointChanged(int index)
DataPoint(*point); DataPoint(*point);
item->setData(Qt::UserRole, QVariant::fromValue(*point)); item->setData(Qt::UserRole, QVariant::fromValue(*point));
if (not IsPathValid()) ValidatePath();
{
flagError = false;
color = errorColor;
ui->lineEditSplPathName->setText(tr("Invalid spline path"));
}
else
{
flagError = true;
color = OkColor(this);
auto first = qvariant_cast<VPointF>(ui->listWidget->item(0)->data(Qt::UserRole));
auto last = qvariant_cast<VPointF>(ui->listWidget->item(ui->listWidget->count()-1)->data(Qt::UserRole));
if (first.id() == path.at(0).id() && last.id() == path.at(path.CountPoints()-1).id())
{
newDuplicate = -1;
ui->lineEditSplPathName->setText(qApp->TrVars()->VarToUser(path.name()));
}
else
{
VCubicBezierPath newPath = ExtractPath();
if (not data->IsUnique(newPath.name()))
{
newDuplicate = static_cast<qint32>(DNumber(newPath.name()));
newPath.SetDuplicate(static_cast<quint32>(newDuplicate));
}
ui->lineEditSplPathName->setText(qApp->TrVars()->VarToUser(newPath.name()));
}
}
} }
catch (const VExceptionBadId &) catch (const VExceptionBadId &)
{ {
flagError = false; flagError = false;
color = errorColor; ChangeColor(ui->labelName, errorColor);
ChangeColor(ui->labelPoint, errorColor);
ui->lineEditSplPathName->setText(tr("Cannot find point with id %1").arg(id)); ui->lineEditSplPathName->setText(tr("Cannot find point with id %1").arg(id));
} }
ChangeColor(ui->labelName, color);
ChangeColor(ui->labelPoint, color);
CheckState(); CheckState();
} }
@ -350,3 +317,46 @@ VCubicBezierPath DialogCubicBezierPath::ExtractPath() const
} }
return VCubicBezierPath(points); return VCubicBezierPath(points);
} }
//---------------------------------------------------------------------------------------------------------------------
void DialogCubicBezierPath::ValidatePath()
{
QColor color;
if (not IsPathValid())
{
flagError = false;
color = errorColor;
ui->lineEditSplPathName->setText(tr("Invalid spline path"));
}
else
{
flagError = true;
color = OkColor(this);
auto first = qvariant_cast<VPointF>(ui->listWidget->item(0)->data(Qt::UserRole));
auto last = qvariant_cast<VPointF>(ui->listWidget->item(ui->listWidget->count()-1)->data(Qt::UserRole));
if (first.id() == path.at(0).id() && last.id() == path.at(path.CountPoints()-1).id())
{
newDuplicate = -1;
ui->lineEditSplPathName->setText(qApp->TrVars()->VarToUser(path.name()));
}
else
{
VCubicBezierPath newPath = ExtractPath();
if (not data->IsUnique(newPath.name()))
{
newDuplicate = static_cast<qint32>(DNumber(newPath.name()));
newPath.SetDuplicate(static_cast<quint32>(newDuplicate));
}
ui->lineEditSplPathName->setText(qApp->TrVars()->VarToUser(newPath.name()));
}
}
ChangeColor(ui->labelName, color);
ChangeColor(ui->labelPoint, color);
}

View File

@ -84,6 +84,7 @@ private:
QSet<quint32> AllPathBackboneIds() const; QSet<quint32> AllPathBackboneIds() const;
bool IsPathValid() const; bool IsPathValid() const;
VCubicBezierPath ExtractPath() const; VCubicBezierPath ExtractPath() const;
void ValidatePath();
}; };
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View File

@ -253,8 +253,12 @@ void Visualization::DrawLine(VScaledLine *lineItem, const QLineF &line, const QC
visPen.setStyle(style); visPen.setStyle(style);
lineItem->setPen(visPen); lineItem->setPen(visPen);
lineItem->setLine(line); if (not line.isNull())
lineItem->setVisible(true); {
lineItem->setLine(line);
}
lineItem->setVisible(not line.isNull());
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View File

@ -162,8 +162,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -157,8 +157,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -162,8 +162,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -1,7 +1,7 @@
{ {
"vector": [ "vector": [
{ {
"angle": 1, "angle": 3,
"saAfter": 151.18110236220474, "saAfter": 151.18110236220474,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
@ -468,7 +468,7 @@
"y": 331.90352529002166 "y": 331.90352529002166
}, },
{ {
"angle": 1, "angle": 3,
"saAfter": 151.18110236220474, "saAfter": 151.18110236220474,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",

View File

@ -2,13 +2,8 @@
"vector": [ "vector": [
{ {
"type": "QPointF", "type": "QPointF",
"x": -814.7149606299213, "x": -1086.319675233741,
"y": 372.2542552635805 "y": 603.286223243
},
{
"type": "QPointF",
"x": -925.5802587835234,
"y": 240.2611923642163
}, },
{ {
"type": "QPointF", "type": "QPointF",
@ -162,8 +157,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",
@ -227,13 +222,13 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -810.1810632465665, "x": -807.3585969245805,
"y": 373.5624561175904 "y": 374.1796788445591
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -814.7149606299213, "x": -1086.319675233741,
"y": 372.2542552635805 "y": 603.286223243
} }
] ]
} }

View File

@ -162,8 +162,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -162,8 +162,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -162,8 +162,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -157,8 +157,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -1,7 +1,7 @@
{ {
"vector": [ "vector": [
{ {
"angle": 4, "angle": 5,
"saAfter": 0, "saAfter": 0,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
@ -468,7 +468,7 @@
"y": 331.90352529002166 "y": 331.90352529002166
}, },
{ {
"angle": 4, "angle": 5,
"saAfter": 0, "saAfter": 0,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",

View File

@ -162,8 +162,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -1,7 +1,7 @@
{ {
"vector": [ "vector": [
{ {
"angle": 4, "angle": 5,
"saAfter": 151.18110236220474, "saAfter": 151.18110236220474,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",
@ -468,7 +468,7 @@
"y": 331.90352529002166 "y": 331.90352529002166
}, },
{ {
"angle": 4, "angle": 5,
"saAfter": 151.18110236220474, "saAfter": 151.18110236220474,
"saBefore": 37.795275590551185, "saBefore": 37.795275590551185,
"type": "VSAPoint", "type": "VSAPoint",

View File

@ -2,13 +2,8 @@
"vector": [ "vector": [
{ {
"type": "QPointF", "type": "QPointF",
"x": -949.5679059514944, "x": -831.5531621884526,
"y": 269.4686510059864 "y": 27.90388512315623
},
{
"type": "QPointF",
"x": -925.5802587835218,
"y": 240.26119236421337
}, },
{ {
"type": "QPointF", "type": "QPointF",
@ -47,8 +42,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -631.5852394687809, "x": -631.8008980267215,
"y": -90.99511806183605 "y": -91.35633060009326
}, },
{ {
"type": "QPointF", "type": "QPointF",
@ -162,8 +157,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",
@ -232,28 +227,18 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -818.0929557813755, "x": -814.7149606299213,
"y": 371.2795759163598 "y": 372.2542552635805
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -823.6929755287612, "x": -965.896062992126,
"y": 369.27180555079025 "y": 372.2542552635805
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -829.5753368833404, "x": -831.5531621884526,
"y": 366.62694879394627 "y": 27.90388512315623
},
{
"type": "QPointF",
"x": -835.8151397150936,
"y": 362.8920896668543
},
{
"type": "QPointF",
"x": -949.5679059514944,
"y": 269.4686510059864
} }
] ]
} }

View File

@ -162,8 +162,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -157,8 +157,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -102,8 +102,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -112,8 +112,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -157,8 +157,8 @@
}, },
{ {
"type": "QPointF", "type": "QPointF",
"x": -414.7876067251059, "x": -415.23237001939634,
"y": 388.13579550460213 "y": 388.15813749078177
}, },
{ {
"type": "QPointF", "type": "QPointF",

View File

@ -0,0 +1,710 @@
{
"vector": [
{
"type": "VSAPoint",
"x": -188.23334010667102,
"y": 21597.251791493014
},
{
"type": "VSAPoint",
"x": -188.23334010667102,
"y": 21597.251791493014
},
{
"angle": 6,
"type": "VSAPoint",
"x": -190.1962009592845,
"y": 21592.613481716297
},
{
"angle": 6,
"type": "VSAPoint",
"x": -192.78179634632448,
"y": 21582.00375313917
},
{
"angle": 6,
"type": "VSAPoint",
"x": -193.25596410665446,
"y": 21571.14352592585
},
{
"angle": 6,
"type": "VSAPoint",
"x": -191.60490646516234,
"y": 21560.348821082735
},
{
"angle": 6,
"type": "VSAPoint",
"x": -189.88869289465669,
"y": 21555.097277526158
},
{
"angle": 6,
"type": "VSAPoint",
"x": -187.82776163364855,
"y": 21549.97120094815
},
{
"angle": 6,
"type": "VSAPoint",
"x": -182.15384264181108,
"y": 21540.64069789316
},
{
"angle": 6,
"type": "VSAPoint",
"x": -174.80978957281837,
"y": 21532.62607034666
},
{
"type": "VSAPoint",
"x": -168.31266532018316,
"y": 21527.712497791887
},
{
"type": "VSAPoint",
"x": -168.31266532018316,
"y": 21527.712497791887
},
{
"type": "VSAPoint",
"x": -128.74015748031496,
"y": 21501.488243584587
},
{
"type": "VSAPoint",
"x": -128.74015748031496,
"y": 21501.488243584587
},
{
"angle": 6,
"type": "VSAPoint",
"x": -120.33246606279232,
"y": 21514.123269165208
},
{
"angle": 6,
"type": "VSAPoint",
"x": -104.47337041123777,
"y": 21539.200423564977
},
{
"angle": 6,
"type": "VSAPoint",
"x": -89.75071568383099,
"y": 21564.146905965034
},
{
"angle": 6,
"type": "VSAPoint",
"x": -76.15216444052632,
"y": 21589.074720936558
},
{
"angle": 6,
"type": "VSAPoint",
"x": -63.665379241278075,
"y": 21614.095873050734
},
{
"angle": 6,
"type": "VSAPoint",
"x": -52.278022646040554,
"y": 21639.32236687874
},
{
"angle": 6,
"type": "VSAPoint",
"x": -41.977757214768076,
"y": 21664.866206991763
},
{
"angle": 6,
"type": "VSAPoint",
"x": -32.752245507414955,
"y": 21690.839397960975
},
{
"angle": 6,
"type": "VSAPoint",
"x": -28.582677165354333,
"y": 21704.04689134986
},
{
"angle": 6,
"type": "VSAPoint",
"x": -20.859019636473,
"y": 21729.356389467157
},
{
"angle": 6,
"type": "VSAPoint",
"x": -6.6559976186818295,
"y": 21779.91855500826
},
{
"angle": 6,
"type": "VSAPoint",
"x": 2.3491950393391323,
"y": 21817.84792880411
},
{
"angle": 6,
"type": "VSAPoint",
"x": 7.419848382114216,
"y": 21843.158072724742
},
{
"angle": 6,
"type": "VSAPoint",
"x": 11.54949295787923,
"y": 21868.501152615463
},
{
"angle": 6,
"type": "VSAPoint",
"x": 14.60610066081589,
"y": 21893.88879293631
},
{
"angle": 6,
"type": "VSAPoint",
"x": 15.63779527559055,
"y": 21906.60553911513
},
{
"angle": 6,
"type": "VSAPoint",
"x": 17.326926706217673,
"y": 21931.92814003164
},
{
"angle": 6,
"type": "VSAPoint",
"x": 19.578089601275515,
"y": 21982.58857656685
},
{
"type": "VSAPoint",
"x": 20.500199521052405,
"y": 22010.688342216938
},
{
"type": "VSAPoint",
"x": 20.500199521052405,
"y": 22010.688342216938
},
{
"type": "VSAPoint",
"x": 20.500199521052405,
"y": 22010.688342216938
},
{
"angle": 6,
"type": "VSAPoint",
"x": 21.970984779797938,
"y": 22058.568844072717
},
{
"angle": 6,
"type": "VSAPoint",
"x": 24.330708661417322,
"y": 22109.1641868804
},
{
"angle": 6,
"type": "VSAPoint",
"x": 25.629921259842504,
"y": 22134.484017851057
},
{
"angle": 6,
"type": "VSAPoint",
"x": 27.31299212598423,
"y": 22185.123679792378
},
{
"angle": 6,
"type": "VSAPoint",
"x": 28.818897637795267,
"y": 22261.083172704355
},
{
"type": "VSAPoint",
"x": 30,
"y": 22311.722834645672
},
{
"type": "VSAPoint",
"x": 30,
"y": 22311.722834645672
},
{
"type": "VSAPoint",
"x": 30,
"y": 22311.722834645672
},
{
"angle": 6,
"type": "VSAPoint",
"x": 28.81889763779528,
"y": 22362.36249658699
},
{
"angle": 6,
"type": "VSAPoint",
"x": 27.312992125984252,
"y": 22438.321989498967
},
{
"angle": 6,
"type": "VSAPoint",
"x": 25.629921259842515,
"y": 22488.961651440288
},
{
"angle": 6,
"type": "VSAPoint",
"x": 24.330708661417322,
"y": 22514.281482410945
},
{
"angle": 6,
"type": "VSAPoint",
"x": 21.970984779797945,
"y": 22564.876825218627
},
{
"type": "VSAPoint",
"x": 20.500199521052405,
"y": 22612.757327074407
},
{
"type": "VSAPoint",
"x": 20.500199521052405,
"y": 22612.757327074407
},
{
"type": "VSAPoint",
"x": 20.500199521052405,
"y": 22612.757327074407
},
{
"angle": 6,
"type": "VSAPoint",
"x": 19.578089601275533,
"y": 22640.857092724495
},
{
"angle": 6,
"type": "VSAPoint",
"x": 17.32692670621769,
"y": 22691.517529259705
},
{
"angle": 6,
"type": "VSAPoint",
"x": 15.63779527559055,
"y": 22716.840130176213
},
{
"angle": 6,
"type": "VSAPoint",
"x": 14.606100660815876,
"y": 22729.556876355033
},
{
"angle": 6,
"type": "VSAPoint",
"x": 11.549492957879199,
"y": 22754.94451667588
},
{
"angle": 6,
"type": "VSAPoint",
"x": 7.419848382114184,
"y": 22780.287596566603
},
{
"angle": 6,
"type": "VSAPoint",
"x": 2.3491950393391043,
"y": 22805.597740487236
},
{
"angle": 6,
"type": "VSAPoint",
"x": -6.655997618681845,
"y": 22843.527114283086
},
{
"angle": 6,
"type": "VSAPoint",
"x": -20.859019636473,
"y": 22894.089279824188
},
{
"angle": 6,
"type": "VSAPoint",
"x": -28.582677165354333,
"y": 22919.398777941486
},
{
"angle": 6,
"type": "VSAPoint",
"x": -32.75224550741497,
"y": 22932.60627133037
},
{
"angle": 6,
"type": "VSAPoint",
"x": -41.97775721476809,
"y": 22958.57946229958
},
{
"angle": 6,
"type": "VSAPoint",
"x": -52.27802264604057,
"y": 22984.123302412605
},
{
"angle": 6,
"type": "VSAPoint",
"x": -63.66537924127808,
"y": 23009.34979624061
},
{
"angle": 6,
"type": "VSAPoint",
"x": -76.15216444052632,
"y": 23034.370948354786
},
{
"angle": 6,
"type": "VSAPoint",
"x": -89.75071568383099,
"y": 23059.29876332631
},
{
"angle": 6,
"type": "VSAPoint",
"x": -104.47337041123777,
"y": 23084.245245726368
},
{
"angle": 6,
"type": "VSAPoint",
"x": -120.33246606279229,
"y": 23109.322400126137
},
{
"type": "VSAPoint",
"x": -128.74015748031496,
"y": 23121.957425706758
},
{
"type": "VSAPoint",
"x": -128.74015748031496,
"y": 23121.957425706758
},
{
"type": "VSAPoint",
"x": -168.31266532018316,
"y": 23095.733171499458
},
{
"type": "VSAPoint",
"x": -168.31266532018316,
"y": 23095.733171499458
},
{
"angle": 6,
"type": "VSAPoint",
"x": -171.93283235584602,
"y": 23093.234403464365
},
{
"angle": 6,
"type": "VSAPoint",
"x": -179.8307780091592,
"y": 23085.69291167279
},
{
"angle": 6,
"type": "VSAPoint",
"x": -186.08553237448535,
"y": 23076.802050183687
},
{
"angle": 6,
"type": "VSAPoint",
"x": -190.51508878378908,
"y": 23066.82053356537
},
{
"angle": 6,
"type": "VSAPoint",
"x": -191.90111533958498,
"y": 23061.472353582154
},
{
"angle": 6,
"type": "VSAPoint",
"x": -192.9291728004844,
"y": 23056.043983973945
},
{
"angle": 6,
"type": "VSAPoint",
"x": -193.18122374328198,
"y": 23045.12665305894
},
{
"angle": 6,
"type": "VSAPoint",
"x": -191.3172145200989,
"y": 23034.417085382996
},
{
"type": "VSAPoint",
"x": -188.23334010667102,
"y": 23026.19387779833
},
{
"type": "VSAPoint",
"x": -188.23334010667102,
"y": 23026.19387779833
},
{
"type": "VSAPoint",
"x": -188.23334010667102,
"y": 23026.19387779833
},
{
"angle": 6,
"type": "VSAPoint",
"x": -174.98561803383961,
"y": 22997.75607286171
},
{
"angle": 6,
"type": "VSAPoint",
"x": -153.44798018734235,
"y": 22947.63768649724
},
{
"angle": 6,
"type": "VSAPoint",
"x": -138.25149685012127,
"y": 22905.438343816088
},
{
"angle": 6,
"type": "VSAPoint",
"x": -130.36074869016556,
"y": 22879.905308764373
},
{
"angle": 6,
"type": "VSAPoint",
"x": -124.41592709594758,
"y": 22859.97405523269
},
{
"angle": 6,
"type": "VSAPoint",
"x": -112.95809590602803,
"y": 22818.998769537815
},
{
"angle": 6,
"type": "VSAPoint",
"x": -103.03301701424698,
"y": 22776.40775012916
},
{
"angle": 6,
"type": "VSAPoint",
"x": -97.38277143573882,
"y": 22743.14921078075
},
{
"angle": 6,
"type": "VSAPoint",
"x": -94.62664819253418,
"y": 22720.34981812865
},
{
"angle": 6,
"type": "VSAPoint",
"x": -93.66658986354132,
"y": 22708.71041822326
},
{
"angle": 6,
"type": "VSAPoint",
"x": -90.28950709466001,
"y": 22661.23204514134
},
{
"angle": 6,
"type": "VSAPoint",
"x": -86.63178802205015,
"y": 22586.936959736497
},
{
"angle": 6,
"type": "VSAPoint",
"x": -85.34331850360309,
"y": 22536.532014248543
},
{
"angle": 6,
"type": "VSAPoint",
"x": -85.22040001399614,
"y": 22511.20691337363
},
{
"angle": 6,
"type": "VSAPoint",
"x": -85.09747605487335,
"y": 22485.854069677924
},
{
"angle": 6,
"type": "VSAPoint",
"x": -83.94175824927609,
"y": 22435.343800520066
},
{
"angle": 6,
"type": "VSAPoint",
"x": -81.21332413858126,
"y": 22360.427969273227
},
{
"type": "VSAPoint",
"x": -79.60629921259843,
"y": 22311.722834645672
},
{
"type": "VSAPoint",
"x": -79.60629921259843,
"y": 22311.722834645672
},
{
"type": "VSAPoint",
"x": -79.60629921259843,
"y": 22311.722834645672
},
{
"angle": 6,
"type": "VSAPoint",
"x": -81.21332413858124,
"y": 22263.017700018117
},
{
"angle": 6,
"type": "VSAPoint",
"x": -83.94175824927609,
"y": 22188.10186877128
},
{
"angle": 6,
"type": "VSAPoint",
"x": -85.09747605487335,
"y": 22137.59159961342
},
{
"angle": 6,
"type": "VSAPoint",
"x": -85.22040001399614,
"y": 22112.238755917715
},
{
"angle": 6,
"type": "VSAPoint",
"x": -85.34331850360307,
"y": 22086.9136550428
},
{
"angle": 6,
"type": "VSAPoint",
"x": -86.63178802205015,
"y": 22036.508709554848
},
{
"angle": 6,
"type": "VSAPoint",
"x": -90.28950709466001,
"y": 21962.213624150005
},
{
"angle": 6,
"type": "VSAPoint",
"x": -93.66658986354132,
"y": 21914.735251068083
},
{
"angle": 6,
"type": "VSAPoint",
"x": -94.62664819253415,
"y": 21903.095851162696
},
{
"angle": 6,
"type": "VSAPoint",
"x": -97.38277143573879,
"y": 21880.296458510595
},
{
"angle": 6,
"type": "VSAPoint",
"x": -103.03301701424697,
"y": 21847.037919162183
},
{
"angle": 6,
"type": "VSAPoint",
"x": -112.95809590602803,
"y": 21804.44689975353
},
{
"angle": 6,
"type": "VSAPoint",
"x": -124.41592709594758,
"y": 21763.471614058653
},
{
"angle": 6,
"type": "VSAPoint",
"x": -130.36074869016556,
"y": 21743.54036052697
},
{
"angle": 6,
"type": "VSAPoint",
"x": -138.2514968501212,
"y": 21718.007325475257
},
{
"angle": 6,
"type": "VSAPoint",
"x": -153.4479801873423,
"y": 21675.807982794104
},
{
"angle": 6,
"type": "VSAPoint",
"x": -174.98561803383961,
"y": 21625.689596429635
},
{
"type": "VSAPoint",
"x": -188.23334010667102,
"y": 21597.251791493014
}
]
}

View File

@ -0,0 +1,459 @@
{
"vector": [
{
"type": "QPointF",
"x": -218.88332702810496,
"y": 21602.601187587297
},
{
"type": "QPointF",
"x": -222.85996685366638,
"y": 21586.28344916246
},
{
"type": "QPointF",
"x": -223.5926781800107,
"y": 21569.501600729036
},
{
"type": "QPointF",
"x": -221.11763913635318,
"y": 21553.31966057138
},
{
"type": "QPointF",
"x": -218.31711709775252,
"y": 21544.750177309146
},
{
"type": "QPointF",
"x": -214.95408378080705,
"y": 21536.38543140849
},
{
"type": "QPointF",
"x": -206.44852305285053,
"y": 21522.39842164138
},
{
"type": "QPointF",
"x": -195.24307496050506,
"y": 21510.16982087991
},
{
"type": "QPointF",
"x": -185.01522722202466,
"y": 21502.508262941858
},
{
"type": "QPointF",
"x": -120.2863407065389,
"y": 21459.613160579218
},
{
"type": "QPointF",
"x": -94.77769419281123,
"y": 21497.96212245061
},
{
"type": "QPointF",
"x": -78.43377590118915,
"y": 21523.83264733643
},
{
"type": "QPointF",
"x": -63.20717048632591,
"y": 21549.666946130616
},
{
"type": "QPointF",
"x": -49.09778488238641,
"y": 21575.57325526863
},
{
"type": "QPointF",
"x": -36.10682445695674,
"y": 21601.655813297744
},
{
"type": "QPointF",
"x": -24.23582343635048,
"y": 21628.0146663193
},
{
"type": "QPointF",
"x": -13.48549246436568,
"y": 21654.745936350544
},
{
"type": "QPointF",
"x": -3.9187457009163325,
"y": 21681.736743547735
},
{
"type": "QPointF",
"x": 8.250543876860249,
"y": 21721.17944990996
},
{
"type": "QPointF",
"x": 22.762455328454042,
"y": 21772.9340253423
},
{
"type": "QPointF",
"x": 31.996304179796386,
"y": 21811.90840457464
},
{
"type": "QPointF",
"x": 37.262465441143874,
"y": 21838.295230394753
},
{
"type": "QPointF",
"x": 41.568922145354556,
"y": 21864.886889244302
},
{
"type": "QPointF",
"x": 44.74330398553326,
"y": 21891.4437971853
},
{
"type": "QPointF",
"x": 45.774998600307924,
"y": 21904.16054336412
},
{
"type": "QPointF",
"x": 47.53333931071059,
"y": 21930.58587849783
},
{
"type": "QPointF",
"x": 49.78450220576843,
"y": 21981.24631503304
},
{
"type": "QPointF",
"x": 52.18502491930136,
"y": 22057.388558001505
},
{
"type": "QPointF",
"x": 55.849455392117505,
"y": 22133.479634813404
},
{
"type": "QPointF",
"x": 57.53252625825923,
"y": 22184.119296754725
},
{
"type": "QPointF",
"x": 60.22799967698306,
"y": 22312.42786229501
},
{
"type": "QPointF",
"x": 57.54327240149289,
"y": 22438.921308214038
},
{
"type": "QPointF",
"x": 55.826415279887826,
"y": 22490.511095648795
},
{
"type": "QPointF",
"x": 52.185024919301355,
"y": 22566.05711128984
},
{
"type": "QPointF",
"x": 49.799326331206146,
"y": 22641.80886946914
},
{
"type": "QPointF",
"x": 47.49610294540294,
"y": 22693.52994907348
},
{
"type": "QPointF",
"x": 45.806971514775746,
"y": 22718.852549989988
},
{
"type": "QPointF",
"x": 44.62552984829121,
"y": 22733.171139726193
},
{
"type": "QPointF",
"x": 41.39211001690886,
"y": 22759.80735900587
},
{
"type": "QPointF",
"x": 37.06695752257143,
"y": 22786.227120796073
},
{
"type": "QPointF",
"x": 31.767647986474977,
"y": 22812.582270153194
},
{
"type": "QPointF",
"x": 22.45356589465143,
"y": 22851.704053840283
},
{
"type": "QPointF",
"x": 8.060564966120161,
"y": 22902.91462145334
},
{
"type": "QPointF",
"x": -4.259980757012681,
"y": 22942.726541971588
},
{
"type": "QPointF",
"x": -13.935558005078015,
"y": 22969.88716285902
},
{
"type": "QPointF",
"x": -24.71946786171923,
"y": 22996.563362165594
},
{
"type": "QPointF",
"x": -36.61099968313795,
"y": 23022.851261908538
},
{
"type": "QPointF",
"x": -49.60861924302124,
"y": 23048.850908189204
},
{
"type": "QPointF",
"x": -63.711121173782374,
"y": 23074.66653955486
},
{
"type": "QPointF",
"x": -78.91859854125667,
"y": 23100.406392440964
},
{
"type": "QPointF",
"x": -95.16002058668974,
"y": 23126.07283347006
},
{
"type": "QPointF",
"x": -120.31315520567594,
"y": 23163.87280537214
},
{
"type": "QPointF",
"x": -190.8903779085056,
"y": 23116.939126378154
},
{
"type": "QPointF",
"x": -202.85525414075397,
"y": 23105.514254664224
},
{
"type": "QPointF",
"x": -212.52046074145298,
"y": 23091.775583546016
},
{
"type": "QPointF",
"x": -219.16064384809474,
"y": 23076.8126635822
},
{
"type": "QPointF",
"x": -221.42236580526438,
"y": 23068.085488732377
},
{
"type": "QPointF",
"x": -223.09995280587424,
"y": 23059.227460231446
},
{
"type": "QPointF",
"x": -223.47779299069944,
"y": 23042.861695894528
},
{
"type": "QPointF",
"x": -220.620815347658,
"y": 23026.447080003007
},
{
"type": "QPointF",
"x": -216.13435317554772,
"y": 23014.48384648047
},
{
"type": "QPointF",
"x": -202.58580499399324,
"y": 22985.400282661478
},
{
"type": "QPointF",
"x": -181.58729260253205,
"y": 22936.536448817904
},
{
"type": "QPointF",
"x": -166.93463706180071,
"y": 22895.847269707778
},
{
"type": "QPointF",
"x": -159.24892241489266,
"y": 22870.977686051203
},
{
"type": "QPointF",
"x": -153.4650960199354,
"y": 22851.581055284918
},
{
"type": "QPointF",
"x": -142.25531333403683,
"y": 22811.492836099398
},
{
"type": "QPointF",
"x": -132.6884639750548,
"y": 22770.439070061784
},
{
"type": "QPointF",
"x": -127.31338834414937,
"y": 22738.800239167223
},
{
"type": "QPointF",
"x": -124.71329691485195,
"y": 22717.29158364027
},
{
"type": "QPointF",
"x": -120.47293131191586,
"y": 22659.41580578265
},
{
"type": "QPointF",
"x": -116.84900303375213,
"y": 22585.80707433486
},
{
"type": "QPointF",
"x": -115.57766364654971,
"y": 22536.072259819528
},
{
"type": "QPointF",
"x": -115.32578480080944,
"y": 22485.162420331548
},
{
"type": "QPointF",
"x": -114.17006699521218,
"y": 22434.65215117369
},
{
"type": "QPointF",
"x": -109.85897382113086,
"y": 22311.722834645672
},
{
"type": "QPointF",
"x": -114.15794574601546,
"y": 22189.202342133005
},
{
"type": "QPointF",
"x": -115.33334113373941,
"y": 22137.738199035874
},
{
"type": "QPointF",
"x": -115.5776636465497,
"y": 22087.373409471817
},
{
"type": "QPointF",
"x": -116.84900303375211,
"y": 22037.638594956483
},
{
"type": "QPointF",
"x": -120.47293131191586,
"y": 21964.029863508695
},
{
"type": "QPointF",
"x": -124.71329691485192,
"y": 21906.154085651073
},
{
"type": "QPointF",
"x": -127.31338834414935,
"y": 21884.64543012412
},
{
"type": "QPointF",
"x": -132.68846397505476,
"y": 21853.00659922956
},
{
"type": "QPointF",
"x": -142.25531333403683,
"y": 21811.952833191946
},
{
"type": "QPointF",
"x": -153.4650960199354,
"y": 21771.864614006427
},
{
"type": "QPointF",
"x": -159.33558439851828,
"y": 21752.182578074156
},
{
"type": "QPointF",
"x": -166.9346370618007,
"y": 21727.598399583567
},
{
"type": "QPointF",
"x": -181.587292602532,
"y": 21686.90922047344
},
{
"type": "QPointF",
"x": -202.6152214315237,
"y": 21637.97693416576
},
{
"type": "QPointF",
"x": -218.88332702810496,
"y": 21602.601187587297
}
]
}

View File

@ -115,5 +115,7 @@
<file>Issue_604/output.json</file> <file>Issue_604/output.json</file>
<file>Issue_548_case1/input.json</file> <file>Issue_548_case1/input.json</file>
<file>Issue_548_case1/output.json</file> <file>Issue_548_case1/output.json</file>
<file>smart_pattern_#36/input.json</file>
<file>smart_pattern_#36/output.json</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@ -298,6 +298,12 @@ void TST_VAbstractPiece::EquidistantRemoveLoop_data()
QStringLiteral("://DP_6/input.json"), QStringLiteral("://DP_6/input.json"),
QStringLiteral("://DP_6/output.json"), QStringLiteral("://DP_6/output.json"),
37.795275590551185 /*seam allowance width (1.0 cm)*/); 37.795275590551185 /*seam allowance width (1.0 cm)*/);
// See file src/app/share/collection/bugs/smart_pattern_#36.val
ASSERT_TEST_CASE("Incorrect position of a notch",
QStringLiteral("://smart_pattern_#36/input.json"),
QStringLiteral("://smart_pattern_#36/output.json"),
30.236220472440944 /*seam allowance width (0.8 cm)*/);
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------