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,96 +1,96 @@
Pattern making program
Author Roman Telezhynskyi <dismine(at)gmail.com>
Copyright (C) 2013-2015 Valentina project
Valentina Web page: http://www.valentina-project.org/
Valentina user manual https://bitbucket.org/dismine/valentina/wiki/manual/Content
Valentina main repository: https://bitbucket.org/dismine/valentina/overview
Valentina mail list (forum) https://groups.google.com/forum/#!forum/valentina-project-list
PPA for Ubuntu (develop): https://launchpad.net/~dismine/+archive/valentina-dev
Help translate https://www.transifex.com/organization/valentina
Valentina
==========
Valentina is a cross-platform patternmaking program which allows designers
to create and model patterns of clothing. This software allows pattern
creation, using either standard sizing tables or an individuals set of
measurements. It blends new technologies with traditional methods to create
a unique pattern making tool.
Supported Platforms
===================
The standalone binary packages support the following platforms:
Windows XP SP2 (32-bit) or later
Ubuntu Linux 14.04 (32-bit/64-bit) or later
OpenSUSE 13.02 (32-bit/64-bit) or later
Fedora 20 (32-bit/64-bit) or later
Mac OS X 10.7 (64-bit) or later
Building the sources requires Qt 5.2.0 or later.
Compiling Valentina
====================
Prerequisites:
* Qt 5.2.0 or later (On Unix development packages needed)
* mercurial (only for working with repository)
* On Unix:
- ccache
- g++ (at least GCC 4.6 is needed and GCC 4.8 is recommended) or
clang (clang 3.4 recommended)
- xpdf package (tool pdftops).
* On Windows:
- MinGW
- Xpdf is an open source viewer for Portable Document Format (PDF)
files. Website http://www.foolabs.com/xpdf/. Put tool pdftops.exe
in the same directory with Valentina's binary file.
The installed toolchains have to match the one Qt was compiled with.
You can build Valentina with
cd $SOURCE_DIRECTORY
qmake Valentina.pro -r (or qmake-qt5, depending on your platform)
make (or mingw32-make or nmake or jom, depending on your platform)
Note:In order to build and use Valentina, the PATH environment variable
needs to be extended:
PATH - to locate qmake, moc and other Qt tools
This is done by adding c:\Qt\%VERSION%\bin to the PATH variable.
For newer versions of Windows, PATH can be extended through the
Control Panel|System|Advanced|Environment variables menu.
You may also need to ensure that the locations of your compiler and
other build tools are listed in the PATH variable. This will depend on
your choice of software development environment.
Unix systems:
Default prefix for command "make install" is /usr. For using another
prefix build with qmake command:
qmake PREFIX=/usr/local PREFIX_LIB=/usr/lib/i386-linux-gnu Valentina.pro -r
where /usr/local is a new prefix for installation binary files and /usr/lib/i386-linux-gnu is new prefix for install libraries.
More about creation installers read in articles:
* How create Windows installer - https://bitbucket.org/dismine/valentina/wiki/developers/Creation_Windows_installer
* How create debian package - https://bitbucket.org/dismine/valentina/wiki/developers/Creation_deb_package
LICENSING
==========
Valentina is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Valentina is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
See LICENSE_GPL.txt file for further information
Other components released under:
* QMuParser - BSD license
* VPropertyExplorer - LGPLv2.1 license
Pattern making program
Author Roman Telezhynskyi <dismine(at)gmail.com>
Copyright (C) 2013-2015 Valentina project
Valentina Web page: http://www.valentina-project.org/
Valentina user manual https://bitbucket.org/dismine/valentina/wiki/manual/Content
Valentina main repository: https://bitbucket.org/dismine/valentina/overview
Valentina mail list (forum) https://groups.google.com/forum/#!forum/valentina-project-list
PPA for Ubuntu (develop): https://launchpad.net/~dismine/+archive/valentina-dev
Help translate https://www.transifex.com/organization/valentina
Valentina
==========
Valentina is a cross-platform patternmaking program which allows designers
to create and model patterns of clothing. This software allows pattern
creation, using either standard sizing tables or an individuals set of
measurements. It blends new technologies with traditional methods to create
a unique pattern making tool.
Supported Platforms
===================
The standalone binary packages support the following platforms:
Windows XP SP2 (32-bit) or later
Ubuntu Linux 14.04 (32-bit/64-bit) or later
OpenSUSE 13.02 (32-bit/64-bit) or later
Fedora 20 (32-bit/64-bit) or later
Mac OS X 10.7 (64-bit) or later
Building the sources requires Qt 5.2.0 or later.
Compiling Valentina
====================
Prerequisites:
* Qt 5.2.0 or later (On Unix development packages needed)
* mercurial (only for working with repository)
* On Unix:
- ccache
- g++ (at least GCC 4.6 is needed and GCC 4.8 is recommended) or
clang (clang 3.4 recommended)
- xpdf package (tool pdftops).
* On Windows:
- MinGW
- Xpdf is an open source viewer for Portable Document Format (PDF)
files. Website http://www.foolabs.com/xpdf/. Put tool pdftops.exe
in the same directory with Valentina's binary file.
The installed toolchains have to match the one Qt was compiled with.
You can build Valentina with
cd $SOURCE_DIRECTORY
qmake Valentina.pro -r (or qmake-qt5, depending on your platform)
make (or mingw32-make or nmake or jom, depending on your platform)
Note:In order to build and use Valentina, the PATH environment variable
needs to be extended:
PATH - to locate qmake, moc and other Qt tools
This is done by adding c:\Qt\%VERSION%\bin to the PATH variable.
For newer versions of Windows, PATH can be extended through the
Control Panel|System|Advanced|Environment variables menu.
You may also need to ensure that the locations of your compiler and
other build tools are listed in the PATH variable. This will depend on
your choice of software development environment.
Unix systems:
Default prefix for command "make install" is /usr. For using another
prefix build with qmake command:
qmake PREFIX=/usr/local PREFIX_LIB=/usr/lib/i386-linux-gnu Valentina.pro -r
where /usr/local is a new prefix for installation binary files and /usr/lib/i386-linux-gnu is new prefix for install libraries.
More about creation installers read in articles:
* How create Windows installer - https://bitbucket.org/dismine/valentina/wiki/developers/Creation_Windows_installer
* How create debian package - https://bitbucket.org/dismine/valentina/wiki/developers/Creation_deb_package
LICENSING
==========
Valentina is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Valentina is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
See LICENSE_GPL.txt file for further information
Other components released under:
* QMuParser - BSD license
* VPropertyExplorer - LGPLv2.1 license

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,13 +124,21 @@ 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)
{
idDetail = id;
emit ToolTip(tr("Select first point"));
return;
if (CheckDetail(id))
{
idDetail = id;
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;
}
@ -462,15 +456,18 @@ QPainterPath VDetail::ContourPath(const VContainer *data) const
// seam allowence
if (getSeamAllowance() == true)
{
QPainterPath ekv;
ekv.moveTo(pointsEkv.at(0));
for (qint32 i = 1; i < pointsEkv.count(); ++i)
if (not pointsEkv.isEmpty())
{
ekv.lineTo(pointsEkv.at(i));
}
QPainterPath ekv;
ekv.moveTo(pointsEkv.at(0));
for (qint32 i = 1; i < pointsEkv.count(); ++i)
{
ekv.lineTo(pointsEkv.at(i));
}
path.addPath(ekv);
path.setFillRule(Qt::WindingFill);
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);
const QPointF gP1 = RoundedPoint(gEdge.p1());
const QPointF gP2 = RoundedPoint(gEdge.p2());
const QPointF dP1 = RoundedPoint(dEdge.p1());
const QPointF dP2 = RoundedPoint(dEdge.p2());
return !(pX == gP1 || pX == gP2 || pX == dP1 || pX == dP2);
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);