Merge with release

This commit is contained in:
Roman Telezhynskyi 2015-05-04 11:52:56 +03:00
commit 6247c1b792
65 changed files with 2414 additions and 5203 deletions

View File

@ -26,6 +26,7 @@ obj/
uic/
rcc/
man/
build/
# Ignore Coverity Scan Build Tool
cov-int/

View File

@ -1,3 +1,96 @@
# Version 0.3.1 Released April 24, 2015
- [#263] Regression. Union tool doesn't work.
- For tool Curve intersect axis fixed wrong calculation point in case with too small scene rect size.
- Fixed crash if a seam allowance doesn't contain 0 points.
- [#267] Error in the creation of obj files.
- QMuParser. Bugfix for Bulkmode: Expressions with like "a=b, b*10" did not compute properly.
- QMuParser. Fix for ParserTokenReader::ExtractOperatorToken incorrectly uses ValidInfixOprtChars().
- Example of file name in dialog Save Layout appears only after user change format.
- Fixed regression with removing loops in seam allowance.
- Removed transparent field for a layout png file.
# Version 0.3.0 Released March 23, 2015
- Fixed creation equidistant if points less than 4.
- [#203], [#89], [#90] New Layout Editor.
- To File/Preferences/Paths added path to export a layout.
- [#223] Fixed removing stale lock file on Windows.
- [#222], [#204], [#207], [#205], [#212], [#218], [#210], [#219], [#220], [#248] Minor changes in GUI.
- [#230] Fixed hangs if curve path has not unique points.
- [#196] Fixed crash Detail dialog.
- [#208] Vertical bar for tool "Point from X and Y".
- Fixed package (.dmg) for Mac OSX.
- [#171] Show images for pen styles instead of just names.
- [#74] Fold Line in pattern piece. Pattern format updated to version 0.1.3.
- [#242] Tool Dialogs: Label at bottom doesn't update for empty lists.
- [#217] Bug with mouse cursor.
- Dynamic update tool property browser after applying options changes.
- [#215] Drag a curve to edit it.
- [#184] Delete button "Equal" in dialogs.
- [#183] Message "Changes saved" in dialog Increments.
- [#234] Fixed problem with formula editing in vtooloptionspropertybrowser and "," decimal separator .
- Continue improving log system.
- Close property browser when reset window.
- [#241] Repeat last used tool.
- [#253] Show detail information about standard measurements file in dialog Increments.
- [#249] Set default base height and base size according base values in standard measurements file.
- New localization language - Spanish.
- Fixed bug with About Valentina dialog on Windows.
- [#235] Delete point without confirmation / configurable.
- Version for Mac OS support export to .ps, .eps.
- New localization language - Finnish.
# Version 0.2.9 Released January 1, 2015
- Export a layout to Wavefront .obj format.
- New validation rules for point labels
- Export layout in two new formats .ps and .eps.
- Fixed support .svg format.
- Support individual measurements.
- Support mm, cm and inch units in patterns.
- New math parser.
- Support language independent measurements.
- Apply button in tool dialog.
- Multi lines formula fields.
- Recent file list.
- Support local separator for numbers in formulas.
- Support Clang.
- Support Undo/Redo.
- Optimization parsing pattern file.
- New logo.
- Support zoom to original scaling and Zoom Fit Best.
- Use Zoom Fit Best for pattern piece after selection.
- Open patterns from list of command line arguments. File association with pattern file format (.val).
- Additional chackings in tool dialog.
- Visualization for draw tools.
- Allow user fix broken formula.
- All point labels must be unique.
- Support gradation options (only for standard measurements).
- Fix special line that join point and label.
- Show path direction when selected.
- Show tools buttons in two columns instead of three.
- Show cursor if item can be moved.
- Second way edit tool property.
- Zoom under mouse pointer.
- Auto creation label.
- Show in tooltip parser error message.
- Show curve foot if only curve is selected.
- Option hide unused measurements in list.
- New tool line intersect axis.
- New tool arc(curve) intersect axis.
- Save and restore last window position and size.
- User manual.
- Propose reopen files after crash.
- Use form layout in tool dialog.
- Support delete action if you select tool from label.
- Button "Stop using tool".
- Value for angle also can be formula.
- Fixed disabling GUI after error.
- Don't set scroll bars to minimum after creation layout.
- Menu Help->Report Bug...
- Option "Standard table" in dialog changed to better "Measurements".
- Fixed tool cut curved path.
- Menu Window->Close window.
- Support creation and sending crash reports. Only for Windows and Mingw compiler.
# Version 0.2.2 Released February 11, 2014
- Macros Q_DECL_NOEXCEPT_EXPR don't work in gcc 4.6.
- Change in build dependency for deb package. Add new architecture for deb file.
@ -5,7 +98,9 @@
- Fix valentina.desktop.
# Version 0.2.1 Released December 8, 2013
- Problem with compilation in console in Ubuntu.
- Problem with compilation in console on Ubuntu.
- Problem with compilation on windows with msvc.
# Version 0.2.0 Released October 29, 2013
- First public release.

View File

@ -1,3 +1,9 @@
win32{
unset(QMAKE_COPY)
# Because "copy" doesn't support files that containe plus sign (+) in name we will use xcopy instead.
QMAKE_COPY = xcopy /y
}
defineTest(minQtVersion) {
maj = $$1
min = $$2

View File

@ -1,4 +1,4 @@
valentina (0.3.0) trusty; urgency=low
valentina (0.3.1) trusty; urgency=low
* Auto build.

BIN
dist/macx/bin64/pdftops vendored Executable file

Binary file not shown.

2
dist/rpm/_service vendored
View File

@ -1,7 +1,7 @@
<services>
<service name="tar_scm">
<param name="url">https://github.com/dismine/Valentina.git</param>
<param name="versionprefix">0.3.0</param>
<param name="versionprefix">0.3.1</param>
<param name="filename">valentina</param>
<param name="scm">git</param>
<param name="versionformat">%at</param>

View File

@ -1,5 +1,9 @@
Name:valentina
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
BuildRequires: ccache
# Fedora specifics
%if 0%{?fedora_version} > 0 || 0%{?rhel_version} > 0 || 0%{?centos_version} > 0
BuildRequires: pkgconfig(Qt5Core)
@ -11,7 +15,10 @@ BuildRequires: pkgconfig(Qt5Xml)
BuildRequires: qt5-qtxmlpatterns-devel >= 5.2.0
BuildRequires: qt5-qtsvg-devel >= 5.2.0
BuildRequires: qt5-qttools-devel >= 5.2.0
BuildRequires: ccache
Requires: qt5-qtsvg >= 5.2.0
Requires: qt5-qtbase-gui >= 5.2.0
Requires: qt5-qtxmlpatterns >= 5.2.0
%endif
# SUSE Specifics
@ -21,21 +28,31 @@ BuildRequires: libqt5-qttools
BuildRequires: libQt5Svg-devel
BuildRequires: libqt5-qtxmlpatterns-devel
BuildRequires: libqt5-linguist-devel
BuildRequires: ccache
BuildRequires: update-desktop-files
%endif
Version: 0.3.0
Requires: poppler-utils
Version: 0.3.1
Release: 0
URL: https://bitbucket.org/dismine/valentina
License: GPL-3.0+
Source0: %{name}-%{version}.tar
Requires: poppler-utils
Group: Graphics
Summary: Pattern Making Application
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Packager: Roman Telezhinskyi <dismine@gmail.com>
# Disables debug packages and stripping of binaries:
%global _enable_debug_package 0
%global __debug_install_post %{nil}
%global debug_package %{nil}
%if 0%{?suse_version} >= 1320
%global suse_insert_debug_package %{nil}
%global _suse_insert_debug_package %{nil}
%global _suse_insert_debug_package_seen %{nil}
%endif
%description
Valentina is a cross-platform patternmaking program which allows designers
to create and model patterns of clothing. This software allows pattern
@ -55,6 +72,7 @@ qmake-qt5 PREFIX=%{buildroot}%{_prefix} Valentina.pro -r
%{__make} %{?jobs:-j %jobs}
%install
export NO_DEBUGINFO_STRIP_DEBUG=true
%{__make} install
gzip -9c dist/debian/%{name}.1 > dist/debian/%{name}.1.gz &&
%{__install} -Dm 644 dist/debian/%{name}.1.gz %{buildroot}%{_mandir}/man1/%{name}.1.gz
@ -63,13 +81,19 @@ gzip -9c dist/debian/%{name}.1 > dist/debian/%{name}.1.gz &&
%suse_update_desktop_file -r %{name} VectorGraphics
%endif
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%defattr(-,root,root,-)
%doc README.txt LICENSE_GPL.txt
%doc %{_mandir}/man1/%{name}.1.gz
%{_bindir}/*
%{_libdir}/*
%{_bindir}/valentina
%{_libdir}/libvpropertyexplorer.so
%{_libdir}/libvpropertyexplorer.so.*
%{_libdir}/libqmuparser.so
%{_libdir}/libqmuparser.so.*
%{_datadir}/applications/%{name}.desktop
%{_datadir}/pixmaps/*
%dir %{_datadir}/%{name}
@ -82,13 +106,8 @@ gzip -9c dist/debian/%{name}.1 > dist/debian/%{name}.1.gz &&
%clean
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
%post
ldconfig
%changelog
* Mon Dec 22 2014 Roman Telezhinskyi
- Initial build

BIN
dist/win/curl.exe vendored Normal file

Binary file not shown.

BIN
dist/win/dbghelp.dll vendored Normal file

Binary file not shown.

BIN
dist/win/exchndl.dll vendored Executable file

Binary file not shown.

BIN
dist/win/mgwhelp.dll vendored Executable file

Binary file not shown.

BIN
dist/win/pdftops.exe vendored Normal file

Binary file not shown.

BIN
dist/win/symsrv.dll vendored Normal file

Binary file not shown.

1
dist/win/symsrv.yes vendored Normal file
View File

@ -0,0 +1 @@

BIN
dist/win/valentina.ico vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -1506,10 +1506,6 @@
<source>Creation a layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, waite.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Couldn&apos;t prepare data for creation layout</source>
<translation type="unfinished"></translation>
@ -1526,6 +1522,10 @@
<source>Several workpieces left not arranged, but none of them match for paper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, wait.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DialogLayoutSettings</name>
@ -2563,26 +2563,34 @@
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Do you really want union details?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select first point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select another second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Union tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a first point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Workpiece should have at least two points and three objects</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a unique point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a point on edge</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Functions</name>

View File

@ -1506,10 +1506,6 @@
<source>Creation a layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, waite.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Couldn&apos;t prepare data for creation layout</source>
<translation type="unfinished"></translation>
@ -1526,6 +1522,10 @@
<source>Several workpieces left not arranged, but none of them match for paper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, wait.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DialogLayoutSettings</name>
@ -2563,26 +2563,34 @@
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Do you really want union details?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Opravdu chcete sjednotit detaily?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Select first point</source>
<translation>Vybrat první bod</translation>
</message>
<message>
<source>Select second point</source>
<translation>Vybrat druhý bod</translation>
</message>
<message>
<source>Select another second point</source>
<translation>Vybrat jiný druhý bod</translation>
</message>
<message>
<source>Select detail</source>
<translation>Vybrat detail</translation>
</message>
<message>
<source>Union tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a first point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Workpiece should have at least two points and three objects</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a unique point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a point on edge</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Functions</name>
@ -2807,7 +2815,7 @@
</message>
<message>
<source>&amp;Pattern piece</source>
<translation>&amp;Díl střihu</translation>
<translation>&amp;Střih</translation>
</message>
<message>
<source>Measurements</source>

View File

@ -1506,10 +1506,6 @@
<source>Creation a layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, waite.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Couldn&apos;t prepare data for creation layout</source>
<translation type="unfinished"></translation>
@ -1526,6 +1522,10 @@
<source>Several workpieces left not arranged, but none of them match for paper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, wait.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DialogLayoutSettings</name>
@ -2563,26 +2563,34 @@
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Do you really want union details?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Soll die Details wirklich vereinigt werden?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Select first point</source>
<translation>Ersten Punkt auswählen</translation>
</message>
<message>
<source>Select second point</source>
<translation>Zweiten Punkt auswählen</translation>
</message>
<message>
<source>Select another second point</source>
<translation>Einen anderen zweiten Punkt auswählen</translation>
</message>
<message>
<source>Select detail</source>
<translation>Detail auswählen</translation>
</message>
<message>
<source>Union tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a first point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Workpiece should have at least two points and three objects</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a unique point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a point on edge</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Functions</name>
@ -5876,14 +5884,6 @@ Sollen die Änderungen gespeichert werden?</translation>
</context>
<context>
<name>VAbstractTool</name>
<message>
<source>Confirm the deletion.</source>
<translation type="vanished">Löschen bestätigen.</translation>
</message>
<message>
<source>Do you really want delete?</source>
<translation type="vanished">Wirklich löschen?</translation>
</message>
<message>
<source>black</source>
<translation type="unfinished"></translation>

View File

@ -195,11 +195,11 @@
</message>
<message>
<source>Pattern Editing</source>
<translation type="unfinished"></translation>
<translation>Editando Patrón</translation>
</message>
<message>
<source>Confirm item deletion</source>
<translation type="unfinished"></translation>
<translation>Confrimar la eliminacion del objeto</translation>
</message>
</context>
<context>
@ -1508,7 +1508,7 @@
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, waite.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Encontrar la mejor posición para las piezas de trabajo. Por favor, espere.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Encontrar la mejor posición para las piezas de trabajo. Por favor, espere.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Couldn&apos;t prepare data for creation layout</source>
@ -1526,6 +1526,10 @@
<source>Several workpieces left not arranged, but none of them match for paper</source>
<translation>Piezas de trabajo no están ordenadas, y no coinciden con el papel</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, wait.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DialogLayoutSettings</name>
@ -2563,26 +2567,34 @@
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Do you really want union details?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Realmente quiere detalles de la unión?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Select first point</source>
<translation>Selección primer punto </translation>
</message>
<message>
<source>Select second point</source>
<translation>Selección segundo punto</translation>
</message>
<message>
<source>Select another second point</source>
<translation>Selección otro segundo punto</translation>
</message>
<message>
<source>Select detail</source>
<translation>Selección de detalle</translation>
</message>
<message>
<source>Union tool</source>
<translation>herramienta de unión</translation>
</message>
<message>
<source>Select a first point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Workpiece should have at least two points and three objects</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a unique point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a point on edge</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Functions</name>
@ -3477,17 +3489,17 @@ Quiere guardar los cambios?</translation>
<message>
<source>bustpoint_to_bustpoint</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>separación_pechos</translation>
</message>
<message>
<source>halter_bustpoint_to_bustpoint</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>pecho-dercho_nuca_pecho-izquierdo</translation>
</message>
<message>
<source>neck_to_bustpoint</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>base_de_cuello_a_pecho</translation>
</message>
<message>
<source>crotch_length</source>
@ -3497,7 +3509,7 @@ Quiere guardar los cambios?</translation>
<message>
<source>rise_height</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>altura_de_tiro</translation>
</message>
<message>
<source>shoulder_drop</source>
@ -3652,7 +3664,7 @@ Quiere guardar los cambios?</translation>
<message>
<source>scye_depth</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>profundidad_sisa</translation>
</message>
<message>
<source>shoulder_and_arm_length</source>
@ -3827,207 +3839,207 @@ Quiere guardar los cambios?</translation>
<message>
<source>hips_excluding_protruding_abdomen</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>caderas_excluyendo_abdomen_protuberante</translation>
</message>
<message>
<source>girth_foot_instep</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>circunferencia_empeine_pie</translation>
</message>
<message>
<source>side_waist_to_floor</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>lateral_de_cintura_al_suelo</translation>
</message>
<message>
<source>front_waist_to_floor</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>frontal_de_cintura_al_suelo</translation>
</message>
<message>
<source>arc_through_groin_area</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>arco_a_través_de_la_ingle</translation>
</message>
<message>
<source>waist_to_plane_seat</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>circunferencia_caderas_nalgas</translation>
</message>
<message>
<source>neck_to_radial_point</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>cuello_a_punto_radial</translation>
</message>
<message>
<source>neck_to_third_finger</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>cuello_tercer_dedo</translation>
</message>
<message>
<source>neck_to_first_line_chest_circumference</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>del_cuello_a_primera_línea_contorno_de_pecho</translation>
</message>
<message>
<source>front_waist_length</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>cintura_delantera</translation>
</message>
<message>
<source>arc_through_shoulder_joint</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>arco_a_través_de_la_articulación_del_hombro</translation>
</message>
<message>
<source>neck_to_back_line_chest_circumference</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>del_cuello_al_contorno_pecho_en espalda</translation>
</message>
<message>
<source>waist_to_neck_side</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>cintura_a_base_cuello_espalda</translation>
</message>
<message>
<source>arc_length_upper_body</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>arco_cuerpo_por_base_cuello_lateral</translation>
</message>
<message>
<source>chest_width</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>ancho_de_pecho</translation>
</message>
<message>
<source>anteroposterior_diameter_hands</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>diametro_anterioposterior_mano</translation>
</message>
<message>
<source>height_clavicular_point</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>altura_punto_clavicular</translation>
</message>
<message>
<source>height_armhole_slash</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>altura_sisa</translation>
</message>
<message>
<source>slash_shoulder_height</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>altura_hombro</translation>
</message>
<message>
<source>half_girth_neck</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>medio_contorno_cuello</translation>
</message>
<message>
<source>half_girth_neck_for_shirts</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>Medio_contorno_cuello_para_camisetas</translation>
</message>
<message>
<source>half_girth_chest_first</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>medio_contorno_pecho_primero</translation>
</message>
<message>
<source>half_girth_chest_second</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>medio_contorno_pecho_segundo</translation>
</message>
<message>
<source>half_girth_chest_third</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>medio_contorno_pecho_tercero</translation>
</message>
<message>
<source>half_girth_waist</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>medio_contorno_pecho</translation>
</message>
<message>
<source>half_girth_hips_considering_protruding_abdomen</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>medio_contorno_cadera_considerando_abdomen_prominente</translation>
</message>
<message>
<source>half_girth_hips_excluding_protruding_abdomen</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>medio_contorno_cadera_excluyendo_abdomen_prominente</translation>
</message>
<message>
<source>girth_knee_flexed_feet</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>contorno_rodila_agachado</translation>
</message>
<message>
<source>neck_transverse_diameter</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>diámetro_transversal_cuello</translation>
</message>
<message>
<source>front_slash_shoulder_height</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>altura_hombros_frontal</translation>
</message>
<message>
<source>neck_to_front_waist_line</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>cuello_a_contorno_cintura_frontal</translation>
</message>
<message>
<source>hand_vertical_diameter</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>diametro_vertical_mano</translation>
</message>
<message>
<source>neck_to_knee_point</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>cuello_a_rodilla</translation>
</message>
<message>
<source>waist_to_knee</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>cintura_a_rodilla</translation>
</message>
<message>
<source>shoulder_height</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>altura_hombros</translation>
</message>
<message>
<source>head_height</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>altura_cabeza</translation>
</message>
<message>
<source>body_position</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>posición_del_cuerpo</translation>
</message>
<message>
<source>arc_behind_shoulder_girdle</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>arco_detras_cintura_escapular</translation>
</message>
<message>
<source>neck_to_neck_base</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>de_cuello_a_base_cuello</translation>
</message>
<message>
<source>depth_waist_first</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>profundidad_cintura_primera</translation>
</message>
<message>
<source>depth_waist_second</source>
<comment>Short measurement name. Don&apos;t use math symbols in name!!!!</comment>
<translation type="unfinished"></translation>
<translation>profundidad_cintura_segunda</translation>
</message>
</context>
<context>
@ -4035,237 +4047,237 @@ Quiere guardar los cambios?</translation>
<message>
<source>Around fullest part of Head</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Contorno cabeza maximo</translation>
</message>
<message>
<source>Around middle part of Neck</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Mitad del contorno de cuello</translation>
</message>
<message>
<source>Around Neck at base</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Contorno base de cuello</translation>
</message>
<message>
<source>Vertical Distance from Crown to Nape</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Distancia vertical de coronilla a nuca</translation>
</message>
<message>
<source>Front Neck Center over tape at Bustline to Front Waist Center</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Centro cuello delantero sobre línea de pecho a centro cintura frontal</translation>
</message>
<message>
<source>Back Neck Center to Back Waist Center</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Centro cuello espalda centro cintura espalda</translation>
</message>
<message>
<source>NeckPoint to ShoulderTip</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>cuello punta hombro</translation>
</message>
<message>
<source>Armpit to Waist side</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Axila a lado cintura</translation>
</message>
<message>
<source>Around Body from middle of Shoulder length to BustPoint to Crotch up back to beginning point</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Alrededor del cuerpo por hombro medio pasando por pecho entrepierna y volver a hombro medio</translation>
</message>
<message>
<source>Around Arms and Torso, at bicep level parallel to floor, with arms hanging at the sides</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Alrededor de brazos y torso, a nivel bíceps, paralelo al suelo con brazos caidos</translation>
</message>
<message>
<source>Around Chest at Armfold level, will be parallel to floor across back, will not be parallel to floor across front chest</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Contorno pecho a la altura del cruce de brazos, paralelo al suelo en la espalda y no paralelo en el delantero</translation>
</message>
<message>
<source>Around fullest part of Bust, parallel to floor</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Contorno parte sobresaliente del pecho paralelo al suelo</translation>
</message>
<message>
<source>Around Chest below the Bust, parallel to floor</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Contorno pecho bajo el busto paralelo al suelo</translation>
</message>
<message>
<source>Tie a string around smallest part of waist, keep string tied while taking meaasurements. Not usually parallel to floor for front waist or back waist.</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Contorno de cintura por la parte mas estrecha, no suele ser paralela al suelo.</translation>
</message>
<message>
<source>Around HighHip, parallel to floor</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Contorno cadera alta paralelo suelo</translation>
</message>
<message>
<source>Around Hip, parallel to floor</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Contorno cadera paralelo al suelo</translation>
</message>
<message>
<source>Across Front UpperChest, smallest width from armscye to armscye</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Pecho delantero superior, menor distancia de sisa a sisa</translation>
</message>
<message>
<source>Across Front Chest, from armfold to armfold</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Pecho delantero, de brazo a brazo</translation>
</message>
<message>
<source>From ShoulderTip to ShoulderTip, across Front</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Delantero punta hombro a punta hombro</translation>
</message>
<message>
<source>From ShoulderTip to ShoulderTip, across Back</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Espalda punta hombro a punta hombro</translation>
</message>
<message>
<source>Across Back UpperChest, smallest width from armscye to armscye</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Pecho superior en espalda menor medida entre sisas</translation>
</message>
<message>
<source>Across Back Chest, from armfold to armfold</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Pecho en espalda de brazo a brazo</translation>
</message>
<message>
<source>Distance between BustPoints, across Chest</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Distancia entre busto por el pecho</translation>
</message>
<message>
<source>Distance from Bustpoint, behind neck, down to Bustpoint</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Distancia entre busto pasando por la nuca</translation>
</message>
<message>
<source>From NeckPoint to BustPoint</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Distancia desde el busto hasta el cuello</translation>
</message>
<message>
<source>From Front Waist Center, down to crotch, up to Back Waist Center</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Desde centro delantero cintura, pasando por la entrepierna al centro espalda cintura</translation>
</message>
<message>
<source>Sit on hard chair, measure from side waist straight down to chair bottom</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Sentados en silla, medir desde lado derecho cintura hasta asiento de la silla</translation>
</message>
<message>
<source>Vertical Distance from NeckPoint level to ShoulderTip level</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Distancia vertical desde el cuello al hombro</translation>
</message>
<message>
<source>Degrees of angle from NeckPoint to ShoulderTip requires goniometer</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Grados del ángulo desde el cuello al hombro, requiere gniómetro</translation>
</message>
<message>
<source>ShoulderTip to Front Waist Center</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Punta del hombro a centro cintura delantero</translation>
</message>
<message>
<source>ShoulderTip to Back Waist Center</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Punta del hombro a centro cintura espalda</translation>
</message>
<message>
<source>NeckPoint straight down front chest to Waistline</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Desde parte derecha cuello bajando por el pecho a la cintura</translation>
</message>
<message>
<source>Back NeckPoint straight down back chest to Waistline</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Desde parte derecha cuello bajando por la espalda a la cintura</translation>
</message>
<message>
<source>NeckPoint to NeckPoint through Front Neck Center</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>De punto a punto de cuello pasando por el centro del cuello</translation>
</message>
<message>
<source>NeckPoint to NeckPoint across Nape</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>De punto a punto de cuello pasando por la nuca</translation>
</message>
<message>
<source>Front upper-bust arc</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Arco busto delantero</translation>
</message>
<message>
<source>Back UpperBust side to side</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Arco busto espalda</translation>
</message>
<message>
<source>Front Waist side to side</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Cintura delantera lado a lado</translation>
</message>
<message>
<source>Back Waist side to side</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Cintura espalda lado a lado</translation>
</message>
<message>
<source>Front UpperHip side to side</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>cadera superior delantero lado lado </translation>
</message>
<message>
<source>Back UpperHip side to side</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>cadera superior espalda lado lado </translation>
</message>
<message>
<source>Front Hip side to side</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>cadera delantero lado lado </translation>
</message>
<message>
<source>Back Hip side to side</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>cadera espalda lado lado </translation>
</message>
<message>
<source>NeckPoint to Front ArmfoldPoint</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>cuello delantero a pliegue brazo</translation>
</message>
<message>
<source>NeckPoint to Back ArmfoldPoint</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>cuello espalda a pliegue brazo</translation>
</message>
<message>
<source>NeckPoint across Front Chest to Waist side</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>cuello atraves del pecho a lado cintura</translation>
</message>
<message>
<source>NeckPoint across Back Chest to Waist side</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>cuello atraves de espalda a lado cintura</translation>
</message>
<message>
<source>Front Neck Center straight down to UpperChest line</source>
@ -4510,7 +4522,7 @@ Quiere guardar los cambios?</translation>
<message>
<source>The distance from the front waist to floor</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation>Distancia delantera desde la cintura al suelo</translation>
</message>
<message>
<source>Arc through groin area</source>
@ -4675,7 +4687,7 @@ Quiere guardar los cambios?</translation>
<message>
<source>Body position</source>
<comment>Full measurement description</comment>
<translation type="unfinished"></translation>
<translation type="unfinished">Posición del cuerpo</translation>
</message>
<message>
<source>Arc behind the shoulder girdle</source>
@ -4878,7 +4890,7 @@ Quiere guardar los cambios?</translation>
<message>
<source>Front upper-bust arc</source>
<comment>Full measurement name</comment>
<translation type="unfinished"></translation>
<translation type="unfinished">Arco busto delantero</translation>
</message>
<message>
<source>Back UpperBust arc</source>
@ -5013,17 +5025,17 @@ Quiere guardar los cambios?</translation>
<message>
<source>Arm length</source>
<comment>Full measurement name</comment>
<translation type="unfinished"></translation>
<translation>Largo de brazo</translation>
</message>
<message>
<source>Hand width</source>
<comment>Full measurement name</comment>
<translation type="unfinished"></translation>
<translation>Ancho de mano</translation>
</message>
<message>
<source>Hand length</source>
<comment>Full measurement name</comment>
<translation type="unfinished"></translation>
<translation>Largo de mano</translation>
</message>
<message>
<source>Hand girth</source>
@ -5343,7 +5355,7 @@ Quiere guardar los cambios?</translation>
<message>
<source>Body position</source>
<comment>Full measurement name</comment>
<translation type="unfinished"></translation>
<translation>Posición del cuerpo</translation>
</message>
<message>
<source>Arc behind shoulder girdle</source>
@ -5877,14 +5889,6 @@ Quiere guardar los cambios?</translation>
</context>
<context>
<name>VAbstractTool</name>
<message>
<source>Confirm the deletion.</source>
<translation type="vanished">Confirmar borrado</translation>
</message>
<message>
<source>Do you really want delete?</source>
<translation type="vanished">Realmente quiere borrarlo?</translation>
</message>
<message>
<source>black</source>
<translation>negro</translation>
@ -6473,7 +6477,7 @@ Quiere guardar los cambios?</translation>
<name>main</name>
<message>
<source>Pattern making program.</source>
<translation type="unfinished"></translation>
<translation>Programa generando patrón</translation>
</message>
<message>
<source>Pattern file.</source>

File diff suppressed because it is too large Load Diff

View File

@ -1506,10 +1506,6 @@
<source>Creation a layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, waite.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Couldn&apos;t prepare data for creation layout</source>
<translation type="unfinished"></translation>
@ -1526,6 +1522,10 @@
<source>Several workpieces left not arranged, but none of them match for paper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, wait.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DialogLayoutSettings</name>
@ -2563,26 +2563,34 @@
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Do you really want union details?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Voulez-vous vraiment fusionner les propriétés ?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Select first point</source>
<translation>Choisir le premier point</translation>
</message>
<message>
<source>Select second point</source>
<translation>Choisir le deuxième point</translation>
</message>
<message>
<source>Select another second point</source>
<translation>Choisir un autre deuxième point</translation>
</message>
<message>
<source>Select detail</source>
<translation>Choisir les détails</translation>
</message>
<message>
<source>Union tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a first point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Workpiece should have at least two points and three objects</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a unique point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a point on edge</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Functions</name>
@ -5879,14 +5887,6 @@ Voulez-vous sauvegarder les changements ? </translation>
</context>
<context>
<name>VAbstractTool</name>
<message>
<source>Confirm the deletion.</source>
<translation type="vanished">Confirmer la suppression.</translation>
</message>
<message>
<source>Do you really want delete?</source>
<translation type="vanished">Voulez vous vraiment supprimer ? </translation>
</message>
<message>
<source>black</source>
<translation type="unfinished"></translation>

View File

@ -1506,10 +1506,6 @@
<source>Creation a layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, waite.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Couldn&apos;t prepare data for creation layout</source>
<translation type="unfinished"></translation>
@ -1526,6 +1522,10 @@
<source>Several workpieces left not arranged, but none of them match for paper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, wait.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DialogLayoutSettings</name>
@ -2563,26 +2563,34 @@
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Do you really want union details?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select first point</source>
<translation>לבחור נקודה ראשונה</translation>
</message>
<message>
<source>Select second point</source>
<translation>לבחור נקודה שנייה</translation>
</message>
<message>
<source>Select another second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Union tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a first point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Workpiece should have at least two points and three objects</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a unique point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a point on edge</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Functions</name>

View File

@ -1507,10 +1507,6 @@
<source>Creation a layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, waite.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Couldn&apos;t prepare data for creation layout</source>
<translation type="unfinished"></translation>
@ -1527,6 +1523,10 @@
<source>Several workpieces left not arranged, but none of them match for paper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, wait.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DialogLayoutSettings</name>
@ -2565,26 +2565,34 @@
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Do you really want union details?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select first point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select another second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Union tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a first point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Workpiece should have at least two points and three objects</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a unique point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a point on edge</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Functions</name>

View File

@ -1562,10 +1562,6 @@
<source>Creation a layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, waite.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Couldn&apos;t prepare data for creation layout</source>
<translation type="unfinished"></translation>
@ -1582,6 +1578,10 @@
<source>Several workpieces left not arranged, but none of them match for paper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, wait.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DialogLayoutSettings</name>
@ -2647,26 +2647,34 @@
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Do you really want union details?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select first point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select another second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Union tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a first point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Workpiece should have at least two points and three objects</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a unique point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a point on edge</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Functions</name>

View File

@ -1506,10 +1506,6 @@
<source>Creation a layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, waite.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Couldn&apos;t prepare data for creation layout</source>
<translation type="unfinished"></translation>
@ -1526,6 +1522,10 @@
<source>Several workpieces left not arranged, but none of them match for paper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, wait.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DialogLayoutSettings</name>
@ -2563,26 +2563,34 @@
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Do you really want union details?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Wil je echt gezamenlijke details?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Select first point</source>
<translation>Selecteer eerste punt</translation>
</message>
<message>
<source>Select second point</source>
<translation>Selecteer tweede punt</translation>
</message>
<message>
<source>Select another second point</source>
<translation>Selecteer een ander tweede punt</translation>
</message>
<message>
<source>Select detail</source>
<translation>Selecteer een detail</translation>
</message>
<message>
<source>Union tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a first point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Workpiece should have at least two points and three objects</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a second point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a unique point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a detail</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a point on edge</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Functions</name>
@ -5875,14 +5883,6 @@ Do you want to save your changes?</source>
</context>
<context>
<name>VAbstractTool</name>
<message>
<source>Confirm the deletion.</source>
<translation type="vanished">Bevestig de verwijdering.</translation>
</message>
<message>
<source>Do you really want delete?</source>
<translation type="vanished">Wil je echt verwijderen?</translation>
</message>
<message>
<source>black</source>
<translation type="unfinished"></translation>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -242,9 +242,10 @@ unix{
# Path to resources in app bundle
RESOURCES_DIR = "Contents/Resources"
FRAMEWORKS_DIR = "Contents/Frameworks"
MACOS_DIR = "Contents/MacOS"
# On macx we will use app bundle. Bundle doesn't need bin directory inside.
# See issue #166: Creating OSX Homebrew (Mac OS X package manager) formula.
target.path = $$PREFIX/
target.path = $$MACOS_DIR
# Copy in bundle translation files.
exists($${TRANSLATIONS_PATH}/valentina_ru_RU.qm){
@ -341,6 +342,9 @@ unix{
libraries.files += $${OUT_PWD}/../libs/qmuparser/$${DESTDIR}/libqmuparser.2.dylib
libraries.files += $${OUT_PWD}/../libs/vpropertyexplorer/$${DESTDIR}/libvpropertyexplorer.1.dylib
# Utility pdftops need for saving a layout image to PS and EPS formates.
xpdf.path = $$MACOS_DIR
xpdf.files += $${PWD}/../../dist/macx/bin64/pdftops
# logo on macx.
ICON = ../../dist/Valentina.icns
@ -351,10 +355,148 @@ unix{
QMAKE_BUNDLE_DATA += \
standard \
libraries
libraries \
xpdf
}
}
# "make install" command for Windows.
# Depend on nsis script and create installer in folder "package"
win32{
package.path = $${OUT_PWD}/package/valentina
package.files += \
$${OUT_PWD}/$${DESTDIR}/valentina.exe \
$${OUT_PWD}/$${DESTDIR}/valentina.exe.dbg \
$$PWD/../../dist/win/valentina.ico \
$$PWD/../../dist/win/curl.exe \
$$PWD/../../dist/win/exchndl.dll \
$$PWD/../../dist/win/dbghelp.dll \
$$PWD/../../dist/win/mgwhelp.dll \
$$PWD/../../dist/win/symsrv.dll \
$$PWD/../../dist/win/symsrv.yes \
$$PWD/../../dist/win/pdftops.exe \
$$PWD/../../AUTHORS.txt \
$$PWD/../../LICENSE_GPL.txt \
$$PWD/../../README.txt \
$$PWD/../../ChangeLog.txt \
$$PWD/../libs/qmuparser/LICENSE_BSD.txt \
$${OUT_PWD}/../libs/qmuparser/$${DESTDIR}/qmuparser2.dll \
$${OUT_PWD}/../libs/qmuparser/$${DESTDIR}/qmuparser2.dll.dbg \
$${OUT_PWD}/../libs/vpropertyexplorer/$${DESTDIR}/vpropertyexplorer.dll \
$${OUT_PWD}/../libs/vpropertyexplorer/$${DESTDIR}/vpropertyexplorer.dll.dbg \
$$[QT_INSTALL_BINS]/icudt*.dll \ # Different name for different Qt releases
$$[QT_INSTALL_BINS]/icuin*.dll \ # Different name for different Qt releases
$$[QT_INSTALL_BINS]/icuuc*.dll \ # Different name for different Qt releases
$$[QT_INSTALL_BINS]/Qt5Core.dll \
$$[QT_INSTALL_BINS]/Qt5Gui.dll \
$$[QT_INSTALL_BINS]/Qt5Network.dll \
$$[QT_INSTALL_BINS]/Qt5PrintSupport.dll \
$$[QT_INSTALL_BINS]/Qt5Svg.dll \
$$[QT_INSTALL_BINS]/Qt5Widgets.dll \
$$[QT_INSTALL_BINS]/Qt5Xml.dll \
$$[QT_INSTALL_BINS]/Qt5XmlPatterns.dll \
$$[QT_INSTALL_BINS]/libgcc_s_dw2-1.dll \
$$[QT_INSTALL_BINS]/libstdc++-6.dll \
$$[QT_INSTALL_BINS]/libwinpthread-1.dll
INSTALLS += package
package_tables.path = $${OUT_PWD}/package/valentina/tables/standard
package_tables.files += $${OUT_PWD}/$${DESTDIR}/tables/standard/GOST_man_ru.vst
INSTALLS += package_tables
package_translations.path = $${OUT_PWD}/package/valentina/translations
package_translations.files += \
$$INSTALL_TRANSLATIONS \ # Valentina
$$[QT_INSTALL_TRANSLATIONS]/qt_ar.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_pl.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_pt.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_ru.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_sk.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_sl.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_sv.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_uk.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_zh_CN.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_zh_TW.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_ca.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_cs.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_da.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_de.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_es.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_fa.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_fi.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_fr.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_gl.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_he.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_hu.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_it.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_ja.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_ko.qm \
$$[QT_INSTALL_TRANSLATIONS]/qt_lt.qm \
$$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_uk.qm \
$$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_ca.qm \
$$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_cs.qm \
$$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_de.qm \
$$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_hu.qm \
$$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_it.qm \
$$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_ja.qm \
$$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_ru.qm \
$$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_sk.qm
INSTALLS += package_translations
package_bearer.path = $${OUT_PWD}/package/valentina/bearer
package_bearer.files += \
$$[QT_INSTALL_PLUGINS]/bearer/qgenericbearer.dll \
$$[QT_INSTALL_PLUGINS]/bearer/qnativewifibearer.dll
INSTALLS += package_bearer
package_iconengines.path = $${OUT_PWD}/package/valentina/iconengines
package_iconengines.files += $$[QT_INSTALL_PLUGINS]/iconengines/qsvgicon.dll
INSTALLS += package_iconengines
package_imageformats.path = $${OUT_PWD}/package/valentina/imageformats
package_imageformats.files += \
$$[QT_INSTALL_PLUGINS]/imageformats/qdds.dll \
$$[QT_INSTALL_PLUGINS]/imageformats/qgif.dll \
$$[QT_INSTALL_PLUGINS]/imageformats/qicns.dll \
$$[QT_INSTALL_PLUGINS]/imageformats/qico.dll \
$$[QT_INSTALL_PLUGINS]/imageformats/qjp2.dll \
$$[QT_INSTALL_PLUGINS]/imageformats/qjpeg.dll \
$$[QT_INSTALL_PLUGINS]/imageformats/qmng.dll \
$$[QT_INSTALL_PLUGINS]/imageformats/qsvg.dll \
$$[QT_INSTALL_PLUGINS]/imageformats/qtga.dll \
$$[QT_INSTALL_PLUGINS]/imageformats/qtiff.dll \
$$[QT_INSTALL_PLUGINS]/imageformats/qwbmp.dll \
$$[QT_INSTALL_PLUGINS]/imageformats/qwebp.dll \
INSTALLS += package_imageformats
package_platforms.path = $${OUT_PWD}/package/valentina/platforms
package_platforms.files += $$[QT_INSTALL_PLUGINS]/platforms/qwindows.dll
INSTALLS += package_platforms
package_printsupport.path = $${OUT_PWD}/package/valentina/printsupport
package_printsupport.files += $$[QT_INSTALL_PLUGINS]/printsupport/windowsprintersupport.dll
INSTALLS += package_printsupport
package_nsis.path = $${OUT_PWD}/package
package_nsis.files += $$PWD/../../dist/win/nsis/valentina.nsi
INSTALLS += package_nsis
package_nsis_headers.path = $${OUT_PWD}/package/headers
package_nsis_headers.files += \
$$PWD/../../dist/win/nsis/headers/fileassoc.nsh \
$$PWD/../../dist/win/nsis/headers/fileversion.nsh
INSTALLS += package_nsis_headers
# Do the packaging
# First, mangle all of INSTALLS values. We depend on them.
unset(MANGLED_INSTALLS)
for(x, INSTALLS):MANGLED_INSTALLS += install_$${x}
build_package.path = $${OUT_PWD}/package
build_package.commands = \"C:/Program Files/NSIS/makensisw.exe\" \"$${OUT_PWD}/package/valentina.nsi\"
build_package.depends = $${MANGLED_INSTALLS}
INSTALLS += build_package
}
# Some systems use special name for lrelease. For example opensuse 13.2 has lrelease-qt5.
isEmpty(LRELEASE){
LRELEASE = lrelease

View File

@ -236,7 +236,7 @@ void VContainer::ClearGObjects()
//---------------------------------------------------------------------------------------------------------------------
void VContainer::ClearCalculationGObjects()
{
if (d->gObjects.size()>0)
if (not d->gObjects.isEmpty())
{
QVector<quint32> keys;
QHash<quint32, QSharedPointer<VGObject> >::iterator i;
@ -248,7 +248,8 @@ void VContainer::ClearCalculationGObjects()
keys.append(i.key());
}
}
if (keys.size()>0)
// We can't delete objects in previous loop it will destroy the iterator.
if (not keys.isEmpty())
{
for (int i = 0; i < keys.size(); ++i)
{
@ -324,7 +325,7 @@ template <typename key, typename val>
quint32 VContainer::AddObject(QHash<key, val> &obj, val value)
{
SCASSERT(value != nullptr);
quint32 id = getNextId();
const quint32 id = getNextId();
value->setId(id);
obj[id] = value;
return id;

View File

@ -26,7 +26,7 @@
</size>
</property>
<property name="windowTitle">
<string>Creation a layout</string>
<string>Create a Layout</string>
</property>
<property name="windowIcon">
<iconset resource="../../share/resources/icon.qrc">
@ -45,7 +45,7 @@
</sizepolicy>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, waite.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Finding best position for worpieces. Please, wait.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>

View File

@ -13,6 +13,10 @@
<property name="windowTitle">
<string>Creation a layout</string>
</property>
<property name="windowIcon">
<iconset resource="../../share/resources/icon.qrc">
<normaloff>:/icon/64x64/icon64x64.png</normaloff>:/icon/64x64/icon64x64.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
@ -405,6 +409,13 @@
<item row="1" column="2">
<widget class="QComboBox" name="comboBoxLayoutUnit"/>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_4">
<property name="text">
<string notr="true">×2</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
@ -511,7 +522,7 @@
</connection>
</connections>
<buttongroups>
<buttongroup name="buttonGroup"/>
<buttongroup name="buttonGroupPrinciple"/>
<buttongroup name="buttonGroup"/>
</buttongroups>
</ui>

View File

@ -68,6 +68,7 @@ DialogSaveLayout::DialogSaveLayout(const QMap<QString, QString> &formates, int c
connect(ui->lineEditPath, &QLineEdit::textChanged, this, &DialogSaveLayout::PathChanged);
ui->lineEditPath->setText(qApp->getSettings()->GetPathLayout());
ShowExample();//Show example for current format.
}
//---------------------------------------------------------------------------------------------------------------------

View File

@ -17,7 +17,11 @@
</size>
</property>
<property name="windowTitle">
<string>Dialog</string>
<string>Save Layout</string>
</property>
<property name="windowIcon">
<iconset resource="../../share/resources/icon.qrc">
<normaloff>:/icon/64x64/icon64x64.png</normaloff>:/icon/64x64/icon64x64.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@ -102,7 +106,9 @@
</item>
</layout>
</widget>
<resources/>
<resources>
<include location="../../share/resources/icon.qrc"/>
</resources>
<connections>
<connection>
<sender>buttonBox</sender>

View File

@ -13,6 +13,10 @@
<property name="windowTitle">
<string>Point intersect curve and axis</string>
</property>
<property name="windowIcon">
<iconset resource="../../share/resources/icon.qrc">
<normaloff>:/icon/64x64/icon64x64.png</normaloff>:/icon/64x64/icon64x64.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">

View File

@ -13,6 +13,10 @@
<property name="windowTitle">
<string>Point intersect line and axis</string>
</property>
<property name="windowIcon">
<iconset resource="../../share/resources/icon.qrc">
<normaloff>:/icon/64x64/icon64x64.png</normaloff>:/icon/64x64/icon64x64.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">

View File

@ -87,14 +87,32 @@ void DialogUnionDetails::UpdateList()
*/
bool DialogUnionDetails::CheckObject(const quint32 &id, const quint32 &idDetail) const
{
if (idDetail == 0)
if (idDetail == NULL_ID)
{
return false;
}
VDetail det = data->GetDetail(idDetail);
const VDetail det = data->GetDetail(idDetail);
return det.Containes(id);
}
//---------------------------------------------------------------------------------------------------------------------
bool DialogUnionDetails::CheckDetail(const quint32 &idDetail) const
{
if (idDetail == NULL_ID)
{
return false;
}
const VDetail det = data->GetDetail(idDetail);
if (det.CountNode() >= 3 && det.listNodePoint().size() >= 2)
{
return true;
}
else
{
return false;
}
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief ChoosedDetail help save information about detail and points on detail
@ -106,14 +124,22 @@ bool DialogUnionDetails::CheckObject(const quint32 &id, const quint32 &idDetail)
void DialogUnionDetails::ChoosedDetail(const quint32 &id, const SceneObject &type, quint32 &idDetail,
int &index)
{
if (idDetail == 0)
if (idDetail == NULL_ID)
{
if (type == SceneObject::Detail)
{
if (CheckDetail(id))
{
idDetail = id;
emit ToolTip(tr("Select first point"));
emit ToolTip(tr("Select a first point"));
return;
}
else
{
emit ToolTip(tr("Workpiece should have at least two points and three objects"));
return;
}
}
}
if (CheckObject(id, idDetail) == false)
{
@ -125,14 +151,14 @@ void DialogUnionDetails::ChoosedDetail(const quint32 &id, const SceneObject &typ
{
p1 = id;
++numberP;
emit ToolTip(tr("Select second point"));
emit ToolTip(tr("Select a second point"));
return;
}
if (numberP == 1)
{
if (id == p1)
{
emit ToolTip(tr("Select another second point"));
emit ToolTip(tr("Select a unique point"));
return;
}
VDetail d = data->GetDetail(idDetail);
@ -154,13 +180,13 @@ void DialogUnionDetails::ChoosedDetail(const quint32 &id, const SceneObject &typ
numberP = 0;
p1 = 0;
p2 = 0;
emit ToolTip(tr("Select detail"));
emit ToolTip(tr("Select a detail"));
return;
}
}
else
{
emit ToolTip(tr("Select another second point"));
emit ToolTip(tr("Select a point on edge"));
return;
}
}

View File

@ -84,6 +84,8 @@ private:
quint32 p2;
bool CheckObject(const quint32 &id, const quint32 &idDetail) const;
bool CheckDetail(const quint32 &idDetail) const;
void ChoosedDetail(const quint32 &id, const SceneObject &type, quint32 &idDetail,
int &index);
};

View File

@ -186,7 +186,7 @@ void VDetail::setId(const quint32 &id)
bool VDetail::OnEdge(const quint32 &p1, const quint32 &p2) const
{
QVector<VNodeDetail> list = listNodePoint();
if (list.size() < 3)
if (list.size() < 2)
{
qDebug()<<"Not enough points.";
return false;
@ -289,10 +289,10 @@ VDetail VDetail::RemoveEdge(const quint32 &index) const
VDetail det(*this);
det.ClearNodes();
QVector<VNodeDetail> list = this->listNodePoint();
quint32 edge = static_cast<quint32>(list.size());
// Edge can be only segment. We ignore all curves inside segments.
const quint32 edges = static_cast<quint32>(listNodePoint().size());
quint32 k = 0;
for (quint32 i=0; i<edge; ++i)
for (quint32 i=0; i<edges; ++i)
{
if (i == index)
{
@ -304,20 +304,14 @@ VDetail VDetail::RemoveEdge(const quint32 &index) const
VNodeDetail p1;
VNodeDetail p2;
this->NodeOnEdge(i, p1, p2);
int j1 = this->indexOfNode(p1.getId());
const int j1 = this->indexOfNode(p1.getId());
int j2 = this->indexOfNode(p2.getId());
if (j2 == 0)
{
j2 = this->CountNode()-1;
if (j1 == j2)
{
det.append(this->at(j1));
++k;
continue;
}
j2 = this->CountNode();
}
for (int j=j1; j<j2; ++j)
{
{// Add "segment" except last point. Inside can be curves too.
det.append(this->at(j));
++k;
}
@ -461,6 +455,8 @@ QPainterPath VDetail::ContourPath(const VContainer *data) const
// seam allowence
if (getSeamAllowance() == true)
{
if (not pointsEkv.isEmpty())
{
QPainterPath ekv;
ekv.moveTo(pointsEkv.at(0));
@ -472,6 +468,7 @@ QPainterPath VDetail::ContourPath(const VContainer *data) const
path.addPath(ekv);
path.setFillRule(Qt::WindingFill);
}
}
return path;
}

View File

@ -82,10 +82,10 @@ public:
QVector<QPointF> SeamAllowancePoints(const VContainer *data) const;
QPainterPath ContourPath(const VContainer *data) const;
QVector<VNodeDetail> listNodePoint()const;
private:
QSharedDataPointer<VDetailData> d;
QVector<VNodeDetail> listNodePoint()const;
static int indexOfNode(const QVector<VNodeDetail> &list, const quint32 &id);
QPointF StartSegment(const VContainer *data, const int &i) const;

View File

@ -226,18 +226,6 @@ QPointF VSplinePath::CutSplinePath(qreal length, qint32 &p1, qint32 &p2, QPointF
return QPointF();
}
//---------------------------------------------------------------------------------------------------------------------
qint32 VSplinePath::getMaxCountPoints() const
{
return d->maxCountPoints;
}
//---------------------------------------------------------------------------------------------------------------------
void VSplinePath::setMaxCountPoints(const qint32 &value)
{
d->maxCountPoints = value;
}
//---------------------------------------------------------------------------------------------------------------------
int VSplinePath::Segment(const QPointF &p) const
{

View File

@ -173,18 +173,6 @@ public:
*/
QPointF CutSplinePath(qreal length, qint32 &p1, qint32 &p2, QPointF &spl1p2, QPointF &spl1p3, QPointF &spl2p2,
QPointF &spl2p3) const;
/**
* @brief getMaxCountPoints return max count of points what can have spline path. This method use tool union detail.
* Because cutting point can change position spline can have diffirent count of points. Need know max value. This
* value stored from cuted spline path.
* @return count.
*/
qint32 getMaxCountPoints() const;
/**
* @brief setMaxCountPoints set max count points from cuted spline path.
* @param value max count.
*/
void setMaxCountPoints(const qint32 &value);
int Segment(const QPointF &p) const;
private:

View File

@ -43,15 +43,15 @@ class VSplinePathData : public QSharedData
public:
VSplinePathData()
: path(QVector<VSplinePoint>()), kCurve(1), maxCountPoints(0)
: path(QVector<VSplinePoint>()), kCurve(1)
{}
VSplinePathData(qreal kCurve)
: path(QVector<VSplinePoint>()), kCurve(kCurve), maxCountPoints(0)
: path(QVector<VSplinePoint>()), kCurve(kCurve)
{}
VSplinePathData(const VSplinePathData &splPath)
: QSharedData(splPath), path(splPath.path), kCurve(splPath.kCurve), maxCountPoints(splPath.maxCountPoints)
: QSharedData(splPath), path(splPath.path), kCurve(splPath.kCurve)
{}
virtual ~VSplinePathData();
@ -64,10 +64,6 @@ public:
* @brief kCurve coefficient of curvature spline.
*/
qreal kCurve;
/**
* @brief maxCountPoints max count of points what can have spline path.
*/
qint32 maxCountPoints;
};
VSplinePathData::~VSplinePathData()

View File

@ -82,12 +82,20 @@ int main(int argc, char *argv[])
QTranslator qtTranslator;
#if defined(Q_OS_WIN)
qtTranslator.load("qt_" + checkedLocale, QCoreApplication::applicationDirPath());
qtTranslator.load("qt_" + checkedLocale, qApp->translationsPath());
#else
qtTranslator.load("qt_" + checkedLocale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
#endif
app.installTranslator(&qtTranslator);
QTranslator qtxmlTranslator;
#if defined(Q_OS_WIN)
qtxmlTranslator.load("qtxmlpatterns_" + checkedLocale, qApp->translationsPath());
#else
qtxmlTranslator.load("qtxmlpatterns_" + checkedLocale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
#endif
app.installTranslator(&qtxmlTranslator);
QTranslator appTranslator;
appTranslator.load("valentina_" + checkedLocale, qApp->translationsPath());
app.installTranslator(&appTranslator);

View File

@ -135,6 +135,15 @@ MainWindow::MainWindow(QWidget *parent)
setCurrentFile("");
WindowsLocale();
#if defined(Q_OS_MAC)
// On Mac deafault icon size is 32x32.
ui->toolBarArrows->setIconSize(QSize(24, 24));
ui->toolBarDraws->setIconSize(QSize(24, 24));
ui->toolBarOption->setIconSize(QSize(24, 24));
ui->toolBarStages->setIconSize(QSize(24, 24));
ui->toolBarTools->setIconSize(QSize(24, 24));
#endif
}
//---------------------------------------------------------------------------------------------------------------------

View File

@ -78,6 +78,11 @@ TableWindow::TableWindow(QWidget *parent)
connect(ui->actionSave, &QAction::triggered, this, &TableWindow::SaveLayout);
connect(ui->actionLayout, &QAction::triggered, this, &TableWindow::Layout);
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &TableWindow::ShowPaper);
#if defined(Q_OS_MAC)
// On Mac deafault icon size is 32x32.
ui->toolBar->setIconSize(QSize(24, 24));
#endif
}
//---------------------------------------------------------------------------------------------------------------------
@ -348,7 +353,7 @@ void TableWindow::PngFile(const QString &name, int i) const
painter.setPen(QPen(Qt::black, qApp->toPixel(qApp->widthMainLine()), Qt::SolidLine, Qt::RoundCap,
Qt::RoundJoin));
painter.setBrush ( QBrush ( Qt::NoBrush ) );
scenes.at(i)->render(&painter);
scenes.at(i)->render(&painter, r, r);
image.save(name);
}
}

View File

@ -149,7 +149,10 @@ VToolCurveIntersectAxis *VToolCurveIntersectAxis::Create(const quint32 _id, cons
QPointF VToolCurveIntersectAxis::FindPoint(const QPointF &point, qreal angle,
const QSharedPointer<VAbstractCurve> &curve)
{
QLineF axis = VGObject::BuildAxis(point, angle, qApp->getCurrentScene()->sceneRect());
QRectF rec = QRectF(0, 0, INT_MAX, INT_MAX);
rec.translate(static_cast<qreal>(-INT_MAX/2), static_cast<qreal>(-INT_MAX/2));
const QLineF axis = VGObject::BuildAxis(point, angle, rec);
QVector<QPointF> points = curve->IntersectLine(axis);
if (points.size() > 0)

View File

@ -197,9 +197,6 @@ VToolCutSplinePath* VToolCutSplinePath::Create(const quint32 _id, const QString
splPath1->SetKCurve(splPath->GetKCurve());
splPath2->SetKCurve(splPath->GetKCurve());
splPath1->setMaxCountPoints(splPath->CountPoint());
splPath2->setMaxCountPoints(splPath->CountPoint());
if (typeCreation == Source::FromGui)
{
splPath1id = data->AddGObject(splPath1);

View File

@ -164,7 +164,6 @@ void VToolUnionDetails::AddToNewDetail(QObject *tool, VPattern *doc, VContainer
VPointF *p1 = new VPointF(spline->GetP1());
BiasRotatePoint(p1, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
//quint32 idP1 = data->AddGObject(p1);
VPointF p2 = VPointF(spline->GetP2());
BiasRotatePoint(&p2, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
@ -174,7 +173,6 @@ void VToolUnionDetails::AddToNewDetail(QObject *tool, VPattern *doc, VContainer
VPointF *p4 = new VPointF(spline->GetP4());
BiasRotatePoint(p4, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
//quint32 idP4 = data->AddGObject(p4);
VSpline *spl = new VSpline(*p1, p2.toQPointF(), p3.toQPointF(), *p4, spline->GetKcurve(), 0,
Draw::Modeling);
@ -201,7 +199,6 @@ void VToolUnionDetails::AddToNewDetail(QObject *tool, VPattern *doc, VContainer
VSplinePath *path = new VSplinePath();
path->setMode(Draw::Modeling);
const QSharedPointer<VSplinePath> splinePath = data->GeometricObject<VSplinePath>(det.at(i).getId());
qint32 k = splinePath->getMaxCountPoints();
for (qint32 i = 1; i <= splinePath->Count(); ++i)
{
VSpline spline(splinePath->at(i-1).P(), splinePath->at(i).P(),
@ -209,24 +206,16 @@ void VToolUnionDetails::AddToNewDetail(QObject *tool, VPattern *doc, VContainer
splinePath->at(i).KAsm1(), splinePath->GetKCurve());
VPointF *p1 = new VPointF(spline.GetP1());
BiasRotatePoint(p1, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(),
angle);
//quint32 idP1 = data->AddGObject(p1);
--k;
BiasRotatePoint(p1, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
VPointF p2 = VPointF(spline.GetP2());
BiasRotatePoint(&p2, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(),
angle);
BiasRotatePoint(&p2, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
VPointF p3 = VPointF(spline.GetP3());
BiasRotatePoint(&p3, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(),
angle);
BiasRotatePoint(&p3, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
VPointF *p4 = new VPointF(spline.GetP4());
BiasRotatePoint(p4, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(),
angle);
//quint32 idP4 = data->AddGObject(p4);
--k;
BiasRotatePoint(p4, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
VSpline spl = VSpline(*p1, p2.toQPointF(), p3.toQPointF(), *p4, spline.GetKcurve());
if (i==1)
@ -239,11 +228,6 @@ void VToolUnionDetails::AddToNewDetail(QObject *tool, VPattern *doc, VContainer
delete p4;
delete p1;
}
while (k>=0)
{
data->getNextId();
--k;
}
idObject = data->AddGObject(path);
VSplinePath *path1 = new VSplinePath(*path);
@ -286,10 +270,10 @@ void VToolUnionDetails::UpdatePoints(const quint32 &idDetail, VContainer *data,
VPointF *point = new VPointF(*data->GeometricObject<VPointF>(det.at(i).getId()));
point->setMode(Draw::Modeling);
BiasRotatePoint(point, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
++idCount;
++idCount;// For parent
data->UpdateGObject(idDetail+idCount, point);
++idCount;
++idCount;// For child
}
}
break;
@ -300,24 +284,25 @@ void VToolUnionDetails::UpdatePoints(const quint32 &idDetail, VContainer *data,
const QSharedPointer<VArc> arc = data->GeometricObject<VArc>(det.at(i).getId());
VPointF p1 = VPointF(arc->GetP1());
BiasRotatePoint(&p1, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
VPointF p2 = VPointF(arc->GetP2());
BiasRotatePoint(&p2, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
VPointF *center = new VPointF(arc->GetCenter());
BiasRotatePoint(center, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(),
angle);
QLineF l1(center->toQPointF(), p1.toQPointF());
QLineF l2(center->toQPointF(), p2.toQPointF());
++idCount;
center->setMode(Draw::Modeling);
data->UpdateGObject(idDetail+idCount, center);
VArc *arc1 = new VArc(*center, arc->GetRadius(), arc->GetFormulaRadius(), l1.angle(),
QString().setNum(l1.angle()), l2.angle(), QString().setNum(l2.angle()));
arc1->setMode(Draw::Modeling);
++idCount;
++idCount;// For parent
data->UpdateGObject(idDetail+idCount, arc1);
++idCount;
++idCount;// For child
delete center;
}
}
break;
@ -329,8 +314,6 @@ void VToolUnionDetails::UpdatePoints(const quint32 &idDetail, VContainer *data,
VPointF *p1 = new VPointF(spline->GetP1());
BiasRotatePoint(p1, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
++idCount;
data->UpdateGObject(idDetail+idCount, p1);
VPointF p2 = VPointF(spline->GetP2());
BiasRotatePoint(&p2, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
@ -340,16 +323,16 @@ void VToolUnionDetails::UpdatePoints(const quint32 &idDetail, VContainer *data,
VPointF *p4 = new VPointF(spline->GetP4());
BiasRotatePoint(p4, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(), angle);
++idCount;
data->UpdateGObject(idDetail+idCount, p4);
VSpline *spl = new VSpline(*p1, p2.toQPointF(), p3.toQPointF(), *p4, spline->GetKcurve(), 0,
Draw::Modeling);
++idCount;
++idCount;// For parent
data->UpdateGObject(idDetail+idCount, spl);
++idCount;
++idCount;// For child
delete p1;
delete p4;
}
}
break;
@ -361,7 +344,6 @@ void VToolUnionDetails::UpdatePoints(const quint32 &idDetail, VContainer *data,
path->setMode(Draw::Modeling);
const QSharedPointer<VSplinePath> splinePath = data->GeometricObject<VSplinePath>(det.at(i).getId());
SCASSERT(splinePath != nullptr);
qint32 k = splinePath->getMaxCountPoints();
for (qint32 i = 1; i <= splinePath->Count(); ++i)
{
VSpline spline(splinePath->at(i-1).P(), splinePath->at(i).P(),
@ -371,9 +353,6 @@ void VToolUnionDetails::UpdatePoints(const quint32 &idDetail, VContainer *data,
VPointF *p1 = new VPointF(spline.GetP1());
BiasRotatePoint(p1, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(),
angle);
++idCount;
data->UpdateGObject(idDetail+idCount, p1);
--k;
VPointF p2 = VPointF(spline.GetP2());
BiasRotatePoint(&p2, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(),
@ -386,9 +365,6 @@ void VToolUnionDetails::UpdatePoints(const quint32 &idDetail, VContainer *data,
VPointF *p4 = new VPointF(spline.GetP4());
BiasRotatePoint(p4, dx, dy, data->GeometricObject<VPointF>(pRotate)->toQPointF(),
angle);
++idCount;
data->UpdateGObject(idDetail+idCount, p4);
--k;
VSpline spl = VSpline(*p1, p2.toQPointF(), p3.toQPointF(), *p4, spline.GetKcurve());
if (i==1)
@ -398,19 +374,14 @@ void VToolUnionDetails::UpdatePoints(const quint32 &idDetail, VContainer *data,
}
path->append(VSplinePoint(*p4, splinePath->at(i).KAsm1(), spl.GetAngle2(),
splinePath->at(i).KAsm2(), spl.GetAngle2()+180));
delete p1;
delete p4;
}
while (k>=0)
{
data->getNextId();
--k;
++idCount;
}
++idCount;
++idCount;//For parent
data->UpdateGObject(idDetail+idCount, path);
++idCount;
++idCount;// For child
}
}
break;
@ -511,6 +482,7 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d
doc->UpdateToolData(id, data);
}
}
//First add tool to file
VAbstractTool::AddRecord(id, Tool::UnionDetails, doc);
if (parse == Document::FullParse)
{
@ -528,6 +500,7 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d
}
}
//Then create new details
VNodeDetail det1p1;
VNodeDetail det1p2;
d1.NodeOnEdge(indexD1, det1p1, det1p2);
@ -550,28 +523,42 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d
point4.setX(point4.x()+dx);
point4.setY(point4.y()+dy);
const qreal angle = QLineF(point4.toQPointF(), point3.toQPointF()).angleTo(QLineF(point1.toQPointF(),
point2.toQPointF()));
qint32 pointsD2 = 0; //Keeps count points second detail, what we already add.
const QLineF p4p3 = QLineF(point4.toQPointF(), point3.toQPointF());
const QLineF p1p2 = QLineF(point1.toQPointF(), point2.toQPointF());
// How many points do we need to skip?
// If lengths of edges not equal we should left the second point of the second detail.
qint32 skip;
if (qFuzzyCompare(p1p2.length(), p4p3.length()))
{
skip = 2;
}
else
{
skip = 1;
}
const qreal angle = p4p3.angleTo(p1p2);
qint32 pointsD2 = 0; //Keeps number points the second detail, what we have already added.
const qint32 countNodeD1 = d1.RemoveEdge(indexD1).CountNode();
const qint32 countNodeD2 = d2.RemoveEdge(indexD2).CountNode();
if (typeCreation == Source::FromGui)
{
qint32 j = 0, i = 0;
qint32 i = 0;
VDetail newDetail;
do
{
AddToNewDetail(unionDetails, doc, data, newDetail, d1.RemoveEdge(indexD1), i, id);
++i;
if (i > d1.indexOfNode(det1p1.getId()) && pointsD2 < d2.RemoveEdge(indexD2).CountNode()-2)
if (i > d1.indexOfNode(det1p1.getId()) && pointsD2 < countNodeD2-2)
{
qint32 j = 0;
FindIndexJ(pointsD2, d2, indexD2, j);
do
{
FindJ(pointsD2, d2, indexD2, j);
if (pointsD2 == d2.RemoveEdge(indexD2).CountNode() -2)
{
break;
}
if (j >= d2.RemoveEdge(indexD2).CountNode())
if (j >= countNodeD2)
{
j=0;
}
@ -579,9 +566,9 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d
det1p1.getId(), angle);
++pointsD2;
++j;
} while (pointsD2 < d2.RemoveEdge(indexD2).CountNode());
} while (pointsD2 < countNodeD2-skip);
}
} while (i < d1.RemoveEdge(indexD1).CountNode());
} while (i < countNodeD1);
newDetail.setName("Detail");
newDetail.setWidth(d1.getWidth());
@ -604,20 +591,17 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d
else
{
quint32 idCount = 0;
qint32 j = 0, i = 0;
qint32 i = 0;
do
{
UpdatePoints(id, data, d1.RemoveEdge(indexD1), i, idCount);
++i;
if (i > d1.indexOfNode(det1p1.getId()) && pointsD2 < d2.RemoveEdge(indexD2).CountNode()-2)
if (i > d1.indexOfNode(det1p1.getId()) && pointsD2 < countNodeD2-2)
{
qint32 j = 0;
FindIndexJ(pointsD2, d2, indexD2, j);
do
{
FindJ(pointsD2, d2, indexD2, j);
if (pointsD2 == d2.RemoveEdge(indexD2).CountNode()-2)
{
break;
}
if (j >= d2.RemoveEdge(indexD2).CountNode())
{
j=0;
@ -625,9 +609,9 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d
UpdatePoints(id, data, d2.RemoveEdge(indexD2), j, idCount, dx, dy, det1p1.getId(), angle);
++pointsD2;
++j;
} while (pointsD2 < d2.RemoveEdge(indexD2).CountNode());
} while (pointsD2 < countNodeD2-skip);
}
} while (i<d1.RemoveEdge(indexD1).CountNode());
} while (i<countNodeD1);
}
return nullptr;
}
@ -643,21 +627,23 @@ void VToolUnionDetails::PointsOnEdge(const VDetail &d, const quint32 &index, VPo
}
//---------------------------------------------------------------------------------------------------------------------
void VToolUnionDetails::FindJ(const qint32 &pointsD2, const VDetail &d2, const quint32 &indexD2, qint32 &j)
void VToolUnionDetails::FindIndexJ(const qint32 &pointsD2, const VDetail &d2, const quint32 &indexD2, qint32 &j)
{
if (pointsD2 == 0)
{
VNodeDetail node1;
VNodeDetail node2;
d2.NodeOnEdge(indexD2, node1, node2);
int k = d2.RemoveEdge(indexD2).indexOfNode(node2.getId());
if (k == d2.RemoveEdge(indexD2).CountNode()-1)
{
const VDetail removedD2 = d2.RemoveEdge(indexD2);
const int k = removedD2.indexOfNode(node2.getId());
SCASSERT(k != -1)
if (k == removedD2.CountNode()-1)
{//We have last node in detail, we wil begin from 0
j = 0;
}
else
{
j = d2.RemoveEdge(indexD2).indexOfNode(node2.getId())+1;
{// Continue from next node
j = k+1;
}
}
}

View File

@ -56,7 +56,7 @@ public:
VMainGraphicsScene *scene, VPattern *doc, VContainer *data, const Document &parse,
const Source &typeCreation);
static void PointsOnEdge(const VDetail &d, const quint32 &index, VPointF &p1, VPointF &p2, VContainer *data);
static void FindJ(const qint32 &pointsD2, const VDetail &d2, const quint32 &indexD2, qint32 &j);
static void FindIndexJ(const qint32 &pointsD2, const VDetail &d2, const quint32 &indexD2, qint32 &j);
static QVector<VDetail> GetDetailFromFile(VPattern *doc, const QDomElement &domElement);
static const QString TagName;
static const QString ToolType;

View File

@ -33,7 +33,7 @@
extern const int MAJOR_VERSION = 0;
extern const int MINOR_VERSION = 3;
extern const int DEBUG_VERSION = 0;
extern const int DEBUG_VERSION = 1;
extern const QString APP_VERSION(QStringLiteral("%1.%2.%3.%4").arg(MAJOR_VERSION).arg(MINOR_VERSION)
.arg(DEBUG_VERSION).arg(LATEST_TAG_DISTANCE));

View File

@ -39,8 +39,8 @@ extern const QString APP_VERSION;
// Change version number in version.cpp too.
#define VER_FILEVERSION 0,3,0,0
#define VER_FILEVERSION_STR "0.3.0.0\0"
#define VER_FILEVERSION 0,3,1,0
#define VER_FILEVERSION_STR "0.3.1.0\0"
#define VER_PRODUCTVERSION VER_FILEVERSION
#define VER_PRODUCTVERSION_STR VER_FILEVERSION_STR

View File

@ -219,6 +219,7 @@
<xs:attribute name="mx" type="xs:double"></xs:attribute>
<xs:attribute name="my" type="xs:double"></xs:attribute>
<xs:attribute name="type" type="xs:string"></xs:attribute>
<xs:attribute name="reverse" type="xs:unsignedInt"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>

View File

@ -39,7 +39,7 @@ OBJECTS_DIR = obj
include(qmuparser.pri)
VERSION = 2.2.5
VERSION = 2.2.6
# Set "make install" command for Unix-like systems.
unix:!macx{

View File

@ -1044,9 +1044,18 @@ qreal QmuParserBase::ParseCmdCodeBulk(int nOffset, int nThreadID) const
#endif
continue;
case cmASSIGN:
// Bugfix for Bulkmode:
// for details see:
// https://groups.google.com/forum/embed/?place=forum/muparser-dev&showsearch=true&showpopout=true&
// showtabs=false&parenturl=http://muparser.beltoforion.de/mup_forum.html&afterlogin&pli=1#!topic/
// muparser-dev/szgatgoHTws
--sidx;
Stack[sidx] = *pTok->Oprt.ptr = Stack[sidx+1];
Stack[sidx] = *(pTok->Oprt.ptr + nOffset) = Stack[sidx + 1];
continue;
// original code:
//--sidx;
//Stack[sidx] = *pTok->Oprt.ptr = Stack[sidx+1];
//continue;
case cmIF:
if (qFuzzyCompare(Stack[sidx--]+1, 1+0))
{

View File

@ -392,7 +392,7 @@ void QmuParserByteCode::AddAssignOp(qreal *a_pVar)
SToken tok;
tok.Cmd = cmASSIGN;
tok.Val.ptr = a_pVar;
tok.Oprt.ptr = a_pVar;
m_vRPN.push_back(tok);
}

View File

@ -56,6 +56,7 @@ QmuParserTester::QmuParserTester()
AddTest ( &QmuParserTester::TestBinOprt );
AddTest ( &QmuParserTester::TestException );
AddTest ( &QmuParserTester::TestStrArg );
AddTest ( &QmuParserTester::TestBulkMode );
QmuParserTester::c_iCount = 0;
}
@ -164,6 +165,44 @@ int QmuParserTester::TestStrArg()
return iStat;
}
//---------------------------------------------------------------------------------------------------------------------
int QmuParserTester::TestBulkMode()
{
int iStat = 0;
qWarning() << "testing bulkmode...";
#define EQN_TEST_BULK(EXPR, R1, R2, R3, R4, PASS) \
{ \
double res[] = { R1, R2, R3, R4 }; \
iStat += EqnTestBulk(EXPR, res, (PASS)); \
}
// Bulk Variables for the test:
// a: 1,2,3,4
// b: 2,2,2,2
// c: 3,3,3,3
// d: 5,4,3,2
EQN_TEST_BULK("a", 1, 1, 1, 1, false)
EQN_TEST_BULK("a", 1, 2, 3, 4, true)
EQN_TEST_BULK("b=a", 1, 2, 3, 4, true)
EQN_TEST_BULK("b=a, b*10", 10, 20, 30, 40, true)
EQN_TEST_BULK("b=a, b*10, a", 1, 2, 3, 4, true)
EQN_TEST_BULK("a+b", 3, 4, 5, 6, true)
EQN_TEST_BULK("c*(a+b)", 9, 12, 15, 18, true)
#undef EQN_TEST_BULK
if (iStat == 0)
{
qWarning() << "passed";
}
else
{
qWarning() << "\n failed with " << iStat << " errors";
}
return iStat;
}
//---------------------------------------------------------------------------------------------------------------------
int QmuParserTester::TestBinOprt()
{
@ -172,16 +211,7 @@ int QmuParserTester::TestBinOprt()
// built in operators
// xor operator
//iStat += EqnTest("1 xor 2", 3, true);
//iStat += EqnTest("a xor b", 3, true); // with a=1 and b=2
//iStat += EqnTest("1 xor 2 xor 3", 0, true);
//iStat += EqnTest("a xor b xor 3", 0, true); // with a=1 and b=2
//iStat += EqnTest("a xor b xor c", 0, true); // with a=1 and b=2
//iStat += EqnTest("(1 xor 2) xor 3", 0, true);
//iStat += EqnTest("(a xor b) xor c", 0, true); // with a=1 and b=2
//iStat += EqnTest("(a) xor (b) xor c", 0, true); // with a=1 and b=2
//iStat += EqnTest("1 or 2"), 3, true;
//iStat += EqnTest("a or b"), 3, true; // with a=1 and b=2
iStat += EqnTest ( "a++b", 3, true );
iStat += EqnTest ( "a ++ b", 3, true );
iStat += EqnTest ( "1++2", 3, true );
@ -220,6 +250,7 @@ int QmuParserTester::TestBinOprt()
iStat += EqnTest ( "2*(a=b)", 4, true );
iStat += EqnTest ( "2*(a=b+1)", 6, true );
iStat += EqnTest ( "(a=b+1)*2", 6, true );
iStat += EqnTest ( "a=c, a*10", 30, true);
iStat += EqnTest ( "2^2^3", 256, true );
iStat += EqnTest ( "1/2/3", 1.0 / 6.0, true );
@ -1406,6 +1437,63 @@ int QmuParserTester::EqnTest ( const QString &a_str, double a_fRes, bool a_fPass
return iRet;
}
//---------------------------------------------------------------------------------------------------------------------
/** \brief Test an expression in Bulk Mode. */
int QmuParserTester::EqnTestBulk(const QString &a_str, double a_fRes[4], bool a_fPass)
{
QmuParserTester::c_iCount++;
// Define Bulk Variables
int nBulkSize = 4;
double vVariableA[] = { 1, 2, 3, 4 }; // variable values
double vVariableB[] = { 2, 2, 2, 2 }; // variable values
double vVariableC[] = { 3, 3, 3, 3 }; // variable values
double vResults[] = { 0, 0, 0, 0 }; // variable values
int iRet(0);
try
{
QmuParser p;
p.DefineConst("const1", 1);
p.DefineConst("const2", 2);
p.DefineVar("a", vVariableA);
p.DefineVar("b", vVariableB);
p.DefineVar("c", vVariableC);
p.SetExpr(a_str);
p.Eval(vResults, nBulkSize);
bool bCloseEnough(true);
for (int i = 0; i < nBulkSize; ++i)
{
bCloseEnough &= (fabs(a_fRes[i] - vResults[i]) <= fabs(a_fRes[i] * 0.00001));
}
iRet = ((bCloseEnough && a_fPass) || (!bCloseEnough && !a_fPass)) ? 0 : 1;
if (iRet == 1)
{
qWarning() << "\n fail: " << a_str << " (incorrect result; expected: {" << a_fRes[0] << ","
<< a_fRes[1] << "," << a_fRes[2] << "," << a_fRes[3] << "}" << " ;calculated: " << vResults[0]
<< "," << vResults[1] << "," << vResults[2] << "," << vResults[3] << "}";
}
}
catch (QmuParserError &e)
{
if (a_fPass)
{
qWarning() << "\n fail: " << e.GetExpr() << " : " << e.GetMsg();
iRet = 1;
}
}
catch (...)
{
qWarning() << "\n fail: " << a_str << " (unexpected exception)";
iRet = 1; // exceptions other than ParserException are not allowed
}
return iRet;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief Internal error in test class Test is going to be aborted.

View File

@ -63,6 +63,9 @@ private:
double a_fVar2 );
static int ThrowTest ( const QString &a_str, int a_iErrc, bool a_bFail = true );
// Test Bulkmode
int EqnTestBulk(const QString &a_str, double a_fRes[4], bool a_fPass);
// Multiarg callbacks
static qreal f1of1 ( qreal v )
{
@ -301,6 +304,8 @@ private:
int TestStrArg();
// cppcheck-suppress functionStatic
int TestIfThenElse();
// cppcheck-suppress functionStatic
int TestBulkMode();
static void Q_NORETURN Abort();
};

View File

@ -343,7 +343,8 @@ int QmuParserTokenReader::ExtractToken ( const QString &a_szCharSet, QString &a_
int QmuParserTokenReader::ExtractOperatorToken ( QString &a_sTok, int a_iPos ) const
{
const std::wstring m_strFormulaStd = m_strFormula.toStdWString();
const std::wstring oprtCharsStd = m_pParser->ValidInfixOprtChars().toStdWString();
// Changed as per Issue 6: https://code.google.com/p/muparser/issues/detail?id=6
const std::wstring oprtCharsStd = m_pParser->ValidOprtChars().toStdWString();
int iEnd = static_cast<int>( m_strFormulaStd.find_first_not_of ( oprtCharsStd, static_cast<std::size_t>(a_iPos) ) );
if ( iEnd == static_cast<int>( string_type::npos ) )

View File

@ -219,6 +219,7 @@ QVector<QPointF> VAbstractDetail::Equidistant(const QVector<QPointF> &points, co
//points in the middle of polyline
ekvPoints<<EkvPoint(QLineF(p.at(i-1), p.at(i)), QLineF(p.at(i+1), p.at(i)), width);
}
ekvPoints = CheckLoops(ekvPoints);//Result path can contain loops
return ekvPoints;
}
@ -286,7 +287,6 @@ QVector<QPointF> VAbstractDetail::CorrectEquidistantPoints(const QVector<QPointF
correctPoints.remove(i);
}
}
correctPoints = CheckLoops(correctPoints);
return correctPoints;
}

View File

@ -368,6 +368,9 @@ VPosition::CrossingType VPosition::Crossing(const VLayoutDetail &detail, const i
return CrossingType::EdgeError;
}
const QLineF gEdge = gContour.GlobalEdge(globalI);
const QLineF dEdge = detail.Edge(detailI);
for (int i = 1; i <= globalEdgesCount; i++)
{
const QLineF globalEdge = gContour.GlobalEdge(i);
@ -390,11 +393,9 @@ VPosition::CrossingType VPosition::Crossing(const VLayoutDetail &detail, const i
}
QPointF xPoint;
QLineF::IntersectType type = globalEdge.intersect(detailEdge, &xPoint);
if (type == QLineF::BoundedIntersection)
if (globalEdge.intersect(detailEdge, &xPoint) == QLineF::BoundedIntersection)
{
if (TrueIntersection(gContour.GlobalEdge(globalI), detail.Edge(detailI), xPoint))
if (TrueIntersection(gEdge, dEdge, xPoint))
{
return CrossingType::Intersection;
}
@ -645,11 +646,23 @@ void VPosition::Rotate(int increase)
bool VPosition::TrueIntersection(const QLineF &gEdge, const QLineF &dEdge, const QPointF &p) const
{
const QPointF pX = RoundedPoint(p);
QPointF xPoint;
if (gEdge.intersect(dEdge, &xPoint) == QLineF::NoIntersection)
{
const QPointF gP1 = RoundedPoint(gEdge.p1());
const QPointF gP2 = RoundedPoint(gEdge.p2());
const QPointF dP1 = RoundedPoint(dEdge.p1());
const QPointF dP2 = RoundedPoint(dEdge.p2());
// If two edges are same line ignorring all intersection point that are equal to the start or the end point
return !(pX == gP1 || pX == gP2 || pX == dP1 || pX == dP2);
}
else
{
// Rotation case. Ignore intersection only in the point of edges intersection.
return pX != RoundedPoint(xPoint);
}
}
//---------------------------------------------------------------------------------------------------------------------

View File

@ -210,11 +210,12 @@ void VObjEngine::drawPolygon(const QPointF *points, int pointCount, PolygonDrawM
for (int i = 0; i < pointCount; ++i)
{
*stream << QString(" %1").arg(globalPointsCount - static_cast<unsigned int>(pointCount + i + 1));
*stream << QString(" %1").arg(globalPointsCount - static_cast<unsigned int>(pointCount) + i + 1);
}
*stream << endl;
}
//---------------------------------------------------------------------------------------------------------------------
void VObjEngine::drawPolygon(const QPoint *points, int pointCount, QPaintEngine::PolygonDrawMode mode)
{
QPaintEngine::drawPolygon(points, pointCount, mode);