Merge branch 'solvespace:master' into master
commit
ab7d77d58d
|
@ -13,4 +13,4 @@ else
|
|||
brew install libomp
|
||||
fi
|
||||
|
||||
git submodule update --init extlib/cairo extlib/freetype extlib/libdxfrw extlib/libpng extlib/mimalloc extlib/pixman extlib/zlib
|
||||
git submodule update --init extlib/cairo extlib/freetype extlib/libdxfrw extlib/libpng extlib/mimalloc extlib/pixman extlib/zlib extlib/eigen
|
||||
|
|
|
@ -5,6 +5,6 @@ sudo apt-get update -qq
|
|||
sudo apt-get install -q -y \
|
||||
zlib1g-dev libpng-dev libcairo2-dev libfreetype6-dev libjson-c-dev \
|
||||
libfontconfig1-dev libgtkmm-3.0-dev libpangomm-1.4-dev libgl-dev \
|
||||
libgl-dev libglu-dev libspnav-dev
|
||||
libgl-dev libglu-dev libspnav-dev
|
||||
|
||||
git submodule update --init extlib/libdxfrw extlib/mimalloc
|
||||
git submodule update --init extlib/libdxfrw extlib/mimalloc extlib/eigen
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
name: Source Tarball
|
||||
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
- created
|
||||
|
||||
jobs:
|
||||
create_tarball:
|
||||
name: Create & Upload Tarball
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
fetch-depth: 0
|
||||
- name: Pack Tarball
|
||||
id: pack_tarball
|
||||
run: |
|
||||
version="${GITHUB_REF#refs/tags/v}"
|
||||
dir_name="solvespace-${version}"
|
||||
archive_name="${dir_name}.tar.xz"
|
||||
archive_path="${HOME}/${archive_name}"
|
||||
|
||||
echo "::set-output name=archive_name::${archive_name}"
|
||||
echo "::set-output name=archive_path::${archive_path}"
|
||||
|
||||
cd ..
|
||||
tar \
|
||||
--exclude-vcs \
|
||||
--transform "s:^solvespace:${dir_name}:" \
|
||||
-cvaf \
|
||||
${archive_path} \
|
||||
solvespace
|
||||
- name: Get Release Upload URL
|
||||
id: get_upload_url
|
||||
env:
|
||||
event: ${{ toJson(github.event) }}
|
||||
run: |
|
||||
upload_url=$(echo "$event" | jq -r ".release.upload_url")
|
||||
echo "::set-output name=upload_url::$upload_url"
|
||||
echo "Upload URL: $upload_url"
|
||||
- name: Upload Tarball
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.get_upload_url.outputs.upload_url }}
|
||||
asset_path: ${{ steps.pack_tarball.outputs.archive_path }}
|
||||
asset_name: ${{ steps.pack_tarball.outputs.archive_name }}
|
||||
asset_content_type: binary/octet-stream
|
|
@ -14,3 +14,8 @@
|
|||
/obj-*/
|
||||
/*.slvs
|
||||
.vscode/
|
||||
|
||||
# Visual Studio
|
||||
out/
|
||||
.vs/
|
||||
CMakeSettings.json
|
||||
|
|
|
@ -23,3 +23,6 @@
|
|||
[submodule "extlib/mimalloc"]
|
||||
path = extlib/mimalloc
|
||||
url = https://github.com/microsoft/mimalloc
|
||||
[submodule "extlib/eigen"]
|
||||
path = extlib/eigen
|
||||
url = https://gitlab.com/libeigen/eigen.git
|
||||
|
|
15
CHANGELOG.md
15
CHANGELOG.md
|
@ -23,6 +23,17 @@ Sketching:
|
|||
|
||||
MISC:
|
||||
|
||||
* Add a link to the GitHub commit from which SolveSpace was built in the Help
|
||||
menu.
|
||||
* Make all points, vectors and normals shown in the Property Browser into
|
||||
active links. This makes them explorable and selectable.
|
||||
* Load 16bit PNG images correctly by re-scaling to 8bit.
|
||||
* Fixed hang when trying to display characters missing from the embedded font.
|
||||
* The main window vertical size can be as small as the toolbar.
|
||||
* Configurable "SafeHeight" parameter instead of the fixed 5mm for G-code export.
|
||||
* Add Spanish / Argentina translation.
|
||||
* Move "perspective factor", "lighting direction" and "explode distance" from
|
||||
the "configuration" screen to the "view" screen.
|
||||
* Add a "∆" suffix to groups which have "force to triangle mesh" ticked
|
||||
* Gray the group name in the text window for groups with suppressed solid model.
|
||||
* Added the ability to Link STL files.
|
||||
|
@ -30,6 +41,10 @@ MISC:
|
|||
|
||||
Performance:
|
||||
|
||||
* Speed up sketches with many constraints by roughly 8x by using the Eigen
|
||||
library in the solver. The maximum unknowns increased from 1024 to 2048.
|
||||
* Add a "suppress dof calculation" setting to groups - increases performance for
|
||||
complex sketches.
|
||||
* More changes to the ID list implementation.
|
||||
|
||||
3.0
|
||||
|
|
|
@ -8,10 +8,9 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
|
|||
" mkdir build && cd build && cmake ..")
|
||||
endif()
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
|
||||
list(APPEND CMAKE_MODULE_PATH
|
||||
"${CMAKE_SOURCE_DIR}/cmake/")
|
||||
|
||||
cmake_policy(SET CMP0048 OLD)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED YES)
|
||||
|
||||
|
@ -39,10 +38,10 @@ include(GetGitCommitHash)
|
|||
# and instead uncomment the following, adding the complete git hash of the checkout you are using:
|
||||
# set(GIT_COMMIT_HASH 0000000000000000000000000000000000000000)
|
||||
|
||||
set(solvespace_VERSION_MAJOR 3)
|
||||
set(solvespace_VERSION_MINOR 0)
|
||||
string(SUBSTRING "${GIT_COMMIT_HASH}" 0 8 solvespace_GIT_HASH)
|
||||
project(solvespace LANGUAGES C CXX ASM)
|
||||
project(solvespace
|
||||
VERSION 3.0
|
||||
LANGUAGES C CXX ASM)
|
||||
|
||||
set(ENABLE_GUI ON CACHE BOOL
|
||||
"Whether the graphical interface is enabled")
|
||||
|
@ -56,8 +55,11 @@ set(ENABLE_SANITIZERS OFF CACHE BOOL
|
|||
"Whether to enable Clang's AddressSanitizer and UndefinedBehaviorSanitizer")
|
||||
set(ENABLE_OPENMP OFF CACHE BOOL
|
||||
"Whether geometric operations will be parallelized using OpenMP")
|
||||
set(ENABLE_LTO OFF CACHE BOOL
|
||||
set(ENABLE_LTO OFF CACHE BOOL
|
||||
"Whether interprocedural (global) optimizations are enabled")
|
||||
option(FORCE_VENDORED_Eigen3
|
||||
"Whether we should use our bundled Eigen even in the presence of a system copy"
|
||||
OFF)
|
||||
|
||||
set(OPENGL 3 CACHE STRING "OpenGL version to use (one of: 1 3)")
|
||||
|
||||
|
@ -114,7 +116,12 @@ endif()
|
|||
if(ENABLE_OPENMP)
|
||||
find_package( OpenMP REQUIRED )
|
||||
if(OPENMP_FOUND)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
||||
add_library(slvs_openmp INTERFACE)
|
||||
target_compile_options(slvs_openmp INTERFACE ${OpenMP_CXX_FLAGS})
|
||||
target_link_libraries(slvs_openmp INTERFACE
|
||||
${OpenMP_CXX_LIBRARIES})
|
||||
target_include_directories(slvs_openmp INTERFACE SYSTEM
|
||||
${OpenMP_CXX_INCLUDE_DIRS})
|
||||
message(STATUS "found OpenMP, compiling with flags: " ${OpenMP_CXX_FLAGS} )
|
||||
endif()
|
||||
endif()
|
||||
|
@ -178,6 +185,9 @@ endif()
|
|||
message(STATUS "Using in-tree libdxfrw")
|
||||
add_subdirectory(extlib/libdxfrw)
|
||||
|
||||
message(STATUS "Using in-tree eigen")
|
||||
include_directories(extlib/eigen)
|
||||
|
||||
message(STATUS "Using in-tree mimalloc")
|
||||
set(MI_OVERRIDE OFF CACHE BOOL "")
|
||||
set(MI_BUILD_SHARED OFF CACHE BOOL "")
|
||||
|
@ -186,6 +196,18 @@ set(MI_BUILD_TESTS OFF CACHE BOOL "")
|
|||
add_subdirectory(extlib/mimalloc EXCLUDE_FROM_ALL)
|
||||
set(MIMALLOC_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/extlib/mimalloc/include)
|
||||
|
||||
if(NOT FORCE_VENDORED_Eigen3)
|
||||
find_package(Eigen3 CONFIG)
|
||||
endif()
|
||||
if(FORCE_VENDORED_Eigen3 OR NOT EIGEN3_FOUND)
|
||||
message(STATUS "Using in-tree Eigen")
|
||||
set(EIGEN3_FOUND YES)
|
||||
set(EIGEN3_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extlib/eigen)
|
||||
else()
|
||||
message(STATUS "Using system Eigen: ${EIGEN3_INCLUDE_DIRS}")
|
||||
endif()
|
||||
|
||||
|
||||
if(WIN32 OR APPLE)
|
||||
# On Win32 and macOS we use vendored packages, since there is little to no benefit
|
||||
# to trying to find system versions. In particular, trying to link to libraries from
|
||||
|
@ -281,7 +303,6 @@ if(ENABLE_GUI)
|
|||
elseif(APPLE)
|
||||
find_package(OpenGL REQUIRED)
|
||||
find_library(APPKIT_LIBRARY AppKit REQUIRED)
|
||||
set(util_LIBRARIES ${APPKIT_LIBRARY})
|
||||
else()
|
||||
find_package(OpenGL REQUIRED)
|
||||
find_package(SpaceWare)
|
||||
|
|
30
README.md
30
README.md
|
@ -25,9 +25,9 @@ IRC channel [#solvespace at web.libera.chat][ssirc].
|
|||
|
||||
## Installation
|
||||
|
||||
### Via official binary packages
|
||||
### Via Official Packages
|
||||
|
||||
_Official_ release binary packages for macOS (>=10.6 64-bit) and Windows
|
||||
_Official_ release packages for macOS (>=10.6 64-bit) and Windows
|
||||
(>=Vista 32-bit) are available via [GitHub releases][rel]. These packages are
|
||||
automatically built by the SolveSpace maintainers for each stable release.
|
||||
|
||||
|
@ -53,15 +53,6 @@ snap install solvespace
|
|||
snap install solvespace --edge
|
||||
```
|
||||
|
||||
### Via third-party binary packages
|
||||
|
||||
_Third-party_ nightly binary packages for Debian and Ubuntu are available via
|
||||
[notesalexp.org][notesalexp]. These packages are automatically built from
|
||||
non-released source code. The SolveSpace maintainers do not control the contents
|
||||
of these packages and cannot guarantee their functionality.
|
||||
|
||||
[notesalexp]: https://notesalexp.org/packages/en/source/solvespace/
|
||||
|
||||
### Via automated edge builds
|
||||
|
||||
> :warning: **Edge builds might be unstable or contain severe bugs!**
|
||||
|
@ -77,6 +68,15 @@ from the following links:
|
|||
Extract the downloaded archive and install or execute the contained file as is
|
||||
appropriate for your platform.
|
||||
|
||||
### Via third-party packages
|
||||
|
||||
_Third-party_ nightly binary packages for Debian and Ubuntu are available via
|
||||
[notesalexp.org][notesalexp]. These packages are automatically built from
|
||||
non-released source code. The SolveSpace maintainers do not control the contents
|
||||
of these packages and cannot guarantee their functionality.
|
||||
|
||||
[notesalexp]: https://notesalexp.org/packages/en/source/solvespace/
|
||||
|
||||
### Via source code
|
||||
|
||||
See below.
|
||||
|
@ -111,7 +111,7 @@ Before building, check out the project and the necessary submodules:
|
|||
```sh
|
||||
git clone https://github.com/solvespace/solvespace
|
||||
cd solvespace
|
||||
git submodule update --init extlib/libdxfrw extlib/mimalloc
|
||||
git submodule update --init extlib/libdxfrw extlib/mimalloc extlib/eigen
|
||||
```
|
||||
|
||||
After that, build SolveSpace as following:
|
||||
|
@ -171,11 +171,11 @@ Space Navigator support will not be available.
|
|||
|
||||
## Building on macOS
|
||||
|
||||
You will need git, XCode tools and CMake. Git and CMake can be installed
|
||||
You will need git, XCode tools, CMake and libomp. Git, CMake and libomp can be installed
|
||||
via [Homebrew][]:
|
||||
|
||||
```sh
|
||||
brew install git cmake
|
||||
brew install git cmake libomp
|
||||
```
|
||||
|
||||
XCode has to be installed via AppStore or [the Apple website][appledeveloper];
|
||||
|
@ -230,7 +230,7 @@ Before building, check out the project and the necessary submodules:
|
|||
```sh
|
||||
git clone https://github.com/solvespace/solvespace
|
||||
cd solvespace
|
||||
git submodule update --init extlib/libdxfrw extlib/mimalloc
|
||||
git submodule update --init extlib/libdxfrw extlib/mimalloc extlib/eigen
|
||||
```
|
||||
|
||||
After that, build SolveSpace as following:
|
||||
|
|
|
@ -16,7 +16,7 @@ if(UNIX)
|
|||
|
||||
# Support the REQUIRED and QUIET arguments, and set SPACEWARE_FOUND if found.
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SPACEWARE DEFAULT_MSG
|
||||
find_package_handle_standard_args(SpaceWare DEFAULT_MSG
|
||||
SPACEWARE_LIBRARY SPACEWARE_INCLUDE_DIR)
|
||||
|
||||
if(SPACEWARE_FOUND)
|
||||
|
|
|
@ -15,11 +15,11 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}~${solvespace_GIT_HASH}</string>
|
||||
<string>${PROJECT_VERSION}~${solvespace_GIT_HASH}</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}</string>
|
||||
<string>${PROJECT_VERSION}</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>© 2008-2016 Jonathan Westhues and other authors</string>
|
||||
<string>© 2008-2022 Jonathan Westhues and other authors</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
<key>NSMainNibFile</key>
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 3147391d946bb4b6c68edd901f2add6ac1f31f8c
|
|
@ -1,5 +1,5 @@
|
|||
name: solvespace
|
||||
base: core18
|
||||
base: core20
|
||||
summary: Parametric 2d/3d CAD
|
||||
adopt-info: solvespace
|
||||
description: |
|
||||
|
@ -14,6 +14,7 @@ description: |
|
|||
|
||||
confinement: strict
|
||||
license: GPL-3.0
|
||||
compression: lzo
|
||||
|
||||
layout:
|
||||
/usr/share/solvespace:
|
||||
|
@ -23,13 +24,11 @@ apps:
|
|||
solvespace:
|
||||
command: usr/bin/solvespace
|
||||
desktop: solvespace.desktop
|
||||
extensions: [gnome-3-34]
|
||||
extensions: [gnome-3-38]
|
||||
plugs: [opengl, unity7, home, removable-media, gsettings, network]
|
||||
environment:
|
||||
__EGL_VENDOR_LIBRARY_DIRS: $SNAP/gnome-platform/usr/share/glvnd/egl_vendor.d:$SNAP/usr/share/glvnd/egl_vendor.d
|
||||
cli:
|
||||
command: usr/bin/solvespace-cli
|
||||
extensions: [gnome-3-34]
|
||||
extensions: [gnome-3-38]
|
||||
plugs: [home, removable-media, network]
|
||||
|
||||
parts:
|
||||
|
@ -39,23 +38,28 @@ parts:
|
|||
source-type: local
|
||||
override-pull: |
|
||||
snapcraftctl pull
|
||||
version_major=$(grep "solvespace_VERSION_MAJOR" CMakeLists.txt | tr -d "()" | cut -d" " -f2)
|
||||
version_minor=$(grep "solvespace_VERSION_MINOR" CMakeLists.txt | tr -d "()" | cut -d" " -f2)
|
||||
version="$version_major.$version_minor~$(git rev-parse --short=8 HEAD)"
|
||||
git submodule update --init extlib/libdxfrw extlib/mimalloc extlib/eigen
|
||||
override-build: |
|
||||
snapcraftctl build
|
||||
project_version=$(grep CMAKE_PROJECT_VERSION:STATIC CMakeCache.txt | cut -d "=" -f2)
|
||||
cd $SNAPCRAFT_PART_SRC
|
||||
version="$project_version~$(git rev-parse --short=8 HEAD)"
|
||||
snapcraftctl set-version "$version"
|
||||
git describe --exact-match HEAD && grade="stable" || grade="devel"
|
||||
snapcraftctl set-grade "$grade"
|
||||
git submodule update --init extlib/libdxfrw extlib/mimalloc
|
||||
configflags:
|
||||
cmake-parameters:
|
||||
- -DCMAKE_INSTALL_PREFIX=/usr
|
||||
- -DCMAKE_BUILD_TYPE=Release
|
||||
- -DENABLE_TESTS=OFF
|
||||
- -DSNAP=ON
|
||||
- -DENABLE_OPENMP=ON
|
||||
- -DENABLE_LTO=ON
|
||||
build-snaps:
|
||||
- gnome-3-38-2004-sdk
|
||||
build-packages:
|
||||
- zlib1g-dev
|
||||
- libpng-dev
|
||||
- libcairo2-dev
|
||||
- libfreetype6-dev
|
||||
- libjson-c-dev
|
||||
- libgl-dev
|
||||
|
@ -70,11 +74,14 @@ parts:
|
|||
cleanup:
|
||||
after: [solvespace]
|
||||
plugin: nil
|
||||
build-snaps: [core18, gnome-3-34-1804]
|
||||
build-snaps: [gnome-3-38-2004]
|
||||
override-prime: |
|
||||
# Remove all files from snap that are already included in the base snap or in
|
||||
# any connected content snaps
|
||||
set -eux
|
||||
for snap in "core18" "gnome-3-34-1804"; do # List all content-snaps and base snaps you're using here
|
||||
cd "/snap/$snap/current" && find . -type f,l -exec rm -f "$SNAPCRAFT_PRIME/{}" \;
|
||||
for snap in "gnome-3-38-2004"; do # List all content-snaps you're using here
|
||||
cd "/snap/$snap/current" && find . -type f,l -exec rm -f "$SNAPCRAFT_PRIME/{}" "$SNAPCRAFT_PRIME/usr/{}" \;
|
||||
done
|
||||
for cruft in bug lintian man; do
|
||||
rm -rf $SNAPCRAFT_PRIME/usr/share/$cruft
|
||||
done
|
||||
find $SNAPCRAFT_PRIME/usr/share/doc/ -type f -not -name 'copyright' -delete
|
||||
find $SNAPCRAFT_PRIME/usr/share -type d -empty -delete
|
||||
|
|
|
@ -6,7 +6,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: SolveSpace 3.0\n"
|
||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\n"
|
||||
"POT-Creation-Date: 2021-09-26 16:25-0400\n"
|
||||
"POT-Creation-Date: 2022-02-01 16:24+0200\n"
|
||||
"PO-Revision-Date: 2018-07-19 06:55+0000\n"
|
||||
"Last-Translator: Reini Urban <rurban@cpan.org>\n"
|
||||
"Language-Team: none\n"
|
||||
|
@ -36,7 +36,7 @@ msgstr "Zwischenablage ist leer; es gibt nichts einzufügen."
|
|||
msgid "Number of copies to paste must be at least one."
|
||||
msgstr "Die Anzahl der einzufügenden Kopien muss mind. 1 sein."
|
||||
|
||||
#: clipboard.cpp:389 textscreens.cpp:827
|
||||
#: clipboard.cpp:389 textscreens.cpp:833
|
||||
msgid "Scale cannot be zero."
|
||||
msgstr "Maßstab kann nicht Null sein."
|
||||
|
||||
|
@ -66,15 +66,15 @@ msgstr ""
|
|||
msgid "No workplane active."
|
||||
msgstr "Es ist keine Arbeitsebene aktiv."
|
||||
|
||||
#: confscreen.cpp:376
|
||||
#: confscreen.cpp:381
|
||||
msgid "Bad format: specify coordinates as x, y, z"
|
||||
msgstr "Ungültiges Format: geben Sie Koordinaten als x, y, z an"
|
||||
|
||||
#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858
|
||||
#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:864
|
||||
msgid "Bad format: specify color as r, g, b"
|
||||
msgstr "Ungültiges Format: geben Sie Farben als r, g, b an"
|
||||
|
||||
#: confscreen.cpp:412
|
||||
#: confscreen.cpp:417
|
||||
msgid ""
|
||||
"The perspective factor will have no effect until you enable View -> Use "
|
||||
"Perspective Projection."
|
||||
|
@ -82,25 +82,25 @@ msgstr ""
|
|||
"Der Perspektivfaktor wird sich nicht auswirken, bis Sie Ansicht -> "
|
||||
"Perspektive Projektion aktivieren."
|
||||
|
||||
#: confscreen.cpp:430 confscreen.cpp:440
|
||||
#: confscreen.cpp:435 confscreen.cpp:445
|
||||
#, c-format
|
||||
msgid "Specify between 0 and %d digits after the decimal."
|
||||
msgstr "Geben Sie 0 bis %d Ziffern nach dem Dezimalzeichen an."
|
||||
|
||||
#: confscreen.cpp:452
|
||||
#: confscreen.cpp:457
|
||||
msgid "Export scale must not be zero!"
|
||||
msgstr "Der Exportmaßstab darf nicht Null sein!"
|
||||
|
||||
#: confscreen.cpp:464
|
||||
#: confscreen.cpp:469
|
||||
msgid "Cutter radius offset must not be negative!"
|
||||
msgstr "Der Werkzeugradialabstand darf nicht negativ sein!"
|
||||
|
||||
#: confscreen.cpp:518
|
||||
#: confscreen.cpp:528
|
||||
msgid "Bad value: autosave interval should be positive"
|
||||
msgstr ""
|
||||
"Ungültiger Wert: Interval für automatisches Speichern muss positiv sein"
|
||||
|
||||
#: confscreen.cpp:521
|
||||
#: confscreen.cpp:531
|
||||
msgid "Bad format: specify interval in integral minutes"
|
||||
msgstr "Ungültiges Format: geben Sie das Interval in ganzen Minuten an"
|
||||
|
||||
|
@ -684,7 +684,7 @@ msgctxt "button"
|
|||
msgid "&No"
|
||||
msgstr "&Nein"
|
||||
|
||||
#: file.cpp:877 solvespace.cpp:610
|
||||
#: file.cpp:877 solvespace.cpp:611
|
||||
msgctxt "button"
|
||||
msgid "&Cancel"
|
||||
msgstr "&Abbrechen"
|
||||
|
@ -1137,25 +1137,29 @@ msgstr "Sprache"
|
|||
msgid "&Website / Manual"
|
||||
msgstr "&Website / Anleitung"
|
||||
|
||||
#: graphicswin.cpp:187
|
||||
#: graphicswin.cpp:186
|
||||
msgid "&Go to GitHub commit"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:188
|
||||
msgid "&About"
|
||||
msgstr "Über"
|
||||
|
||||
#: graphicswin.cpp:361
|
||||
#: graphicswin.cpp:362
|
||||
msgid "(no recent files)"
|
||||
msgstr "(keine vorhergehenden Dateien)"
|
||||
|
||||
#: graphicswin.cpp:369
|
||||
#: graphicswin.cpp:370
|
||||
#, c-format
|
||||
msgid "File '%s' does not exist."
|
||||
msgstr "Datei '%s' existiert nicht."
|
||||
|
||||
#: graphicswin.cpp:736
|
||||
#: graphicswin.cpp:737
|
||||
msgid "No workplane is active, so the grid will not appear."
|
||||
msgstr ""
|
||||
"Das Raster wird nicht angezeigt, weil keine Arbeitsebene ausgewählt ist."
|
||||
|
||||
#: graphicswin.cpp:751
|
||||
#: graphicswin.cpp:752
|
||||
msgid ""
|
||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||
"projection.\n"
|
||||
|
@ -1169,20 +1173,20 @@ msgstr ""
|
|||
"Ändern Sie den Faktor für die Perspektivprojektion in der "
|
||||
"Konfigurationsmaske. Ein typischer Wert ist ca. 0,3."
|
||||
|
||||
#: graphicswin.cpp:836
|
||||
#: graphicswin.cpp:837
|
||||
msgid ""
|
||||
"Select a point; this point will become the center of the view on screen."
|
||||
msgstr ""
|
||||
"Wählen Sie einen Punkt aus; dieser Punkt wird im Mittelpunkt der "
|
||||
"Bildschirmansicht sein."
|
||||
|
||||
#: graphicswin.cpp:1136
|
||||
#: graphicswin.cpp:1137
|
||||
msgid "No additional entities share endpoints with the selected entities."
|
||||
msgstr ""
|
||||
"Die ausgewählten Objekte teilen keine gemeinsamen Endpunkte mit anderen "
|
||||
"Objekten."
|
||||
|
||||
#: graphicswin.cpp:1154
|
||||
#: graphicswin.cpp:1155
|
||||
msgid ""
|
||||
"To use this command, select a point or other entity from an linked part, or "
|
||||
"make a link group the active group."
|
||||
|
@ -1190,7 +1194,7 @@ msgstr ""
|
|||
"Für diesen Befehl wählen Sie einen Punkt oder ein anderes Objekt von einem "
|
||||
"verknüpften Teil aus, oder aktivieren Sie eine verknüpfte Gruppe."
|
||||
|
||||
#: graphicswin.cpp:1177
|
||||
#: graphicswin.cpp:1178
|
||||
msgid ""
|
||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||
"to define the plane for the snap grid."
|
||||
|
@ -1199,7 +1203,7 @@ msgstr ""
|
|||
"(mit Skizze -> In Arbeitsebene), um die Ebene für das Gitterraster zu "
|
||||
"definieren."
|
||||
|
||||
#: graphicswin.cpp:1184
|
||||
#: graphicswin.cpp:1185
|
||||
msgid ""
|
||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||
"with a label. To snap a line, select its endpoints."
|
||||
|
@ -1208,13 +1212,13 @@ msgstr ""
|
|||
"für Punkte, Textkommentare, oder Einschränkungen mit einer Bezeichnung. Um "
|
||||
"eine Linie auf das Raster auszurichten, wählen Sie deren Endpunkte aus."
|
||||
|
||||
#: graphicswin.cpp:1269
|
||||
#: graphicswin.cpp:1270
|
||||
msgid "No workplane selected. Activating default workplane for this group."
|
||||
msgstr ""
|
||||
"Es wurde keine Arbeitsebene ausgewählt. Die Standard-Arbeitsebene für diese "
|
||||
"Gruppe wird aktiviert."
|
||||
|
||||
#: graphicswin.cpp:1272
|
||||
#: graphicswin.cpp:1273
|
||||
msgid ""
|
||||
"No workplane is selected, and the active group does not have a default "
|
||||
"workplane. Try selecting a workplane, or activating a sketch-in-new-"
|
||||
|
@ -1224,7 +1228,7 @@ msgstr ""
|
|||
"standardmäßige Arbeitsebene. Wählen Sie eine Arbeitsebene aus, oder "
|
||||
"erstellen Sie eine Gruppe in einer neuen Arbeitsebene."
|
||||
|
||||
#: graphicswin.cpp:1293
|
||||
#: graphicswin.cpp:1294
|
||||
msgid ""
|
||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||
"nothing to set up arc parameters."
|
||||
|
@ -1232,48 +1236,48 @@ msgstr ""
|
|||
"Ungültige Auswahl für Bogentangente an Punkt. Wählen Sie einen einzelnen "
|
||||
"Punkt. Um die Bogenparameter anzugeben, wählen Sie nichts aus."
|
||||
|
||||
#: graphicswin.cpp:1304
|
||||
#: graphicswin.cpp:1305
|
||||
msgid "click point on arc (draws anti-clockwise)"
|
||||
msgstr ""
|
||||
"Erstellen Sie einen Punkt auf dem Bogen (zeichnet im Gegenuhrzeigersinn)"
|
||||
|
||||
#: graphicswin.cpp:1305
|
||||
#: graphicswin.cpp:1306
|
||||
msgid "click to place datum point"
|
||||
msgstr "Klicken Sie, um einen Bezugspunkt zu platzieren"
|
||||
|
||||
#: graphicswin.cpp:1306
|
||||
#: graphicswin.cpp:1307
|
||||
msgid "click first point of line segment"
|
||||
msgstr "Klicken Sie auf den ersten Punkt des Liniensegments"
|
||||
|
||||
#: graphicswin.cpp:1308
|
||||
#: graphicswin.cpp:1309
|
||||
msgid "click first point of construction line segment"
|
||||
msgstr "Klicken Sie auf den ersten Punkt der Konstruktionslinie"
|
||||
|
||||
#: graphicswin.cpp:1309
|
||||
#: graphicswin.cpp:1310
|
||||
msgid "click first point of cubic segment"
|
||||
msgstr "Klicken Sie auf den ersten Punkt der kubischen Linie"
|
||||
|
||||
#: graphicswin.cpp:1310
|
||||
#: graphicswin.cpp:1311
|
||||
msgid "click center of circle"
|
||||
msgstr "Klicken Sie auf den Kreismittelpunkt"
|
||||
|
||||
#: graphicswin.cpp:1311
|
||||
#: graphicswin.cpp:1312
|
||||
msgid "click origin of workplane"
|
||||
msgstr "Klicken Sie auf den Ursprungspunkt der Arbeitsebene"
|
||||
|
||||
#: graphicswin.cpp:1312
|
||||
#: graphicswin.cpp:1313
|
||||
msgid "click one corner of rectangle"
|
||||
msgstr "Klicken Sie auf eine Ecke des Rechtecks"
|
||||
|
||||
#: graphicswin.cpp:1313
|
||||
#: graphicswin.cpp:1314
|
||||
msgid "click top left of text"
|
||||
msgstr "Klicken Sie auf die obere linke Ecke des Texts"
|
||||
|
||||
#: graphicswin.cpp:1319
|
||||
#: graphicswin.cpp:1320
|
||||
msgid "click top left of image"
|
||||
msgstr "Klicken Sie auf die obere linke Ecke des Bilds"
|
||||
|
||||
#: graphicswin.cpp:1345
|
||||
#: graphicswin.cpp:1346
|
||||
msgid ""
|
||||
"No entities are selected. Select entities before trying to toggle their "
|
||||
"construction state."
|
||||
|
@ -1428,6 +1432,10 @@ msgstr "Kontur überschneidet sich selbst!"
|
|||
msgid "zero-length edge!"
|
||||
msgstr "Kante mit Länge Null!"
|
||||
|
||||
#: importmesh.cpp:136
|
||||
msgid "Text-formated STL files are not currently supported"
|
||||
msgstr ""
|
||||
|
||||
#: modify.cpp:252
|
||||
msgid "Must be sketching in workplane to create tangent arc."
|
||||
msgstr "Eine Bogentangente kann nur in einer Arbeitsebene erstellt werden."
|
||||
|
@ -1630,7 +1638,7 @@ msgstr ""
|
|||
"Das Bild kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine "
|
||||
"Arbeitsebene mit \"Skizze -> In Arbeitsebene\"."
|
||||
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:553
|
||||
msgctxt "file-type"
|
||||
msgid "SolveSpace models"
|
||||
msgstr "SolveSpace-Modelle"
|
||||
|
@ -1725,105 +1733,105 @@ msgctxt "file-type"
|
|||
msgid "Comma-separated values"
|
||||
msgstr "Werte durch Komma getrennt (CSV)"
|
||||
|
||||
#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641
|
||||
#: platform/guigtk.cpp:1382 platform/guimac.mm:1509 platform/guiwin.cpp:1641
|
||||
msgid "untitled"
|
||||
msgstr "unbenannt"
|
||||
|
||||
#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445
|
||||
#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1467
|
||||
#: platform/guiwin.cpp:1639
|
||||
msgctxt "title"
|
||||
msgid "Save File"
|
||||
msgstr "Datei speichern"
|
||||
|
||||
#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428
|
||||
#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1450
|
||||
#: platform/guiwin.cpp:1645
|
||||
msgctxt "title"
|
||||
msgid "Open File"
|
||||
msgstr "Datei öffnen"
|
||||
|
||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
||||
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||
msgctxt "button"
|
||||
msgid "_Cancel"
|
||||
msgstr "_Abbrechen"
|
||||
|
||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
||||
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||
msgctxt "button"
|
||||
msgid "_Save"
|
||||
msgstr "_Speichern"
|
||||
|
||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
||||
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||
msgctxt "button"
|
||||
msgid "_Open"
|
||||
msgstr "_Öffnen"
|
||||
|
||||
#: solvespace.cpp:170
|
||||
#: solvespace.cpp:171
|
||||
msgctxt "title"
|
||||
msgid "Autosave Available"
|
||||
msgstr "Automatische Sicherungsdatei verfügbar"
|
||||
|
||||
#: solvespace.cpp:171
|
||||
#: solvespace.cpp:172
|
||||
msgctxt "dialog"
|
||||
msgid "An autosave file is available for this sketch."
|
||||
msgstr "Eine automatische Sicherung ist für diese Skizze verfügbar."
|
||||
|
||||
#: solvespace.cpp:172
|
||||
#: solvespace.cpp:173
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to load the autosave file instead?"
|
||||
msgstr "Wollen Sie die automatische Sicherungsdatei stattdessen laden?"
|
||||
|
||||
#: solvespace.cpp:173
|
||||
#: solvespace.cpp:174
|
||||
msgctxt "button"
|
||||
msgid "&Load autosave"
|
||||
msgstr "AutoDatei &öffnen"
|
||||
|
||||
#: solvespace.cpp:175
|
||||
#: solvespace.cpp:176
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Load"
|
||||
msgstr "&Nicht laden"
|
||||
|
||||
#: solvespace.cpp:598
|
||||
#: solvespace.cpp:599
|
||||
msgctxt "title"
|
||||
msgid "Modified File"
|
||||
msgstr "Geänderte Datei"
|
||||
|
||||
#: solvespace.cpp:600
|
||||
#: solvespace.cpp:601
|
||||
#, c-format
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||
msgstr "Wollen Sie die Änderungen an der Skizze “%s” sichern?"
|
||||
|
||||
#: solvespace.cpp:603
|
||||
#: solvespace.cpp:604
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the new sketch?"
|
||||
msgstr "Wollen Sie die Änderungen an der Skizze sichern?"
|
||||
|
||||
#: solvespace.cpp:606
|
||||
#: solvespace.cpp:607
|
||||
msgctxt "dialog"
|
||||
msgid "Your changes will be lost if you don't save them."
|
||||
msgstr "Ihre Änderungen werden verworfen, wenn sie nicht abgespeichert werden."
|
||||
|
||||
#: solvespace.cpp:607
|
||||
#: solvespace.cpp:608
|
||||
msgctxt "button"
|
||||
msgid "&Save"
|
||||
msgstr "&Sichern"
|
||||
|
||||
#: solvespace.cpp:609
|
||||
#: solvespace.cpp:610
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Save"
|
||||
msgstr "&Verwerfen"
|
||||
|
||||
# solvespace.cpp:557
|
||||
#: solvespace.cpp:630
|
||||
#: solvespace.cpp:631
|
||||
msgctxt "title"
|
||||
msgid "(new sketch)"
|
||||
msgstr "(Neue Skizze)"
|
||||
|
||||
#: solvespace.cpp:637
|
||||
#: solvespace.cpp:638
|
||||
msgctxt "title"
|
||||
msgid "Property Browser"
|
||||
msgstr "Attribut-Browser"
|
||||
|
||||
#: solvespace.cpp:699
|
||||
#: solvespace.cpp:700
|
||||
msgid ""
|
||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
||||
"is probably not what you want; hide them by clicking the link at the top of "
|
||||
|
@ -1833,7 +1841,7 @@ msgstr ""
|
|||
"wahrscheinlich nicht. Verstecken Sie sie in dem auf den Link oben im "
|
||||
"Textfenster klicken."
|
||||
|
||||
#: solvespace.cpp:771
|
||||
#: solvespace.cpp:772
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||
|
@ -1842,23 +1850,23 @@ msgstr ""
|
|||
"Kann den Dateityp der Datei '%s' nicht auf Grund der Dateierweiterung "
|
||||
"erkennen. Versuchen Sie .dxf oder .dwg."
|
||||
|
||||
#: solvespace.cpp:823
|
||||
#: solvespace.cpp:824
|
||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||
msgstr ""
|
||||
"Die Einschränkung muss einen Namen haben, und darf keine "
|
||||
"Referenzdimensionierung sein."
|
||||
|
||||
#: solvespace.cpp:827
|
||||
#: solvespace.cpp:828
|
||||
msgid "Bad selection for step dimension; select a constraint."
|
||||
msgstr ""
|
||||
"Falsche Auswahl für die Schrittdimensionierung. Wählen Sie eine "
|
||||
"Einschränkung."
|
||||
|
||||
#: solvespace.cpp:851
|
||||
#: solvespace.cpp:852
|
||||
msgid "The assembly does not interfere, good."
|
||||
msgstr "Der Zusammenbau funktioniert, gut."
|
||||
|
||||
#: solvespace.cpp:867
|
||||
#: solvespace.cpp:868
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The volume of the solid model is:\n"
|
||||
|
@ -1869,7 +1877,7 @@ msgstr ""
|
|||
"\n"
|
||||
" %s"
|
||||
|
||||
#: solvespace.cpp:876
|
||||
#: solvespace.cpp:877
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1882,7 +1890,7 @@ msgstr ""
|
|||
"\n"
|
||||
" %s"
|
||||
|
||||
#: solvespace.cpp:881
|
||||
#: solvespace.cpp:882
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
|
@ -1894,7 +1902,7 @@ msgstr ""
|
|||
"Gekrümmte Flächen wurden als Dreiecksnetz angenähert.\n"
|
||||
"Das verursacht Fehler, typischerweise um 1%."
|
||||
|
||||
#: solvespace.cpp:896
|
||||
#: solvespace.cpp:897
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The surface area of the selected faces is:\n"
|
||||
|
@ -1911,7 +1919,7 @@ msgstr ""
|
|||
"Kurven wurden als gerade Linienstücke angenähert.\n"
|
||||
"Das verursacht Fehler, typischerweise um 1%%."
|
||||
|
||||
#: solvespace.cpp:905
|
||||
#: solvespace.cpp:906
|
||||
msgid ""
|
||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||
"not coplanar, or self-intersecting."
|
||||
|
@ -1919,7 +1927,7 @@ msgstr ""
|
|||
"Diese Gruppe beinhaltet keine korrekt geschlossene 2D Fläche. Sie ist offen, "
|
||||
"nicht koplanar, oder überschneidet sich selbst."
|
||||
|
||||
#: solvespace.cpp:917
|
||||
#: solvespace.cpp:918
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The area of the region sketched in this group is:\n"
|
||||
|
@ -1936,7 +1944,7 @@ msgstr ""
|
|||
"Kurven wurden als gerade Linienstücke angenähert.\n"
|
||||
"Das verursacht Fehler, typischerweise um 1%%."
|
||||
|
||||
#: solvespace.cpp:937
|
||||
#: solvespace.cpp:938
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The total length of the selected entities is:\n"
|
||||
|
@ -1953,36 +1961,36 @@ msgstr ""
|
|||
"Kurven wurden als gerade Linienstücke angenähert.\n"
|
||||
"Das verursacht Fehler, typischerweise um 1%%."
|
||||
|
||||
#: solvespace.cpp:943
|
||||
#: solvespace.cpp:944
|
||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||
msgstr "Falsche Auswahl für Umfang. Wähle Liniensegmente, Bögen und Kurven."
|
||||
|
||||
#: solvespace.cpp:959
|
||||
#: solvespace.cpp:960
|
||||
msgid "Bad selection for trace; select a single point."
|
||||
msgstr "Falsche Auswahl für Punkt nachzeichnen. Wähle einen einzelnen Punkt."
|
||||
|
||||
#: solvespace.cpp:986
|
||||
#: solvespace.cpp:987
|
||||
#, c-format
|
||||
msgid "Couldn't write to '%s'"
|
||||
msgstr "Konnte '%s' nicht schreiben"
|
||||
|
||||
#: solvespace.cpp:1016
|
||||
#: solvespace.cpp:1017
|
||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||
msgstr "Das Netz schneidet sich selbst: Falsch, ungültig."
|
||||
|
||||
#: solvespace.cpp:1017
|
||||
#: solvespace.cpp:1018
|
||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||
msgstr "Das Netz schneidet sich nicht: Gut, gültig."
|
||||
|
||||
#: solvespace.cpp:1019
|
||||
#: solvespace.cpp:1020
|
||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||
msgstr "Das Netz hat lose Kanten: Falsch, ungültig."
|
||||
|
||||
#: solvespace.cpp:1020
|
||||
#: solvespace.cpp:1021
|
||||
msgid "The mesh is watertight (okay, valid)."
|
||||
msgstr "Das Netz hat keine lose Kanten: Gut, gültig."
|
||||
|
||||
#: solvespace.cpp:1023
|
||||
#: solvespace.cpp:1024
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1993,7 +2001,7 @@ msgstr ""
|
|||
"\n"
|
||||
"Das Modell hat %d Dreiecke, von %d Flächen."
|
||||
|
||||
#: solvespace.cpp:1027
|
||||
#: solvespace.cpp:1028
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -2008,7 +2016,7 @@ msgstr ""
|
|||
"\n"
|
||||
"Keine problematischen Kanten, gut.%s"
|
||||
|
||||
#: solvespace.cpp:1030
|
||||
#: solvespace.cpp:1031
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -2023,7 +2031,7 @@ msgstr ""
|
|||
"\n"
|
||||
"%d problematische Kanten, schlecht.%s"
|
||||
|
||||
#: solvespace.cpp:1043
|
||||
#: solvespace.cpp:1044
|
||||
#, c-format
|
||||
msgid ""
|
||||
"This is SolveSpace version %s.\n"
|
||||
|
@ -2066,23 +2074,23 @@ msgstr ""
|
|||
msgid "Style name cannot be empty"
|
||||
msgstr "Name des Linientyps kann nicht leer sein."
|
||||
|
||||
#: textscreens.cpp:785
|
||||
#: textscreens.cpp:791
|
||||
msgid "Can't repeat fewer than 1 time."
|
||||
msgstr "Nicht weniger als 1 Wiederholung möglich."
|
||||
|
||||
#: textscreens.cpp:789
|
||||
#: textscreens.cpp:795
|
||||
msgid "Can't repeat more than 999 times."
|
||||
msgstr "Nicht mehr als 999 Wiederholungen möglich."
|
||||
|
||||
#: textscreens.cpp:814
|
||||
#: textscreens.cpp:820
|
||||
msgid "Group name cannot be empty"
|
||||
msgstr "Der Name der Gruppe darf nicht leer sein."
|
||||
|
||||
#: textscreens.cpp:866
|
||||
#: textscreens.cpp:872
|
||||
msgid "Opacity must be between zero and one."
|
||||
msgstr "Durchsichtigkeit muss zwischen Null und Eins sein."
|
||||
|
||||
#: textscreens.cpp:901
|
||||
#: textscreens.cpp:907
|
||||
msgid "Radius cannot be zero or negative."
|
||||
msgstr "Radius darf nicht null oder negativ sein."
|
||||
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
# Copyright (C) 2017 the SolveSpace authors
|
||||
# This file is distributed under the same license as the SolveSpace package.
|
||||
# Automatically generated, 2017.
|
||||
#
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SolveSpace 3.0\n"
|
||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\n"
|
||||
"POT-Creation-Date: 2021-09-26 16:25-0400\n"
|
||||
"POT-Creation-Date: 2022-02-01 16:24+0200\n"
|
||||
"PO-Revision-Date: 2017-01-05 10:30+0000\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
|
@ -35,7 +35,7 @@ msgstr "Clipboard is empty; nothing to paste."
|
|||
msgid "Number of copies to paste must be at least one."
|
||||
msgstr "Number of copies to paste must be at least one."
|
||||
|
||||
#: clipboard.cpp:389 textscreens.cpp:827
|
||||
#: clipboard.cpp:389 textscreens.cpp:833
|
||||
msgid "Scale cannot be zero."
|
||||
msgstr "Scale cannot be zero."
|
||||
|
||||
|
@ -63,15 +63,15 @@ msgstr "Too many items to paste; split this into smaller pastes."
|
|||
msgid "No workplane active."
|
||||
msgstr "No workplane active."
|
||||
|
||||
#: confscreen.cpp:376
|
||||
#: confscreen.cpp:381
|
||||
msgid "Bad format: specify coordinates as x, y, z"
|
||||
msgstr "Bad format: specify coordinates as x, y, z"
|
||||
|
||||
#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858
|
||||
#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:864
|
||||
msgid "Bad format: specify color as r, g, b"
|
||||
msgstr "Bad format: specify color as r, g, b"
|
||||
|
||||
#: confscreen.cpp:412
|
||||
#: confscreen.cpp:417
|
||||
msgid ""
|
||||
"The perspective factor will have no effect until you enable View -> Use "
|
||||
"Perspective Projection."
|
||||
|
@ -79,24 +79,24 @@ msgstr ""
|
|||
"The perspective factor will have no effect until you enable View -> Use "
|
||||
"Perspective Projection."
|
||||
|
||||
#: confscreen.cpp:430 confscreen.cpp:440
|
||||
#: confscreen.cpp:435 confscreen.cpp:445
|
||||
#, c-format
|
||||
msgid "Specify between 0 and %d digits after the decimal."
|
||||
msgstr "Specify between 0 and %d digits after the decimal."
|
||||
|
||||
#: confscreen.cpp:452
|
||||
#: confscreen.cpp:457
|
||||
msgid "Export scale must not be zero!"
|
||||
msgstr "Export scale must not be zero!"
|
||||
|
||||
#: confscreen.cpp:464
|
||||
#: confscreen.cpp:469
|
||||
msgid "Cutter radius offset must not be negative!"
|
||||
msgstr "Cutter radius offset must not be negative!"
|
||||
|
||||
#: confscreen.cpp:518
|
||||
#: confscreen.cpp:528
|
||||
msgid "Bad value: autosave interval should be positive"
|
||||
msgstr "Bad value: autosave interval should be positive"
|
||||
|
||||
#: confscreen.cpp:521
|
||||
#: confscreen.cpp:531
|
||||
msgid "Bad format: specify interval in integral minutes"
|
||||
msgstr "Bad format: specify interval in integral minutes"
|
||||
|
||||
|
@ -677,7 +677,7 @@ msgctxt "button"
|
|||
msgid "&No"
|
||||
msgstr "&No"
|
||||
|
||||
#: file.cpp:877 solvespace.cpp:610
|
||||
#: file.cpp:877 solvespace.cpp:611
|
||||
msgctxt "button"
|
||||
msgid "&Cancel"
|
||||
msgstr "&Cancel"
|
||||
|
@ -1130,24 +1130,28 @@ msgstr "&Language"
|
|||
msgid "&Website / Manual"
|
||||
msgstr "&Website / Manual"
|
||||
|
||||
#: graphicswin.cpp:187
|
||||
#: graphicswin.cpp:186
|
||||
msgid "&Go to GitHub commit"
|
||||
msgstr "&Go to GitHub commit"
|
||||
|
||||
#: graphicswin.cpp:188
|
||||
msgid "&About"
|
||||
msgstr "&About"
|
||||
|
||||
#: graphicswin.cpp:361
|
||||
#: graphicswin.cpp:362
|
||||
msgid "(no recent files)"
|
||||
msgstr "(no recent files)"
|
||||
|
||||
#: graphicswin.cpp:369
|
||||
#: graphicswin.cpp:370
|
||||
#, c-format
|
||||
msgid "File '%s' does not exist."
|
||||
msgstr "File '%s' does not exist."
|
||||
|
||||
#: graphicswin.cpp:736
|
||||
#: graphicswin.cpp:737
|
||||
msgid "No workplane is active, so the grid will not appear."
|
||||
msgstr "No workplane is active, so the grid will not appear."
|
||||
|
||||
#: graphicswin.cpp:751
|
||||
#: graphicswin.cpp:752
|
||||
msgid ""
|
||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||
"projection.\n"
|
||||
|
@ -1161,17 +1165,17 @@ msgstr ""
|
|||
"For a perspective projection, modify the perspective factor in the "
|
||||
"configuration screen. A value around 0.3 is typical."
|
||||
|
||||
#: graphicswin.cpp:836
|
||||
#: graphicswin.cpp:837
|
||||
msgid ""
|
||||
"Select a point; this point will become the center of the view on screen."
|
||||
msgstr ""
|
||||
"Select a point; this point will become the center of the view on screen."
|
||||
|
||||
#: graphicswin.cpp:1136
|
||||
#: graphicswin.cpp:1137
|
||||
msgid "No additional entities share endpoints with the selected entities."
|
||||
msgstr "No additional entities share endpoints with the selected entities."
|
||||
|
||||
#: graphicswin.cpp:1154
|
||||
#: graphicswin.cpp:1155
|
||||
msgid ""
|
||||
"To use this command, select a point or other entity from an linked part, or "
|
||||
"make a link group the active group."
|
||||
|
@ -1179,7 +1183,7 @@ msgstr ""
|
|||
"To use this command, select a point or other entity from an linked part, or "
|
||||
"make a link group the active group."
|
||||
|
||||
#: graphicswin.cpp:1177
|
||||
#: graphicswin.cpp:1178
|
||||
msgid ""
|
||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||
"to define the plane for the snap grid."
|
||||
|
@ -1187,7 +1191,7 @@ msgstr ""
|
|||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||
"to define the plane for the snap grid."
|
||||
|
||||
#: graphicswin.cpp:1184
|
||||
#: graphicswin.cpp:1185
|
||||
msgid ""
|
||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||
"with a label. To snap a line, select its endpoints."
|
||||
|
@ -1195,11 +1199,11 @@ msgstr ""
|
|||
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||
"with a label. To snap a line, select its endpoints."
|
||||
|
||||
#: graphicswin.cpp:1269
|
||||
#: graphicswin.cpp:1270
|
||||
msgid "No workplane selected. Activating default workplane for this group."
|
||||
msgstr "No workplane selected. Activating default workplane for this group."
|
||||
|
||||
#: graphicswin.cpp:1272
|
||||
#: graphicswin.cpp:1273
|
||||
msgid ""
|
||||
"No workplane is selected, and the active group does not have a default "
|
||||
"workplane. Try selecting a workplane, or activating a sketch-in-new-"
|
||||
|
@ -1209,7 +1213,7 @@ msgstr ""
|
|||
"workplane. Try selecting a workplane, or activating a sketch-in-new-"
|
||||
"workplane group."
|
||||
|
||||
#: graphicswin.cpp:1293
|
||||
#: graphicswin.cpp:1294
|
||||
msgid ""
|
||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||
"nothing to set up arc parameters."
|
||||
|
@ -1217,47 +1221,47 @@ msgstr ""
|
|||
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||
"nothing to set up arc parameters."
|
||||
|
||||
#: graphicswin.cpp:1304
|
||||
#: graphicswin.cpp:1305
|
||||
msgid "click point on arc (draws anti-clockwise)"
|
||||
msgstr "click point on arc (draws anti-clockwise)"
|
||||
|
||||
#: graphicswin.cpp:1305
|
||||
#: graphicswin.cpp:1306
|
||||
msgid "click to place datum point"
|
||||
msgstr "click to place datum point"
|
||||
|
||||
#: graphicswin.cpp:1306
|
||||
#: graphicswin.cpp:1307
|
||||
msgid "click first point of line segment"
|
||||
msgstr "click first point of line segment"
|
||||
|
||||
#: graphicswin.cpp:1308
|
||||
#: graphicswin.cpp:1309
|
||||
msgid "click first point of construction line segment"
|
||||
msgstr "click first point of construction line segment"
|
||||
|
||||
#: graphicswin.cpp:1309
|
||||
#: graphicswin.cpp:1310
|
||||
msgid "click first point of cubic segment"
|
||||
msgstr "click first point of cubic segment"
|
||||
|
||||
#: graphicswin.cpp:1310
|
||||
#: graphicswin.cpp:1311
|
||||
msgid "click center of circle"
|
||||
msgstr "click center of circle"
|
||||
|
||||
#: graphicswin.cpp:1311
|
||||
#: graphicswin.cpp:1312
|
||||
msgid "click origin of workplane"
|
||||
msgstr "click origin of workplane"
|
||||
|
||||
#: graphicswin.cpp:1312
|
||||
#: graphicswin.cpp:1313
|
||||
msgid "click one corner of rectangle"
|
||||
msgstr "click one corner of rectangle"
|
||||
|
||||
#: graphicswin.cpp:1313
|
||||
#: graphicswin.cpp:1314
|
||||
msgid "click top left of text"
|
||||
msgstr "click top left of text"
|
||||
|
||||
#: graphicswin.cpp:1319
|
||||
#: graphicswin.cpp:1320
|
||||
msgid "click top left of image"
|
||||
msgstr "click top left of image"
|
||||
|
||||
#: graphicswin.cpp:1345
|
||||
#: graphicswin.cpp:1346
|
||||
msgid ""
|
||||
"No entities are selected. Select entities before trying to toggle their "
|
||||
"construction state."
|
||||
|
@ -1416,6 +1420,10 @@ msgstr "contour is self-intersecting!"
|
|||
msgid "zero-length edge!"
|
||||
msgstr "zero-length edge!"
|
||||
|
||||
#: importmesh.cpp:136
|
||||
msgid "Text-formated STL files are not currently supported"
|
||||
msgstr "Text-formated STL files are not currently supported"
|
||||
|
||||
#: modify.cpp:252
|
||||
msgid "Must be sketching in workplane to create tangent arc."
|
||||
msgstr "Must be sketching in workplane to create tangent arc."
|
||||
|
@ -1610,7 +1618,7 @@ msgstr ""
|
|||
"Can't draw image in 3d; first, activate a workplane with Sketch -> In "
|
||||
"Workplane."
|
||||
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:553
|
||||
msgctxt "file-type"
|
||||
msgid "SolveSpace models"
|
||||
msgstr "SolveSpace models"
|
||||
|
@ -1705,104 +1713,104 @@ msgctxt "file-type"
|
|||
msgid "Comma-separated values"
|
||||
msgstr "Comma-separated values"
|
||||
|
||||
#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641
|
||||
#: platform/guigtk.cpp:1382 platform/guimac.mm:1509 platform/guiwin.cpp:1641
|
||||
msgid "untitled"
|
||||
msgstr "untitled"
|
||||
|
||||
#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445
|
||||
#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1467
|
||||
#: platform/guiwin.cpp:1639
|
||||
msgctxt "title"
|
||||
msgid "Save File"
|
||||
msgstr "Save File"
|
||||
|
||||
#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428
|
||||
#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1450
|
||||
#: platform/guiwin.cpp:1645
|
||||
msgctxt "title"
|
||||
msgid "Open File"
|
||||
msgstr "Open File"
|
||||
|
||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
||||
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||
msgctxt "button"
|
||||
msgid "_Cancel"
|
||||
msgstr "_Cancel"
|
||||
|
||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
||||
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||
msgctxt "button"
|
||||
msgid "_Save"
|
||||
msgstr "_Save"
|
||||
|
||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
||||
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||
msgctxt "button"
|
||||
msgid "_Open"
|
||||
msgstr "_Open"
|
||||
|
||||
#: solvespace.cpp:170
|
||||
#: solvespace.cpp:171
|
||||
msgctxt "title"
|
||||
msgid "Autosave Available"
|
||||
msgstr "Autosave Available"
|
||||
|
||||
#: solvespace.cpp:171
|
||||
#: solvespace.cpp:172
|
||||
msgctxt "dialog"
|
||||
msgid "An autosave file is available for this sketch."
|
||||
msgstr "An autosave file is available for this sketch."
|
||||
|
||||
#: solvespace.cpp:172
|
||||
#: solvespace.cpp:173
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to load the autosave file instead?"
|
||||
msgstr "Do you want to load the autosave file instead?"
|
||||
|
||||
#: solvespace.cpp:173
|
||||
#: solvespace.cpp:174
|
||||
msgctxt "button"
|
||||
msgid "&Load autosave"
|
||||
msgstr "&Load autosave"
|
||||
|
||||
#: solvespace.cpp:175
|
||||
#: solvespace.cpp:176
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Load"
|
||||
msgstr "Do&n't Load"
|
||||
|
||||
#: solvespace.cpp:598
|
||||
#: solvespace.cpp:599
|
||||
msgctxt "title"
|
||||
msgid "Modified File"
|
||||
msgstr "Modified File"
|
||||
|
||||
#: solvespace.cpp:600
|
||||
#: solvespace.cpp:601
|
||||
#, c-format
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||
msgstr "Do you want to save the changes you made to the sketch “%s”?"
|
||||
|
||||
#: solvespace.cpp:603
|
||||
#: solvespace.cpp:604
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the new sketch?"
|
||||
msgstr "Do you want to save the changes you made to the new sketch?"
|
||||
|
||||
#: solvespace.cpp:606
|
||||
#: solvespace.cpp:607
|
||||
msgctxt "dialog"
|
||||
msgid "Your changes will be lost if you don't save them."
|
||||
msgstr "Your changes will be lost if you don't save them."
|
||||
|
||||
#: solvespace.cpp:607
|
||||
#: solvespace.cpp:608
|
||||
msgctxt "button"
|
||||
msgid "&Save"
|
||||
msgstr "&Save"
|
||||
|
||||
#: solvespace.cpp:609
|
||||
#: solvespace.cpp:610
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Save"
|
||||
msgstr "Do&n't Save"
|
||||
|
||||
#: solvespace.cpp:630
|
||||
#: solvespace.cpp:631
|
||||
msgctxt "title"
|
||||
msgid "(new sketch)"
|
||||
msgstr "(new sketch)"
|
||||
|
||||
#: solvespace.cpp:637
|
||||
#: solvespace.cpp:638
|
||||
msgctxt "title"
|
||||
msgid "Property Browser"
|
||||
msgstr "Property Browser"
|
||||
|
||||
#: solvespace.cpp:699
|
||||
#: solvespace.cpp:700
|
||||
msgid ""
|
||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
||||
"is probably not what you want; hide them by clicking the link at the top of "
|
||||
|
@ -1812,7 +1820,7 @@ msgstr ""
|
|||
"is probably not what you want; hide them by clicking the link at the top of "
|
||||
"the text window."
|
||||
|
||||
#: solvespace.cpp:771
|
||||
#: solvespace.cpp:772
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||
|
@ -1821,19 +1829,19 @@ msgstr ""
|
|||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||
"dwg."
|
||||
|
||||
#: solvespace.cpp:823
|
||||
#: solvespace.cpp:824
|
||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||
msgstr "Constraint must have a label, and must not be a reference dimension."
|
||||
|
||||
#: solvespace.cpp:827
|
||||
#: solvespace.cpp:828
|
||||
msgid "Bad selection for step dimension; select a constraint."
|
||||
msgstr "Bad selection for step dimension; select a constraint."
|
||||
|
||||
#: solvespace.cpp:851
|
||||
#: solvespace.cpp:852
|
||||
msgid "The assembly does not interfere, good."
|
||||
msgstr "The assembly does not interfere, good."
|
||||
|
||||
#: solvespace.cpp:867
|
||||
#: solvespace.cpp:868
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The volume of the solid model is:\n"
|
||||
|
@ -1844,7 +1852,7 @@ msgstr ""
|
|||
"\n"
|
||||
" %s"
|
||||
|
||||
#: solvespace.cpp:876
|
||||
#: solvespace.cpp:877
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1857,7 +1865,7 @@ msgstr ""
|
|||
"\n"
|
||||
" %s"
|
||||
|
||||
#: solvespace.cpp:881
|
||||
#: solvespace.cpp:882
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
|
@ -1869,7 +1877,7 @@ msgstr ""
|
|||
"Curved surfaces have been approximated as triangles.\n"
|
||||
"This introduces error, typically of around 1%."
|
||||
|
||||
#: solvespace.cpp:896
|
||||
#: solvespace.cpp:897
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The surface area of the selected faces is:\n"
|
||||
|
@ -1886,7 +1894,7 @@ msgstr ""
|
|||
"Curves have been approximated as piecewise linear.\n"
|
||||
"This introduces error, typically of around 1%%."
|
||||
|
||||
#: solvespace.cpp:905
|
||||
#: solvespace.cpp:906
|
||||
msgid ""
|
||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||
"not coplanar, or self-intersecting."
|
||||
|
@ -1894,7 +1902,7 @@ msgstr ""
|
|||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||
"not coplanar, or self-intersecting."
|
||||
|
||||
#: solvespace.cpp:917
|
||||
#: solvespace.cpp:918
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The area of the region sketched in this group is:\n"
|
||||
|
@ -1911,7 +1919,7 @@ msgstr ""
|
|||
"Curves have been approximated as piecewise linear.\n"
|
||||
"This introduces error, typically of around 1%%."
|
||||
|
||||
#: solvespace.cpp:937
|
||||
#: solvespace.cpp:938
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The total length of the selected entities is:\n"
|
||||
|
@ -1928,36 +1936,36 @@ msgstr ""
|
|||
"Curves have been approximated as piecewise linear.\n"
|
||||
"This introduces error, typically of around 1%%."
|
||||
|
||||
#: solvespace.cpp:943
|
||||
#: solvespace.cpp:944
|
||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||
msgstr "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||
|
||||
#: solvespace.cpp:959
|
||||
#: solvespace.cpp:960
|
||||
msgid "Bad selection for trace; select a single point."
|
||||
msgstr "Bad selection for trace; select a single point."
|
||||
|
||||
#: solvespace.cpp:986
|
||||
#: solvespace.cpp:987
|
||||
#, c-format
|
||||
msgid "Couldn't write to '%s'"
|
||||
msgstr "Couldn't write to '%s'"
|
||||
|
||||
#: solvespace.cpp:1016
|
||||
#: solvespace.cpp:1017
|
||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||
msgstr "The mesh is self-intersecting (NOT okay, invalid)."
|
||||
|
||||
#: solvespace.cpp:1017
|
||||
#: solvespace.cpp:1018
|
||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||
msgstr "The mesh is not self-intersecting (okay, valid)."
|
||||
|
||||
#: solvespace.cpp:1019
|
||||
#: solvespace.cpp:1020
|
||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||
msgstr "The mesh has naked edges (NOT okay, invalid)."
|
||||
|
||||
#: solvespace.cpp:1020
|
||||
#: solvespace.cpp:1021
|
||||
msgid "The mesh is watertight (okay, valid)."
|
||||
msgstr "The mesh is watertight (okay, valid)."
|
||||
|
||||
#: solvespace.cpp:1023
|
||||
#: solvespace.cpp:1024
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1968,7 +1976,7 @@ msgstr ""
|
|||
"\n"
|
||||
"The model contains %d triangles, from %d surfaces."
|
||||
|
||||
#: solvespace.cpp:1027
|
||||
#: solvespace.cpp:1028
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -1983,7 +1991,7 @@ msgstr ""
|
|||
"\n"
|
||||
"Zero problematic edges, good.%s"
|
||||
|
||||
#: solvespace.cpp:1030
|
||||
#: solvespace.cpp:1031
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -1998,7 +2006,7 @@ msgstr ""
|
|||
"\n"
|
||||
"%d problematic edges, bad.%s"
|
||||
|
||||
#: solvespace.cpp:1043
|
||||
#: solvespace.cpp:1044
|
||||
#, c-format
|
||||
msgid ""
|
||||
"This is SolveSpace version %s.\n"
|
||||
|
@ -2039,23 +2047,23 @@ msgstr ""
|
|||
msgid "Style name cannot be empty"
|
||||
msgstr "Style name cannot be empty"
|
||||
|
||||
#: textscreens.cpp:785
|
||||
#: textscreens.cpp:791
|
||||
msgid "Can't repeat fewer than 1 time."
|
||||
msgstr "Can't repeat fewer than 1 time."
|
||||
|
||||
#: textscreens.cpp:789
|
||||
#: textscreens.cpp:795
|
||||
msgid "Can't repeat more than 999 times."
|
||||
msgstr "Can't repeat more than 999 times."
|
||||
|
||||
#: textscreens.cpp:814
|
||||
#: textscreens.cpp:820
|
||||
msgid "Group name cannot be empty"
|
||||
msgstr "Group name cannot be empty"
|
||||
|
||||
#: textscreens.cpp:866
|
||||
#: textscreens.cpp:872
|
||||
msgid "Opacity must be between zero and one."
|
||||
msgstr "Opacity must be between zero and one."
|
||||
|
||||
#: textscreens.cpp:901
|
||||
#: textscreens.cpp:907
|
||||
msgid "Radius cannot be zero or negative."
|
||||
msgstr "Radius cannot be zero or negative."
|
||||
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
# Copyright (C) 2017 the SolveSpace authors
|
||||
# This file is distributed under the same license as the SolveSpace package.
|
||||
# Maxi <andesfreedesign@gmail.com>, 2021.
|
||||
#
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SolveSpace 3.0\n"
|
||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\n"
|
||||
"POT-Creation-Date: 2021-09-26 16:25-0400\n"
|
||||
"POT-Creation-Date: 2022-02-01 16:24+0200\n"
|
||||
"PO-Revision-Date: 2021-09-17 \n"
|
||||
"Last-Translator: andesfreedesign@gmail.com\n"
|
||||
"Language-Team: AndesFreeDesign\n"
|
||||
|
@ -35,7 +35,7 @@ msgstr "El portapapeles está vacío; nada que pegar."
|
|||
msgid "Number of copies to paste must be at least one."
|
||||
msgstr "El número de copias para pegar debe ser al menos una."
|
||||
|
||||
#: clipboard.cpp:389 textscreens.cpp:827
|
||||
#: clipboard.cpp:389 textscreens.cpp:833
|
||||
msgid "Scale cannot be zero."
|
||||
msgstr "La escala no puede ser cero."
|
||||
|
||||
|
@ -63,15 +63,15 @@ msgstr "Demasiados elementos para pegar; divida esto en partes más pequeñas."
|
|||
msgid "No workplane active."
|
||||
msgstr "Ningún plano de trabajo activo."
|
||||
|
||||
#: confscreen.cpp:376
|
||||
#: confscreen.cpp:381
|
||||
msgid "Bad format: specify coordinates as x, y, z"
|
||||
msgstr "Formato incorrecto: especifique las coordenadas como x, y, z"
|
||||
|
||||
#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858
|
||||
#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:864
|
||||
msgid "Bad format: specify color as r, g, b"
|
||||
msgstr "Formato incorrecto: especifique color como r, g, b"
|
||||
|
||||
#: confscreen.cpp:412
|
||||
#: confscreen.cpp:417
|
||||
msgid ""
|
||||
"The perspective factor will have no effect until you enable View -> Use "
|
||||
"Perspective Projection."
|
||||
|
@ -79,24 +79,24 @@ msgstr ""
|
|||
"El factor de perspectiva no tendrá ningún efecto hasta que habilite Ver -> "
|
||||
"UsarProyección Perspectiva."
|
||||
|
||||
#: confscreen.cpp:430 confscreen.cpp:440
|
||||
#: confscreen.cpp:435 confscreen.cpp:445
|
||||
#, c-format
|
||||
msgid "Specify between 0 and %d digits after the decimal."
|
||||
msgstr "Especifique entre 0 y %d dígitos después del decimal."
|
||||
|
||||
#: confscreen.cpp:452
|
||||
#: confscreen.cpp:457
|
||||
msgid "Export scale must not be zero!"
|
||||
msgstr "¡La escala de exportación no debe ser cero!"
|
||||
|
||||
#: confscreen.cpp:464
|
||||
#: confscreen.cpp:469
|
||||
msgid "Cutter radius offset must not be negative!"
|
||||
msgstr "¡El desfase del radio de corte no debe ser negativo!"
|
||||
|
||||
#: confscreen.cpp:518
|
||||
#: confscreen.cpp:528
|
||||
msgid "Bad value: autosave interval should be positive"
|
||||
msgstr "Valor incorrecto: el intervalo de autoguardado debe ser positivo"
|
||||
|
||||
#: confscreen.cpp:521
|
||||
#: confscreen.cpp:531
|
||||
msgid "Bad format: specify interval in integral minutes"
|
||||
msgstr "Formato incorrecto: especifique el intervalo en minutos integrales"
|
||||
|
||||
|
@ -676,7 +676,7 @@ msgctxt "button"
|
|||
msgid "&No"
|
||||
msgstr "&No"
|
||||
|
||||
#: file.cpp:877 solvespace.cpp:610
|
||||
#: file.cpp:877 solvespace.cpp:611
|
||||
msgctxt "button"
|
||||
msgid "&Cancel"
|
||||
msgstr "&Cancelar"
|
||||
|
@ -1129,25 +1129,29 @@ msgstr "&Lenguaje"
|
|||
msgid "&Website / Manual"
|
||||
msgstr "&Sitio Web / Manual"
|
||||
|
||||
#: graphicswin.cpp:187
|
||||
#: graphicswin.cpp:186
|
||||
msgid "&Go to GitHub commit"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:188
|
||||
msgid "&About"
|
||||
msgstr "&Acerca"
|
||||
|
||||
#: graphicswin.cpp:361
|
||||
#: graphicswin.cpp:362
|
||||
msgid "(no recent files)"
|
||||
msgstr "(no hay archivos recientes)"
|
||||
|
||||
#: graphicswin.cpp:369
|
||||
#: graphicswin.cpp:370
|
||||
#, c-format
|
||||
msgid "File '%s' does not exist."
|
||||
msgstr "El archivo '%s' no existe."
|
||||
|
||||
#: graphicswin.cpp:736
|
||||
#: graphicswin.cpp:737
|
||||
msgid "No workplane is active, so the grid will not appear."
|
||||
msgstr ""
|
||||
"No hay ningún plano de trabajo activo, por lo que la cuadrícula no aparecerá."
|
||||
|
||||
#: graphicswin.cpp:751
|
||||
#: graphicswin.cpp:752
|
||||
msgid ""
|
||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||
"projection.\n"
|
||||
|
@ -1161,20 +1165,20 @@ msgstr ""
|
|||
"Para una proyección en perspectiva, modifique el factor de perspectiva en la "
|
||||
"pantalla de configuración. Un valor de alrededor de 0,3 es típico."
|
||||
|
||||
#: graphicswin.cpp:836
|
||||
#: graphicswin.cpp:837
|
||||
msgid ""
|
||||
"Select a point; this point will become the center of the view on screen."
|
||||
msgstr ""
|
||||
"Seleccione un punto; este punto se convertirá en el centro de la vista en "
|
||||
"pantalla."
|
||||
|
||||
#: graphicswin.cpp:1136
|
||||
#: graphicswin.cpp:1137
|
||||
msgid "No additional entities share endpoints with the selected entities."
|
||||
msgstr ""
|
||||
"Ninguna entidad adicional comparte puntos finales con las entidades "
|
||||
"seleccionadas."
|
||||
|
||||
#: graphicswin.cpp:1154
|
||||
#: graphicswin.cpp:1155
|
||||
msgid ""
|
||||
"To use this command, select a point or other entity from an linked part, or "
|
||||
"make a link group the active group."
|
||||
|
@ -1182,7 +1186,7 @@ msgstr ""
|
|||
"Para usar este comando, seleccione un punto u otra entidad de una parte "
|
||||
"vinculada, o convertir un grupo de enlaces en el grupo activo."
|
||||
|
||||
#: graphicswin.cpp:1177
|
||||
#: graphicswin.cpp:1178
|
||||
msgid ""
|
||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||
"to define the plane for the snap grid."
|
||||
|
@ -1191,7 +1195,7 @@ msgstr ""
|
|||
"Croquis -> En plano de trabajo) para definir el plano para el enganche a la "
|
||||
"cuadrícula."
|
||||
|
||||
#: graphicswin.cpp:1184
|
||||
#: graphicswin.cpp:1185
|
||||
msgid ""
|
||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||
"with a label. To snap a line, select its endpoints."
|
||||
|
@ -1200,13 +1204,13 @@ msgstr ""
|
|||
"comentarios de texto o restricciones con una etiqueta. Para enganchar una "
|
||||
"línea, seleccione sus puntos finales."
|
||||
|
||||
#: graphicswin.cpp:1269
|
||||
#: graphicswin.cpp:1270
|
||||
msgid "No workplane selected. Activating default workplane for this group."
|
||||
msgstr ""
|
||||
"No se seleccionó ningún plano de trabajo. Activando el plano de trabajo "
|
||||
"predeterminado para este grupo."
|
||||
|
||||
#: graphicswin.cpp:1272
|
||||
#: graphicswin.cpp:1273
|
||||
msgid ""
|
||||
"No workplane is selected, and the active group does not have a default "
|
||||
"workplane. Try selecting a workplane, or activating a sketch-in-new-"
|
||||
|
@ -1216,7 +1220,7 @@ msgstr ""
|
|||
"de trabajo. Intente seleccionar un plano de trabajo o activar un croquis-en-"
|
||||
"nuevo-grupo de plano de trabajo."
|
||||
|
||||
#: graphicswin.cpp:1293
|
||||
#: graphicswin.cpp:1294
|
||||
msgid ""
|
||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||
"nothing to set up arc parameters."
|
||||
|
@ -1224,47 +1228,47 @@ msgstr ""
|
|||
"Mala selección de arco tangente en el punto. Seleccione un solo punto o no "
|
||||
"seleccione nada para configurar los parámetros del arco."
|
||||
|
||||
#: graphicswin.cpp:1304
|
||||
#: graphicswin.cpp:1305
|
||||
msgid "click point on arc (draws anti-clockwise)"
|
||||
msgstr "clic en el punto en el arco (dibuja en sentido antihorario)"
|
||||
|
||||
#: graphicswin.cpp:1305
|
||||
#: graphicswin.cpp:1306
|
||||
msgid "click to place datum point"
|
||||
msgstr "clic para colocar el punto de referencia"
|
||||
|
||||
#: graphicswin.cpp:1306
|
||||
#: graphicswin.cpp:1307
|
||||
msgid "click first point of line segment"
|
||||
msgstr "clic en el primer punto del segmento de línea"
|
||||
|
||||
#: graphicswin.cpp:1308
|
||||
#: graphicswin.cpp:1309
|
||||
msgid "click first point of construction line segment"
|
||||
msgstr "clic en el primer punto del segmento de línea de construcción"
|
||||
|
||||
#: graphicswin.cpp:1309
|
||||
#: graphicswin.cpp:1310
|
||||
msgid "click first point of cubic segment"
|
||||
msgstr "clic en el primer punto del segmento cúbico"
|
||||
|
||||
#: graphicswin.cpp:1310
|
||||
#: graphicswin.cpp:1311
|
||||
msgid "click center of circle"
|
||||
msgstr "clic en el centro del círculo"
|
||||
|
||||
#: graphicswin.cpp:1311
|
||||
#: graphicswin.cpp:1312
|
||||
msgid "click origin of workplane"
|
||||
msgstr "clic en origen del plano de trabajo"
|
||||
|
||||
#: graphicswin.cpp:1312
|
||||
#: graphicswin.cpp:1313
|
||||
msgid "click one corner of rectangle"
|
||||
msgstr "clic en una esquina del rectángulo"
|
||||
|
||||
#: graphicswin.cpp:1313
|
||||
#: graphicswin.cpp:1314
|
||||
msgid "click top left of text"
|
||||
msgstr "clic en la parte superior izquierda del texto"
|
||||
|
||||
#: graphicswin.cpp:1319
|
||||
#: graphicswin.cpp:1320
|
||||
msgid "click top left of image"
|
||||
msgstr "clic en la parte superior izquierda de la imagen"
|
||||
|
||||
#: graphicswin.cpp:1345
|
||||
#: graphicswin.cpp:1346
|
||||
msgid ""
|
||||
"No entities are selected. Select entities before trying to toggle their "
|
||||
"construction state."
|
||||
|
@ -1418,6 +1422,10 @@ msgstr "¡El contorno se intersecta a sí mismo!"
|
|||
msgid "zero-length edge!"
|
||||
msgstr "¡arista de longitud cero!"
|
||||
|
||||
#: importmesh.cpp:136
|
||||
msgid "Text-formated STL files are not currently supported"
|
||||
msgstr ""
|
||||
|
||||
#: modify.cpp:252
|
||||
msgid "Must be sketching in workplane to create tangent arc."
|
||||
msgstr ""
|
||||
|
@ -1617,7 +1625,7 @@ msgstr ""
|
|||
"No se puede dibujar una imagen en 3D; primero, active un plano de trabajo "
|
||||
"con Croquis -> En Plano de Trabajo."
|
||||
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:553
|
||||
msgctxt "file-type"
|
||||
msgid "SolveSpace models"
|
||||
msgstr "SolveSpace modelos"
|
||||
|
@ -1712,104 +1720,104 @@ msgctxt "file-type"
|
|||
msgid "Comma-separated values"
|
||||
msgstr "Valores separados por comas"
|
||||
|
||||
#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641
|
||||
#: platform/guigtk.cpp:1382 platform/guimac.mm:1509 platform/guiwin.cpp:1641
|
||||
msgid "untitled"
|
||||
msgstr "sin título"
|
||||
|
||||
#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445
|
||||
#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1467
|
||||
#: platform/guiwin.cpp:1639
|
||||
msgctxt "title"
|
||||
msgid "Save File"
|
||||
msgstr "Guardar Archivo"
|
||||
|
||||
#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428
|
||||
#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1450
|
||||
#: platform/guiwin.cpp:1645
|
||||
msgctxt "title"
|
||||
msgid "Open File"
|
||||
msgstr "Abrir Archivo"
|
||||
|
||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
||||
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||
msgctxt "button"
|
||||
msgid "_Cancel"
|
||||
msgstr "_Cancelar"
|
||||
|
||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
||||
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||
msgctxt "button"
|
||||
msgid "_Save"
|
||||
msgstr "_Guardar"
|
||||
|
||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
||||
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||
msgctxt "button"
|
||||
msgid "_Open"
|
||||
msgstr "_Abrir"
|
||||
|
||||
#: solvespace.cpp:170
|
||||
#: solvespace.cpp:171
|
||||
msgctxt "title"
|
||||
msgid "Autosave Available"
|
||||
msgstr "Autoguardado Disponible"
|
||||
|
||||
#: solvespace.cpp:171
|
||||
#: solvespace.cpp:172
|
||||
msgctxt "dialog"
|
||||
msgid "An autosave file is available for this sketch."
|
||||
msgstr "Un archivo de autoguardado está disponible para este croquis."
|
||||
|
||||
#: solvespace.cpp:172
|
||||
#: solvespace.cpp:173
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to load the autosave file instead?"
|
||||
msgstr "¿Desea cargar el archivo de autoguardado en su lugar?"
|
||||
|
||||
#: solvespace.cpp:173
|
||||
#: solvespace.cpp:174
|
||||
msgctxt "button"
|
||||
msgid "&Load autosave"
|
||||
msgstr "&Cargar autoguardado"
|
||||
|
||||
#: solvespace.cpp:175
|
||||
#: solvespace.cpp:176
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Load"
|
||||
msgstr "No Cargar"
|
||||
|
||||
#: solvespace.cpp:598
|
||||
#: solvespace.cpp:599
|
||||
msgctxt "title"
|
||||
msgid "Modified File"
|
||||
msgstr "Archivo Modificado"
|
||||
|
||||
#: solvespace.cpp:600
|
||||
#: solvespace.cpp:601
|
||||
#, c-format
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||
msgstr "¿Desea guardar los cambios que realizó en el croquis “%s”?"
|
||||
|
||||
#: solvespace.cpp:603
|
||||
#: solvespace.cpp:604
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the new sketch?"
|
||||
msgstr "¿Desea guardar los cambios que realizó en el nuevo croquis?"
|
||||
|
||||
#: solvespace.cpp:606
|
||||
#: solvespace.cpp:607
|
||||
msgctxt "dialog"
|
||||
msgid "Your changes will be lost if you don't save them."
|
||||
msgstr "Sus cambios se perderán si no los guarda."
|
||||
|
||||
#: solvespace.cpp:607
|
||||
#: solvespace.cpp:608
|
||||
msgctxt "button"
|
||||
msgid "&Save"
|
||||
msgstr "&Guardar"
|
||||
|
||||
#: solvespace.cpp:609
|
||||
#: solvespace.cpp:610
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Save"
|
||||
msgstr "No& Guardar"
|
||||
|
||||
#: solvespace.cpp:630
|
||||
#: solvespace.cpp:631
|
||||
msgctxt "title"
|
||||
msgid "(new sketch)"
|
||||
msgstr "(nuevo croquis)"
|
||||
|
||||
#: solvespace.cpp:637
|
||||
#: solvespace.cpp:638
|
||||
msgctxt "title"
|
||||
msgid "Property Browser"
|
||||
msgstr "Explorador de Propiedades"
|
||||
|
||||
#: solvespace.cpp:699
|
||||
#: solvespace.cpp:700
|
||||
msgid ""
|
||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
||||
"is probably not what you want; hide them by clicking the link at the top of "
|
||||
|
@ -1819,7 +1827,7 @@ msgstr ""
|
|||
"Probablemente esto no sea lo que quieres; ocultarlos haciendo clic en el "
|
||||
"enlace en la parte superior de la ventana de texto."
|
||||
|
||||
#: solvespace.cpp:771
|
||||
#: solvespace.cpp:772
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||
|
@ -1828,20 +1836,20 @@ msgstr ""
|
|||
"No se puede identificar el tipo de archivo a partir de la extensión del "
|
||||
"nombre del archivo '%s'; intente .dxf o .dwg."
|
||||
|
||||
#: solvespace.cpp:823
|
||||
#: solvespace.cpp:824
|
||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||
msgstr ""
|
||||
"La restricción debe tener una etiqueta y no debe ser una cota de referencia."
|
||||
|
||||
#: solvespace.cpp:827
|
||||
#: solvespace.cpp:828
|
||||
msgid "Bad selection for step dimension; select a constraint."
|
||||
msgstr "Mala selección para la cota del paso; seleccione una restricción."
|
||||
|
||||
#: solvespace.cpp:851
|
||||
#: solvespace.cpp:852
|
||||
msgid "The assembly does not interfere, good."
|
||||
msgstr "El ensamble no interfiere, bien."
|
||||
|
||||
#: solvespace.cpp:867
|
||||
#: solvespace.cpp:868
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The volume of the solid model is:\n"
|
||||
|
@ -1852,7 +1860,7 @@ msgstr ""
|
|||
"\n"
|
||||
" %s"
|
||||
|
||||
#: solvespace.cpp:876
|
||||
#: solvespace.cpp:877
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1865,7 +1873,7 @@ msgstr ""
|
|||
"\n"
|
||||
" %s"
|
||||
|
||||
#: solvespace.cpp:881
|
||||
#: solvespace.cpp:882
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
|
@ -1877,7 +1885,7 @@ msgstr ""
|
|||
"Las superficies curvas se han aproximado como triángulos.\n"
|
||||
"Esto introduce un error, normalmente alrededor del 1%."
|
||||
|
||||
#: solvespace.cpp:896
|
||||
#: solvespace.cpp:897
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The surface area of the selected faces is:\n"
|
||||
|
@ -1894,7 +1902,7 @@ msgstr ""
|
|||
"Las curvas se han aproximado como lineales por partes.\n"
|
||||
"Esto introduce un error, normalmente alrededor del 1%%."
|
||||
|
||||
#: solvespace.cpp:905
|
||||
#: solvespace.cpp:906
|
||||
msgid ""
|
||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||
"not coplanar, or self-intersecting."
|
||||
|
@ -1902,7 +1910,7 @@ msgstr ""
|
|||
"Este grupo no contiene un área cerrada 2d correctamente formada. Está "
|
||||
"abierta, no coplanares, ni auto-intersectantes."
|
||||
|
||||
#: solvespace.cpp:917
|
||||
#: solvespace.cpp:918
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The area of the region sketched in this group is:\n"
|
||||
|
@ -1919,7 +1927,7 @@ msgstr ""
|
|||
"Las curvas se han aproximado como lineales por partes.\n"
|
||||
"Esto introduce un error, normalmente alrededor del 1%%."
|
||||
|
||||
#: solvespace.cpp:937
|
||||
#: solvespace.cpp:938
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The total length of the selected entities is:\n"
|
||||
|
@ -1936,37 +1944,37 @@ msgstr ""
|
|||
"Las curvas se han aproximado como lineales por partes.\n"
|
||||
"Esto introduce un error, normalmente alrededor del 1%%."
|
||||
|
||||
#: solvespace.cpp:943
|
||||
#: solvespace.cpp:944
|
||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||
msgstr ""
|
||||
"Mala selección de perímetro; seleccione segmentos de línea, arcos y curvas."
|
||||
|
||||
#: solvespace.cpp:959
|
||||
#: solvespace.cpp:960
|
||||
msgid "Bad selection for trace; select a single point."
|
||||
msgstr "Mala selección de rastreo; seleccione un solo punto."
|
||||
|
||||
#: solvespace.cpp:986
|
||||
#: solvespace.cpp:987
|
||||
#, c-format
|
||||
msgid "Couldn't write to '%s'"
|
||||
msgstr "No pude escribir a '%s'"
|
||||
|
||||
#: solvespace.cpp:1016
|
||||
#: solvespace.cpp:1017
|
||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||
msgstr "La malla se intersecta a si misma (NO está bien, no es válida)."
|
||||
|
||||
#: solvespace.cpp:1017
|
||||
#: solvespace.cpp:1018
|
||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||
msgstr "La malla no se intersecta (está bien, es válida)."
|
||||
|
||||
#: solvespace.cpp:1019
|
||||
#: solvespace.cpp:1020
|
||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||
msgstr "La malla tiene bordes desnudos (NO está bien, no es válida)."
|
||||
|
||||
#: solvespace.cpp:1020
|
||||
#: solvespace.cpp:1021
|
||||
msgid "The mesh is watertight (okay, valid)."
|
||||
msgstr "La malla es estanca (está bien, es válida)."
|
||||
|
||||
#: solvespace.cpp:1023
|
||||
#: solvespace.cpp:1024
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1977,7 +1985,7 @@ msgstr ""
|
|||
"\n"
|
||||
"El modelo contiene %d triángulos, desde %d superficies."
|
||||
|
||||
#: solvespace.cpp:1027
|
||||
#: solvespace.cpp:1028
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -1992,7 +2000,7 @@ msgstr ""
|
|||
"\n"
|
||||
"Cero aristas problemáticas, bien.%s"
|
||||
|
||||
#: solvespace.cpp:1030
|
||||
#: solvespace.cpp:1031
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -2007,7 +2015,7 @@ msgstr ""
|
|||
"\n"
|
||||
"%d aristas problemáticas, mal.%s"
|
||||
|
||||
#: solvespace.cpp:1043
|
||||
#: solvespace.cpp:1044
|
||||
#, c-format
|
||||
msgid ""
|
||||
"This is SolveSpace version %s.\n"
|
||||
|
@ -2048,23 +2056,23 @@ msgstr ""
|
|||
msgid "Style name cannot be empty"
|
||||
msgstr "El nombre del estilo no puede estar vacío"
|
||||
|
||||
#: textscreens.cpp:785
|
||||
#: textscreens.cpp:791
|
||||
msgid "Can't repeat fewer than 1 time."
|
||||
msgstr "No se puede repetir menos de 1 vez."
|
||||
|
||||
#: textscreens.cpp:789
|
||||
#: textscreens.cpp:795
|
||||
msgid "Can't repeat more than 999 times."
|
||||
msgstr "No se puede repetir más de 999 veces."
|
||||
|
||||
#: textscreens.cpp:814
|
||||
#: textscreens.cpp:820
|
||||
msgid "Group name cannot be empty"
|
||||
msgstr "El nombre del grupo no puede estar vacío"
|
||||
|
||||
#: textscreens.cpp:866
|
||||
#: textscreens.cpp:872
|
||||
msgid "Opacity must be between zero and one."
|
||||
msgstr "La opacidad debe estar entre cero y uno."
|
||||
|
||||
#: textscreens.cpp:901
|
||||
#: textscreens.cpp:907
|
||||
msgid "Radius cannot be zero or negative."
|
||||
msgstr "El radio no puede ser cero o negativo."
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: SolveSpace 3.0\n"
|
||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\n"
|
||||
"POT-Creation-Date: 2021-09-26 16:25-0400\n"
|
||||
"POT-Creation-Date: 2022-02-01 16:24+0200\n"
|
||||
"PO-Revision-Date: 2018-07-14 06:12+0000\n"
|
||||
"Last-Translator: whitequark <whitequark@whitequark.org>\n"
|
||||
"Language-Team: none\n"
|
||||
|
@ -35,7 +35,7 @@ msgstr "Presse papier vide; rien à coller."
|
|||
msgid "Number of copies to paste must be at least one."
|
||||
msgstr "Le nombre de copies à coller doit être d'au moins un."
|
||||
|
||||
#: clipboard.cpp:389 textscreens.cpp:827
|
||||
#: clipboard.cpp:389 textscreens.cpp:833
|
||||
msgid "Scale cannot be zero."
|
||||
msgstr "L'échelle ne peut pas être zéro."
|
||||
|
||||
|
@ -63,15 +63,15 @@ msgstr "Trop d'éléments à coller; Divisez-les en plus petits groupes."
|
|||
msgid "No workplane active."
|
||||
msgstr "Pas d'espace de travail actif."
|
||||
|
||||
#: confscreen.cpp:376
|
||||
#: confscreen.cpp:381
|
||||
msgid "Bad format: specify coordinates as x, y, z"
|
||||
msgstr "Mauvais format: spécifiez les coordonnées comme x, y, z"
|
||||
|
||||
#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858
|
||||
#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:864
|
||||
msgid "Bad format: specify color as r, g, b"
|
||||
msgstr "Mauvais format; spécifiez la couleur comme r, v, b"
|
||||
|
||||
#: confscreen.cpp:412
|
||||
#: confscreen.cpp:417
|
||||
msgid ""
|
||||
"The perspective factor will have no effect until you enable View -> Use "
|
||||
"Perspective Projection."
|
||||
|
@ -79,26 +79,26 @@ msgstr ""
|
|||
"Le facteur de perspective n'aura aucun effet tant que vous n'aurez pas "
|
||||
"activé \"Affichage -> Utiliser la projection de perspective\"."
|
||||
|
||||
#: confscreen.cpp:430 confscreen.cpp:440
|
||||
#: confscreen.cpp:435 confscreen.cpp:445
|
||||
#, c-format
|
||||
msgid "Specify between 0 and %d digits after the decimal."
|
||||
msgstr ""
|
||||
|
||||
#: confscreen.cpp:452
|
||||
#: confscreen.cpp:457
|
||||
msgid "Export scale must not be zero!"
|
||||
msgstr "L'échelle d'export ne doit pas être zéro!"
|
||||
|
||||
#: confscreen.cpp:464
|
||||
#: confscreen.cpp:469
|
||||
msgid "Cutter radius offset must not be negative!"
|
||||
msgstr "Le décalage du rayon de coupe ne doit pas être négatif!"
|
||||
|
||||
#: confscreen.cpp:518
|
||||
#: confscreen.cpp:528
|
||||
msgid "Bad value: autosave interval should be positive"
|
||||
msgstr ""
|
||||
"Mauvaise valeur: l'intervalle d'enregistrement automatique devrait être "
|
||||
"positif"
|
||||
|
||||
#: confscreen.cpp:521
|
||||
#: confscreen.cpp:531
|
||||
msgid "Bad format: specify interval in integral minutes"
|
||||
msgstr "Mauvais format: spécifiez un nombre entier de minutes"
|
||||
|
||||
|
@ -678,7 +678,7 @@ msgctxt "button"
|
|||
msgid "&No"
|
||||
msgstr ""
|
||||
|
||||
#: file.cpp:877 solvespace.cpp:610
|
||||
#: file.cpp:877 solvespace.cpp:611
|
||||
msgctxt "button"
|
||||
msgid "&Cancel"
|
||||
msgstr ""
|
||||
|
@ -1131,24 +1131,28 @@ msgstr "&Langue"
|
|||
msgid "&Website / Manual"
|
||||
msgstr "&Site web / Manuel"
|
||||
|
||||
#: graphicswin.cpp:187
|
||||
#: graphicswin.cpp:186
|
||||
msgid "&Go to GitHub commit"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:188
|
||||
msgid "&About"
|
||||
msgstr "&A propos"
|
||||
|
||||
#: graphicswin.cpp:361
|
||||
#: graphicswin.cpp:362
|
||||
msgid "(no recent files)"
|
||||
msgstr "(pas de fichier récent)"
|
||||
|
||||
#: graphicswin.cpp:369
|
||||
#: graphicswin.cpp:370
|
||||
#, c-format
|
||||
msgid "File '%s' does not exist."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:736
|
||||
#: graphicswin.cpp:737
|
||||
msgid "No workplane is active, so the grid will not appear."
|
||||
msgstr "Pas de plan de travail actif, donc la grille ne va pas apparaître."
|
||||
|
||||
#: graphicswin.cpp:751
|
||||
#: graphicswin.cpp:752
|
||||
msgid ""
|
||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||
"projection.\n"
|
||||
|
@ -1162,19 +1166,19 @@ msgstr ""
|
|||
"Pour une projection en perspective, modifiez le facteur de perspective dans "
|
||||
"l'écran de configuration. Une valeur d'environ 0,3 est typique."
|
||||
|
||||
#: graphicswin.cpp:836
|
||||
#: graphicswin.cpp:837
|
||||
msgid ""
|
||||
"Select a point; this point will become the center of the view on screen."
|
||||
msgstr ""
|
||||
"Sélectionnez un point. Ce point deviendra le centre de la vue à l'écran."
|
||||
|
||||
#: graphicswin.cpp:1136
|
||||
#: graphicswin.cpp:1137
|
||||
msgid "No additional entities share endpoints with the selected entities."
|
||||
msgstr ""
|
||||
"Aucune entité supplémentaire ne partage des points d'extrémité avec les "
|
||||
"entités sélectionnées."
|
||||
|
||||
#: graphicswin.cpp:1154
|
||||
#: graphicswin.cpp:1155
|
||||
msgid ""
|
||||
"To use this command, select a point or other entity from an linked part, or "
|
||||
"make a link group the active group."
|
||||
|
@ -1182,7 +1186,7 @@ msgstr ""
|
|||
"Pour utiliser cette commande, sélectionnez un point ou une autre entité à "
|
||||
"partir d'une pièce liée ou créez un groupe de liens dans le groupe actif."
|
||||
|
||||
#: graphicswin.cpp:1177
|
||||
#: graphicswin.cpp:1178
|
||||
msgid ""
|
||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||
"to define the plane for the snap grid."
|
||||
|
@ -1190,7 +1194,7 @@ msgstr ""
|
|||
"Aucun plan de travail n'est actif. Activez un plan de travail (avec Dessin -"
|
||||
"> Dans plan de travail) pour définir le plan pour la grille d'accrochage."
|
||||
|
||||
#: graphicswin.cpp:1184
|
||||
#: graphicswin.cpp:1185
|
||||
msgid ""
|
||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||
"with a label. To snap a line, select its endpoints."
|
||||
|
@ -1199,13 +1203,13 @@ msgstr ""
|
|||
"des textes de commentaires ou des contraintes avec une étiquette. Pour "
|
||||
"accrocher une ligne, sélectionnez ses points d'extrémité."
|
||||
|
||||
#: graphicswin.cpp:1269
|
||||
#: graphicswin.cpp:1270
|
||||
msgid "No workplane selected. Activating default workplane for this group."
|
||||
msgstr ""
|
||||
"Aucun plan de travail sélectionné. Activation du plan de travail par défaut "
|
||||
"pour ce groupe."
|
||||
|
||||
#: graphicswin.cpp:1272
|
||||
#: graphicswin.cpp:1273
|
||||
msgid ""
|
||||
"No workplane is selected, and the active group does not have a default "
|
||||
"workplane. Try selecting a workplane, or activating a sketch-in-new-"
|
||||
|
@ -1215,7 +1219,7 @@ msgstr ""
|
|||
"de travail par défaut. Essayez de sélectionner un plan de travail ou "
|
||||
"d'activer un groupe de \"Dessin dans nouveau plan travail\"."
|
||||
|
||||
#: graphicswin.cpp:1293
|
||||
#: graphicswin.cpp:1294
|
||||
msgid ""
|
||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||
"nothing to set up arc parameters."
|
||||
|
@ -1223,49 +1227,49 @@ msgstr ""
|
|||
"Mauvaise sélection pour l'arc tangent au point. Sélectionnez un seul point, "
|
||||
"ou ne sélectionnez rien pour configurer les paramètres de l'arc."
|
||||
|
||||
#: graphicswin.cpp:1304
|
||||
#: graphicswin.cpp:1305
|
||||
msgid "click point on arc (draws anti-clockwise)"
|
||||
msgstr ""
|
||||
"cliquez un point sur l'arc (dessine dans le sens inverse des aiguilles d'une "
|
||||
"montre)"
|
||||
|
||||
#: graphicswin.cpp:1305
|
||||
#: graphicswin.cpp:1306
|
||||
msgid "click to place datum point"
|
||||
msgstr "cliquez pour placer un point"
|
||||
|
||||
#: graphicswin.cpp:1306
|
||||
#: graphicswin.cpp:1307
|
||||
msgid "click first point of line segment"
|
||||
msgstr "cliquez le premier point du segment de ligne"
|
||||
|
||||
#: graphicswin.cpp:1308
|
||||
#: graphicswin.cpp:1309
|
||||
msgid "click first point of construction line segment"
|
||||
msgstr "cliquez le premier point de la ligne de construction"
|
||||
|
||||
#: graphicswin.cpp:1309
|
||||
#: graphicswin.cpp:1310
|
||||
msgid "click first point of cubic segment"
|
||||
msgstr "cliquez le premier point du segment cubique"
|
||||
|
||||
#: graphicswin.cpp:1310
|
||||
#: graphicswin.cpp:1311
|
||||
msgid "click center of circle"
|
||||
msgstr "cliquez pour placer le centre du cercle"
|
||||
|
||||
#: graphicswin.cpp:1311
|
||||
#: graphicswin.cpp:1312
|
||||
msgid "click origin of workplane"
|
||||
msgstr "cliquez pour placer l'origine du plan de travail"
|
||||
|
||||
#: graphicswin.cpp:1312
|
||||
#: graphicswin.cpp:1313
|
||||
msgid "click one corner of rectangle"
|
||||
msgstr "cliquez un coin du rectangle"
|
||||
|
||||
#: graphicswin.cpp:1313
|
||||
#: graphicswin.cpp:1314
|
||||
msgid "click top left of text"
|
||||
msgstr "cliquez le haut à gauche du texte"
|
||||
|
||||
#: graphicswin.cpp:1319
|
||||
#: graphicswin.cpp:1320
|
||||
msgid "click top left of image"
|
||||
msgstr "cliquez le haut à gauche de l'image"
|
||||
|
||||
#: graphicswin.cpp:1345
|
||||
#: graphicswin.cpp:1346
|
||||
msgid ""
|
||||
"No entities are selected. Select entities before trying to toggle their "
|
||||
"construction state."
|
||||
|
@ -1409,6 +1413,10 @@ msgstr "le contour s'entrecroise!"
|
|||
msgid "zero-length edge!"
|
||||
msgstr "arête de longueur nulle!"
|
||||
|
||||
#: importmesh.cpp:136
|
||||
msgid "Text-formated STL files are not currently supported"
|
||||
msgstr ""
|
||||
|
||||
#: modify.cpp:252
|
||||
msgid "Must be sketching in workplane to create tangent arc."
|
||||
msgstr "Vous devez dessiner dans un plan pour créer un arc tangent."
|
||||
|
@ -1604,7 +1612,7 @@ msgstr ""
|
|||
"Impossible de dessiner l'image en 3d; D'abord, activez un plan de travail "
|
||||
"avec \"Dessin -> Dans plan de travail\"."
|
||||
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:553
|
||||
msgctxt "file-type"
|
||||
msgid "SolveSpace models"
|
||||
msgstr ""
|
||||
|
@ -1699,130 +1707,130 @@ msgctxt "file-type"
|
|||
msgid "Comma-separated values"
|
||||
msgstr ""
|
||||
|
||||
#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641
|
||||
#: platform/guigtk.cpp:1382 platform/guimac.mm:1509 platform/guiwin.cpp:1641
|
||||
msgid "untitled"
|
||||
msgstr "sans nom"
|
||||
|
||||
#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445
|
||||
#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1467
|
||||
#: platform/guiwin.cpp:1639
|
||||
msgctxt "title"
|
||||
msgid "Save File"
|
||||
msgstr "Sauver fichier"
|
||||
|
||||
#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428
|
||||
#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1450
|
||||
#: platform/guiwin.cpp:1645
|
||||
msgctxt "title"
|
||||
msgid "Open File"
|
||||
msgstr "Ouvrir Fichier"
|
||||
|
||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
||||
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||
msgctxt "button"
|
||||
msgid "_Cancel"
|
||||
msgstr "_Annuler"
|
||||
|
||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
||||
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||
msgctxt "button"
|
||||
msgid "_Save"
|
||||
msgstr "_Sauver"
|
||||
|
||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
||||
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||
msgctxt "button"
|
||||
msgid "_Open"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:170
|
||||
#: solvespace.cpp:171
|
||||
msgctxt "title"
|
||||
msgid "Autosave Available"
|
||||
msgstr "Sauvegarde automatique existante"
|
||||
|
||||
#: solvespace.cpp:171
|
||||
#: solvespace.cpp:172
|
||||
msgctxt "dialog"
|
||||
msgid "An autosave file is available for this sketch."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:172
|
||||
#: solvespace.cpp:173
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to load the autosave file instead?"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:173
|
||||
#: solvespace.cpp:174
|
||||
msgctxt "button"
|
||||
msgid "&Load autosave"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:175
|
||||
#: solvespace.cpp:176
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Load"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:598
|
||||
#: solvespace.cpp:599
|
||||
msgctxt "title"
|
||||
msgid "Modified File"
|
||||
msgstr "Fichier modifié"
|
||||
|
||||
#: solvespace.cpp:600
|
||||
#: solvespace.cpp:601
|
||||
#, c-format
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:603
|
||||
#: solvespace.cpp:604
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the new sketch?"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:606
|
||||
#: solvespace.cpp:607
|
||||
msgctxt "dialog"
|
||||
msgid "Your changes will be lost if you don't save them."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:607
|
||||
#: solvespace.cpp:608
|
||||
msgctxt "button"
|
||||
msgid "&Save"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:609
|
||||
#: solvespace.cpp:610
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Save"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:630
|
||||
#: solvespace.cpp:631
|
||||
msgctxt "title"
|
||||
msgid "(new sketch)"
|
||||
msgstr "(nouveau dessin)"
|
||||
|
||||
#: solvespace.cpp:637
|
||||
#: solvespace.cpp:638
|
||||
msgctxt "title"
|
||||
msgid "Property Browser"
|
||||
msgstr "Navigateur de propriété"
|
||||
|
||||
#: solvespace.cpp:699
|
||||
#: solvespace.cpp:700
|
||||
msgid ""
|
||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
||||
"is probably not what you want; hide them by clicking the link at the top of "
|
||||
"the text window."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:771
|
||||
#: solvespace.cpp:772
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||
"dwg."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:823
|
||||
#: solvespace.cpp:824
|
||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:827
|
||||
#: solvespace.cpp:828
|
||||
msgid "Bad selection for step dimension; select a constraint."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:851
|
||||
#: solvespace.cpp:852
|
||||
msgid "The assembly does not interfere, good."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:867
|
||||
#: solvespace.cpp:868
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The volume of the solid model is:\n"
|
||||
|
@ -1830,7 +1838,7 @@ msgid ""
|
|||
" %s"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:876
|
||||
#: solvespace.cpp:877
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1839,7 +1847,7 @@ msgid ""
|
|||
" %s"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:881
|
||||
#: solvespace.cpp:882
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
|
@ -1847,7 +1855,7 @@ msgid ""
|
|||
"This introduces error, typically of around 1%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:896
|
||||
#: solvespace.cpp:897
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The surface area of the selected faces is:\n"
|
||||
|
@ -1858,13 +1866,13 @@ msgid ""
|
|||
"This introduces error, typically of around 1%%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:905
|
||||
#: solvespace.cpp:906
|
||||
msgid ""
|
||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||
"not coplanar, or self-intersecting."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:917
|
||||
#: solvespace.cpp:918
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The area of the region sketched in this group is:\n"
|
||||
|
@ -1875,7 +1883,7 @@ msgid ""
|
|||
"This introduces error, typically of around 1%%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:937
|
||||
#: solvespace.cpp:938
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The total length of the selected entities is:\n"
|
||||
|
@ -1886,36 +1894,36 @@ msgid ""
|
|||
"This introduces error, typically of around 1%%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:943
|
||||
#: solvespace.cpp:944
|
||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:959
|
||||
#: solvespace.cpp:960
|
||||
msgid "Bad selection for trace; select a single point."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:986
|
||||
#: solvespace.cpp:987
|
||||
#, c-format
|
||||
msgid "Couldn't write to '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1016
|
||||
#: solvespace.cpp:1017
|
||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1017
|
||||
#: solvespace.cpp:1018
|
||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1019
|
||||
#: solvespace.cpp:1020
|
||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1020
|
||||
#: solvespace.cpp:1021
|
||||
msgid "The mesh is watertight (okay, valid)."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1023
|
||||
#: solvespace.cpp:1024
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1923,7 +1931,7 @@ msgid ""
|
|||
"The model contains %d triangles, from %d surfaces."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1027
|
||||
#: solvespace.cpp:1028
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -1933,7 +1941,7 @@ msgid ""
|
|||
"Zero problematic edges, good.%s"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1030
|
||||
#: solvespace.cpp:1031
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -1943,7 +1951,7 @@ msgid ""
|
|||
"%d problematic edges, bad.%s"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1043
|
||||
#: solvespace.cpp:1044
|
||||
#, c-format
|
||||
msgid ""
|
||||
"This is SolveSpace version %s.\n"
|
||||
|
@ -1972,23 +1980,23 @@ msgstr ""
|
|||
msgid "Style name cannot be empty"
|
||||
msgstr "Le nom d'un style ne peut pas être vide"
|
||||
|
||||
#: textscreens.cpp:785
|
||||
#: textscreens.cpp:791
|
||||
msgid "Can't repeat fewer than 1 time."
|
||||
msgstr "Je ne peux pas répéter moins de 1 fois."
|
||||
|
||||
#: textscreens.cpp:789
|
||||
#: textscreens.cpp:795
|
||||
msgid "Can't repeat more than 999 times."
|
||||
msgstr "Je ne peux pas répéter plus de 999 fois."
|
||||
|
||||
#: textscreens.cpp:814
|
||||
#: textscreens.cpp:820
|
||||
msgid "Group name cannot be empty"
|
||||
msgstr "Un nom de groupe ne peut pas être vide"
|
||||
|
||||
#: textscreens.cpp:866
|
||||
#: textscreens.cpp:872
|
||||
msgid "Opacity must be between zero and one."
|
||||
msgstr "L'opacité doit être entre 0 et 1."
|
||||
|
||||
#: textscreens.cpp:901
|
||||
#: textscreens.cpp:907
|
||||
msgid "Radius cannot be zero or negative."
|
||||
msgstr "Le rayon ne peut pas être zéro ou négatif."
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: SolveSpace 3.0\n"
|
||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\n"
|
||||
"POT-Creation-Date: 2021-09-26 16:25-0400\n"
|
||||
"POT-Creation-Date: 2022-02-01 16:24+0200\n"
|
||||
"PO-Revision-Date: 2021-10-04 15:33+0300\n"
|
||||
"Last-Translator: Olesya Gerasimenko <translation-team@basealt.ru>\n"
|
||||
"Language-Team: Basealt Translation Team\n"
|
||||
|
@ -36,7 +36,7 @@ msgstr "Буфер обмена пуст; нечего вставлять."
|
|||
msgid "Number of copies to paste must be at least one."
|
||||
msgstr "Укажите в поле 'количество' хотя бы одну копию для вставки."
|
||||
|
||||
#: clipboard.cpp:389 textscreens.cpp:827
|
||||
#: clipboard.cpp:389 textscreens.cpp:833
|
||||
msgid "Scale cannot be zero."
|
||||
msgstr "Масштабный коэффициент не может быть нулевым."
|
||||
|
||||
|
@ -63,15 +63,15 @@ msgstr "Слишком много элементов для вставки; ра
|
|||
msgid "No workplane active."
|
||||
msgstr "Рабочая плоскость не активна"
|
||||
|
||||
#: confscreen.cpp:376
|
||||
#: confscreen.cpp:381
|
||||
msgid "Bad format: specify coordinates as x, y, z"
|
||||
msgstr "Неверный формат: введите координаты как x, y, z"
|
||||
|
||||
#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858
|
||||
#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:864
|
||||
msgid "Bad format: specify color as r, g, b"
|
||||
msgstr "Неверный формат: введите цвет как r, g, b"
|
||||
|
||||
#: confscreen.cpp:412
|
||||
#: confscreen.cpp:417
|
||||
msgid ""
|
||||
"The perspective factor will have no effect until you enable View -> Use "
|
||||
"Perspective Projection."
|
||||
|
@ -79,25 +79,25 @@ msgstr ""
|
|||
"Коэффициент перспективы не будет иметь эффект, пока вы не включите Вид-"
|
||||
">Перспективная Проекция."
|
||||
|
||||
#: confscreen.cpp:430 confscreen.cpp:440
|
||||
#: confscreen.cpp:435 confscreen.cpp:445
|
||||
#, c-format
|
||||
msgid "Specify between 0 and %d digits after the decimal."
|
||||
msgstr "Введите число от 0 до %d."
|
||||
|
||||
#: confscreen.cpp:452
|
||||
#: confscreen.cpp:457
|
||||
msgid "Export scale must not be zero!"
|
||||
msgstr "Масштабный коэффициент не может быть нулевым!"
|
||||
|
||||
#: confscreen.cpp:464
|
||||
#: confscreen.cpp:469
|
||||
msgid "Cutter radius offset must not be negative!"
|
||||
msgstr "Радиус режущего инструмента не может быть отрицательным!"
|
||||
|
||||
#: confscreen.cpp:518
|
||||
#: confscreen.cpp:528
|
||||
msgid "Bad value: autosave interval should be positive"
|
||||
msgstr ""
|
||||
"Неверное значение: интервал автосохранения должен быть положительным числом"
|
||||
|
||||
#: confscreen.cpp:521
|
||||
#: confscreen.cpp:531
|
||||
msgid "Bad format: specify interval in integral minutes"
|
||||
msgstr ""
|
||||
"Неверный формат: введите целое число, чтобы задать интервал автосохранения"
|
||||
|
@ -405,8 +405,8 @@ msgid ""
|
|||
" * two arcs\n"
|
||||
" * one arc and one line segment\n"
|
||||
msgstr ""
|
||||
"Неправильное выделение для ограничения 'отношение длин'. Ограничение может"
|
||||
" принимать в качестве выделения следующие примитивы:\n"
|
||||
"Неправильное выделение для ограничения 'отношение длин'. Ограничение может "
|
||||
"принимать в качестве выделения следующие примитивы:\n"
|
||||
"\n"
|
||||
" * два отрезка\n"
|
||||
" * две дуги\n"
|
||||
|
@ -421,8 +421,8 @@ msgid ""
|
|||
" * two arcs\n"
|
||||
" * one arc and one line segment\n"
|
||||
msgstr ""
|
||||
"Неправильное выделение для ограничения 'разность длин'. Ограничение может"
|
||||
" принимать в качестве выделения следующие примитивы:\n"
|
||||
"Неправильное выделение для ограничения 'разность длин'. Ограничение может "
|
||||
"принимать в качестве выделения следующие примитивы:\n"
|
||||
"\n"
|
||||
" * два отрезка\n"
|
||||
" * две дуги\n"
|
||||
|
@ -693,7 +693,7 @@ msgctxt "button"
|
|||
msgid "&No"
|
||||
msgstr "Нет"
|
||||
|
||||
#: file.cpp:877 solvespace.cpp:610
|
||||
#: file.cpp:877 solvespace.cpp:611
|
||||
msgctxt "button"
|
||||
msgid "&Cancel"
|
||||
msgstr "Отменить"
|
||||
|
@ -1146,24 +1146,28 @@ msgstr "&Язык"
|
|||
msgid "&Website / Manual"
|
||||
msgstr "Вебсайт / &Справка"
|
||||
|
||||
#: graphicswin.cpp:187
|
||||
#: graphicswin.cpp:186
|
||||
msgid "&Go to GitHub commit"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:188
|
||||
msgid "&About"
|
||||
msgstr "О &Программе"
|
||||
|
||||
#: graphicswin.cpp:361
|
||||
#: graphicswin.cpp:362
|
||||
msgid "(no recent files)"
|
||||
msgstr "(пусто)"
|
||||
|
||||
#: graphicswin.cpp:369
|
||||
#: graphicswin.cpp:370
|
||||
#, c-format
|
||||
msgid "File '%s' does not exist."
|
||||
msgstr "Файл '%s' не существует."
|
||||
|
||||
#: graphicswin.cpp:736
|
||||
#: graphicswin.cpp:737
|
||||
msgid "No workplane is active, so the grid will not appear."
|
||||
msgstr "Сетку не будет видно, пока рабочая плоскость не активирована."
|
||||
|
||||
#: graphicswin.cpp:751
|
||||
#: graphicswin.cpp:752
|
||||
msgid ""
|
||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||
"projection.\n"
|
||||
|
@ -1177,16 +1181,16 @@ msgstr ""
|
|||
"перспективы на конфигурационной странице браузера.\n"
|
||||
"Значение по умолчанию 0.3."
|
||||
|
||||
#: graphicswin.cpp:836
|
||||
#: graphicswin.cpp:837
|
||||
msgid ""
|
||||
"Select a point; this point will become the center of the view on screen."
|
||||
msgstr "Выделите точку. Вид будет отцентрован по этой точке."
|
||||
|
||||
#: graphicswin.cpp:1136
|
||||
#: graphicswin.cpp:1137
|
||||
msgid "No additional entities share endpoints with the selected entities."
|
||||
msgstr "Нет дополнительных объектов, соединенных с выбранными примитивами."
|
||||
|
||||
#: graphicswin.cpp:1154
|
||||
#: graphicswin.cpp:1155
|
||||
msgid ""
|
||||
"To use this command, select a point or other entity from an linked part, or "
|
||||
"make a link group the active group."
|
||||
|
@ -1195,7 +1199,7 @@ msgstr ""
|
|||
"принадлежащий импортированной детали, или активируйте группу импортированной "
|
||||
"детали."
|
||||
|
||||
#: graphicswin.cpp:1177
|
||||
#: graphicswin.cpp:1178
|
||||
msgid ""
|
||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||
"to define the plane for the snap grid."
|
||||
|
@ -1203,7 +1207,7 @@ msgstr ""
|
|||
"Рабочая плоскость не активна. Активируйте ее через Эскиз -> В Рабочей "
|
||||
"Плоскости чтобы определить плоскость для сетки."
|
||||
|
||||
#: graphicswin.cpp:1184
|
||||
#: graphicswin.cpp:1185
|
||||
msgid ""
|
||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||
"with a label. To snap a line, select its endpoints."
|
||||
|
@ -1212,13 +1216,13 @@ msgstr ""
|
|||
"текстовые комментарии или ограничения с размерными значениями. Чтобы "
|
||||
"привязать отрезок или другой примитив, выбирайте его точки."
|
||||
|
||||
#: graphicswin.cpp:1269
|
||||
#: graphicswin.cpp:1270
|
||||
msgid "No workplane selected. Activating default workplane for this group."
|
||||
msgstr ""
|
||||
"Рабочая плоскость не активна. Активирована рабочая плоскость по умолчанию "
|
||||
"для данной группы."
|
||||
|
||||
#: graphicswin.cpp:1272
|
||||
#: graphicswin.cpp:1273
|
||||
msgid ""
|
||||
"No workplane is selected, and the active group does not have a default "
|
||||
"workplane. Try selecting a workplane, or activating a sketch-in-new-"
|
||||
|
@ -1228,7 +1232,7 @@ msgstr ""
|
|||
"по умолчанию. Попробуйте выделить рабочую плоскость или создать новую с "
|
||||
"помощью Группа -> Создать Эскиз в Новой Рабочей Плоскости."
|
||||
|
||||
#: graphicswin.cpp:1293
|
||||
#: graphicswin.cpp:1294
|
||||
msgid ""
|
||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||
"nothing to set up arc parameters."
|
||||
|
@ -1237,54 +1241,54 @@ msgstr ""
|
|||
"точку, либо запустите команду без выделения, чтобы перейти к окну настроек "
|
||||
"этой команды."
|
||||
|
||||
#: graphicswin.cpp:1304
|
||||
#: graphicswin.cpp:1305
|
||||
msgid "click point on arc (draws anti-clockwise)"
|
||||
msgstr ""
|
||||
"кликните мышью там, где хотите создать дугу окружности (дуга будет "
|
||||
"нарисована против часовой стрелки)"
|
||||
|
||||
#: graphicswin.cpp:1305
|
||||
#: graphicswin.cpp:1306
|
||||
msgid "click to place datum point"
|
||||
msgstr "кликните мышью там, где хотите создать опорную точку"
|
||||
|
||||
#: graphicswin.cpp:1306
|
||||
#: graphicswin.cpp:1307
|
||||
msgid "click first point of line segment"
|
||||
msgstr "кликните мышью там, где хотите создать первую точку отрезка"
|
||||
|
||||
#: graphicswin.cpp:1308
|
||||
#: graphicswin.cpp:1309
|
||||
msgid "click first point of construction line segment"
|
||||
msgstr ""
|
||||
"кликните мышью там, где хотите создать первую точку вспомогательного отрезка"
|
||||
|
||||
#: graphicswin.cpp:1309
|
||||
#: graphicswin.cpp:1310
|
||||
msgid "click first point of cubic segment"
|
||||
msgstr ""
|
||||
"кликните мышью там, где хотите создать первую точку кубического сплайна Безье"
|
||||
|
||||
#: graphicswin.cpp:1310
|
||||
#: graphicswin.cpp:1311
|
||||
msgid "click center of circle"
|
||||
msgstr "кликните мышью там, где будет находиться центр окружности"
|
||||
|
||||
#: graphicswin.cpp:1311
|
||||
#: graphicswin.cpp:1312
|
||||
msgid "click origin of workplane"
|
||||
msgstr ""
|
||||
"кликните мышью там, где будет находиться точка, через которую будет "
|
||||
"построена рабочая плоскость"
|
||||
|
||||
#: graphicswin.cpp:1312
|
||||
#: graphicswin.cpp:1313
|
||||
msgid "click one corner of rectangle"
|
||||
msgstr "кликните мышью там, где будет находиться один из углов прямоугольника"
|
||||
|
||||
#: graphicswin.cpp:1313
|
||||
#: graphicswin.cpp:1314
|
||||
msgid "click top left of text"
|
||||
msgstr "кликните мышью там, где хотите создать текст"
|
||||
|
||||
#: graphicswin.cpp:1319
|
||||
#: graphicswin.cpp:1320
|
||||
msgid "click top left of image"
|
||||
msgstr ""
|
||||
"кликните мышью там, где будет расположен левый верхний угол изображения"
|
||||
|
||||
#: graphicswin.cpp:1345
|
||||
#: graphicswin.cpp:1346
|
||||
msgid ""
|
||||
"No entities are selected. Select entities before trying to toggle their "
|
||||
"construction state."
|
||||
|
@ -1307,9 +1311,8 @@ msgid ""
|
|||
" * a point and a normal (through the point, orthogonal to the normal)\n"
|
||||
" * a workplane (copy of the workplane)\n"
|
||||
msgstr ""
|
||||
"Неправильное выделение для создания эскиза в рабочей плоскости. Группа может"
|
||||
" быть создана, используя в качестве выделения следующие "
|
||||
"примитивы:\n"
|
||||
"Неправильное выделение для создания эскиза в рабочей плоскости. Группа может "
|
||||
"быть создана, используя в качестве выделения следующие примитивы:\n"
|
||||
"\n"
|
||||
" * точку (через точку, ортогонально осям координат)\n"
|
||||
" * точку и два отрезка (через точку, параллельно отрезкам)\n"
|
||||
|
@ -1462,6 +1465,10 @@ msgstr "контур имеет самопересечения!"
|
|||
msgid "zero-length edge!"
|
||||
msgstr "вырожденный отрезок!"
|
||||
|
||||
#: importmesh.cpp:136
|
||||
msgid "Text-formated STL files are not currently supported"
|
||||
msgstr ""
|
||||
|
||||
#: modify.cpp:252
|
||||
msgid "Must be sketching in workplane to create tangent arc."
|
||||
msgstr ""
|
||||
|
@ -1659,7 +1666,7 @@ msgid ""
|
|||
"Workplane."
|
||||
msgstr "Невозможно создать изображение. Активируйте рабочую плоскость."
|
||||
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:553
|
||||
msgctxt "file-type"
|
||||
msgid "SolveSpace models"
|
||||
msgstr "проекты SolveSpace"
|
||||
|
@ -1754,104 +1761,104 @@ msgctxt "file-type"
|
|||
msgid "Comma-separated values"
|
||||
msgstr "CSV файлы (значения, разделенные запятой)"
|
||||
|
||||
#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641
|
||||
#: platform/guigtk.cpp:1382 platform/guimac.mm:1509 platform/guiwin.cpp:1641
|
||||
msgid "untitled"
|
||||
msgstr "без имени"
|
||||
|
||||
#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445
|
||||
#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1467
|
||||
#: platform/guiwin.cpp:1639
|
||||
msgctxt "title"
|
||||
msgid "Save File"
|
||||
msgstr "Сохранить Файл"
|
||||
|
||||
#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428
|
||||
#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1450
|
||||
#: platform/guiwin.cpp:1645
|
||||
msgctxt "title"
|
||||
msgid "Open File"
|
||||
msgstr "Открыть Файл"
|
||||
|
||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
||||
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||
msgctxt "button"
|
||||
msgid "_Cancel"
|
||||
msgstr "Отменить"
|
||||
|
||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
||||
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||
msgctxt "button"
|
||||
msgid "_Save"
|
||||
msgstr "Сохранить"
|
||||
|
||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
||||
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||
msgctxt "button"
|
||||
msgid "_Open"
|
||||
msgstr "_Открыть"
|
||||
|
||||
#: solvespace.cpp:170
|
||||
#: solvespace.cpp:171
|
||||
msgctxt "title"
|
||||
msgid "Autosave Available"
|
||||
msgstr "Автосохранение Доступно"
|
||||
|
||||
#: solvespace.cpp:171
|
||||
#: solvespace.cpp:172
|
||||
msgctxt "dialog"
|
||||
msgid "An autosave file is available for this sketch."
|
||||
msgstr "Автоматически сохраненный файл доступен для данного проекта."
|
||||
|
||||
#: solvespace.cpp:172
|
||||
#: solvespace.cpp:173
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to load the autosave file instead?"
|
||||
msgstr "Хотите загрузить автосохраненный файл вместо исходного?"
|
||||
|
||||
#: solvespace.cpp:173
|
||||
#: solvespace.cpp:174
|
||||
msgctxt "button"
|
||||
msgid "&Load autosave"
|
||||
msgstr "&Загрузить Автосохранение"
|
||||
|
||||
#: solvespace.cpp:175
|
||||
#: solvespace.cpp:176
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Load"
|
||||
msgstr "&Не Загружать"
|
||||
|
||||
#: solvespace.cpp:598
|
||||
#: solvespace.cpp:599
|
||||
msgctxt "title"
|
||||
msgid "Modified File"
|
||||
msgstr "Измененный Файл"
|
||||
|
||||
#: solvespace.cpp:600
|
||||
#: solvespace.cpp:601
|
||||
#, c-format
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||
msgstr "Сохранить изменения, сделанные в файле “%s”?"
|
||||
|
||||
#: solvespace.cpp:603
|
||||
#: solvespace.cpp:604
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the new sketch?"
|
||||
msgstr "Сохранить изменения, сделанные в новом проекте?"
|
||||
|
||||
#: solvespace.cpp:606
|
||||
#: solvespace.cpp:607
|
||||
msgctxt "dialog"
|
||||
msgid "Your changes will be lost if you don't save them."
|
||||
msgstr "Изменения будут утеряны, если их не сохранить."
|
||||
|
||||
#: solvespace.cpp:607
|
||||
#: solvespace.cpp:608
|
||||
msgctxt "button"
|
||||
msgid "&Save"
|
||||
msgstr "&Сохранить"
|
||||
|
||||
#: solvespace.cpp:609
|
||||
#: solvespace.cpp:610
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Save"
|
||||
msgstr "&Не Сохранять"
|
||||
|
||||
#: solvespace.cpp:630
|
||||
#: solvespace.cpp:631
|
||||
msgctxt "title"
|
||||
msgid "(new sketch)"
|
||||
msgstr "(новый проект)"
|
||||
|
||||
#: solvespace.cpp:637
|
||||
#: solvespace.cpp:638
|
||||
msgctxt "title"
|
||||
msgid "Property Browser"
|
||||
msgstr "Браузер"
|
||||
|
||||
#: solvespace.cpp:699
|
||||
#: solvespace.cpp:700
|
||||
msgid ""
|
||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
||||
"is probably not what you want; hide them by clicking the link at the top of "
|
||||
|
@ -1861,7 +1868,7 @@ msgstr ""
|
|||
"это не то, что требуется, если так, необходимо спрятать их, нажав ссылку "
|
||||
"вверху окна Браузера."
|
||||
|
||||
#: solvespace.cpp:771
|
||||
#: solvespace.cpp:772
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||
|
@ -1870,21 +1877,21 @@ msgstr ""
|
|||
"Неподдерживаемый тип файла '%s'. Поддерживаются файлы с расширением .dxf и ."
|
||||
"dwg."
|
||||
|
||||
#: solvespace.cpp:823
|
||||
#: solvespace.cpp:824
|
||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||
msgstr "У ограничения должно быть значение и оно не должно быть справочным."
|
||||
|
||||
#: solvespace.cpp:827
|
||||
#: solvespace.cpp:828
|
||||
msgid "Bad selection for step dimension; select a constraint."
|
||||
msgstr ""
|
||||
"Неправильное выделение для операции изменения значения с заданным шагом; "
|
||||
"необходимо выбрать ограничение со значением."
|
||||
|
||||
#: solvespace.cpp:851
|
||||
#: solvespace.cpp:852
|
||||
msgid "The assembly does not interfere, good."
|
||||
msgstr "Сборка не содержит пересечения деталей - это хорошо."
|
||||
|
||||
#: solvespace.cpp:867
|
||||
#: solvespace.cpp:868
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The volume of the solid model is:\n"
|
||||
|
@ -1895,7 +1902,7 @@ msgstr ""
|
|||
"\n"
|
||||
" %s"
|
||||
|
||||
#: solvespace.cpp:876
|
||||
#: solvespace.cpp:877
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1908,7 +1915,7 @@ msgstr ""
|
|||
"\n"
|
||||
" %s"
|
||||
|
||||
#: solvespace.cpp:881
|
||||
#: solvespace.cpp:882
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
|
@ -1920,7 +1927,7 @@ msgstr ""
|
|||
"Кривые аппроксимированы кусочно-линейными функциями.\n"
|
||||
"Это приводит к ошибке в расчетах, обычно в пределах 1%."
|
||||
|
||||
#: solvespace.cpp:896
|
||||
#: solvespace.cpp:897
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The surface area of the selected faces is:\n"
|
||||
|
@ -1937,7 +1944,7 @@ msgstr ""
|
|||
"Кривые аппроксимированы кусочно-линейными функциями.\n"
|
||||
"Это приводит к ошибке в расчетах, обычно в пределах 1%%."
|
||||
|
||||
#: solvespace.cpp:905
|
||||
#: solvespace.cpp:906
|
||||
msgid ""
|
||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||
"not coplanar, or self-intersecting."
|
||||
|
@ -1945,7 +1952,7 @@ msgstr ""
|
|||
"Эта группа не содержит замкнутых областей. В ней нет замкнутых контуров, "
|
||||
"примитивы не лежат в одной плоскости или самопересекаются."
|
||||
|
||||
#: solvespace.cpp:917
|
||||
#: solvespace.cpp:918
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The area of the region sketched in this group is:\n"
|
||||
|
@ -1962,7 +1969,7 @@ msgstr ""
|
|||
"Кривые аппроксимированы кусочно-линейными функциями.\n"
|
||||
"Это приводит к ошибке в расчетах, обычно в пределах 1%%."
|
||||
|
||||
#: solvespace.cpp:937
|
||||
#: solvespace.cpp:938
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The total length of the selected entities is:\n"
|
||||
|
@ -1979,38 +1986,38 @@ msgstr ""
|
|||
"Кривые аппроксимированы кусочно-линейными функциями.\n"
|
||||
"Это приводит к ошибке в расчетах, обычно в пределах 1%%."
|
||||
|
||||
#: solvespace.cpp:943
|
||||
#: solvespace.cpp:944
|
||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||
msgstr ""
|
||||
"Неправильное выделение для расчета периметра; необходимо выбирать только "
|
||||
"отрезки, дуги и кривые в качестве исходных данных"
|
||||
|
||||
#: solvespace.cpp:959
|
||||
#: solvespace.cpp:960
|
||||
msgid "Bad selection for trace; select a single point."
|
||||
msgstr "Неправильное выделение для трассировки; необходимо выбрать одну точку."
|
||||
|
||||
#: solvespace.cpp:986
|
||||
#: solvespace.cpp:987
|
||||
#, c-format
|
||||
msgid "Couldn't write to '%s'"
|
||||
msgstr "Невозможно записать в '%s'"
|
||||
|
||||
#: solvespace.cpp:1016
|
||||
#: solvespace.cpp:1017
|
||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||
msgstr "Полигональная сетка содержит самопересечения (это плохо)"
|
||||
|
||||
#: solvespace.cpp:1017
|
||||
#: solvespace.cpp:1018
|
||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||
msgstr "Полигональная сетка не содержит самопересечений (это хорошо)"
|
||||
|
||||
#: solvespace.cpp:1019
|
||||
#: solvespace.cpp:1020
|
||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||
msgstr "Полигональная сетка содержит \"оголенные\" ребра (это плохо)"
|
||||
|
||||
#: solvespace.cpp:1020
|
||||
#: solvespace.cpp:1021
|
||||
msgid "The mesh is watertight (okay, valid)."
|
||||
msgstr "Полигональная сетка герметична (это хорошо)"
|
||||
|
||||
#: solvespace.cpp:1023
|
||||
#: solvespace.cpp:1024
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -2021,7 +2028,7 @@ msgstr ""
|
|||
"\n"
|
||||
"Модель содержит %d треугольников, содержащихся в %d поверхностях."
|
||||
|
||||
#: solvespace.cpp:1027
|
||||
#: solvespace.cpp:1028
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -2036,7 +2043,7 @@ msgstr ""
|
|||
"\n"
|
||||
"Нет проблемных ребер - это хорошо.%s"
|
||||
|
||||
#: solvespace.cpp:1030
|
||||
#: solvespace.cpp:1031
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -2051,7 +2058,7 @@ msgstr ""
|
|||
"\n"
|
||||
"%d найдены проблемные ребра - это плохо.%s"
|
||||
|
||||
#: solvespace.cpp:1043
|
||||
#: solvespace.cpp:1044
|
||||
#, c-format
|
||||
msgid ""
|
||||
"This is SolveSpace version %s.\n"
|
||||
|
@ -2094,23 +2101,23 @@ msgstr ""
|
|||
msgid "Style name cannot be empty"
|
||||
msgstr "Имя стиля не может быть пустым."
|
||||
|
||||
#: textscreens.cpp:785
|
||||
#: textscreens.cpp:791
|
||||
msgid "Can't repeat fewer than 1 time."
|
||||
msgstr "Невозможно сделать повторение меньше, чем 1 раз."
|
||||
|
||||
#: textscreens.cpp:789
|
||||
#: textscreens.cpp:795
|
||||
msgid "Can't repeat more than 999 times."
|
||||
msgstr "Невозможно сделать повтор больше, чем 999 раз."
|
||||
|
||||
#: textscreens.cpp:814
|
||||
#: textscreens.cpp:820
|
||||
msgid "Group name cannot be empty"
|
||||
msgstr "Имя группы не может быть пустым."
|
||||
|
||||
#: textscreens.cpp:866
|
||||
#: textscreens.cpp:872
|
||||
msgid "Opacity must be between zero and one."
|
||||
msgstr "Прозрачность должна быть числом от нуля до единицы."
|
||||
|
||||
#: textscreens.cpp:901
|
||||
#: textscreens.cpp:907
|
||||
msgid "Radius cannot be zero or negative."
|
||||
msgstr "Радиус не может быть нулевым или отрицательным."
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -6,7 +6,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: SolveSpace 3.0\n"
|
||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\n"
|
||||
"POT-Creation-Date: 2021-09-26 16:25-0400\n"
|
||||
"POT-Creation-Date: 2022-02-01 16:24+0200\n"
|
||||
"PO-Revision-Date: 2021-04-14 01:42+0300\n"
|
||||
"Last-Translator: https://github.com/Symbian9\n"
|
||||
"Language-Team: app4soft\n"
|
||||
|
@ -35,7 +35,7 @@ msgstr "Буфер обміну порожній; немає чого встав
|
|||
msgid "Number of copies to paste must be at least one."
|
||||
msgstr "Кількість копій для вставки має бути не менше одної."
|
||||
|
||||
#: clipboard.cpp:389 textscreens.cpp:827
|
||||
#: clipboard.cpp:389 textscreens.cpp:833
|
||||
msgid "Scale cannot be zero."
|
||||
msgstr "Масштаб не може бути нульовим."
|
||||
|
||||
|
@ -62,15 +62,15 @@ msgstr "Забагато об'єктів для вставки; рзділіть
|
|||
msgid "No workplane active."
|
||||
msgstr "Немає активної площини."
|
||||
|
||||
#: confscreen.cpp:376
|
||||
#: confscreen.cpp:381
|
||||
msgid "Bad format: specify coordinates as x, y, z"
|
||||
msgstr "Некоректний формат: визначте координати X, Y, Z"
|
||||
|
||||
#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858
|
||||
#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:864
|
||||
msgid "Bad format: specify color as r, g, b"
|
||||
msgstr "Некоректний формат: визначте колір як R, G, B"
|
||||
|
||||
#: confscreen.cpp:412
|
||||
#: confscreen.cpp:417
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The perspective factor will have no effect until you enable View -> Use "
|
||||
|
@ -79,24 +79,24 @@ msgstr ""
|
|||
"Значення перспективи не матиме ефекту допоки не ввімкнено Вигляд -> "
|
||||
"Використовувати Перспективну проєкцію."
|
||||
|
||||
#: confscreen.cpp:430 confscreen.cpp:440
|
||||
#: confscreen.cpp:435 confscreen.cpp:445
|
||||
#, c-format
|
||||
msgid "Specify between 0 and %d digits after the decimal."
|
||||
msgstr "Визначте кількість десяткових знаків від 0 до %d."
|
||||
|
||||
#: confscreen.cpp:452
|
||||
#: confscreen.cpp:457
|
||||
msgid "Export scale must not be zero!"
|
||||
msgstr "Масштаб експорту не може бути нульовим!"
|
||||
|
||||
#: confscreen.cpp:464
|
||||
#: confscreen.cpp:469
|
||||
msgid "Cutter radius offset must not be negative!"
|
||||
msgstr "Радіус відступу різання не може бути від'ємним!"
|
||||
|
||||
#: confscreen.cpp:518
|
||||
#: confscreen.cpp:528
|
||||
msgid "Bad value: autosave interval should be positive"
|
||||
msgstr "Некоректне значення: інтервал автозбереження має бути додатнім"
|
||||
|
||||
#: confscreen.cpp:521
|
||||
#: confscreen.cpp:531
|
||||
#, fuzzy
|
||||
msgid "Bad format: specify interval in integral minutes"
|
||||
msgstr "Некоректний формат: визначте цілим числом інтервал у хвилинах"
|
||||
|
@ -579,7 +579,7 @@ msgctxt "button"
|
|||
msgid "&No"
|
||||
msgstr "&Ні"
|
||||
|
||||
#: file.cpp:877 solvespace.cpp:610
|
||||
#: file.cpp:877 solvespace.cpp:611
|
||||
msgctxt "button"
|
||||
msgid "&Cancel"
|
||||
msgstr "&Відмінити"
|
||||
|
@ -1032,24 +1032,28 @@ msgstr "&Мова"
|
|||
msgid "&Website / Manual"
|
||||
msgstr "&Вебсайт / Посібник"
|
||||
|
||||
#: graphicswin.cpp:187
|
||||
#: graphicswin.cpp:186
|
||||
msgid "&Go to GitHub commit"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:188
|
||||
msgid "&About"
|
||||
msgstr "&Про програму"
|
||||
|
||||
#: graphicswin.cpp:361
|
||||
#: graphicswin.cpp:362
|
||||
msgid "(no recent files)"
|
||||
msgstr "(нємає нещодавніх файлів)"
|
||||
|
||||
#: graphicswin.cpp:369
|
||||
#: graphicswin.cpp:370
|
||||
#, c-format
|
||||
msgid "File '%s' does not exist."
|
||||
msgstr "Файл '%s' відсутній."
|
||||
|
||||
#: graphicswin.cpp:736
|
||||
#: graphicswin.cpp:737
|
||||
msgid "No workplane is active, so the grid will not appear."
|
||||
msgstr "Відсутня активна площина - сітка не відображатиметься."
|
||||
|
||||
#: graphicswin.cpp:751
|
||||
#: graphicswin.cpp:752
|
||||
msgid ""
|
||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||
"projection.\n"
|
||||
|
@ -1058,91 +1062,91 @@ msgid ""
|
|||
"configuration screen. A value around 0.3 is typical."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:836
|
||||
#: graphicswin.cpp:837
|
||||
msgid ""
|
||||
"Select a point; this point will become the center of the view on screen."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1136
|
||||
#: graphicswin.cpp:1137
|
||||
msgid "No additional entities share endpoints with the selected entities."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1154
|
||||
#: graphicswin.cpp:1155
|
||||
msgid ""
|
||||
"To use this command, select a point or other entity from an linked part, or "
|
||||
"make a link group the active group."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1177
|
||||
#: graphicswin.cpp:1178
|
||||
msgid ""
|
||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||
"to define the plane for the snap grid."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1184
|
||||
#: graphicswin.cpp:1185
|
||||
msgid ""
|
||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||
"with a label. To snap a line, select its endpoints."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1269
|
||||
#: graphicswin.cpp:1270
|
||||
msgid "No workplane selected. Activating default workplane for this group."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1272
|
||||
#: graphicswin.cpp:1273
|
||||
msgid ""
|
||||
"No workplane is selected, and the active group does not have a default "
|
||||
"workplane. Try selecting a workplane, or activating a sketch-in-new-"
|
||||
"workplane group."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1293
|
||||
#: graphicswin.cpp:1294
|
||||
msgid ""
|
||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||
"nothing to set up arc parameters."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1304
|
||||
#: graphicswin.cpp:1305
|
||||
msgid "click point on arc (draws anti-clockwise)"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1305
|
||||
#: graphicswin.cpp:1306
|
||||
msgid "click to place datum point"
|
||||
msgstr "клікніть для встановлення вихідної точки"
|
||||
|
||||
#: graphicswin.cpp:1306
|
||||
#: graphicswin.cpp:1307
|
||||
msgid "click first point of line segment"
|
||||
msgstr "клікніть першу точку прямої лінії"
|
||||
|
||||
#: graphicswin.cpp:1308
|
||||
#: graphicswin.cpp:1309
|
||||
msgid "click first point of construction line segment"
|
||||
msgstr "клікніть першу точку конструктивної прямої лінії"
|
||||
|
||||
#: graphicswin.cpp:1309
|
||||
#: graphicswin.cpp:1310
|
||||
msgid "click first point of cubic segment"
|
||||
msgstr "клікніть першу точку кривої"
|
||||
|
||||
#: graphicswin.cpp:1310
|
||||
#: graphicswin.cpp:1311
|
||||
msgid "click center of circle"
|
||||
msgstr "клікніть в місце де буде центр коментаря"
|
||||
|
||||
#: graphicswin.cpp:1311
|
||||
#: graphicswin.cpp:1312
|
||||
msgid "click origin of workplane"
|
||||
msgstr "клікніть в центр відліку площини"
|
||||
|
||||
#: graphicswin.cpp:1312
|
||||
#: graphicswin.cpp:1313
|
||||
msgid "click one corner of rectangle"
|
||||
msgstr "клікніть для встановлення першого кута прямокутника"
|
||||
|
||||
#: graphicswin.cpp:1313
|
||||
#: graphicswin.cpp:1314
|
||||
msgid "click top left of text"
|
||||
msgstr "клікніть для встановлення верхньої лівої межі тексту"
|
||||
|
||||
#: graphicswin.cpp:1319
|
||||
#: graphicswin.cpp:1320
|
||||
msgid "click top left of image"
|
||||
msgstr "клікніть для встановлення верхньої лівої межі зображення"
|
||||
|
||||
#: graphicswin.cpp:1345
|
||||
#: graphicswin.cpp:1346
|
||||
msgid ""
|
||||
"No entities are selected. Select entities before trying to toggle their "
|
||||
"construction state."
|
||||
|
@ -1271,6 +1275,10 @@ msgstr "контур самоперетинається!"
|
|||
msgid "zero-length edge!"
|
||||
msgstr "ребро нульової довжини!"
|
||||
|
||||
#: importmesh.cpp:136
|
||||
msgid "Text-formated STL files are not currently supported"
|
||||
msgstr ""
|
||||
|
||||
#: modify.cpp:252
|
||||
msgid "Must be sketching in workplane to create tangent arc."
|
||||
msgstr ""
|
||||
|
@ -1452,7 +1460,7 @@ msgid ""
|
|||
"Workplane."
|
||||
msgstr ""
|
||||
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:553
|
||||
msgctxt "file-type"
|
||||
msgid "SolveSpace models"
|
||||
msgstr "SolveSpace модель"
|
||||
|
@ -1547,130 +1555,130 @@ msgctxt "file-type"
|
|||
msgid "Comma-separated values"
|
||||
msgstr "Comma-separated values"
|
||||
|
||||
#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641
|
||||
#: platform/guigtk.cpp:1382 platform/guimac.mm:1509 platform/guiwin.cpp:1641
|
||||
msgid "untitled"
|
||||
msgstr "без імені"
|
||||
|
||||
#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445
|
||||
#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1467
|
||||
#: platform/guiwin.cpp:1639
|
||||
msgctxt "title"
|
||||
msgid "Save File"
|
||||
msgstr "Зберегти Файл"
|
||||
|
||||
#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428
|
||||
#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1450
|
||||
#: platform/guiwin.cpp:1645
|
||||
msgctxt "title"
|
||||
msgid "Open File"
|
||||
msgstr "Відкрити Файл"
|
||||
|
||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
||||
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||
msgctxt "button"
|
||||
msgid "_Cancel"
|
||||
msgstr "_Скасувати"
|
||||
|
||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
||||
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||
msgctxt "button"
|
||||
msgid "_Save"
|
||||
msgstr "_Зберегти"
|
||||
|
||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
||||
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||
msgctxt "button"
|
||||
msgid "_Open"
|
||||
msgstr "_Відкрити"
|
||||
|
||||
#: solvespace.cpp:170
|
||||
#: solvespace.cpp:171
|
||||
msgctxt "title"
|
||||
msgid "Autosave Available"
|
||||
msgstr "Наявні автозбереження"
|
||||
|
||||
#: solvespace.cpp:171
|
||||
#: solvespace.cpp:172
|
||||
msgctxt "dialog"
|
||||
msgid "An autosave file is available for this sketch."
|
||||
msgstr "Наявні автозбереження для цього креслення."
|
||||
|
||||
#: solvespace.cpp:172
|
||||
#: solvespace.cpp:173
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to load the autosave file instead?"
|
||||
msgstr "Завантажити файл автозбереження?"
|
||||
|
||||
#: solvespace.cpp:173
|
||||
#: solvespace.cpp:174
|
||||
msgctxt "button"
|
||||
msgid "&Load autosave"
|
||||
msgstr "&Завантажити автозбереження"
|
||||
|
||||
#: solvespace.cpp:175
|
||||
#: solvespace.cpp:176
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Load"
|
||||
msgstr "&Не Завантажувати"
|
||||
|
||||
#: solvespace.cpp:598
|
||||
#: solvespace.cpp:599
|
||||
msgctxt "title"
|
||||
msgid "Modified File"
|
||||
msgstr "Файл Змінено"
|
||||
|
||||
#: solvespace.cpp:600
|
||||
#: solvespace.cpp:601
|
||||
#, c-format
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||
msgstr "Чи хочете ви зберегти зміни зроблені вами у ескізі “%s”?"
|
||||
|
||||
#: solvespace.cpp:603
|
||||
#: solvespace.cpp:604
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the new sketch?"
|
||||
msgstr "Чи хочете ви зберегти зміни зроблені вами у новому ескізі?"
|
||||
|
||||
#: solvespace.cpp:606
|
||||
#: solvespace.cpp:607
|
||||
msgctxt "dialog"
|
||||
msgid "Your changes will be lost if you don't save them."
|
||||
msgstr "Ваші зміни буде втрачено якщо ви не збережете їх."
|
||||
|
||||
#: solvespace.cpp:607
|
||||
#: solvespace.cpp:608
|
||||
msgctxt "button"
|
||||
msgid "&Save"
|
||||
msgstr "&Зберегти"
|
||||
|
||||
#: solvespace.cpp:609
|
||||
#: solvespace.cpp:610
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Save"
|
||||
msgstr "&Не Зберігати"
|
||||
|
||||
#: solvespace.cpp:630
|
||||
#: solvespace.cpp:631
|
||||
msgctxt "title"
|
||||
msgid "(new sketch)"
|
||||
msgstr "(нове креслення)"
|
||||
|
||||
#: solvespace.cpp:637
|
||||
#: solvespace.cpp:638
|
||||
msgctxt "title"
|
||||
msgid "Property Browser"
|
||||
msgstr "Браузер Властивостей"
|
||||
|
||||
#: solvespace.cpp:699
|
||||
#: solvespace.cpp:700
|
||||
msgid ""
|
||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
||||
"is probably not what you want; hide them by clicking the link at the top of "
|
||||
"the text window."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:771
|
||||
#: solvespace.cpp:772
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||
"dwg."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:823
|
||||
#: solvespace.cpp:824
|
||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||
msgstr "Обмежувач має містити мітку і бути не відносним розміром."
|
||||
|
||||
#: solvespace.cpp:827
|
||||
#: solvespace.cpp:828
|
||||
msgid "Bad selection for step dimension; select a constraint."
|
||||
msgstr "Поганий вибір для крокової зміни розміру; оберіть обмежувач."
|
||||
|
||||
#: solvespace.cpp:851
|
||||
#: solvespace.cpp:852
|
||||
msgid "The assembly does not interfere, good."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:867
|
||||
#: solvespace.cpp:868
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The volume of the solid model is:\n"
|
||||
|
@ -1681,7 +1689,7 @@ msgstr ""
|
|||
"\n"
|
||||
" %s"
|
||||
|
||||
#: solvespace.cpp:876
|
||||
#: solvespace.cpp:877
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1694,7 +1702,7 @@ msgstr ""
|
|||
"\n"
|
||||
" %s"
|
||||
|
||||
#: solvespace.cpp:881
|
||||
#: solvespace.cpp:882
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
|
@ -1702,7 +1710,7 @@ msgid ""
|
|||
"This introduces error, typically of around 1%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:896
|
||||
#: solvespace.cpp:897
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The surface area of the selected faces is:\n"
|
||||
|
@ -1713,7 +1721,7 @@ msgid ""
|
|||
"This introduces error, typically of around 1%%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:905
|
||||
#: solvespace.cpp:906
|
||||
msgid ""
|
||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||
"not coplanar, or self-intersecting."
|
||||
|
@ -1721,7 +1729,7 @@ msgstr ""
|
|||
"Ця група не місить коректно сформованого замкненої 2D площини. Вона "
|
||||
"відкрита, не компланарна, або ж самоперетинається."
|
||||
|
||||
#: solvespace.cpp:917
|
||||
#: solvespace.cpp:918
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The area of the region sketched in this group is:\n"
|
||||
|
@ -1738,7 +1746,7 @@ msgstr ""
|
|||
"Криві наближено до ламаних ліній.\n"
|
||||
"Це вносить похибку, зазвичай близько 1%%."
|
||||
|
||||
#: solvespace.cpp:937
|
||||
#: solvespace.cpp:938
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The total length of the selected entities is:\n"
|
||||
|
@ -1755,36 +1763,36 @@ msgstr ""
|
|||
"Криві наближено до ламаних ліній.\n"
|
||||
"Це вносить похибку, зазвичай близько 1%%."
|
||||
|
||||
#: solvespace.cpp:943
|
||||
#: solvespace.cpp:944
|
||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||
msgstr "Поганий вибір для периметру; оберіть відрізки, дуги та криві."
|
||||
|
||||
#: solvespace.cpp:959
|
||||
#: solvespace.cpp:960
|
||||
msgid "Bad selection for trace; select a single point."
|
||||
msgstr "Поганий вибір для вістежування шляху; оберіть одну точку."
|
||||
|
||||
#: solvespace.cpp:986
|
||||
#: solvespace.cpp:987
|
||||
#, c-format
|
||||
msgid "Couldn't write to '%s'"
|
||||
msgstr "Неможливо записати у '%s'"
|
||||
|
||||
#: solvespace.cpp:1016
|
||||
#: solvespace.cpp:1017
|
||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||
msgstr "Меш самоперетинається (НЕ добре, недійсний)."
|
||||
|
||||
#: solvespace.cpp:1017
|
||||
#: solvespace.cpp:1018
|
||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||
msgstr "Меш самоперетинається (добре, дійсний)."
|
||||
|
||||
#: solvespace.cpp:1019
|
||||
#: solvespace.cpp:1020
|
||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||
msgstr "Меш містить оголені ребра (НЕ добре, недійсний)."
|
||||
|
||||
#: solvespace.cpp:1020
|
||||
#: solvespace.cpp:1021
|
||||
msgid "The mesh is watertight (okay, valid)."
|
||||
msgstr "Меш водонепроникний (добре, дійсний)."
|
||||
|
||||
#: solvespace.cpp:1023
|
||||
#: solvespace.cpp:1024
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1792,7 +1800,7 @@ msgid ""
|
|||
"The model contains %d triangles, from %d surfaces."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1027
|
||||
#: solvespace.cpp:1028
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -1807,7 +1815,7 @@ msgstr ""
|
|||
"\n"
|
||||
"Відсутні проблемні ребра, добре.%s"
|
||||
|
||||
#: solvespace.cpp:1030
|
||||
#: solvespace.cpp:1031
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -1822,7 +1830,7 @@ msgstr ""
|
|||
"\n"
|
||||
"%d проблемних ребер, погано.%s"
|
||||
|
||||
#: solvespace.cpp:1043
|
||||
#: solvespace.cpp:1044
|
||||
#, c-format
|
||||
msgid ""
|
||||
"This is SolveSpace version %s.\n"
|
||||
|
@ -1863,23 +1871,23 @@ msgstr ""
|
|||
msgid "Style name cannot be empty"
|
||||
msgstr "Стиль не може містити порожнє ім'я"
|
||||
|
||||
#: textscreens.cpp:785
|
||||
#: textscreens.cpp:791
|
||||
msgid "Can't repeat fewer than 1 time."
|
||||
msgstr "Не можливо повторити менше 1 разу."
|
||||
|
||||
#: textscreens.cpp:789
|
||||
#: textscreens.cpp:795
|
||||
msgid "Can't repeat more than 999 times."
|
||||
msgstr "Не можливо повторити понад 999 разів."
|
||||
|
||||
#: textscreens.cpp:814
|
||||
#: textscreens.cpp:820
|
||||
msgid "Group name cannot be empty"
|
||||
msgstr "Група не може містити порожнє ім'я"
|
||||
|
||||
#: textscreens.cpp:866
|
||||
#: textscreens.cpp:872
|
||||
msgid "Opacity must be between zero and one."
|
||||
msgstr "Непрозорість має бути між 0 та 1."
|
||||
|
||||
#: textscreens.cpp:901
|
||||
#: textscreens.cpp:907
|
||||
msgid "Radius cannot be zero or negative."
|
||||
msgstr "Радіус не може бути нульовим чи від'ємним."
|
||||
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
# Copyright (C) 2020 the PACKAGE authors
|
||||
# This file is distributed under the same license as the SolveSpace package.
|
||||
# <lomatus@163.com>, 2020.
|
||||
#
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SolveSpace 3.0\n"
|
||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\n"
|
||||
"POT-Creation-Date: 2021-09-26 16:25-0400\n"
|
||||
"POT-Creation-Date: 2022-02-01 16:24+0200\n"
|
||||
"PO-Revision-Date: 2021-04-03 13:10-0400\n"
|
||||
"Last-Translator: lomatus@163.com\n"
|
||||
"Language-Team: none\n"
|
||||
|
@ -35,7 +35,7 @@ msgstr "剪贴板为空;没有要粘贴的内容。"
|
|||
msgid "Number of copies to paste must be at least one."
|
||||
msgstr "要粘贴的副本数必须至少为 1 个。"
|
||||
|
||||
#: clipboard.cpp:389 textscreens.cpp:827
|
||||
#: clipboard.cpp:389 textscreens.cpp:833
|
||||
msgid "Scale cannot be zero."
|
||||
msgstr "缩放不能为零。"
|
||||
|
||||
|
@ -61,38 +61,38 @@ msgstr "要粘贴的项目太多; 请把他们拆分。"
|
|||
msgid "No workplane active."
|
||||
msgstr "没有工作平面处于活动状态。"
|
||||
|
||||
#: confscreen.cpp:376
|
||||
#: confscreen.cpp:381
|
||||
msgid "Bad format: specify coordinates as x, y, z"
|
||||
msgstr "格式错误:将坐标指定为 x、y、z"
|
||||
|
||||
#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858
|
||||
#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:864
|
||||
msgid "Bad format: specify color as r, g, b"
|
||||
msgstr "格式错误:将颜色指定为 r、g、b"
|
||||
|
||||
#: confscreen.cpp:412
|
||||
#: confscreen.cpp:417
|
||||
msgid ""
|
||||
"The perspective factor will have no effect until you enable View -> Use "
|
||||
"Perspective Projection."
|
||||
msgstr "在启用\"视图 -= 使用透视投影\"之前,透视因子将不起作用。"
|
||||
|
||||
#: confscreen.cpp:430 confscreen.cpp:440
|
||||
#: confscreen.cpp:435 confscreen.cpp:445
|
||||
#, c-format
|
||||
msgid "Specify between 0 and %d digits after the decimal."
|
||||
msgstr "在十进制之后指定 0 和 %d 数字之间。"
|
||||
|
||||
#: confscreen.cpp:452
|
||||
#: confscreen.cpp:457
|
||||
msgid "Export scale must not be zero!"
|
||||
msgstr "输出比例不能为零!"
|
||||
|
||||
#: confscreen.cpp:464
|
||||
#: confscreen.cpp:469
|
||||
msgid "Cutter radius offset must not be negative!"
|
||||
msgstr "刀具半径偏移不能为负数!"
|
||||
|
||||
#: confscreen.cpp:518
|
||||
#: confscreen.cpp:528
|
||||
msgid "Bad value: autosave interval should be positive"
|
||||
msgstr "坏值:自动保存间隔应为正"
|
||||
|
||||
#: confscreen.cpp:521
|
||||
#: confscreen.cpp:531
|
||||
msgid "Bad format: specify interval in integral minutes"
|
||||
msgstr "格式错误:以整数分钟为单位指定间隔"
|
||||
|
||||
|
@ -632,7 +632,7 @@ msgctxt "button"
|
|||
msgid "&No"
|
||||
msgstr "否(&N)"
|
||||
|
||||
#: file.cpp:877 solvespace.cpp:610
|
||||
#: file.cpp:877 solvespace.cpp:611
|
||||
msgctxt "button"
|
||||
msgid "&Cancel"
|
||||
msgstr "取消(&C)"
|
||||
|
@ -1085,24 +1085,28 @@ msgstr "语言(&L)"
|
|||
msgid "&Website / Manual"
|
||||
msgstr "网页/手册(&W)"
|
||||
|
||||
#: graphicswin.cpp:187
|
||||
#: graphicswin.cpp:186
|
||||
msgid "&Go to GitHub commit"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:188
|
||||
msgid "&About"
|
||||
msgstr "关于(&A)"
|
||||
|
||||
#: graphicswin.cpp:361
|
||||
#: graphicswin.cpp:362
|
||||
msgid "(no recent files)"
|
||||
msgstr "(无文件)"
|
||||
|
||||
#: graphicswin.cpp:369
|
||||
#: graphicswin.cpp:370
|
||||
#, c-format
|
||||
msgid "File '%s' does not exist."
|
||||
msgstr "文件不存在: \"%s\"。"
|
||||
|
||||
#: graphicswin.cpp:736
|
||||
#: graphicswin.cpp:737
|
||||
msgid "No workplane is active, so the grid will not appear."
|
||||
msgstr "没有激活的工作面,因此无法显示轴网。"
|
||||
|
||||
#: graphicswin.cpp:751
|
||||
#: graphicswin.cpp:752
|
||||
msgid ""
|
||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||
"projection.\n"
|
||||
|
@ -1111,91 +1115,91 @@ msgid ""
|
|||
"configuration screen. A value around 0.3 is typical."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:836
|
||||
#: graphicswin.cpp:837
|
||||
msgid ""
|
||||
"Select a point; this point will become the center of the view on screen."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1136
|
||||
#: graphicswin.cpp:1137
|
||||
msgid "No additional entities share endpoints with the selected entities."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1154
|
||||
#: graphicswin.cpp:1155
|
||||
msgid ""
|
||||
"To use this command, select a point or other entity from an linked part, or "
|
||||
"make a link group the active group."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1177
|
||||
#: graphicswin.cpp:1178
|
||||
msgid ""
|
||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||
"to define the plane for the snap grid."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1184
|
||||
#: graphicswin.cpp:1185
|
||||
msgid ""
|
||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||
"with a label. To snap a line, select its endpoints."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1269
|
||||
#: graphicswin.cpp:1270
|
||||
msgid "No workplane selected. Activating default workplane for this group."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1272
|
||||
#: graphicswin.cpp:1273
|
||||
msgid ""
|
||||
"No workplane is selected, and the active group does not have a default "
|
||||
"workplane. Try selecting a workplane, or activating a sketch-in-new-"
|
||||
"workplane group."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1293
|
||||
#: graphicswin.cpp:1294
|
||||
msgid ""
|
||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||
"nothing to set up arc parameters."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1304
|
||||
#: graphicswin.cpp:1305
|
||||
msgid "click point on arc (draws anti-clockwise)"
|
||||
msgstr "点击弧线的点(逆时针方向绘制)"
|
||||
|
||||
#: graphicswin.cpp:1305
|
||||
#: graphicswin.cpp:1306
|
||||
msgid "click to place datum point"
|
||||
msgstr "点击放置基准点"
|
||||
|
||||
#: graphicswin.cpp:1306
|
||||
#: graphicswin.cpp:1307
|
||||
msgid "click first point of line segment"
|
||||
msgstr "点击线条的起点"
|
||||
|
||||
#: graphicswin.cpp:1308
|
||||
#: graphicswin.cpp:1309
|
||||
msgid "click first point of construction line segment"
|
||||
msgstr "点击构造线的起点"
|
||||
|
||||
#: graphicswin.cpp:1309
|
||||
#: graphicswin.cpp:1310
|
||||
msgid "click first point of cubic segment"
|
||||
msgstr "点击立方体的起点"
|
||||
|
||||
#: graphicswin.cpp:1310
|
||||
#: graphicswin.cpp:1311
|
||||
msgid "click center of circle"
|
||||
msgstr "点击圆弧的中心"
|
||||
|
||||
#: graphicswin.cpp:1311
|
||||
#: graphicswin.cpp:1312
|
||||
msgid "click origin of workplane"
|
||||
msgstr "点击工作面的原点"
|
||||
|
||||
#: graphicswin.cpp:1312
|
||||
#: graphicswin.cpp:1313
|
||||
msgid "click one corner of rectangle"
|
||||
msgstr "点击一个矩形倒角"
|
||||
|
||||
#: graphicswin.cpp:1313
|
||||
#: graphicswin.cpp:1314
|
||||
msgid "click top left of text"
|
||||
msgstr "点击文字左上角"
|
||||
|
||||
#: graphicswin.cpp:1319
|
||||
#: graphicswin.cpp:1320
|
||||
msgid "click top left of image"
|
||||
msgstr "点击图片左上角"
|
||||
|
||||
#: graphicswin.cpp:1345
|
||||
#: graphicswin.cpp:1346
|
||||
msgid ""
|
||||
"No entities are selected. Select entities before trying to toggle their "
|
||||
"construction state."
|
||||
|
@ -1326,6 +1330,10 @@ msgstr "轮廓自相交!"
|
|||
msgid "zero-length edge!"
|
||||
msgstr "边缘长度为零!"
|
||||
|
||||
#: importmesh.cpp:136
|
||||
msgid "Text-formated STL files are not currently supported"
|
||||
msgstr ""
|
||||
|
||||
#: modify.cpp:252
|
||||
msgid "Must be sketching in workplane to create tangent arc."
|
||||
msgstr ""
|
||||
|
@ -1505,7 +1513,7 @@ msgid ""
|
|||
"Workplane."
|
||||
msgstr "无法在三维空间内绘制图片,可使用 草图->在工作面 激活工作面。"
|
||||
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:553
|
||||
msgctxt "file-type"
|
||||
msgid "SolveSpace models"
|
||||
msgstr "SolveSpace模型"
|
||||
|
@ -1600,130 +1608,130 @@ msgctxt "file-type"
|
|||
msgid "Comma-separated values"
|
||||
msgstr "逗号分隔数据"
|
||||
|
||||
#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641
|
||||
#: platform/guigtk.cpp:1382 platform/guimac.mm:1509 platform/guiwin.cpp:1641
|
||||
msgid "untitled"
|
||||
msgstr "未命名"
|
||||
|
||||
#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445
|
||||
#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1467
|
||||
#: platform/guiwin.cpp:1639
|
||||
msgctxt "title"
|
||||
msgid "Save File"
|
||||
msgstr "保存文件"
|
||||
|
||||
#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428
|
||||
#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1450
|
||||
#: platform/guiwin.cpp:1645
|
||||
msgctxt "title"
|
||||
msgid "Open File"
|
||||
msgstr "打开文件"
|
||||
|
||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
||||
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||
msgctxt "button"
|
||||
msgid "_Cancel"
|
||||
msgstr "取消_C"
|
||||
|
||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
||||
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||
msgctxt "button"
|
||||
msgid "_Save"
|
||||
msgstr "保存_S"
|
||||
|
||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
||||
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||
msgctxt "button"
|
||||
msgid "_Open"
|
||||
msgstr "打开_O"
|
||||
|
||||
#: solvespace.cpp:170
|
||||
#: solvespace.cpp:171
|
||||
msgctxt "title"
|
||||
msgid "Autosave Available"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:171
|
||||
#: solvespace.cpp:172
|
||||
msgctxt "dialog"
|
||||
msgid "An autosave file is available for this sketch."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:172
|
||||
#: solvespace.cpp:173
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to load the autosave file instead?"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:173
|
||||
#: solvespace.cpp:174
|
||||
msgctxt "button"
|
||||
msgid "&Load autosave"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:175
|
||||
#: solvespace.cpp:176
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Load"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:598
|
||||
#: solvespace.cpp:599
|
||||
msgctxt "title"
|
||||
msgid "Modified File"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:600
|
||||
#: solvespace.cpp:601
|
||||
#, c-format
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:603
|
||||
#: solvespace.cpp:604
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the new sketch?"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:606
|
||||
#: solvespace.cpp:607
|
||||
msgctxt "dialog"
|
||||
msgid "Your changes will be lost if you don't save them."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:607
|
||||
#: solvespace.cpp:608
|
||||
msgctxt "button"
|
||||
msgid "&Save"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:609
|
||||
#: solvespace.cpp:610
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Save"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:630
|
||||
#: solvespace.cpp:631
|
||||
msgctxt "title"
|
||||
msgid "(new sketch)"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:637
|
||||
#: solvespace.cpp:638
|
||||
msgctxt "title"
|
||||
msgid "Property Browser"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:699
|
||||
#: solvespace.cpp:700
|
||||
msgid ""
|
||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
||||
"is probably not what you want; hide them by clicking the link at the top of "
|
||||
"the text window."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:771
|
||||
#: solvespace.cpp:772
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||
"dwg."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:823
|
||||
#: solvespace.cpp:824
|
||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:827
|
||||
#: solvespace.cpp:828
|
||||
msgid "Bad selection for step dimension; select a constraint."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:851
|
||||
#: solvespace.cpp:852
|
||||
msgid "The assembly does not interfere, good."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:867
|
||||
#: solvespace.cpp:868
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The volume of the solid model is:\n"
|
||||
|
@ -1731,7 +1739,7 @@ msgid ""
|
|||
" %s"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:876
|
||||
#: solvespace.cpp:877
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1740,7 +1748,7 @@ msgid ""
|
|||
" %s"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:881
|
||||
#: solvespace.cpp:882
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
|
@ -1748,7 +1756,7 @@ msgid ""
|
|||
"This introduces error, typically of around 1%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:896
|
||||
#: solvespace.cpp:897
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The surface area of the selected faces is:\n"
|
||||
|
@ -1759,13 +1767,13 @@ msgid ""
|
|||
"This introduces error, typically of around 1%%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:905
|
||||
#: solvespace.cpp:906
|
||||
msgid ""
|
||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||
"not coplanar, or self-intersecting."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:917
|
||||
#: solvespace.cpp:918
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The area of the region sketched in this group is:\n"
|
||||
|
@ -1776,7 +1784,7 @@ msgid ""
|
|||
"This introduces error, typically of around 1%%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:937
|
||||
#: solvespace.cpp:938
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The total length of the selected entities is:\n"
|
||||
|
@ -1787,36 +1795,36 @@ msgid ""
|
|||
"This introduces error, typically of around 1%%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:943
|
||||
#: solvespace.cpp:944
|
||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:959
|
||||
#: solvespace.cpp:960
|
||||
msgid "Bad selection for trace; select a single point."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:986
|
||||
#: solvespace.cpp:987
|
||||
#, c-format
|
||||
msgid "Couldn't write to '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1016
|
||||
#: solvespace.cpp:1017
|
||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1017
|
||||
#: solvespace.cpp:1018
|
||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1019
|
||||
#: solvespace.cpp:1020
|
||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1020
|
||||
#: solvespace.cpp:1021
|
||||
msgid "The mesh is watertight (okay, valid)."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1023
|
||||
#: solvespace.cpp:1024
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1824,7 +1832,7 @@ msgid ""
|
|||
"The model contains %d triangles, from %d surfaces."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1027
|
||||
#: solvespace.cpp:1028
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -1834,7 +1842,7 @@ msgid ""
|
|||
"Zero problematic edges, good.%s"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1030
|
||||
#: solvespace.cpp:1031
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -1844,7 +1852,7 @@ msgid ""
|
|||
"%d problematic edges, bad.%s"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1043
|
||||
#: solvespace.cpp:1044
|
||||
#, c-format
|
||||
msgid ""
|
||||
"This is SolveSpace version %s.\n"
|
||||
|
@ -1871,23 +1879,23 @@ msgstr "无法将样式分配给派生自其他实体的实体;尝试将样式
|
|||
msgid "Style name cannot be empty"
|
||||
msgstr "样式名称不能为空"
|
||||
|
||||
#: textscreens.cpp:785
|
||||
#: textscreens.cpp:791
|
||||
msgid "Can't repeat fewer than 1 time."
|
||||
msgstr "不能重复少于 1 次。"
|
||||
|
||||
#: textscreens.cpp:789
|
||||
#: textscreens.cpp:795
|
||||
msgid "Can't repeat more than 999 times."
|
||||
msgstr "重复不超过 999 次。"
|
||||
|
||||
#: textscreens.cpp:814
|
||||
#: textscreens.cpp:820
|
||||
msgid "Group name cannot be empty"
|
||||
msgstr "组名称不能为空"
|
||||
|
||||
#: textscreens.cpp:866
|
||||
#: textscreens.cpp:872
|
||||
msgid "Opacity must be between zero and one."
|
||||
msgstr "不透明度必须在零和 1 之间。"
|
||||
|
||||
#: textscreens.cpp:901
|
||||
#: textscreens.cpp:907
|
||||
msgid "Radius cannot be zero or negative."
|
||||
msgstr "半径偏移不能为负数。"
|
||||
|
||||
|
|
174
res/messages.pot
174
res/messages.pot
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: SolveSpace 3.0\n"
|
||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\n"
|
||||
"POT-Creation-Date: 2021-09-26 16:25-0400\n"
|
||||
"POT-Creation-Date: 2022-02-01 16:24+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -32,7 +32,7 @@ msgstr ""
|
|||
msgid "Number of copies to paste must be at least one."
|
||||
msgstr ""
|
||||
|
||||
#: clipboard.cpp:389 textscreens.cpp:827
|
||||
#: clipboard.cpp:389 textscreens.cpp:833
|
||||
msgid "Scale cannot be zero."
|
||||
msgstr ""
|
||||
|
||||
|
@ -56,37 +56,37 @@ msgstr ""
|
|||
msgid "No workplane active."
|
||||
msgstr ""
|
||||
|
||||
#: confscreen.cpp:376
|
||||
#: confscreen.cpp:381
|
||||
msgid "Bad format: specify coordinates as x, y, z"
|
||||
msgstr ""
|
||||
|
||||
#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858
|
||||
#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:864
|
||||
msgid "Bad format: specify color as r, g, b"
|
||||
msgstr ""
|
||||
|
||||
#: confscreen.cpp:412
|
||||
#: confscreen.cpp:417
|
||||
msgid ""
|
||||
"The perspective factor will have no effect until you enable View -> Use Perspective Projection."
|
||||
msgstr ""
|
||||
|
||||
#: confscreen.cpp:430 confscreen.cpp:440
|
||||
#: confscreen.cpp:435 confscreen.cpp:445
|
||||
#, c-format
|
||||
msgid "Specify between 0 and %d digits after the decimal."
|
||||
msgstr ""
|
||||
|
||||
#: confscreen.cpp:452
|
||||
#: confscreen.cpp:457
|
||||
msgid "Export scale must not be zero!"
|
||||
msgstr ""
|
||||
|
||||
#: confscreen.cpp:464
|
||||
#: confscreen.cpp:469
|
||||
msgid "Cutter radius offset must not be negative!"
|
||||
msgstr ""
|
||||
|
||||
#: confscreen.cpp:518
|
||||
#: confscreen.cpp:528
|
||||
msgid "Bad value: autosave interval should be positive"
|
||||
msgstr ""
|
||||
|
||||
#: confscreen.cpp:521
|
||||
#: confscreen.cpp:531
|
||||
msgid "Bad format: specify interval in integral minutes"
|
||||
msgstr ""
|
||||
|
||||
|
@ -538,7 +538,7 @@ msgctxt "button"
|
|||
msgid "&No"
|
||||
msgstr ""
|
||||
|
||||
#: file.cpp:877 solvespace.cpp:610
|
||||
#: file.cpp:877 solvespace.cpp:611
|
||||
msgctxt "button"
|
||||
msgid "&Cancel"
|
||||
msgstr ""
|
||||
|
@ -991,24 +991,28 @@ msgstr ""
|
|||
msgid "&Website / Manual"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:187
|
||||
#: graphicswin.cpp:186
|
||||
msgid "&Go to GitHub commit"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:188
|
||||
msgid "&About"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:361
|
||||
#: graphicswin.cpp:362
|
||||
msgid "(no recent files)"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:369
|
||||
#: graphicswin.cpp:370
|
||||
#, c-format
|
||||
msgid "File '%s' does not exist."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:736
|
||||
#: graphicswin.cpp:737
|
||||
msgid "No workplane is active, so the grid will not appear."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:751
|
||||
#: graphicswin.cpp:752
|
||||
msgid ""
|
||||
"The perspective factor is set to zero, so the view will always be a parallel projection.\n"
|
||||
"\n"
|
||||
|
@ -1016,89 +1020,89 @@ msgid ""
|
|||
"around 0.3 is typical."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:836
|
||||
#: graphicswin.cpp:837
|
||||
msgid "Select a point; this point will become the center of the view on screen."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1136
|
||||
#: graphicswin.cpp:1137
|
||||
msgid "No additional entities share endpoints with the selected entities."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1154
|
||||
#: graphicswin.cpp:1155
|
||||
msgid ""
|
||||
"To use this command, select a point or other entity from an linked part, or make a link group the "
|
||||
"active group."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1177
|
||||
#: graphicswin.cpp:1178
|
||||
msgid ""
|
||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) to define the plane "
|
||||
"for the snap grid."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1184
|
||||
#: graphicswin.cpp:1185
|
||||
msgid ""
|
||||
"Can't snap these items to grid; select points, text comments, or constraints with a label. To "
|
||||
"snap a line, select its endpoints."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1269
|
||||
#: graphicswin.cpp:1270
|
||||
msgid "No workplane selected. Activating default workplane for this group."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1272
|
||||
#: graphicswin.cpp:1273
|
||||
msgid ""
|
||||
"No workplane is selected, and the active group does not have a default workplane. Try selecting a "
|
||||
"workplane, or activating a sketch-in-new-workplane group."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1293
|
||||
#: graphicswin.cpp:1294
|
||||
msgid ""
|
||||
"Bad selection for tangent arc at point. Select a single point, or select nothing to set up arc "
|
||||
"parameters."
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1304
|
||||
#: graphicswin.cpp:1305
|
||||
msgid "click point on arc (draws anti-clockwise)"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1305
|
||||
#: graphicswin.cpp:1306
|
||||
msgid "click to place datum point"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1306
|
||||
#: graphicswin.cpp:1307
|
||||
msgid "click first point of line segment"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1308
|
||||
#: graphicswin.cpp:1309
|
||||
msgid "click first point of construction line segment"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1309
|
||||
#: graphicswin.cpp:1310
|
||||
msgid "click first point of cubic segment"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1310
|
||||
#: graphicswin.cpp:1311
|
||||
msgid "click center of circle"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1311
|
||||
#: graphicswin.cpp:1312
|
||||
msgid "click origin of workplane"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1312
|
||||
#: graphicswin.cpp:1313
|
||||
msgid "click one corner of rectangle"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1313
|
||||
#: graphicswin.cpp:1314
|
||||
msgid "click top left of text"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1319
|
||||
#: graphicswin.cpp:1320
|
||||
msgid "click top left of image"
|
||||
msgstr ""
|
||||
|
||||
#: graphicswin.cpp:1345
|
||||
#: graphicswin.cpp:1346
|
||||
msgid "No entities are selected. Select entities before trying to toggle their construction state."
|
||||
msgstr ""
|
||||
|
||||
|
@ -1221,6 +1225,10 @@ msgstr ""
|
|||
msgid "zero-length edge!"
|
||||
msgstr ""
|
||||
|
||||
#: importmesh.cpp:136
|
||||
msgid "Text-formated STL files are not currently supported"
|
||||
msgstr ""
|
||||
|
||||
#: modify.cpp:252
|
||||
msgid "Must be sketching in workplane to create tangent arc."
|
||||
msgstr ""
|
||||
|
@ -1391,7 +1399,7 @@ msgstr ""
|
|||
msgid "Can't draw image in 3d; first, activate a workplane with Sketch -> In Workplane."
|
||||
msgstr ""
|
||||
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552
|
||||
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:553
|
||||
msgctxt "file-type"
|
||||
msgid "SolveSpace models"
|
||||
msgstr ""
|
||||
|
@ -1486,127 +1494,127 @@ msgctxt "file-type"
|
|||
msgid "Comma-separated values"
|
||||
msgstr ""
|
||||
|
||||
#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641
|
||||
#: platform/guigtk.cpp:1382 platform/guimac.mm:1509 platform/guiwin.cpp:1641
|
||||
msgid "untitled"
|
||||
msgstr ""
|
||||
|
||||
#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445
|
||||
#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1467
|
||||
#: platform/guiwin.cpp:1639
|
||||
msgctxt "title"
|
||||
msgid "Save File"
|
||||
msgstr ""
|
||||
|
||||
#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428
|
||||
#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1450
|
||||
#: platform/guiwin.cpp:1645
|
||||
msgctxt "title"
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
||||
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||
msgctxt "button"
|
||||
msgid "_Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
||||
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||
msgctxt "button"
|
||||
msgid "_Save"
|
||||
msgstr ""
|
||||
|
||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
||||
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||
msgctxt "button"
|
||||
msgid "_Open"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:170
|
||||
#: solvespace.cpp:171
|
||||
msgctxt "title"
|
||||
msgid "Autosave Available"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:171
|
||||
#: solvespace.cpp:172
|
||||
msgctxt "dialog"
|
||||
msgid "An autosave file is available for this sketch."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:172
|
||||
#: solvespace.cpp:173
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to load the autosave file instead?"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:173
|
||||
#: solvespace.cpp:174
|
||||
msgctxt "button"
|
||||
msgid "&Load autosave"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:175
|
||||
#: solvespace.cpp:176
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Load"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:598
|
||||
#: solvespace.cpp:599
|
||||
msgctxt "title"
|
||||
msgid "Modified File"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:600
|
||||
#: solvespace.cpp:601
|
||||
#, c-format
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:603
|
||||
#: solvespace.cpp:604
|
||||
msgctxt "dialog"
|
||||
msgid "Do you want to save the changes you made to the new sketch?"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:606
|
||||
#: solvespace.cpp:607
|
||||
msgctxt "dialog"
|
||||
msgid "Your changes will be lost if you don't save them."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:607
|
||||
#: solvespace.cpp:608
|
||||
msgctxt "button"
|
||||
msgid "&Save"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:609
|
||||
#: solvespace.cpp:610
|
||||
msgctxt "button"
|
||||
msgid "Do&n't Save"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:630
|
||||
#: solvespace.cpp:631
|
||||
msgctxt "title"
|
||||
msgid "(new sketch)"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:637
|
||||
#: solvespace.cpp:638
|
||||
msgctxt "title"
|
||||
msgid "Property Browser"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:699
|
||||
#: solvespace.cpp:700
|
||||
msgid ""
|
||||
"Constraints are currently shown, and will be exported in the toolpath. This is probably not what "
|
||||
"you want; hide them by clicking the link at the top of the text window."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:771
|
||||
#: solvespace.cpp:772
|
||||
#, c-format
|
||||
msgid "Can't identify file type from file extension of filename '%s'; try .dxf or .dwg."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:823
|
||||
#: solvespace.cpp:824
|
||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:827
|
||||
#: solvespace.cpp:828
|
||||
msgid "Bad selection for step dimension; select a constraint."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:851
|
||||
#: solvespace.cpp:852
|
||||
msgid "The assembly does not interfere, good."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:867
|
||||
#: solvespace.cpp:868
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The volume of the solid model is:\n"
|
||||
|
@ -1614,7 +1622,7 @@ msgid ""
|
|||
" %s"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:876
|
||||
#: solvespace.cpp:877
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1623,7 +1631,7 @@ msgid ""
|
|||
" %s"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:881
|
||||
#: solvespace.cpp:882
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
|
@ -1631,7 +1639,7 @@ msgid ""
|
|||
"This introduces error, typically of around 1%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:896
|
||||
#: solvespace.cpp:897
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The surface area of the selected faces is:\n"
|
||||
|
@ -1642,13 +1650,13 @@ msgid ""
|
|||
"This introduces error, typically of around 1%%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:905
|
||||
#: solvespace.cpp:906
|
||||
msgid ""
|
||||
"This group does not contain a correctly-formed 2d closed area. It is open, not coplanar, or self-"
|
||||
"intersecting."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:917
|
||||
#: solvespace.cpp:918
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The area of the region sketched in this group is:\n"
|
||||
|
@ -1659,7 +1667,7 @@ msgid ""
|
|||
"This introduces error, typically of around 1%%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:937
|
||||
#: solvespace.cpp:938
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The total length of the selected entities is:\n"
|
||||
|
@ -1670,36 +1678,36 @@ msgid ""
|
|||
"This introduces error, typically of around 1%%."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:943
|
||||
#: solvespace.cpp:944
|
||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:959
|
||||
#: solvespace.cpp:960
|
||||
msgid "Bad selection for trace; select a single point."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:986
|
||||
#: solvespace.cpp:987
|
||||
#, c-format
|
||||
msgid "Couldn't write to '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1016
|
||||
#: solvespace.cpp:1017
|
||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1017
|
||||
#: solvespace.cpp:1018
|
||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1019
|
||||
#: solvespace.cpp:1020
|
||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1020
|
||||
#: solvespace.cpp:1021
|
||||
msgid "The mesh is watertight (okay, valid)."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1023
|
||||
#: solvespace.cpp:1024
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@ -1707,7 +1715,7 @@ msgid ""
|
|||
"The model contains %d triangles, from %d surfaces."
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1027
|
||||
#: solvespace.cpp:1028
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -1717,7 +1725,7 @@ msgid ""
|
|||
"Zero problematic edges, good.%s"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1030
|
||||
#: solvespace.cpp:1031
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
|
@ -1727,7 +1735,7 @@ msgid ""
|
|||
"%d problematic edges, bad.%s"
|
||||
msgstr ""
|
||||
|
||||
#: solvespace.cpp:1043
|
||||
#: solvespace.cpp:1044
|
||||
#, c-format
|
||||
msgid ""
|
||||
"This is SolveSpace version %s.\n"
|
||||
|
@ -1754,23 +1762,23 @@ msgstr ""
|
|||
msgid "Style name cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: textscreens.cpp:785
|
||||
#: textscreens.cpp:791
|
||||
msgid "Can't repeat fewer than 1 time."
|
||||
msgstr ""
|
||||
|
||||
#: textscreens.cpp:789
|
||||
#: textscreens.cpp:795
|
||||
msgid "Can't repeat more than 999 times."
|
||||
msgstr ""
|
||||
|
||||
#: textscreens.cpp:814
|
||||
#: textscreens.cpp:820
|
||||
msgid "Group name cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: textscreens.cpp:866
|
||||
#: textscreens.cpp:872
|
||||
msgid "Opacity must be between zero and one."
|
||||
msgstr ""
|
||||
|
||||
#: textscreens.cpp:901
|
||||
#: textscreens.cpp:907
|
||||
msgid "Radius cannot be zero or negative."
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
1 VERSIONINFO
|
||||
FILEVERSION ${solvespace_VERSION_MAJOR},${solvespace_VERSION_MINOR},0,0
|
||||
PRODUCTVERSION ${solvespace_VERSION_MAJOR},${solvespace_VERSION_MINOR},0,0
|
||||
FILEVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},0,0
|
||||
PRODUCTVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},0,0
|
||||
FILEFLAGSMASK 0
|
||||
FILEFLAGS 0
|
||||
FILEOS VOS_NT_WINDOWS32
|
||||
|
@ -13,12 +13,12 @@ BEGIN
|
|||
BEGIN
|
||||
VALUE "CompanyName", "The SolveSpace authors"
|
||||
VALUE "ProductName", "SolveSpace"
|
||||
VALUE "ProductVersion", "${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}~${solvespace_GIT_HASH}"
|
||||
VALUE "ProductVersion", "${PROJECT_VERSION}~${solvespace_GIT_HASH}"
|
||||
VALUE "FileDescription", "SolveSpace, a parametric 2d/3d CAD"
|
||||
VALUE "FileVersion", "${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}~${solvespace_GIT_HASH}"
|
||||
VALUE "FileVersion", "${PROJECT_VERSION}~${solvespace_GIT_HASH}"
|
||||
VALUE "OriginalFilename", "solvespace.exe"
|
||||
VALUE "InternalName", "solvespace"
|
||||
VALUE "LegalCopyright", "(c) 2008-2021 Jonathan Westhues and other authors"
|
||||
VALUE "LegalCopyright", "(c) 2008-2022 Jonathan Westhues and other authors"
|
||||
END
|
||||
END
|
||||
|
||||
|
|
|
@ -19,32 +19,63 @@ endif()
|
|||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
||||
|
||||
# solvespace dependencies
|
||||
add_library(slvs_deps INTERFACE)
|
||||
target_include_directories(slvs_deps INTERFACE SYSTEM
|
||||
${OPENGL_INCLUDE_DIR}
|
||||
${ZLIB_INCLUDE_DIR}
|
||||
${PNG_PNG_INCLUDE_DIR}
|
||||
${FREETYPE_INCLUDE_DIRS}
|
||||
${CAIRO_INCLUDE_DIRS}
|
||||
${MIMALLOC_INCLUDE_DIR}
|
||||
${EIGEN3_INCLUDE_DIRS})
|
||||
target_link_libraries(slvs_deps INTERFACE
|
||||
dxfrw
|
||||
${ZLIB_LIBRARY}
|
||||
${PNG_LIBRARY}
|
||||
${FREETYPE_LIBRARY}
|
||||
${CAIRO_LIBRARIES}
|
||||
mimalloc-static)
|
||||
|
||||
if(Backtrace_FOUND)
|
||||
target_include_directories(slvs_deps INTERFACE SYSTEM
|
||||
${Backtrace_INCLUDE_DIRS})
|
||||
target_link_libraries(slvs_deps INTERFACE
|
||||
${Backtrace_LIBRARY})
|
||||
endif()
|
||||
|
||||
if(SPACEWARE_FOUND)
|
||||
target_include_directories(slvs_deps INTERFACE SYSTEM
|
||||
${SPACEWARE_INCLUDE_DIR})
|
||||
target_link_libraries(slvs_deps INTERFACE
|
||||
${SPACEWARE_LIBRARIES})
|
||||
endif()
|
||||
|
||||
if(ENABLE_OPENMP)
|
||||
target_link_libraries(slvs_deps INTERFACE slvs_openmp)
|
||||
endif()
|
||||
|
||||
target_compile_options(slvs_deps
|
||||
INTERFACE ${COVERAGE_FLAGS})
|
||||
|
||||
# platform utilities
|
||||
|
||||
if(APPLE)
|
||||
set(util_LIBRARIES
|
||||
target_link_libraries(slvs_deps INTERFACE
|
||||
${APPKIT_LIBRARY})
|
||||
endif()
|
||||
|
||||
# libslvs
|
||||
|
||||
set(libslvs_SOURCES
|
||||
add_library(slvs SHARED
|
||||
solvespace.h
|
||||
platform/platform.h
|
||||
util.cpp
|
||||
entity.cpp
|
||||
expr.cpp
|
||||
constraint.cpp
|
||||
constrainteq.cpp
|
||||
system.cpp
|
||||
platform/platform.cpp)
|
||||
|
||||
set(libslvs_HEADERS
|
||||
solvespace.h
|
||||
platform/platform.h)
|
||||
|
||||
add_library(slvs SHARED
|
||||
${libslvs_SOURCES}
|
||||
${libslvs_HEADERS}
|
||||
${util_SOURCES}
|
||||
platform/platform.cpp
|
||||
lib.cpp)
|
||||
|
||||
target_compile_definitions(slvs
|
||||
|
@ -53,16 +84,11 @@ target_compile_definitions(slvs
|
|||
target_include_directories(slvs
|
||||
PUBLIC ${CMAKE_SOURCE_DIR}/include)
|
||||
|
||||
target_link_libraries(slvs
|
||||
${util_LIBRARIES}
|
||||
mimalloc-static)
|
||||
|
||||
add_dependencies(slvs
|
||||
mimalloc-static)
|
||||
target_link_libraries(slvs PRIVATE slvs_deps)
|
||||
|
||||
set_target_properties(slvs PROPERTIES
|
||||
PUBLIC_HEADER ${CMAKE_SOURCE_DIR}/include/slvs.h
|
||||
VERSION ${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}
|
||||
VERSION ${PROJECT_VERSION}
|
||||
SOVERSION 1)
|
||||
|
||||
if(NOT WIN32)
|
||||
|
@ -72,70 +98,6 @@ if(NOT WIN32)
|
|||
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
endif()
|
||||
|
||||
# solvespace dependencies
|
||||
|
||||
include_directories(
|
||||
${OPENGL_INCLUDE_DIR}
|
||||
${ZLIB_INCLUDE_DIR}
|
||||
${PNG_PNG_INCLUDE_DIR}
|
||||
${FREETYPE_INCLUDE_DIRS}
|
||||
${CAIRO_INCLUDE_DIRS}
|
||||
${MIMALLOC_INCLUDE_DIR}
|
||||
${OpenMP_CXX_INCLUDE_DIRS})
|
||||
|
||||
if(Backtrace_FOUND)
|
||||
include_directories(
|
||||
${Backtrace_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
if(SPACEWARE_FOUND)
|
||||
include_directories(
|
||||
${SPACEWARE_INCLUDE_DIR})
|
||||
endif()
|
||||
|
||||
if(OPENGL STREQUAL 3)
|
||||
set(gl_SOURCES
|
||||
render/gl3shader.cpp
|
||||
render/rendergl3.cpp)
|
||||
elseif(OPENGL STREQUAL 1)
|
||||
set(gl_SOURCES
|
||||
render/rendergl1.cpp)
|
||||
else()
|
||||
message(FATAL_ERROR "Unsupported OpenGL version ${OPENGL}")
|
||||
endif()
|
||||
|
||||
set(platform_SOURCES
|
||||
${gl_SOURCES}
|
||||
platform/entrygui.cpp)
|
||||
|
||||
if(WIN32)
|
||||
list(APPEND platform_SOURCES
|
||||
platform/guiwin.cpp)
|
||||
|
||||
set(platform_LIBRARIES
|
||||
comctl32
|
||||
${SPACEWARE_LIBRARIES})
|
||||
elseif(APPLE)
|
||||
add_compile_options(
|
||||
-DGL_SILENCE_DEPRECATION
|
||||
-fobjc-arc)
|
||||
|
||||
list(APPEND platform_SOURCES
|
||||
platform/guimac.mm)
|
||||
else()
|
||||
list(APPEND platform_SOURCES
|
||||
platform/guigtk.cpp)
|
||||
|
||||
set(platform_LIBRARIES
|
||||
${SPACEWARE_LIBRARIES})
|
||||
|
||||
foreach(pkg_config_lib GTKMM JSONC FONTCONFIG)
|
||||
include_directories(${${pkg_config_lib}_INCLUDE_DIRS})
|
||||
link_directories(${${pkg_config_lib}_LIBRARY_DIRS})
|
||||
list(APPEND platform_LIBRARIES ${${pkg_config_lib}_LIBRARIES})
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
set(every_platform_SOURCES
|
||||
platform/guiwin.cpp
|
||||
platform/guigtk.cpp
|
||||
|
@ -143,7 +105,10 @@ set(every_platform_SOURCES
|
|||
|
||||
# solvespace library
|
||||
|
||||
set(solvespace_core_HEADERS
|
||||
set(solvespace_core_gl_SOURCES
|
||||
solvespace.cpp)
|
||||
|
||||
add_library(solvespace-core STATIC
|
||||
dsc.h
|
||||
expr.h
|
||||
polygon.h
|
||||
|
@ -153,9 +118,7 @@ set(solvespace_core_HEADERS
|
|||
platform/platform.h
|
||||
render/render.h
|
||||
render/gl3shader.h
|
||||
srf/surface.h)
|
||||
|
||||
set(solvespace_core_SOURCES
|
||||
srf/surface.h
|
||||
bsp.cpp
|
||||
clipboard.cpp
|
||||
confscreen.cpp
|
||||
|
@ -207,40 +170,14 @@ set(solvespace_core_SOURCES
|
|||
srf/surfinter.cpp
|
||||
srf/triangulate.cpp)
|
||||
|
||||
set(solvespace_core_gl_SOURCES
|
||||
solvespace.cpp)
|
||||
|
||||
add_library(solvespace-core STATIC
|
||||
${util_SOURCES}
|
||||
${solvespace_core_HEADERS}
|
||||
${solvespace_core_SOURCES})
|
||||
|
||||
add_dependencies(solvespace-core
|
||||
mimalloc-static)
|
||||
|
||||
target_link_libraries(solvespace-core
|
||||
${OpenMP_CXX_LIBRARIES}
|
||||
dxfrw
|
||||
${util_LIBRARIES}
|
||||
${ZLIB_LIBRARY}
|
||||
${PNG_LIBRARY}
|
||||
${FREETYPE_LIBRARY}
|
||||
mimalloc-static)
|
||||
|
||||
if(Backtrace_FOUND)
|
||||
target_link_libraries(solvespace-core
|
||||
${Backtrace_LIBRARY})
|
||||
endif()
|
||||
|
||||
target_compile_options(solvespace-core
|
||||
PRIVATE ${COVERAGE_FLAGS})
|
||||
target_link_libraries(solvespace-core PUBLIC slvs_deps)
|
||||
|
||||
# solvespace translations
|
||||
|
||||
if(HAVE_GETTEXT)
|
||||
get_target_property(solvespace_core_SOURCES solvespace-core SOURCES)
|
||||
set(inputs
|
||||
${solvespace_core_SOURCES}
|
||||
${solvespace_core_HEADERS}
|
||||
${every_platform_SOURCES}
|
||||
${solvespace_core_gl_SOURCES})
|
||||
|
||||
|
@ -267,7 +204,7 @@ if(HAVE_GETTEXT)
|
|||
--keyword --keyword=_ --keyword=N_ --keyword=C_:2,1c --keyword=CN_:2,1c
|
||||
--force-po --width=100 --sort-by-file
|
||||
--package-name=SolveSpace
|
||||
--package-version=${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}
|
||||
--package-version=${PROJECT_VERSION}
|
||||
"--copyright-holder=the PACKAGE authors"
|
||||
--msgid-bugs-address=whitequark@whitequark.org
|
||||
--from-code=utf-8 --output=${gen_output_pot} ${inputs}
|
||||
|
@ -323,52 +260,86 @@ endif()
|
|||
if(ENABLE_GUI)
|
||||
add_executable(solvespace WIN32 MACOSX_BUNDLE
|
||||
${solvespace_core_gl_SOURCES}
|
||||
${platform_SOURCES}
|
||||
platform/entrygui.cpp
|
||||
$<TARGET_PROPERTY:resources,EXTRA_SOURCES>)
|
||||
|
||||
add_dependencies(solvespace
|
||||
resources)
|
||||
|
||||
target_link_libraries(solvespace
|
||||
PRIVATE
|
||||
solvespace-core
|
||||
${OPENGL_LIBRARIES}
|
||||
${platform_LIBRARIES}
|
||||
${COVERAGE_LIBRARY})
|
||||
${OPENGL_LIBRARIES})
|
||||
|
||||
if(MSVC)
|
||||
set_target_properties(solvespace PROPERTIES
|
||||
LINK_FLAGS "/MANIFEST:NO /SAFESEH:NO /INCREMENTAL:NO /OPT:REF")
|
||||
# OpenGL version
|
||||
if(OPENGL STREQUAL 3)
|
||||
target_sources(solvespace PRIVATE
|
||||
render/gl3shader.cpp
|
||||
render/rendergl3.cpp)
|
||||
elseif(OPENGL STREQUAL 1)
|
||||
target_sources(solvespace PRIVATE
|
||||
render/rendergl1.cpp)
|
||||
else()
|
||||
message(FATAL_ERROR "Unsupported OpenGL version ${OPENGL}")
|
||||
endif()
|
||||
|
||||
# Platform-specific
|
||||
if(WIN32)
|
||||
target_sources(solvespace PRIVATE
|
||||
platform/guiwin.cpp)
|
||||
|
||||
target_link_libraries(solvespace PRIVATE comctl32)
|
||||
elseif(APPLE)
|
||||
target_compile_options(solvespace PRIVATE -fobjc-arc)
|
||||
target_compile_definitions(solvespace PRIVATE GL_SILENCE_DEPRECATION)
|
||||
|
||||
target_sources(solvespace PRIVATE
|
||||
platform/guimac.mm)
|
||||
set_target_properties(solvespace PROPERTIES
|
||||
OUTPUT_NAME SolveSpace
|
||||
XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME "YES"
|
||||
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.solvespace"
|
||||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||
else()
|
||||
target_sources(solvespace PRIVATE
|
||||
platform/guigtk.cpp)
|
||||
|
||||
target_include_directories(solvespace PRIVATE SYSTEM
|
||||
${GTKMM_INCLUDE_DIRS}
|
||||
${JSONC_INCLUDE_DIRS}
|
||||
${FONTCONFIG_INCLUDE_DIRS})
|
||||
target_link_directories(solvespace PRIVATE
|
||||
${GTKMM_LIBRARY_DIRS}
|
||||
${JSONC_LIBRARY_DIRS}
|
||||
${FONTCONFIG_LIBRARY_DIRS})
|
||||
target_link_libraries(solvespace PRIVATE
|
||||
${GTKMM_LIBRARIES}
|
||||
${JSONC_LIBRARIES}
|
||||
${FONTCONFIG_LIBRARIES})
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
set_target_properties(solvespace PROPERTIES
|
||||
LINK_FLAGS "/MANIFEST:NO /SAFESEH:NO /INCREMENTAL:NO /OPT:REF")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# solvespace headless library
|
||||
|
||||
set(headless_SOURCES
|
||||
add_library(solvespace-headless STATIC EXCLUDE_FROM_ALL
|
||||
${solvespace_core_gl_SOURCES}
|
||||
platform/guinone.cpp
|
||||
render/rendercairo.cpp)
|
||||
|
||||
add_library(solvespace-headless STATIC EXCLUDE_FROM_ALL
|
||||
${solvespace_core_gl_SOURCES}
|
||||
${headless_SOURCES})
|
||||
|
||||
target_compile_definitions(solvespace-headless
|
||||
PRIVATE -DHEADLESS)
|
||||
PRIVATE HEADLESS)
|
||||
|
||||
target_include_directories(solvespace-headless
|
||||
INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
target_link_libraries(solvespace-headless
|
||||
solvespace-core
|
||||
${CAIRO_LIBRARIES})
|
||||
|
||||
target_compile_options(solvespace-headless
|
||||
PRIVATE ${COVERAGE_FLAGS})
|
||||
PRIVATE
|
||||
solvespace-core)
|
||||
|
||||
# solvespace command-line executable
|
||||
|
||||
|
@ -432,4 +403,4 @@ if(APPLE)
|
|||
COMMENT "Bundling executable solvespace-cli"
|
||||
VERBATIM)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
#ifndef SOLVESPACE_CONFIG_H
|
||||
#define SOLVESPACE_CONFIG_H
|
||||
|
||||
#define PACKAGE_VERSION "@solvespace_VERSION_MAJOR@.@solvespace_VERSION_MINOR@~@solvespace_GIT_HASH@"
|
||||
#define PACKAGE_VERSION "@PROJECT_VERSION@~@solvespace_GIT_HASH@"
|
||||
#define GIT_HASH_URL "https://github.com/solvespace/solvespace/commit/@solvespace_GIT_HASH@"
|
||||
|
||||
/* Non-OS X *nix only */
|
||||
#define UNIX_DATADIR "@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_DATAROOTDIR@/solvespace"
|
||||
|
|
|
@ -69,12 +69,19 @@ void TextWindow::DescribeSelection() {
|
|||
Entity *e = SK.GetEntity(gs.points == 1 ? gs.point[0] : gs.entity[0]);
|
||||
Vector p;
|
||||
|
||||
#define COSTR(p) \
|
||||
#define COSTR_NO_LINK(p) \
|
||||
SS.MmToString((p).x).c_str(), \
|
||||
SS.MmToString((p).y).c_str(), \
|
||||
SS.MmToString((p).z).c_str()
|
||||
#define PT_AS_STR "(%Fi%s%E, %Fi%s%E, %Fi%s%E)"
|
||||
#define PT_AS_NUM "(%Fi%3%E, %Fi%3%E, %Fi%3%E)"
|
||||
#define PT_AS_STR_NO_LINK "(%Fi%s%Fd, %Fi%s%Fd, %Fi%s%Fd)"
|
||||
#define PT_AS_NUM "(%Fi%3%Fd, %Fi%3%Fd, %Fi%3%Fd)"
|
||||
#define COSTR(e, p) \
|
||||
e->h, (&TextWindow::ScreenSelectEntity), (&TextWindow::ScreenHoverEntity), \
|
||||
COSTR_NO_LINK(p)
|
||||
#define PT_AS_STR "%Ll%D%f%h" PT_AS_STR_NO_LINK "%E"
|
||||
#define CO_LINK(e, p) e->h, (&TextWindow::ScreenSelectEntity), (&TextWindow::ScreenHoverEntity), CO(p)
|
||||
#define PT_AS_NUM_LINK "%Ll%D%f%h" PT_AS_NUM "%E"
|
||||
|
||||
switch(e->type) {
|
||||
case Entity::Type::POINT_IN_3D:
|
||||
case Entity::Type::POINT_IN_2D:
|
||||
|
@ -83,7 +90,7 @@ void TextWindow::DescribeSelection() {
|
|||
case Entity::Type::POINT_N_COPY:
|
||||
case Entity::Type::POINT_N_ROT_AA:
|
||||
p = e->PointGetNum();
|
||||
Printf(false, "%FtPOINT%E at " PT_AS_STR, COSTR(p));
|
||||
Printf(false, "%FtPOINT%E at " PT_AS_STR, COSTR(e, p));
|
||||
break;
|
||||
|
||||
case Entity::Type::NORMAL_IN_3D:
|
||||
|
@ -104,20 +111,20 @@ void TextWindow::DescribeSelection() {
|
|||
case Entity::Type::WORKPLANE: {
|
||||
p = SK.GetEntity(e->point[0])->PointGetNum();
|
||||
Printf(false, "%FtWORKPLANE%E");
|
||||
Printf(true, " origin = " PT_AS_STR, COSTR(p));
|
||||
Printf(true, " origin = " PT_AS_STR, COSTR(SK.GetEntity(e->point[0]), p));
|
||||
Quaternion q = e->Normal()->NormalGetNum();
|
||||
p = q.RotationN();
|
||||
Printf(true, " normal = " PT_AS_NUM, CO(p));
|
||||
Printf(true, " normal = " PT_AS_NUM_LINK, CO_LINK(e->Normal(), p));
|
||||
break;
|
||||
}
|
||||
case Entity::Type::LINE_SEGMENT: {
|
||||
Vector p0 = SK.GetEntity(e->point[0])->PointGetNum();
|
||||
p = p0;
|
||||
Printf(false, "%FtLINE SEGMENT%E");
|
||||
Printf(true, " thru " PT_AS_STR, COSTR(p));
|
||||
Printf(true, " thru " PT_AS_STR, COSTR(SK.GetEntity(e->point[0]), p));
|
||||
Vector p1 = SK.GetEntity(e->point[1])->PointGetNum();
|
||||
p = p1;
|
||||
Printf(false, " " PT_AS_STR, COSTR(p));
|
||||
Printf(false, " " PT_AS_STR, COSTR(SK.GetEntity(e->point[1]), p));
|
||||
Printf(true, " len = %Fi%s%E",
|
||||
SS.MmToString((p1.Minus(p0).Magnitude())).c_str());
|
||||
break;
|
||||
|
@ -137,18 +144,18 @@ void TextWindow::DescribeSelection() {
|
|||
}
|
||||
for(int i = 0; i < pts; i++) {
|
||||
p = SK.GetEntity(e->point[i])->PointGetNum();
|
||||
Printf((i==0), " p%d = " PT_AS_STR, i, COSTR(p));
|
||||
Printf((i==0), " p%d = " PT_AS_STR, i, COSTR(SK.GetEntity(e->point[i]), p));
|
||||
}
|
||||
break;
|
||||
|
||||
case Entity::Type::ARC_OF_CIRCLE: {
|
||||
Printf(false, "%FtARC OF A CIRCLE%E");
|
||||
p = SK.GetEntity(e->point[0])->PointGetNum();
|
||||
Printf(true, " center = " PT_AS_STR, COSTR(p));
|
||||
Printf(true, " center = " PT_AS_STR, COSTR(SK.GetEntity(e->point[0]), p));
|
||||
p = SK.GetEntity(e->point[1])->PointGetNum();
|
||||
Printf(true, " endpoints = " PT_AS_STR, COSTR(p));
|
||||
Printf(true, " endpoints = " PT_AS_STR, COSTR(SK.GetEntity(e->point[1]), p));
|
||||
p = SK.GetEntity(e->point[2])->PointGetNum();
|
||||
Printf(false, " " PT_AS_STR, COSTR(p));
|
||||
Printf(false, " " PT_AS_STR, COSTR(SK.GetEntity(e->point[2]), p));
|
||||
double r = e->CircleGetRadiusNum();
|
||||
Printf(true, " diameter = %Fi%s", SS.MmToString(r*2).c_str());
|
||||
Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str());
|
||||
|
@ -160,7 +167,7 @@ void TextWindow::DescribeSelection() {
|
|||
case Entity::Type::CIRCLE: {
|
||||
Printf(false, "%FtCIRCLE%E");
|
||||
p = SK.GetEntity(e->point[0])->PointGetNum();
|
||||
Printf(true, " center = " PT_AS_STR, COSTR(p));
|
||||
Printf(true, " center = " PT_AS_STR, COSTR(SK.GetEntity(e->point[0]), p));
|
||||
double r = e->CircleGetRadiusNum();
|
||||
Printf(true, " diameter = %Fi%s", SS.MmToString(r*2).c_str());
|
||||
Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str());
|
||||
|
@ -175,7 +182,7 @@ void TextWindow::DescribeSelection() {
|
|||
p = e->FaceGetNormalNum();
|
||||
Printf(true, " normal = " PT_AS_NUM, CO(p));
|
||||
p = e->FaceGetPointNum();
|
||||
Printf(false, " thru = " PT_AS_STR, COSTR(p));
|
||||
Printf(false, " thru = " PT_AS_STR, COSTR(e, p));
|
||||
break;
|
||||
|
||||
case Entity::Type::TTF_TEXT: {
|
||||
|
@ -315,12 +322,12 @@ void TextWindow::DescribeSelection() {
|
|||
} else if(gs.n == 2 && gs.points == 2) {
|
||||
Printf(false, "%FtTWO POINTS");
|
||||
Vector p0 = SK.GetEntity(gs.point[0])->PointGetNum();
|
||||
Printf(true, " at " PT_AS_STR, COSTR(p0));
|
||||
Printf(true, " at " PT_AS_STR, COSTR(SK.GetEntity(gs.point[0]), p0));
|
||||
Vector p1 = SK.GetEntity(gs.point[1])->PointGetNum();
|
||||
Printf(false, " " PT_AS_STR, COSTR(p1));
|
||||
Printf(false, " " PT_AS_STR, COSTR(SK.GetEntity(gs.point[1]), p1));
|
||||
Vector dv = p1.Minus(p0);
|
||||
Printf(true, " d = %Fi%s", SS.MmToString(dv.Magnitude()).c_str());
|
||||
Printf(false, " d(x, y, z) = " PT_AS_STR, COSTR(dv));
|
||||
Printf(false, " d(x, y, z) = " PT_AS_STR_NO_LINK, COSTR_NO_LINK(dv));
|
||||
} else if(gs.n == 2 && gs.points == 1 && gs.circlesOrArcs == 1) {
|
||||
Entity *ec = SK.GetEntity(gs.entity[0]);
|
||||
if(ec->type == Entity::Type::CIRCLE) {
|
||||
|
@ -329,9 +336,9 @@ void TextWindow::DescribeSelection() {
|
|||
Printf(false, "%FtPOINT AND AN ARC");
|
||||
} else ssassert(false, "Unexpected entity type");
|
||||
Vector p = SK.GetEntity(gs.point[0])->PointGetNum();
|
||||
Printf(true, " pt at " PT_AS_STR, COSTR(p));
|
||||
Printf(true, " pt at " PT_AS_STR, COSTR(SK.GetEntity(gs.point[0]), p));
|
||||
Vector c = SK.GetEntity(ec->point[0])->PointGetNum();
|
||||
Printf(true, " center = " PT_AS_STR, COSTR(c));
|
||||
Printf(true, " center = " PT_AS_STR, COSTR(SK.GetEntity(ec->point[0]), c));
|
||||
double r = ec->CircleGetRadiusNum();
|
||||
Printf(false, " diameter = %Fi%s", SS.MmToString(r*2).c_str());
|
||||
Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str());
|
||||
|
@ -340,22 +347,22 @@ void TextWindow::DescribeSelection() {
|
|||
} else if(gs.n == 2 && gs.faces == 1 && gs.points == 1) {
|
||||
Printf(false, "%FtA POINT AND A PLANE FACE");
|
||||
Vector pt = SK.GetEntity(gs.point[0])->PointGetNum();
|
||||
Printf(true, " point = " PT_AS_STR, COSTR(pt));
|
||||
Printf(true, " point = " PT_AS_STR, COSTR(SK.GetEntity(gs.point[0]), pt));
|
||||
Vector n = SK.GetEntity(gs.face[0])->FaceGetNormalNum();
|
||||
Printf(true, " plane normal = " PT_AS_NUM, CO(n));
|
||||
Vector pl = SK.GetEntity(gs.face[0])->FaceGetPointNum();
|
||||
Printf(false, " plane thru = " PT_AS_STR, COSTR(pl));
|
||||
Printf(false, " plane thru = " PT_AS_STR, COSTR(SK.GetEntity(gs.face[0]), pl));
|
||||
double dd = n.Dot(pl) - n.Dot(pt);
|
||||
Printf(true, " distance = %Fi%s", SS.MmToString(dd).c_str());
|
||||
} else if(gs.n == 3 && gs.points == 2 && gs.vectors == 1) {
|
||||
Printf(false, "%FtTWO POINTS AND A VECTOR");
|
||||
Vector p0 = SK.GetEntity(gs.point[0])->PointGetNum();
|
||||
Printf(true, " pointA = " PT_AS_STR, COSTR(p0));
|
||||
Printf(true, " pointA = " PT_AS_STR, COSTR(SK.GetEntity(gs.point[0]), p0));
|
||||
Vector p1 = SK.GetEntity(gs.point[1])->PointGetNum();
|
||||
Printf(false, " pointB = " PT_AS_STR, COSTR(p1));
|
||||
Printf(false, " pointB = " PT_AS_STR, COSTR(SK.GetEntity(gs.point[1]), p1));
|
||||
Vector v = SK.GetEntity(gs.vector[0])->VectorGetNum();
|
||||
v = v.WithMagnitude(1);
|
||||
Printf(true, " vector = " PT_AS_NUM, CO(v));
|
||||
Printf(true, " vector = " PT_AS_NUM_LINK, CO_LINK(SK.GetEntity(gs.vector[0]), v));
|
||||
double d = (p1.Minus(p0)).Dot(v);
|
||||
Printf(true, " proj_d = %Fi%s", SS.MmToString(d).c_str());
|
||||
} else if(gs.n == 2 && gs.lineSegments == 1 && gs.points == 1) {
|
||||
|
@ -363,11 +370,11 @@ void TextWindow::DescribeSelection() {
|
|||
Vector lp0 = SK.GetEntity(ln->point[0])->PointGetNum(),
|
||||
lp1 = SK.GetEntity(ln->point[1])->PointGetNum();
|
||||
Printf(false, "%FtLINE SEGMENT AND POINT%E");
|
||||
Printf(true, " ln thru " PT_AS_STR, COSTR(lp0));
|
||||
Printf(false, " " PT_AS_STR, COSTR(lp1));
|
||||
Printf(true, " ln thru " PT_AS_STR, COSTR(SK.GetEntity(ln->point[0]), lp0));
|
||||
Printf(false, " " PT_AS_STR, COSTR(SK.GetEntity(ln->point[1]), lp1));
|
||||
Entity *p = SK.GetEntity(gs.point[0]);
|
||||
Vector pp = p->PointGetNum();
|
||||
Printf(true, " point " PT_AS_STR, COSTR(pp));
|
||||
Printf(true, " point " PT_AS_STR, COSTR(p, pp));
|
||||
Printf(true, " pt-ln distance = %Fi%s%E",
|
||||
SS.MmToString(pp.DistanceToLine(lp0, lp1.Minus(lp0))).c_str());
|
||||
hEntity wrkpl = SS.GW.ActiveWorkplane();
|
||||
|
@ -386,8 +393,8 @@ void TextWindow::DescribeSelection() {
|
|||
v0 = v0.WithMagnitude(1);
|
||||
v1 = v1.WithMagnitude(1);
|
||||
|
||||
Printf(true, " vectorA = " PT_AS_NUM, CO(v0));
|
||||
Printf(false, " vectorB = " PT_AS_NUM, CO(v1));
|
||||
Printf(true, " vectorA = " PT_AS_NUM_LINK, CO_LINK(SK.GetEntity(gs.entity[0]), v0));
|
||||
Printf(false, " vectorB = " PT_AS_NUM_LINK, CO_LINK(SK.GetEntity(gs.entity[1]), v1));
|
||||
|
||||
double theta = acos(v0.Dot(v1));
|
||||
Printf(true, " angle = %Fi%2%E degrees", theta*180/PI);
|
||||
|
@ -400,12 +407,12 @@ void TextWindow::DescribeSelection() {
|
|||
Vector n0 = SK.GetEntity(gs.face[0])->FaceGetNormalNum();
|
||||
Printf(true, " planeA normal = " PT_AS_NUM, CO(n0));
|
||||
Vector p0 = SK.GetEntity(gs.face[0])->FaceGetPointNum();
|
||||
Printf(false, " planeA thru = " PT_AS_STR, COSTR(p0));
|
||||
Printf(false, " planeA thru = " PT_AS_STR, COSTR(SK.GetEntity(gs.face[0]), p0));
|
||||
|
||||
Vector n1 = SK.GetEntity(gs.face[1])->FaceGetNormalNum();
|
||||
Printf(true, " planeB normal = " PT_AS_NUM, CO(n1));
|
||||
Vector p1 = SK.GetEntity(gs.face[1])->FaceGetPointNum();
|
||||
Printf(false, " planeB thru = " PT_AS_STR, COSTR(p1));
|
||||
Printf(false, " planeB thru = " PT_AS_STR, COSTR(SK.GetEntity(gs.face[1]), p1));
|
||||
|
||||
double theta = acos(n0.Dot(n1));
|
||||
Printf(true, " angle = %Fi%2%E degrees", theta*180/PI);
|
||||
|
|
28
src/expr.cpp
28
src/expr.cpp
|
@ -400,15 +400,24 @@ Expr *Expr::PartialWrt(hParam p) const {
|
|||
ssassert(false, "Unexpected operation");
|
||||
}
|
||||
|
||||
uint64_t Expr::ParamsUsed() const {
|
||||
uint64_t r = 0;
|
||||
if(op == Op::PARAM) r |= ((uint64_t)1 << (parh.v % 61));
|
||||
if(op == Op::PARAM_PTR) r |= ((uint64_t)1 << (parp->h.v % 61));
|
||||
void Expr::ParamsUsedList(std::vector<hParam> *list) const {
|
||||
if(op == Op::PARAM || op == Op::PARAM_PTR) {
|
||||
// leaf: just add ourselves if we aren't already there
|
||||
hParam param = (op == Op::PARAM) ? parh : parp->h;
|
||||
if(list->end() != std::find_if(list->begin(), list->end(),
|
||||
[=](const hParam &p) { return p.v == param.v; })) {
|
||||
// We found ourselves in the list already, early out.
|
||||
return;
|
||||
}
|
||||
list->push_back(param);
|
||||
return;
|
||||
}
|
||||
|
||||
int c = Children();
|
||||
if(c >= 1) r |= a->ParamsUsed();
|
||||
if(c >= 2) r |= b->ParamsUsed();
|
||||
return r;
|
||||
if(c >= 1) {
|
||||
a->ParamsUsedList(list);
|
||||
if(c >= 2) b->ParamsUsedList(list);
|
||||
}
|
||||
}
|
||||
|
||||
bool Expr::DependsOn(hParam p) const {
|
||||
|
@ -424,6 +433,11 @@ bool Expr::DependsOn(hParam p) const {
|
|||
bool Expr::Tol(double a, double b) {
|
||||
return fabs(a - b) < 0.001;
|
||||
}
|
||||
|
||||
bool Expr::IsZeroConst() const {
|
||||
return op == Op::CONSTANT && EXACT(v == 0.0);
|
||||
}
|
||||
|
||||
Expr *Expr::FoldConstants() {
|
||||
Expr *n = AllocExpr();
|
||||
*n = *this;
|
||||
|
|
|
@ -70,9 +70,10 @@ public:
|
|||
|
||||
Expr *PartialWrt(hParam p) const;
|
||||
double Eval() const;
|
||||
uint64_t ParamsUsed() const;
|
||||
void ParamsUsedList(std::vector<hParam> *list) const;
|
||||
bool DependsOn(hParam p) const;
|
||||
static bool Tol(double a, double b);
|
||||
bool IsZeroConst() const;
|
||||
Expr *FoldConstants();
|
||||
void Substitute(hParam oldh, hParam newh);
|
||||
|
||||
|
|
|
@ -550,8 +550,11 @@ void SolveSpaceUI::SolveGroup(hGroup hg, bool andFindFree) {
|
|||
}
|
||||
|
||||
SolveResult SolveSpaceUI::TestRankForGroup(hGroup hg, int *rank) {
|
||||
WriteEqSystemForGroup(hg);
|
||||
Group *g = SK.GetGroup(hg);
|
||||
// If we don't calculate dof or redundant is allowed, there is
|
||||
// no point to solve rank because this result is not meaningful
|
||||
if(g->suppressDofCalculation || g->allowRedundant) return SolveResult::OKAY;
|
||||
WriteEqSystemForGroup(hg);
|
||||
SolveResult result = sys.SolveRank(g, rank);
|
||||
FreeAllTemporary();
|
||||
return result;
|
||||
|
|
|
@ -183,6 +183,7 @@ const MenuEntry Menu[] = {
|
|||
{ 0, N_("&Help"), Command::NONE, 0, KN, mHelp },
|
||||
{ 1, N_("&Language"), Command::LOCALE, 0, KN, mHelp },
|
||||
{ 1, N_("&Website / Manual"), Command::WEBSITE, 0, KN, mHelp },
|
||||
{ 1, N_("&Go to GitHub commit"), Command::GITHUB, 0, KN, mHelp },
|
||||
#ifndef __APPLE__
|
||||
{ 1, N_("&About"), Command::ABOUT, 0, KN, mHelp },
|
||||
#endif
|
||||
|
|
|
@ -136,10 +136,14 @@ void Group::MenuGroup(Command id, Platform::Path linkFile) {
|
|||
g.predef.negateV = wrkplg->predef.negateV;
|
||||
} else if(wrkplg->subtype == Subtype::WORKPLANE_BY_POINT_ORTHO) {
|
||||
g.predef.q = wrkplg->predef.q;
|
||||
} else if(wrkplg->subtype == Subtype::WORKPLANE_BY_POINT_NORMAL) {
|
||||
g.predef.q = wrkplg->predef.q;
|
||||
g.predef.entityB = wrkplg->predef.entityB;
|
||||
} else ssassert(false, "Unexpected workplane subtype");
|
||||
}
|
||||
} else if(gs.anyNormals == 1 && gs.points == 1 && gs.n == 2) {
|
||||
g.subtype = Subtype::WORKPLANE_BY_POINT_NORMAL;
|
||||
g.predef.entityB = gs.anyNormal[0];
|
||||
g.predef.q = SK.GetEntity(gs.anyNormal[0])->NormalGetNum();
|
||||
g.predef.origin = gs.point[0];
|
||||
//} else if(gs.faces == 1 && gs.points == 1 && gs.n == 2) {
|
||||
|
@ -455,9 +459,11 @@ void Group::Generate(IdList<Entity,hEntity> *entity,
|
|||
if(predef.negateU) u = u.ScaledBy(-1);
|
||||
if(predef.negateV) v = v.ScaledBy(-1);
|
||||
q = Quaternion::From(u, v);
|
||||
} else if(subtype == Subtype::WORKPLANE_BY_POINT_ORTHO || subtype == Subtype::WORKPLANE_BY_POINT_NORMAL /*|| subtype == Subtype::WORKPLANE_BY_POINT_FACE*/) {
|
||||
} else if(subtype == Subtype::WORKPLANE_BY_POINT_ORTHO) {
|
||||
// Already given, numerically.
|
||||
q = predef.q;
|
||||
} else if(subtype == Subtype::WORKPLANE_BY_POINT_NORMAL) {
|
||||
q = SK.GetEntity(predef.entityB)->NormalGetNum();
|
||||
} else ssassert(false, "Unexpected workplane subtype");
|
||||
|
||||
Entity normal = {};
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
#define MIN_POINT_DISTANCE 0.001
|
||||
|
||||
// we will check for duplicate verticies and keep all their normals
|
||||
// we will check for duplicate vertices and keep all their normals
|
||||
class vertex {
|
||||
public:
|
||||
Vector p;
|
||||
|
@ -47,7 +47,7 @@ static void addUnique(std::vector<vertex> &lv, Vector &p, Vector &n) {
|
|||
};
|
||||
|
||||
// Make a new point - type doesn't matter since we will make a copy later
|
||||
static hEntity newPoint(EntityList *el, int id, Vector p) {
|
||||
static hEntity newPoint(EntityList *el, int *id, Vector p) {
|
||||
Entity en = {};
|
||||
en.type = Entity::Type::POINT_N_COPY;
|
||||
en.extraPoints = 0;
|
||||
|
@ -59,7 +59,8 @@ static hEntity newPoint(EntityList *el, int id, Vector p) {
|
|||
en.actVisible = true;
|
||||
en.forceHidden = false;
|
||||
|
||||
en.h.v = id + en.group.v*65536;
|
||||
en.h.v = *id + en.group.v*65536;
|
||||
*id = *id+1;
|
||||
el->Add(&en);
|
||||
return en.h;
|
||||
}
|
||||
|
@ -67,12 +68,34 @@ static hEntity newPoint(EntityList *el, int id, Vector p) {
|
|||
// check if a vertex is unique and add it via newPoint if it is.
|
||||
static void addVertex(EntityList *el, Vector v) {
|
||||
if(el->n < 15000) {
|
||||
int id = el->n+2;
|
||||
newPoint(el, id, v);
|
||||
int id = el->n;
|
||||
newPoint(el, &id, v);
|
||||
}
|
||||
}
|
||||
|
||||
static hEntity newLine(EntityList *el, int id, hEntity p0, hEntity p1) {
|
||||
static hEntity newNormal(EntityList *el, int *id, Quaternion normal, hEntity p) {
|
||||
// normals have parameters, but we don't need them to make a NORMAL_N_COPY from this
|
||||
Entity en = {};
|
||||
en.type = Entity::Type::NORMAL_N_COPY;
|
||||
en.extraPoints = 0;
|
||||
en.timesApplied = 0;
|
||||
en.group.v = 472;
|
||||
en.actNormal = normal;
|
||||
en.construction = false;
|
||||
en.style.v = Style::NORMALS;
|
||||
// to be visible we need to add a point.
|
||||
// en.point[0] = newPoint(el, id, Vector::From(0,0,0));
|
||||
en.point[0] = p;
|
||||
en.actVisible = true;
|
||||
en.forceHidden = false;
|
||||
|
||||
*id = *id+1;
|
||||
en.h.v = *id + en.group.v*65536;
|
||||
el->Add(&en);
|
||||
return en.h;
|
||||
}
|
||||
|
||||
static hEntity newLine(EntityList *el, int *id, hEntity p0, hEntity p1) {
|
||||
Entity en = {};
|
||||
en.type = Entity::Type::LINE_SEGMENT;
|
||||
en.point[0] = p0;
|
||||
|
@ -85,7 +108,8 @@ static hEntity newLine(EntityList *el, int id, hEntity p0, hEntity p1) {
|
|||
en.actVisible = true;
|
||||
en.forceHidden = false;
|
||||
|
||||
en.h.v = id + en.group.v*65536;
|
||||
en.h.v = *id + en.group.v*65536;
|
||||
*id = *id + 1;
|
||||
el->Add(&en);
|
||||
return en.h;
|
||||
}
|
||||
|
@ -106,6 +130,13 @@ bool LinkStl(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s
|
|||
char str[80] = {};
|
||||
f.read(str, 80);
|
||||
|
||||
if(0==memcmp("solid", str, 5)) {
|
||||
// just returning false will trigger the warning that linked file is not present
|
||||
// best solution is to add an importer for text STL.
|
||||
Message(_("Text-formated STL files are not currently supported"));
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t n;
|
||||
uint32_t color;
|
||||
|
||||
|
@ -115,9 +146,6 @@ bool LinkStl(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s
|
|||
float x,y,z;
|
||||
float xn,yn,zn;
|
||||
|
||||
//add the STL origin as an entity
|
||||
addVertex(el, Vector::From(0.0, 0.0, 0.0));
|
||||
|
||||
std::vector<vertex> verts = {};
|
||||
|
||||
for(uint32_t i = 0; i<n; i++) {
|
||||
|
@ -171,7 +199,15 @@ bool LinkStl(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s
|
|||
addUnique(verts, tr.b, normal);
|
||||
addUnique(verts, tr.c, normal);
|
||||
}
|
||||
dbp("%d verticies", verts.size());
|
||||
dbp("%d vertices", verts.size());
|
||||
|
||||
int id = 1;
|
||||
|
||||
//add the STL origin and normals
|
||||
hEntity origin = newPoint(el, &id, Vector::From(0.0, 0.0, 0.0));
|
||||
newNormal(el, &id, Quaternion::From(Vector::From(1,0,0),Vector::From(0,1,0)), origin);
|
||||
newNormal(el, &id, Quaternion::From(Vector::From(0,1,0),Vector::From(0,0,1)), origin);
|
||||
newNormal(el, &id, Quaternion::From(Vector::From(0,0,1),Vector::From(1,0,0)), origin);
|
||||
|
||||
BBox box = {};
|
||||
box.minp = verts[0].p;
|
||||
|
@ -183,35 +219,34 @@ bool LinkStl(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s
|
|||
}
|
||||
|
||||
hEntity p[8];
|
||||
int id = el->n+2;
|
||||
p[0] = newPoint(el, id++, Vector::From(box.minp.x, box.minp.y, box.minp.z));
|
||||
p[1] = newPoint(el, id++, Vector::From(box.maxp.x, box.minp.y, box.minp.z));
|
||||
p[2] = newPoint(el, id++, Vector::From(box.minp.x, box.maxp.y, box.minp.z));
|
||||
p[3] = newPoint(el, id++, Vector::From(box.maxp.x, box.maxp.y, box.minp.z));
|
||||
p[4] = newPoint(el, id++, Vector::From(box.minp.x, box.minp.y, box.maxp.z));
|
||||
p[5] = newPoint(el, id++, Vector::From(box.maxp.x, box.minp.y, box.maxp.z));
|
||||
p[6] = newPoint(el, id++, Vector::From(box.minp.x, box.maxp.y, box.maxp.z));
|
||||
p[7] = newPoint(el, id++, Vector::From(box.maxp.x, box.maxp.y, box.maxp.z));
|
||||
p[0] = newPoint(el, &id, Vector::From(box.minp.x, box.minp.y, box.minp.z));
|
||||
p[1] = newPoint(el, &id, Vector::From(box.maxp.x, box.minp.y, box.minp.z));
|
||||
p[2] = newPoint(el, &id, Vector::From(box.minp.x, box.maxp.y, box.minp.z));
|
||||
p[3] = newPoint(el, &id, Vector::From(box.maxp.x, box.maxp.y, box.minp.z));
|
||||
p[4] = newPoint(el, &id, Vector::From(box.minp.x, box.minp.y, box.maxp.z));
|
||||
p[5] = newPoint(el, &id, Vector::From(box.maxp.x, box.minp.y, box.maxp.z));
|
||||
p[6] = newPoint(el, &id, Vector::From(box.minp.x, box.maxp.y, box.maxp.z));
|
||||
p[7] = newPoint(el, &id, Vector::From(box.maxp.x, box.maxp.y, box.maxp.z));
|
||||
|
||||
newLine(el, id++, p[0], p[1]);
|
||||
newLine(el, id++, p[0], p[2]);
|
||||
newLine(el, id++, p[3], p[1]);
|
||||
newLine(el, id++, p[3], p[2]);
|
||||
newLine(el, &id, p[0], p[1]);
|
||||
newLine(el, &id, p[0], p[2]);
|
||||
newLine(el, &id, p[3], p[1]);
|
||||
newLine(el, &id, p[3], p[2]);
|
||||
|
||||
newLine(el, id++, p[4], p[5]);
|
||||
newLine(el, id++, p[4], p[6]);
|
||||
newLine(el, id++, p[7], p[5]);
|
||||
newLine(el, id++, p[7], p[6]);
|
||||
newLine(el, &id, p[4], p[5]);
|
||||
newLine(el, &id, p[4], p[6]);
|
||||
newLine(el, &id, p[7], p[5]);
|
||||
newLine(el, &id, p[7], p[6]);
|
||||
|
||||
newLine(el, id++, p[0], p[4]);
|
||||
newLine(el, id++, p[1], p[5]);
|
||||
newLine(el, id++, p[2], p[6]);
|
||||
newLine(el, id++, p[3], p[7]);
|
||||
newLine(el, &id, p[0], p[4]);
|
||||
newLine(el, &id, p[1], p[5]);
|
||||
newLine(el, &id, p[2], p[6]);
|
||||
newLine(el, &id, p[3], p[7]);
|
||||
|
||||
for(unsigned int i=0; i<verts.size(); i++) {
|
||||
// create point entities for edge vertexes
|
||||
if(isEdgeVertex(verts[i])) {
|
||||
addVertex(el, verts[i].p);
|
||||
addVertex(el, verts[i].p);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -179,7 +179,8 @@ void Pixmap::ConvertTo(Format newFormat) {
|
|||
|
||||
static std::shared_ptr<Pixmap> ReadPngIntoPixmap(png_struct *png_ptr, png_info *info_ptr,
|
||||
bool flip) {
|
||||
png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_EXPAND | PNG_TRANSFORM_GRAY_TO_RGB, NULL);
|
||||
png_read_png(png_ptr, info_ptr,
|
||||
PNG_TRANSFORM_EXPAND | PNG_TRANSFORM_GRAY_TO_RGB | PNG_TRANSFORM_SCALE_16, NULL);
|
||||
|
||||
std::shared_ptr<Pixmap> pixmap = std::make_shared<Pixmap>();
|
||||
pixmap->width = png_get_image_width(png_ptr, info_ptr);
|
||||
|
|
|
@ -175,6 +175,7 @@ public:
|
|||
bool suppress;
|
||||
bool relaxConstraints;
|
||||
bool allowRedundant;
|
||||
bool suppressDofCalculation;
|
||||
bool allDimsReference;
|
||||
double scale;
|
||||
|
||||
|
@ -622,7 +623,7 @@ public:
|
|||
bool free;
|
||||
|
||||
// Used only in the solver
|
||||
hParam substd;
|
||||
Param *substd;
|
||||
|
||||
static const hParam NO_PARAM;
|
||||
|
||||
|
|
|
@ -1053,7 +1053,11 @@ void SolveSpaceUI::MenuHelp(Command id) {
|
|||
"law. For details, visit http://gnu.org/licenses/\n"
|
||||
"\n"
|
||||
"© 2008-%d Jonathan Westhues and other authors.\n"),
|
||||
PACKAGE_VERSION, 2021);
|
||||
PACKAGE_VERSION, 2022);
|
||||
break;
|
||||
|
||||
case Command::GITHUB:
|
||||
Platform::OpenInBrowser(GIT_HASH_URL);
|
||||
break;
|
||||
|
||||
default: ssassert(false, "Unexpected menu ID");
|
||||
|
|
|
@ -34,6 +34,10 @@
|
|||
#include <unordered_set>
|
||||
#include <vector>
|
||||
|
||||
#define EIGEN_NO_DEBUG
|
||||
#undef Success
|
||||
#include <Eigen/SparseCore>
|
||||
|
||||
// We declare these in advance instead of simply using FT_Library
|
||||
// (defined as typedef FT_LibraryRec_* FT_Library) because including
|
||||
// freetype.h invokes indescribable horrors and we would like to avoid
|
||||
|
@ -211,7 +215,7 @@ void Error(const char *fmt, ...);
|
|||
|
||||
class System {
|
||||
public:
|
||||
enum { MAX_UNKNOWNS = 1024 };
|
||||
enum { MAX_UNKNOWNS = 2048 };
|
||||
|
||||
EntityList entity;
|
||||
ParamList param;
|
||||
|
@ -233,37 +237,34 @@ public:
|
|||
// The system Jacobian matrix
|
||||
struct {
|
||||
// The corresponding equation for each row
|
||||
hEquation eq[MAX_UNKNOWNS];
|
||||
std::vector<Equation *> eq;
|
||||
|
||||
// The corresponding parameter for each column
|
||||
hParam param[MAX_UNKNOWNS];
|
||||
std::vector<hParam> param;
|
||||
|
||||
// We're solving AX = B
|
||||
int m, n;
|
||||
struct {
|
||||
Expr *sym[MAX_UNKNOWNS][MAX_UNKNOWNS];
|
||||
double num[MAX_UNKNOWNS][MAX_UNKNOWNS];
|
||||
} A;
|
||||
// This only observes the Expr - does not own them!
|
||||
Eigen::SparseMatrix<Expr *> sym;
|
||||
Eigen::SparseMatrix<double> num;
|
||||
} A;
|
||||
|
||||
double scale[MAX_UNKNOWNS];
|
||||
|
||||
// Some helpers for the least squares solve
|
||||
double AAt[MAX_UNKNOWNS][MAX_UNKNOWNS];
|
||||
double Z[MAX_UNKNOWNS];
|
||||
|
||||
double X[MAX_UNKNOWNS];
|
||||
Eigen::VectorXd scale;
|
||||
Eigen::VectorXd X;
|
||||
|
||||
struct {
|
||||
Expr *sym[MAX_UNKNOWNS];
|
||||
double num[MAX_UNKNOWNS];
|
||||
} B;
|
||||
// This only observes the Expr - does not own them!
|
||||
std::vector<Expr *> sym;
|
||||
Eigen::VectorXd num;
|
||||
} B;
|
||||
} mat;
|
||||
|
||||
static const double RANK_MAG_TOLERANCE, CONVERGE_TOLERANCE;
|
||||
static const double CONVERGE_TOLERANCE;
|
||||
int CalculateRank();
|
||||
bool TestRank(int *rank = NULL);
|
||||
static bool SolveLinearSystem(double X[], double A[][MAX_UNKNOWNS],
|
||||
double B[], int N);
|
||||
bool TestRank(int *dof = NULL);
|
||||
static bool SolveLinearSystem(const Eigen::SparseMatrix<double> &A,
|
||||
const Eigen::VectorXd &B, Eigen::VectorXd *X);
|
||||
bool SolveLeastSquares();
|
||||
|
||||
bool WriteJacobian(int tag);
|
||||
|
@ -279,7 +280,6 @@ public:
|
|||
bool NewtonSolve(int tag);
|
||||
|
||||
void MarkParamsFree(bool findFree);
|
||||
int CalculateDof();
|
||||
|
||||
SolveResult Solve(Group *g, int *rank = NULL, int *dof = NULL,
|
||||
List<hConstraint> *bad = NULL,
|
||||
|
@ -291,6 +291,9 @@ public:
|
|||
bool andFindBad = false, bool andFindFree = false);
|
||||
|
||||
void Clear();
|
||||
Param *GetLastParamSubstitution(Param *p);
|
||||
void SubstituteParamsByLast(Expr *e);
|
||||
void SortSubstitutionByDragged(Param *p);
|
||||
};
|
||||
|
||||
#include "ttf.h"
|
||||
|
|
430
src/system.cpp
430
src/system.cpp
|
@ -8,81 +8,152 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
#include "solvespace.h"
|
||||
|
||||
// This tolerance is used to determine whether two (linearized) constraints
|
||||
// are linearly dependent. If this is too small, then we will attempt to
|
||||
// solve truly inconsistent systems and fail. But if it's too large, then
|
||||
// we will give up on legitimate systems like a skinny right angle triangle by
|
||||
// its hypotenuse and long side.
|
||||
const double System::RANK_MAG_TOLERANCE = 1e-4;
|
||||
#include <Eigen/Core>
|
||||
#include <Eigen/SparseQR>
|
||||
|
||||
// The solver will converge all unknowns to within this tolerance. This must
|
||||
// always be much less than LENGTH_EPS, and in practice should be much less.
|
||||
const double System::CONVERGE_TOLERANCE = (LENGTH_EPS/(1e2));
|
||||
|
||||
constexpr size_t LikelyPartialCountPerEq = 10;
|
||||
|
||||
bool System::WriteJacobian(int tag) {
|
||||
// Clear all
|
||||
mat.param.clear();
|
||||
mat.eq.clear();
|
||||
mat.A.sym.setZero();
|
||||
mat.B.sym.clear();
|
||||
|
||||
int j = 0;
|
||||
for(auto &p : param) {
|
||||
if(j >= MAX_UNKNOWNS)
|
||||
return false;
|
||||
|
||||
if(p.tag != tag)
|
||||
continue;
|
||||
mat.param[j] = p.h;
|
||||
j++;
|
||||
for(Param &p : param) {
|
||||
if(p.tag != tag) continue;
|
||||
mat.param.push_back(p.h);
|
||||
}
|
||||
mat.n = j;
|
||||
mat.n = mat.param.size();
|
||||
|
||||
int i = 0;
|
||||
for(Equation &e : eq) {
|
||||
if(e.tag != tag) continue;
|
||||
mat.eq.push_back(&e);
|
||||
}
|
||||
mat.m = mat.eq.size();
|
||||
mat.A.sym.resize(mat.m, mat.n);
|
||||
mat.A.sym.reserve(Eigen::VectorXi::Constant(mat.n, LikelyPartialCountPerEq));
|
||||
|
||||
for(auto &e : eq) {
|
||||
if(i >= MAX_UNKNOWNS) return false;
|
||||
// Fill the param id to index map
|
||||
std::map<uint32_t, int> paramToIndex;
|
||||
for(int j = 0; j < mat.n; j++) {
|
||||
paramToIndex[mat.param[j].v] = j;
|
||||
}
|
||||
|
||||
if(e.tag != tag)
|
||||
continue;
|
||||
if(mat.eq.size() >= MAX_UNKNOWNS) {
|
||||
return false;
|
||||
}
|
||||
std::vector<hParam> paramsUsed;
|
||||
// In some experimenting, this is almost always the right size.
|
||||
// Value is usually between 0 and 20, comes from number of constraints?
|
||||
mat.B.sym.reserve(mat.eq.size());
|
||||
for(size_t i = 0; i < mat.eq.size(); i++) {
|
||||
Equation *e = mat.eq[i];
|
||||
if(e->tag != tag) continue;
|
||||
// Simplify (fold) then deep-copy the current equation.
|
||||
Expr *f = e->e->FoldConstants();
|
||||
f = f->DeepCopyWithParamsAsPointers(¶m, &(SK.param));
|
||||
|
||||
mat.eq[i] = e.h;
|
||||
Expr *f = e.e->DeepCopyWithParamsAsPointers(¶m, &(SK.param));
|
||||
f = f->FoldConstants();
|
||||
paramsUsed.clear();
|
||||
f->ParamsUsedList(¶msUsed);
|
||||
|
||||
// Hash table (61 bits) to accelerate generation of zero partials.
|
||||
uint64_t scoreboard = f->ParamsUsed();
|
||||
for(j = 0; j < mat.n; j++) {
|
||||
Expr *pd;
|
||||
if(scoreboard & ((uint64_t)1 << (mat.param[j].v % 61)) &&
|
||||
f->DependsOn(mat.param[j]))
|
||||
{
|
||||
pd = f->PartialWrt(mat.param[j]);
|
||||
pd = pd->FoldConstants();
|
||||
pd = pd->DeepCopyWithParamsAsPointers(¶m, &(SK.param));
|
||||
} else {
|
||||
pd = Expr::From(0.0);
|
||||
}
|
||||
mat.A.sym[i][j] = pd;
|
||||
for(hParam &p : paramsUsed) {
|
||||
// Find the index of this parameter
|
||||
auto it = paramToIndex.find(p.v);
|
||||
if(it == paramToIndex.end()) continue;
|
||||
// this is the parameter index
|
||||
const int j = it->second;
|
||||
// compute partial derivative of f
|
||||
Expr *pd = f->PartialWrt(p);
|
||||
pd = pd->FoldConstants();
|
||||
if(pd->IsZeroConst())
|
||||
continue;
|
||||
mat.A.sym.insert(i, j) = pd;
|
||||
}
|
||||
mat.B.sym[i] = f;
|
||||
i++;
|
||||
paramsUsed.clear();
|
||||
mat.B.sym.push_back(f);
|
||||
}
|
||||
mat.m = i;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void System::EvalJacobian() {
|
||||
int i, j;
|
||||
for(i = 0; i < mat.m; i++) {
|
||||
for(j = 0; j < mat.n; j++) {
|
||||
mat.A.num[i][j] = (mat.A.sym[i][j])->Eval();
|
||||
using namespace Eigen;
|
||||
mat.A.num.setZero();
|
||||
mat.A.num.resize(mat.m, mat.n);
|
||||
const int size = mat.A.sym.outerSize();
|
||||
|
||||
for(int k = 0; k < size; k++) {
|
||||
for(SparseMatrix <Expr *>::InnerIterator it(mat.A.sym, k); it; ++it) {
|
||||
double value = it.value()->Eval();
|
||||
if(EXACT(value == 0.0)) continue;
|
||||
mat.A.num.insert(it.row(), it.col()) = value;
|
||||
}
|
||||
}
|
||||
mat.A.num.makeCompressed();
|
||||
}
|
||||
|
||||
bool System::IsDragged(hParam p) {
|
||||
hParam *pp;
|
||||
for(pp = dragged.First(); pp; pp = dragged.NextAfter(pp)) {
|
||||
if(p == *pp) return true;
|
||||
const auto b = dragged.begin();
|
||||
const auto e = dragged.end();
|
||||
return e != std::find(b, e, p);
|
||||
}
|
||||
|
||||
Param *System::GetLastParamSubstitution(Param *p) {
|
||||
Param *current = p;
|
||||
while(current->substd != NULL) {
|
||||
current = current->substd;
|
||||
if(current == p) {
|
||||
// Break the loop
|
||||
current->substd = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return current;
|
||||
}
|
||||
|
||||
void System::SortSubstitutionByDragged(Param *p) {
|
||||
std::vector<Param *> subsParams;
|
||||
Param *by = NULL;
|
||||
Param *current = p;
|
||||
while(current != NULL) {
|
||||
subsParams.push_back(current);
|
||||
if(IsDragged(current->h)) {
|
||||
by = current;
|
||||
}
|
||||
current = current->substd;
|
||||
}
|
||||
if(by == NULL) by = p;
|
||||
for(Param *p : subsParams) {
|
||||
if(p == by) continue;
|
||||
p->substd = by;
|
||||
p->tag = VAR_SUBSTITUTED;
|
||||
}
|
||||
by->substd = NULL;
|
||||
by->tag = 0;
|
||||
}
|
||||
|
||||
void System::SubstituteParamsByLast(Expr *e) {
|
||||
ssassert(e->op != Expr::Op::PARAM_PTR, "Expected an expression that refer to params via handles");
|
||||
|
||||
if(e->op == Expr::Op::PARAM) {
|
||||
Param *p = param.FindByIdNoOops(e->parh);
|
||||
if(p != NULL) {
|
||||
Param *s = GetLastParamSubstitution(p);
|
||||
if(s != NULL) {
|
||||
e->parh = s->h;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
int c = e->Children();
|
||||
if(c >= 1) {
|
||||
SubstituteParamsByLast(e->a);
|
||||
if(c >= 2) SubstituteParamsByLast(e->b);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void System::SolveBySubstitution() {
|
||||
|
@ -102,172 +173,114 @@ void System::SolveBySubstitution() {
|
|||
continue;
|
||||
}
|
||||
|
||||
if(IsDragged(a)) {
|
||||
// A is being dragged, so A should stay, and B should go
|
||||
std::swap(a, b);
|
||||
if(a.v == b.v) {
|
||||
teq.tag = EQ_SUBSTITUTED;
|
||||
continue;
|
||||
}
|
||||
|
||||
for(auto &req : eq) {
|
||||
req.e->Substitute(a, b); // A becomes B, B unchanged
|
||||
}
|
||||
for(auto &rp : param) {
|
||||
if(rp.substd == a) {
|
||||
rp.substd = b;
|
||||
Param *pa = param.FindById(a);
|
||||
Param *pb = param.FindById(b);
|
||||
|
||||
// Take the last substitution of parameter a
|
||||
// This resulted in creation of substitution chains
|
||||
Param *last = GetLastParamSubstitution(pa);
|
||||
last->substd = pb;
|
||||
last->tag = VAR_SUBSTITUTED;
|
||||
|
||||
if(pb->substd != NULL) {
|
||||
// Break the loops
|
||||
GetLastParamSubstitution(pb);
|
||||
// if b loop was broken
|
||||
if(pb->substd == NULL) {
|
||||
// Clear substitution
|
||||
pb->tag = 0;
|
||||
}
|
||||
}
|
||||
Param *ptr = param.FindById(a);
|
||||
ptr->tag = VAR_SUBSTITUTED;
|
||||
ptr->substd = b;
|
||||
|
||||
teq.tag = EQ_SUBSTITUTED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Calculate the rank of the Jacobian matrix, by Gram-Schimdt orthogonalization
|
||||
// in place. A row (~equation) is considered to be all zeros if its magnitude
|
||||
// is less than the tolerance RANK_MAG_TOLERANCE.
|
||||
//-----------------------------------------------------------------------------
|
||||
int System::CalculateRank() {
|
||||
// Actually work with magnitudes squared, not the magnitudes
|
||||
double rowMag[MAX_UNKNOWNS] = {};
|
||||
double tol = RANK_MAG_TOLERANCE*RANK_MAG_TOLERANCE;
|
||||
|
||||
int i, iprev, j;
|
||||
int rank = 0;
|
||||
|
||||
for(i = 0; i < mat.m; i++) {
|
||||
// Subtract off this row's component in the direction of any
|
||||
// previous rows
|
||||
for(iprev = 0; iprev < i; iprev++) {
|
||||
if(rowMag[iprev] <= tol) continue; // ignore zero rows
|
||||
|
||||
double dot = 0;
|
||||
for(j = 0; j < mat.n; j++) {
|
||||
dot += (mat.A.num[iprev][j]) * (mat.A.num[i][j]);
|
||||
}
|
||||
for(j = 0; j < mat.n; j++) {
|
||||
mat.A.num[i][j] -= (dot/rowMag[iprev])*mat.A.num[iprev][j];
|
||||
}
|
||||
}
|
||||
// Our row is now normal to all previous rows; calculate the
|
||||
// magnitude of what's left
|
||||
double mag = 0;
|
||||
for(j = 0; j < mat.n; j++) {
|
||||
mag += (mat.A.num[i][j]) * (mat.A.num[i][j]);
|
||||
}
|
||||
if(mag > tol) {
|
||||
rank++;
|
||||
}
|
||||
rowMag[i] = mag;
|
||||
//
|
||||
for(Param &p : param) {
|
||||
SortSubstitutionByDragged(&p);
|
||||
}
|
||||
|
||||
return rank;
|
||||
// Substitute all the equations
|
||||
for(auto &req : eq) {
|
||||
SubstituteParamsByLast(req.e);
|
||||
}
|
||||
|
||||
// Substitute all the parameters with last substitutions
|
||||
for(auto &p : param) {
|
||||
if(p.substd == NULL) continue;
|
||||
p.substd = GetLastParamSubstitution(p.substd);
|
||||
}
|
||||
}
|
||||
|
||||
bool System::TestRank(int *rank) {
|
||||
//-----------------------------------------------------------------------------
|
||||
// Calculate the rank of the Jacobian matrix
|
||||
//-----------------------------------------------------------------------------
|
||||
int System::CalculateRank() {
|
||||
using namespace Eigen;
|
||||
if(mat.n == 0 || mat.m == 0) return 0;
|
||||
SparseQR <SparseMatrix<double>, COLAMDOrdering<int>> solver;
|
||||
solver.compute(mat.A.num);
|
||||
int result = solver.rank();
|
||||
return result;
|
||||
}
|
||||
|
||||
bool System::TestRank(int *dof) {
|
||||
EvalJacobian();
|
||||
int jacobianRank = CalculateRank();
|
||||
if(rank) *rank = jacobianRank;
|
||||
// We are calculating dof based on real rank, not mat.m.
|
||||
// Using this approach we can calculate real dof even when redundant is allowed.
|
||||
if(dof != NULL) *dof = mat.n - jacobianRank;
|
||||
return jacobianRank == mat.m;
|
||||
}
|
||||
|
||||
bool System::SolveLinearSystem(double X[], double A[][MAX_UNKNOWNS],
|
||||
double B[], int n)
|
||||
bool System::SolveLinearSystem(const Eigen::SparseMatrix <double> &A,
|
||||
const Eigen::VectorXd &B, Eigen::VectorXd *X)
|
||||
{
|
||||
// Gaussian elimination, with partial pivoting. It's an error if the
|
||||
// matrix is singular, because that means two constraints are
|
||||
// equivalent.
|
||||
int i, j, ip, jp, imax = 0;
|
||||
double max, temp;
|
||||
|
||||
for(i = 0; i < n; i++) {
|
||||
// We are trying eliminate the term in column i, for rows i+1 and
|
||||
// greater. First, find a pivot (between rows i and N-1).
|
||||
max = 0;
|
||||
for(ip = i; ip < n; ip++) {
|
||||
if(fabs(A[ip][i]) > max) {
|
||||
imax = ip;
|
||||
max = fabs(A[ip][i]);
|
||||
}
|
||||
}
|
||||
// Don't give up on a singular matrix unless it's really bad; the
|
||||
// assumption code is responsible for identifying that condition,
|
||||
// so we're not responsible for reporting that error.
|
||||
if(fabs(max) < 1e-20) continue;
|
||||
|
||||
// Swap row imax with row i
|
||||
for(jp = 0; jp < n; jp++) {
|
||||
swap(A[i][jp], A[imax][jp]);
|
||||
}
|
||||
swap(B[i], B[imax]);
|
||||
|
||||
// For rows i+1 and greater, eliminate the term in column i.
|
||||
for(ip = i+1; ip < n; ip++) {
|
||||
temp = A[ip][i]/A[i][i];
|
||||
|
||||
for(jp = i; jp < n; jp++) {
|
||||
A[ip][jp] -= temp*(A[i][jp]);
|
||||
}
|
||||
B[ip] -= temp*B[i];
|
||||
}
|
||||
}
|
||||
|
||||
// We've put the matrix in upper triangular form, so at this point we
|
||||
// can solve by back-substitution.
|
||||
for(i = n - 1; i >= 0; i--) {
|
||||
if(fabs(A[i][i]) < 1e-20) continue;
|
||||
|
||||
temp = B[i];
|
||||
for(j = n - 1; j > i; j--) {
|
||||
temp -= X[j]*A[i][j];
|
||||
}
|
||||
X[i] = temp / A[i][i];
|
||||
}
|
||||
|
||||
return true;
|
||||
if(A.outerSize() == 0) return true;
|
||||
using namespace Eigen;
|
||||
SparseQR<SparseMatrix<double>, COLAMDOrdering<int>> solver;
|
||||
//SimplicialLDLT<SparseMatrix<double>> solver;
|
||||
solver.compute(A);
|
||||
*X = solver.solve(B);
|
||||
return (solver.info() == Success);
|
||||
}
|
||||
|
||||
bool System::SolveLeastSquares() {
|
||||
int r, c, i;
|
||||
|
||||
using namespace Eigen;
|
||||
// Scale the columns; this scale weights the parameters for the least
|
||||
// squares solve, so that we can encourage the solver to make bigger
|
||||
// changes in some parameters, and smaller in others.
|
||||
for(c = 0; c < mat.n; c++) {
|
||||
mat.scale = VectorXd::Ones(mat.n);
|
||||
for(int c = 0; c < mat.n; c++) {
|
||||
if(IsDragged(mat.param[c])) {
|
||||
// It's least squares, so this parameter doesn't need to be all
|
||||
// that big to get a large effect.
|
||||
mat.scale[c] = 1/20.0;
|
||||
} else {
|
||||
mat.scale[c] = 1;
|
||||
}
|
||||
for(r = 0; r < mat.m; r++) {
|
||||
mat.A.num[r][c] *= mat.scale[c];
|
||||
mat.scale[c] = 1 / 20.0;
|
||||
}
|
||||
}
|
||||
|
||||
// Write A*A'
|
||||
for(r = 0; r < mat.m; r++) {
|
||||
for(c = 0; c < mat.m; c++) { // yes, AAt is square
|
||||
double sum = 0;
|
||||
for(i = 0; i < mat.n; i++) {
|
||||
sum += mat.A.num[r][i]*mat.A.num[c][i];
|
||||
}
|
||||
mat.AAt[r][c] = sum;
|
||||
const int size = mat.A.num.outerSize();
|
||||
for(int k = 0; k < size; k++) {
|
||||
for(SparseMatrix<double>::InnerIterator it(mat.A.num, k); it; ++it) {
|
||||
it.valueRef() *= mat.scale[it.col()];
|
||||
}
|
||||
}
|
||||
|
||||
if(!SolveLinearSystem(mat.Z, mat.AAt, mat.B.num, mat.m)) return false;
|
||||
SparseMatrix<double> AAt = mat.A.num * mat.A.num.transpose();
|
||||
AAt.makeCompressed();
|
||||
VectorXd z(mat.n);
|
||||
|
||||
// And multiply that by A' to get our solution.
|
||||
for(c = 0; c < mat.n; c++) {
|
||||
double sum = 0;
|
||||
for(i = 0; i < mat.m; i++) {
|
||||
sum += mat.A.num[i][c]*mat.Z[i];
|
||||
}
|
||||
mat.X[c] = sum * mat.scale[c];
|
||||
if(!SolveLinearSystem(AAt, mat.B.num, &z)) return false;
|
||||
|
||||
mat.X = mat.A.num.transpose() * z;
|
||||
|
||||
for(int c = 0; c < mat.n; c++) {
|
||||
mat.X[c] *= mat.scale[c];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -279,6 +292,7 @@ bool System::NewtonSolve(int tag) {
|
|||
int i;
|
||||
|
||||
// Evaluate the functions at our operating point.
|
||||
mat.B.num = Eigen::VectorXd(mat.m);
|
||||
for(i = 0; i < mat.m; i++) {
|
||||
mat.B.num[i] = (mat.B.sym[i])->Eval();
|
||||
}
|
||||
|
@ -405,26 +419,26 @@ SolveResult System::Solve(Group *g, int *rank, int *dof, List<hConstraint> *bad,
|
|||
{
|
||||
WriteEquationsExceptFor(Constraint::NO_CONSTRAINT, g);
|
||||
|
||||
int i;
|
||||
bool rankOk;
|
||||
|
||||
/*
|
||||
int x;
|
||||
dbp("%d equations", eq.n);
|
||||
for(i = 0; i < eq.n; i++) {
|
||||
dbp(" %.3f = %s = 0", eq[i].e->Eval(), eq[i].e->Print());
|
||||
for(x = 0; x < eq.n; x++) {
|
||||
dbp(" %.3f = %s = 0", eq[x].e->Eval(), eq[x].e->Print());
|
||||
}
|
||||
dbp("%d parameters", param.n);
|
||||
for(i = 0; i < param.n; i++) {
|
||||
dbp(" param %08x at %.3f", param[i].h.v, param[i].val);
|
||||
for(x = 0; x < param.n; x++) {
|
||||
dbp(" param %08x at %.3f", param[x].h.v, param[x].val);
|
||||
} */
|
||||
|
||||
// All params and equations are assigned to group zero.
|
||||
param.ClearTags();
|
||||
eq.ClearTags();
|
||||
|
||||
// Solving by substitution eliminates duplicate e.g. H/V constraints, which can cause rank test
|
||||
// to succeed even on overdefined systems, which will fail later.
|
||||
if(!forceDofCheck) {
|
||||
// Since we are suppressing dof calculation or allowing redundant, we
|
||||
// can't / don't want to catch result of dof checking without substitution
|
||||
if(g->suppressDofCalculation || g->allowRedundant || !forceDofCheck) {
|
||||
SolveBySubstitution();
|
||||
}
|
||||
|
||||
|
@ -462,22 +476,21 @@ SolveResult System::Solve(Group *g, int *rank, int *dof, List<hConstraint> *bad,
|
|||
if(!WriteJacobian(0)) {
|
||||
return SolveResult::TOO_MANY_UNKNOWNS;
|
||||
}
|
||||
|
||||
rankOk = TestRank(rank);
|
||||
// Clear dof value in order to have indication when dof is actually not calculated
|
||||
if(dof != NULL) *dof = -1;
|
||||
// We are suppressing or allowing redundant, so we no need to catch unsolveable + redundant
|
||||
rankOk = (!g->suppressDofCalculation && !g->allowRedundant) ? TestRank(dof) : true;
|
||||
|
||||
// And do the leftovers as one big system
|
||||
if(!NewtonSolve(0)) {
|
||||
goto didnt_converge;
|
||||
}
|
||||
|
||||
rankOk = TestRank(rank);
|
||||
// Here we are want to calculate dof even when redundant is allowed, so just handle suppressing
|
||||
rankOk = (!g->suppressDofCalculation) ? TestRank(dof) : true;
|
||||
if(!rankOk) {
|
||||
if(andFindBad) FindWhichToRemoveToFixJacobian(g, bad, forceDofCheck);
|
||||
} else {
|
||||
// This is not the full Jacobian, but any substitutions or single-eq
|
||||
// solves removed one equation and one unknown, therefore no effect
|
||||
// on the number of DOF.
|
||||
if(dof) *dof = CalculateDof();
|
||||
MarkParamsFree(andFindFree);
|
||||
}
|
||||
// System solved correctly, so write the new values back in to the
|
||||
|
@ -485,7 +498,7 @@ SolveResult System::Solve(Group *g, int *rank, int *dof, List<hConstraint> *bad,
|
|||
for(auto &p : param) {
|
||||
double val;
|
||||
if(p.tag == VAR_SUBSTITUTED) {
|
||||
val = param.FindById(p.substd)->val;
|
||||
val = p.substd->val;
|
||||
} else {
|
||||
val = p.val;
|
||||
}
|
||||
|
@ -499,12 +512,12 @@ SolveResult System::Solve(Group *g, int *rank, int *dof, List<hConstraint> *bad,
|
|||
didnt_converge:
|
||||
SK.constraint.ClearTags();
|
||||
// Not using range-for here because index is used in additional ways
|
||||
for(i = 0; i < eq.n; i++) {
|
||||
for(size_t i = 0; i < mat.eq.size(); i++) {
|
||||
if(fabs(mat.B.num[i]) > CONVERGE_TOLERANCE || IsReasonable(mat.B.num[i])) {
|
||||
// This constraint is unsatisfied.
|
||||
if(!mat.eq[i].isFromConstraint()) continue;
|
||||
if(!mat.eq[i]->h.isFromConstraint()) continue;
|
||||
|
||||
hConstraint hc = mat.eq[i].constraint();
|
||||
hConstraint hc = mat.eq[i]->h.constraint();
|
||||
ConstraintBase *c = SK.constraint.FindByIdNoOops(hc);
|
||||
if(!c) continue;
|
||||
// Don't double-show constraints that generated multiple
|
||||
|
@ -534,11 +547,14 @@ SolveResult System::SolveRank(Group *g, int *rank, int *dof, List<hConstraint> *
|
|||
return SolveResult::TOO_MANY_UNKNOWNS;
|
||||
}
|
||||
|
||||
bool rankOk = TestRank(rank);
|
||||
bool rankOk = TestRank(dof);
|
||||
if(!rankOk) {
|
||||
if(andFindBad) FindWhichToRemoveToFixJacobian(g, bad, /*forceDofCheck=*/true);
|
||||
// When we are testing with redundant allowed, we don't want to have additional info
|
||||
// about redundants since this test is working only for single redundant constraint
|
||||
if(!g->suppressDofCalculation && !g->allowRedundant) {
|
||||
if(andFindBad) FindWhichToRemoveToFixJacobian(g, bad, true);
|
||||
}
|
||||
} else {
|
||||
if(dof) *dof = CalculateDof();
|
||||
MarkParamsFree(andFindFree);
|
||||
}
|
||||
return rankOk ? SolveResult::OKAY : SolveResult::REDUNDANT_OKAY;
|
||||
|
@ -549,6 +565,8 @@ void System::Clear() {
|
|||
param.Clear();
|
||||
eq.Clear();
|
||||
dragged.Clear();
|
||||
mat.A.num.setZero();
|
||||
mat.A.sym.setZero();
|
||||
}
|
||||
|
||||
void System::MarkParamsFree(bool find) {
|
||||
|
@ -573,7 +591,3 @@ void System::MarkParamsFree(bool find) {
|
|||
}
|
||||
}
|
||||
|
||||
int System::CalculateDof() {
|
||||
return mat.n - mat.m;
|
||||
}
|
||||
|
||||
|
|
|
@ -261,6 +261,8 @@ void TextWindow::ScreenChangeGroupOption(int link, uint32_t v) {
|
|||
|
||||
case 'e': g->allowRedundant = !(g->allowRedundant); break;
|
||||
|
||||
case 'D': g->suppressDofCalculation = !(g->suppressDofCalculation); break;
|
||||
|
||||
case 'v': g->visible = !(g->visible); break;
|
||||
|
||||
case 'd': g->allDimsReference = !(g->allDimsReference); break;
|
||||
|
@ -511,6 +513,10 @@ void TextWindow::ShowGroupInfo() {
|
|||
&TextWindow::ScreenChangeGroupOption,
|
||||
g->allowRedundant ? CHECK_TRUE : CHECK_FALSE);
|
||||
|
||||
Printf(false, " %f%LD%Fd%s suppress dof calculation (improves solver performance)",
|
||||
&TextWindow::ScreenChangeGroupOption,
|
||||
g->suppressDofCalculation ? CHECK_TRUE : CHECK_FALSE);
|
||||
|
||||
Printf(false, " %f%Ld%Fd%s treat all dimensions as reference",
|
||||
&TextWindow::ScreenChangeGroupOption,
|
||||
g->allDimsReference ? CHECK_TRUE : CHECK_FALSE);
|
||||
|
|
|
@ -235,6 +235,7 @@ void TextWindow::Init() {
|
|||
|
||||
using namespace std::placeholders;
|
||||
window->onClose = []() {
|
||||
SS.TW.HideEditControl();
|
||||
SS.GW.showTextWindow = false;
|
||||
SS.GW.EnsureValidActives();
|
||||
};
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include FT_ADVANCES_H
|
||||
|
||||
/* Yecch. Irritatingly, you need to do this nonsense to get the error string table,
|
||||
since nobody thought to put this exact function into FreeType itsself. */
|
||||
since nobody thought to put this exact function into FreeType itself. */
|
||||
#undef __FTERRORS_H__
|
||||
#define FT_ERRORDEF(e, v, s) { (e), (s) },
|
||||
#define FT_ERROR_START_LIST
|
||||
|
|
Loading…
Reference in New Issue