Merge branch 'solvespace:master' into master
commit
ab7d77d58d
|
@ -13,4 +13,4 @@ else
|
||||||
brew install libomp
|
brew install libomp
|
||||||
fi
|
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 \
|
sudo apt-get install -q -y \
|
||||||
zlib1g-dev libpng-dev libcairo2-dev libfreetype6-dev libjson-c-dev \
|
zlib1g-dev libpng-dev libcairo2-dev libfreetype6-dev libjson-c-dev \
|
||||||
libfontconfig1-dev libgtkmm-3.0-dev libpangomm-1.4-dev libgl-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-*/
|
/obj-*/
|
||||||
/*.slvs
|
/*.slvs
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
|
# Visual Studio
|
||||||
|
out/
|
||||||
|
.vs/
|
||||||
|
CMakeSettings.json
|
||||||
|
|
|
@ -23,3 +23,6 @@
|
||||||
[submodule "extlib/mimalloc"]
|
[submodule "extlib/mimalloc"]
|
||||||
path = extlib/mimalloc
|
path = extlib/mimalloc
|
||||||
url = https://github.com/microsoft/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:
|
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
|
* 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.
|
* Gray the group name in the text window for groups with suppressed solid model.
|
||||||
* Added the ability to Link STL files.
|
* Added the ability to Link STL files.
|
||||||
|
@ -30,6 +41,10 @@ MISC:
|
||||||
|
|
||||||
Performance:
|
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.
|
* More changes to the ID list implementation.
|
||||||
|
|
||||||
3.0
|
3.0
|
||||||
|
|
|
@ -8,10 +8,9 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
|
||||||
" mkdir build && cd build && cmake ..")
|
" mkdir build && cd build && cmake ..")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
|
list(APPEND CMAKE_MODULE_PATH
|
||||||
"${CMAKE_SOURCE_DIR}/cmake/")
|
"${CMAKE_SOURCE_DIR}/cmake/")
|
||||||
|
|
||||||
cmake_policy(SET CMP0048 OLD)
|
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED YES)
|
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:
|
# and instead uncomment the following, adding the complete git hash of the checkout you are using:
|
||||||
# set(GIT_COMMIT_HASH 0000000000000000000000000000000000000000)
|
# 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)
|
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
|
set(ENABLE_GUI ON CACHE BOOL
|
||||||
"Whether the graphical interface is enabled")
|
"Whether the graphical interface is enabled")
|
||||||
|
@ -56,8 +55,11 @@ set(ENABLE_SANITIZERS OFF CACHE BOOL
|
||||||
"Whether to enable Clang's AddressSanitizer and UndefinedBehaviorSanitizer")
|
"Whether to enable Clang's AddressSanitizer and UndefinedBehaviorSanitizer")
|
||||||
set(ENABLE_OPENMP OFF CACHE BOOL
|
set(ENABLE_OPENMP OFF CACHE BOOL
|
||||||
"Whether geometric operations will be parallelized using OpenMP")
|
"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")
|
"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)")
|
set(OPENGL 3 CACHE STRING "OpenGL version to use (one of: 1 3)")
|
||||||
|
|
||||||
|
@ -114,7 +116,12 @@ endif()
|
||||||
if(ENABLE_OPENMP)
|
if(ENABLE_OPENMP)
|
||||||
find_package( OpenMP REQUIRED )
|
find_package( OpenMP REQUIRED )
|
||||||
if(OPENMP_FOUND)
|
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} )
|
message(STATUS "found OpenMP, compiling with flags: " ${OpenMP_CXX_FLAGS} )
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
@ -178,6 +185,9 @@ endif()
|
||||||
message(STATUS "Using in-tree libdxfrw")
|
message(STATUS "Using in-tree libdxfrw")
|
||||||
add_subdirectory(extlib/libdxfrw)
|
add_subdirectory(extlib/libdxfrw)
|
||||||
|
|
||||||
|
message(STATUS "Using in-tree eigen")
|
||||||
|
include_directories(extlib/eigen)
|
||||||
|
|
||||||
message(STATUS "Using in-tree mimalloc")
|
message(STATUS "Using in-tree mimalloc")
|
||||||
set(MI_OVERRIDE OFF CACHE BOOL "")
|
set(MI_OVERRIDE OFF CACHE BOOL "")
|
||||||
set(MI_BUILD_SHARED 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)
|
add_subdirectory(extlib/mimalloc EXCLUDE_FROM_ALL)
|
||||||
set(MIMALLOC_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/extlib/mimalloc/include)
|
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)
|
if(WIN32 OR APPLE)
|
||||||
# On Win32 and macOS we use vendored packages, since there is little to no benefit
|
# 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
|
# to trying to find system versions. In particular, trying to link to libraries from
|
||||||
|
@ -281,7 +303,6 @@ if(ENABLE_GUI)
|
||||||
elseif(APPLE)
|
elseif(APPLE)
|
||||||
find_package(OpenGL REQUIRED)
|
find_package(OpenGL REQUIRED)
|
||||||
find_library(APPKIT_LIBRARY AppKit REQUIRED)
|
find_library(APPKIT_LIBRARY AppKit REQUIRED)
|
||||||
set(util_LIBRARIES ${APPKIT_LIBRARY})
|
|
||||||
else()
|
else()
|
||||||
find_package(OpenGL REQUIRED)
|
find_package(OpenGL REQUIRED)
|
||||||
find_package(SpaceWare)
|
find_package(SpaceWare)
|
||||||
|
|
30
README.md
30
README.md
|
@ -25,9 +25,9 @@ IRC channel [#solvespace at web.libera.chat][ssirc].
|
||||||
|
|
||||||
## Installation
|
## 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
|
(>=Vista 32-bit) are available via [GitHub releases][rel]. These packages are
|
||||||
automatically built by the SolveSpace maintainers for each stable release.
|
automatically built by the SolveSpace maintainers for each stable release.
|
||||||
|
|
||||||
|
@ -53,15 +53,6 @@ snap install solvespace
|
||||||
snap install solvespace --edge
|
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
|
### Via automated edge builds
|
||||||
|
|
||||||
> :warning: **Edge builds might be unstable or contain severe bugs!**
|
> :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
|
Extract the downloaded archive and install or execute the contained file as is
|
||||||
appropriate for your platform.
|
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
|
### Via source code
|
||||||
|
|
||||||
See below.
|
See below.
|
||||||
|
@ -111,7 +111,7 @@ Before building, check out the project and the necessary submodules:
|
||||||
```sh
|
```sh
|
||||||
git clone https://github.com/solvespace/solvespace
|
git clone https://github.com/solvespace/solvespace
|
||||||
cd 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:
|
After that, build SolveSpace as following:
|
||||||
|
@ -171,11 +171,11 @@ Space Navigator support will not be available.
|
||||||
|
|
||||||
## Building on macOS
|
## 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][]:
|
via [Homebrew][]:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
brew install git cmake
|
brew install git cmake libomp
|
||||||
```
|
```
|
||||||
|
|
||||||
XCode has to be installed via AppStore or [the Apple website][appledeveloper];
|
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
|
```sh
|
||||||
git clone https://github.com/solvespace/solvespace
|
git clone https://github.com/solvespace/solvespace
|
||||||
cd 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:
|
After that, build SolveSpace as following:
|
||||||
|
|
|
@ -16,7 +16,7 @@ if(UNIX)
|
||||||
|
|
||||||
# Support the REQUIRED and QUIET arguments, and set SPACEWARE_FOUND if found.
|
# Support the REQUIRED and QUIET arguments, and set SPACEWARE_FOUND if found.
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SPACEWARE DEFAULT_MSG
|
find_package_handle_standard_args(SpaceWare DEFAULT_MSG
|
||||||
SPACEWARE_LIBRARY SPACEWARE_INCLUDE_DIR)
|
SPACEWARE_LIBRARY SPACEWARE_INCLUDE_DIR)
|
||||||
|
|
||||||
if(SPACEWARE_FOUND)
|
if(SPACEWARE_FOUND)
|
||||||
|
|
|
@ -15,11 +15,11 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}~${solvespace_GIT_HASH}</string>
|
<string>${PROJECT_VERSION}~${solvespace_GIT_HASH}</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}</string>
|
<string>${PROJECT_VERSION}</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>© 2008-2016 Jonathan Westhues and other authors</string>
|
<string>© 2008-2022 Jonathan Westhues and other authors</string>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
<string>NSApplication</string>
|
<string>NSApplication</string>
|
||||||
<key>NSMainNibFile</key>
|
<key>NSMainNibFile</key>
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 3147391d946bb4b6c68edd901f2add6ac1f31f8c
|
|
@ -1,5 +1,5 @@
|
||||||
name: solvespace
|
name: solvespace
|
||||||
base: core18
|
base: core20
|
||||||
summary: Parametric 2d/3d CAD
|
summary: Parametric 2d/3d CAD
|
||||||
adopt-info: solvespace
|
adopt-info: solvespace
|
||||||
description: |
|
description: |
|
||||||
|
@ -14,6 +14,7 @@ description: |
|
||||||
|
|
||||||
confinement: strict
|
confinement: strict
|
||||||
license: GPL-3.0
|
license: GPL-3.0
|
||||||
|
compression: lzo
|
||||||
|
|
||||||
layout:
|
layout:
|
||||||
/usr/share/solvespace:
|
/usr/share/solvespace:
|
||||||
|
@ -23,13 +24,11 @@ apps:
|
||||||
solvespace:
|
solvespace:
|
||||||
command: usr/bin/solvespace
|
command: usr/bin/solvespace
|
||||||
desktop: solvespace.desktop
|
desktop: solvespace.desktop
|
||||||
extensions: [gnome-3-34]
|
extensions: [gnome-3-38]
|
||||||
plugs: [opengl, unity7, home, removable-media, gsettings, network]
|
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:
|
cli:
|
||||||
command: usr/bin/solvespace-cli
|
command: usr/bin/solvespace-cli
|
||||||
extensions: [gnome-3-34]
|
extensions: [gnome-3-38]
|
||||||
plugs: [home, removable-media, network]
|
plugs: [home, removable-media, network]
|
||||||
|
|
||||||
parts:
|
parts:
|
||||||
|
@ -39,23 +38,28 @@ parts:
|
||||||
source-type: local
|
source-type: local
|
||||||
override-pull: |
|
override-pull: |
|
||||||
snapcraftctl pull
|
snapcraftctl pull
|
||||||
version_major=$(grep "solvespace_VERSION_MAJOR" CMakeLists.txt | tr -d "()" | cut -d" " -f2)
|
git submodule update --init extlib/libdxfrw extlib/mimalloc extlib/eigen
|
||||||
version_minor=$(grep "solvespace_VERSION_MINOR" CMakeLists.txt | tr -d "()" | cut -d" " -f2)
|
override-build: |
|
||||||
version="$version_major.$version_minor~$(git rev-parse --short=8 HEAD)"
|
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"
|
snapcraftctl set-version "$version"
|
||||||
git describe --exact-match HEAD && grade="stable" || grade="devel"
|
git describe --exact-match HEAD && grade="stable" || grade="devel"
|
||||||
snapcraftctl set-grade "$grade"
|
snapcraftctl set-grade "$grade"
|
||||||
git submodule update --init extlib/libdxfrw extlib/mimalloc
|
cmake-parameters:
|
||||||
configflags:
|
|
||||||
- -DCMAKE_INSTALL_PREFIX=/usr
|
- -DCMAKE_INSTALL_PREFIX=/usr
|
||||||
- -DCMAKE_BUILD_TYPE=Release
|
- -DCMAKE_BUILD_TYPE=Release
|
||||||
- -DENABLE_TESTS=OFF
|
- -DENABLE_TESTS=OFF
|
||||||
- -DSNAP=ON
|
- -DSNAP=ON
|
||||||
- -DENABLE_OPENMP=ON
|
- -DENABLE_OPENMP=ON
|
||||||
- -DENABLE_LTO=ON
|
- -DENABLE_LTO=ON
|
||||||
|
build-snaps:
|
||||||
|
- gnome-3-38-2004-sdk
|
||||||
build-packages:
|
build-packages:
|
||||||
- zlib1g-dev
|
- zlib1g-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
|
- libcairo2-dev
|
||||||
- libfreetype6-dev
|
- libfreetype6-dev
|
||||||
- libjson-c-dev
|
- libjson-c-dev
|
||||||
- libgl-dev
|
- libgl-dev
|
||||||
|
@ -70,11 +74,14 @@ parts:
|
||||||
cleanup:
|
cleanup:
|
||||||
after: [solvespace]
|
after: [solvespace]
|
||||||
plugin: nil
|
plugin: nil
|
||||||
build-snaps: [core18, gnome-3-34-1804]
|
build-snaps: [gnome-3-38-2004]
|
||||||
override-prime: |
|
override-prime: |
|
||||||
# Remove all files from snap that are already included in the base snap or in
|
|
||||||
# any connected content snaps
|
|
||||||
set -eux
|
set -eux
|
||||||
for snap in "core18" "gnome-3-34-1804"; do # List all content-snaps and base snaps you're using here
|
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/{}" \;
|
cd "/snap/$snap/current" && find . -type f,l -exec rm -f "$SNAPCRAFT_PRIME/{}" "$SNAPCRAFT_PRIME/usr/{}" \;
|
||||||
done
|
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 ""
|
msgstr ""
|
||||||
"Project-Id-Version: SolveSpace 3.0\n"
|
"Project-Id-Version: SolveSpace 3.0\n"
|
||||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\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"
|
"PO-Revision-Date: 2018-07-19 06:55+0000\n"
|
||||||
"Last-Translator: Reini Urban <rurban@cpan.org>\n"
|
"Last-Translator: Reini Urban <rurban@cpan.org>\n"
|
||||||
"Language-Team: none\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."
|
msgid "Number of copies to paste must be at least one."
|
||||||
msgstr "Die Anzahl der einzufügenden Kopien muss mind. 1 sein."
|
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."
|
msgid "Scale cannot be zero."
|
||||||
msgstr "Maßstab kann nicht Null sein."
|
msgstr "Maßstab kann nicht Null sein."
|
||||||
|
|
||||||
|
@ -66,15 +66,15 @@ msgstr ""
|
||||||
msgid "No workplane active."
|
msgid "No workplane active."
|
||||||
msgstr "Es ist keine Arbeitsebene aktiv."
|
msgstr "Es ist keine Arbeitsebene aktiv."
|
||||||
|
|
||||||
#: confscreen.cpp:376
|
#: confscreen.cpp:381
|
||||||
msgid "Bad format: specify coordinates as x, y, z"
|
msgid "Bad format: specify coordinates as x, y, z"
|
||||||
msgstr "Ungültiges Format: geben Sie Koordinaten als x, y, z an"
|
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"
|
msgid "Bad format: specify color as r, g, b"
|
||||||
msgstr "Ungültiges Format: geben Sie Farben als r, g, b an"
|
msgstr "Ungültiges Format: geben Sie Farben als r, g, b an"
|
||||||
|
|
||||||
#: confscreen.cpp:412
|
#: confscreen.cpp:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor will have no effect until you enable View -> Use "
|
"The perspective factor will have no effect until you enable View -> Use "
|
||||||
"Perspective Projection."
|
"Perspective Projection."
|
||||||
|
@ -82,25 +82,25 @@ msgstr ""
|
||||||
"Der Perspektivfaktor wird sich nicht auswirken, bis Sie Ansicht -> "
|
"Der Perspektivfaktor wird sich nicht auswirken, bis Sie Ansicht -> "
|
||||||
"Perspektive Projektion aktivieren."
|
"Perspektive Projektion aktivieren."
|
||||||
|
|
||||||
#: confscreen.cpp:430 confscreen.cpp:440
|
#: confscreen.cpp:435 confscreen.cpp:445
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Specify between 0 and %d digits after the decimal."
|
msgid "Specify between 0 and %d digits after the decimal."
|
||||||
msgstr "Geben Sie 0 bis %d Ziffern nach dem Dezimalzeichen an."
|
msgstr "Geben Sie 0 bis %d Ziffern nach dem Dezimalzeichen an."
|
||||||
|
|
||||||
#: confscreen.cpp:452
|
#: confscreen.cpp:457
|
||||||
msgid "Export scale must not be zero!"
|
msgid "Export scale must not be zero!"
|
||||||
msgstr "Der Exportmaßstab darf nicht Null sein!"
|
msgstr "Der Exportmaßstab darf nicht Null sein!"
|
||||||
|
|
||||||
#: confscreen.cpp:464
|
#: confscreen.cpp:469
|
||||||
msgid "Cutter radius offset must not be negative!"
|
msgid "Cutter radius offset must not be negative!"
|
||||||
msgstr "Der Werkzeugradialabstand darf nicht negativ sein!"
|
msgstr "Der Werkzeugradialabstand darf nicht negativ sein!"
|
||||||
|
|
||||||
#: confscreen.cpp:518
|
#: confscreen.cpp:528
|
||||||
msgid "Bad value: autosave interval should be positive"
|
msgid "Bad value: autosave interval should be positive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ungültiger Wert: Interval für automatisches Speichern muss positiv sein"
|
"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"
|
msgid "Bad format: specify interval in integral minutes"
|
||||||
msgstr "Ungültiges Format: geben Sie das Interval in ganzen Minuten an"
|
msgstr "Ungültiges Format: geben Sie das Interval in ganzen Minuten an"
|
||||||
|
|
||||||
|
@ -684,7 +684,7 @@ msgctxt "button"
|
||||||
msgid "&No"
|
msgid "&No"
|
||||||
msgstr "&Nein"
|
msgstr "&Nein"
|
||||||
|
|
||||||
#: file.cpp:877 solvespace.cpp:610
|
#: file.cpp:877 solvespace.cpp:611
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Cancel"
|
msgid "&Cancel"
|
||||||
msgstr "&Abbrechen"
|
msgstr "&Abbrechen"
|
||||||
|
@ -1137,25 +1137,29 @@ msgstr "Sprache"
|
||||||
msgid "&Website / Manual"
|
msgid "&Website / Manual"
|
||||||
msgstr "&Website / Anleitung"
|
msgstr "&Website / Anleitung"
|
||||||
|
|
||||||
#: graphicswin.cpp:187
|
#: graphicswin.cpp:186
|
||||||
|
msgid "&Go to GitHub commit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: graphicswin.cpp:188
|
||||||
msgid "&About"
|
msgid "&About"
|
||||||
msgstr "Über"
|
msgstr "Über"
|
||||||
|
|
||||||
#: graphicswin.cpp:361
|
#: graphicswin.cpp:362
|
||||||
msgid "(no recent files)"
|
msgid "(no recent files)"
|
||||||
msgstr "(keine vorhergehenden Dateien)"
|
msgstr "(keine vorhergehenden Dateien)"
|
||||||
|
|
||||||
#: graphicswin.cpp:369
|
#: graphicswin.cpp:370
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "File '%s' does not exist."
|
msgid "File '%s' does not exist."
|
||||||
msgstr "Datei '%s' existiert nicht."
|
msgstr "Datei '%s' existiert nicht."
|
||||||
|
|
||||||
#: graphicswin.cpp:736
|
#: graphicswin.cpp:737
|
||||||
msgid "No workplane is active, so the grid will not appear."
|
msgid "No workplane is active, so the grid will not appear."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Das Raster wird nicht angezeigt, weil keine Arbeitsebene ausgewählt ist."
|
"Das Raster wird nicht angezeigt, weil keine Arbeitsebene ausgewählt ist."
|
||||||
|
|
||||||
#: graphicswin.cpp:751
|
#: graphicswin.cpp:752
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||||
"projection.\n"
|
"projection.\n"
|
||||||
|
@ -1169,20 +1173,20 @@ msgstr ""
|
||||||
"Ändern Sie den Faktor für die Perspektivprojektion in der "
|
"Ändern Sie den Faktor für die Perspektivprojektion in der "
|
||||||
"Konfigurationsmaske. Ein typischer Wert ist ca. 0,3."
|
"Konfigurationsmaske. Ein typischer Wert ist ca. 0,3."
|
||||||
|
|
||||||
#: graphicswin.cpp:836
|
#: graphicswin.cpp:837
|
||||||
msgid ""
|
msgid ""
|
||||||
"Select a point; this point will become the center of the view on screen."
|
"Select a point; this point will become the center of the view on screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Wählen Sie einen Punkt aus; dieser Punkt wird im Mittelpunkt der "
|
"Wählen Sie einen Punkt aus; dieser Punkt wird im Mittelpunkt der "
|
||||||
"Bildschirmansicht sein."
|
"Bildschirmansicht sein."
|
||||||
|
|
||||||
#: graphicswin.cpp:1136
|
#: graphicswin.cpp:1137
|
||||||
msgid "No additional entities share endpoints with the selected entities."
|
msgid "No additional entities share endpoints with the selected entities."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Die ausgewählten Objekte teilen keine gemeinsamen Endpunkte mit anderen "
|
"Die ausgewählten Objekte teilen keine gemeinsamen Endpunkte mit anderen "
|
||||||
"Objekten."
|
"Objekten."
|
||||||
|
|
||||||
#: graphicswin.cpp:1154
|
#: graphicswin.cpp:1155
|
||||||
msgid ""
|
msgid ""
|
||||||
"To use this command, select a point or other entity from an linked part, or "
|
"To use this command, select a point or other entity from an linked part, or "
|
||||||
"make a link group the active group."
|
"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 "
|
"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."
|
"verknüpften Teil aus, oder aktivieren Sie eine verknüpfte Gruppe."
|
||||||
|
|
||||||
#: graphicswin.cpp:1177
|
#: graphicswin.cpp:1178
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||||
"to define the plane for the snap grid."
|
"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 "
|
"(mit Skizze -> In Arbeitsebene), um die Ebene für das Gitterraster zu "
|
||||||
"definieren."
|
"definieren."
|
||||||
|
|
||||||
#: graphicswin.cpp:1184
|
#: graphicswin.cpp:1185
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||||
"with a label. To snap a line, select its endpoints."
|
"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 "
|
"für Punkte, Textkommentare, oder Einschränkungen mit einer Bezeichnung. Um "
|
||||||
"eine Linie auf das Raster auszurichten, wählen Sie deren Endpunkte aus."
|
"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."
|
msgid "No workplane selected. Activating default workplane for this group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Es wurde keine Arbeitsebene ausgewählt. Die Standard-Arbeitsebene für diese "
|
"Es wurde keine Arbeitsebene ausgewählt. Die Standard-Arbeitsebene für diese "
|
||||||
"Gruppe wird aktiviert."
|
"Gruppe wird aktiviert."
|
||||||
|
|
||||||
#: graphicswin.cpp:1272
|
#: graphicswin.cpp:1273
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is selected, and the active group does not have a default "
|
"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. 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 "
|
"standardmäßige Arbeitsebene. Wählen Sie eine Arbeitsebene aus, oder "
|
||||||
"erstellen Sie eine Gruppe in einer neuen Arbeitsebene."
|
"erstellen Sie eine Gruppe in einer neuen Arbeitsebene."
|
||||||
|
|
||||||
#: graphicswin.cpp:1293
|
#: graphicswin.cpp:1294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||||
"nothing to set up arc parameters."
|
"nothing to set up arc parameters."
|
||||||
|
@ -1232,48 +1236,48 @@ msgstr ""
|
||||||
"Ungültige Auswahl für Bogentangente an Punkt. Wählen Sie einen einzelnen "
|
"Ungültige Auswahl für Bogentangente an Punkt. Wählen Sie einen einzelnen "
|
||||||
"Punkt. Um die Bogenparameter anzugeben, wählen Sie nichts aus."
|
"Punkt. Um die Bogenparameter anzugeben, wählen Sie nichts aus."
|
||||||
|
|
||||||
#: graphicswin.cpp:1304
|
#: graphicswin.cpp:1305
|
||||||
msgid "click point on arc (draws anti-clockwise)"
|
msgid "click point on arc (draws anti-clockwise)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Erstellen Sie einen Punkt auf dem Bogen (zeichnet im Gegenuhrzeigersinn)"
|
"Erstellen Sie einen Punkt auf dem Bogen (zeichnet im Gegenuhrzeigersinn)"
|
||||||
|
|
||||||
#: graphicswin.cpp:1305
|
#: graphicswin.cpp:1306
|
||||||
msgid "click to place datum point"
|
msgid "click to place datum point"
|
||||||
msgstr "Klicken Sie, um einen Bezugspunkt zu platzieren"
|
msgstr "Klicken Sie, um einen Bezugspunkt zu platzieren"
|
||||||
|
|
||||||
#: graphicswin.cpp:1306
|
#: graphicswin.cpp:1307
|
||||||
msgid "click first point of line segment"
|
msgid "click first point of line segment"
|
||||||
msgstr "Klicken Sie auf den ersten Punkt des Liniensegments"
|
msgstr "Klicken Sie auf den ersten Punkt des Liniensegments"
|
||||||
|
|
||||||
#: graphicswin.cpp:1308
|
#: graphicswin.cpp:1309
|
||||||
msgid "click first point of construction line segment"
|
msgid "click first point of construction line segment"
|
||||||
msgstr "Klicken Sie auf den ersten Punkt der Konstruktionslinie"
|
msgstr "Klicken Sie auf den ersten Punkt der Konstruktionslinie"
|
||||||
|
|
||||||
#: graphicswin.cpp:1309
|
#: graphicswin.cpp:1310
|
||||||
msgid "click first point of cubic segment"
|
msgid "click first point of cubic segment"
|
||||||
msgstr "Klicken Sie auf den ersten Punkt der kubischen Linie"
|
msgstr "Klicken Sie auf den ersten Punkt der kubischen Linie"
|
||||||
|
|
||||||
#: graphicswin.cpp:1310
|
#: graphicswin.cpp:1311
|
||||||
msgid "click center of circle"
|
msgid "click center of circle"
|
||||||
msgstr "Klicken Sie auf den Kreismittelpunkt"
|
msgstr "Klicken Sie auf den Kreismittelpunkt"
|
||||||
|
|
||||||
#: graphicswin.cpp:1311
|
#: graphicswin.cpp:1312
|
||||||
msgid "click origin of workplane"
|
msgid "click origin of workplane"
|
||||||
msgstr "Klicken Sie auf den Ursprungspunkt der Arbeitsebene"
|
msgstr "Klicken Sie auf den Ursprungspunkt der Arbeitsebene"
|
||||||
|
|
||||||
#: graphicswin.cpp:1312
|
#: graphicswin.cpp:1313
|
||||||
msgid "click one corner of rectangle"
|
msgid "click one corner of rectangle"
|
||||||
msgstr "Klicken Sie auf eine Ecke des Rechtecks"
|
msgstr "Klicken Sie auf eine Ecke des Rechtecks"
|
||||||
|
|
||||||
#: graphicswin.cpp:1313
|
#: graphicswin.cpp:1314
|
||||||
msgid "click top left of text"
|
msgid "click top left of text"
|
||||||
msgstr "Klicken Sie auf die obere linke Ecke des Texts"
|
msgstr "Klicken Sie auf die obere linke Ecke des Texts"
|
||||||
|
|
||||||
#: graphicswin.cpp:1319
|
#: graphicswin.cpp:1320
|
||||||
msgid "click top left of image"
|
msgid "click top left of image"
|
||||||
msgstr "Klicken Sie auf die obere linke Ecke des Bilds"
|
msgstr "Klicken Sie auf die obere linke Ecke des Bilds"
|
||||||
|
|
||||||
#: graphicswin.cpp:1345
|
#: graphicswin.cpp:1346
|
||||||
msgid ""
|
msgid ""
|
||||||
"No entities are selected. Select entities before trying to toggle their "
|
"No entities are selected. Select entities before trying to toggle their "
|
||||||
"construction state."
|
"construction state."
|
||||||
|
@ -1428,6 +1432,10 @@ msgstr "Kontur überschneidet sich selbst!"
|
||||||
msgid "zero-length edge!"
|
msgid "zero-length edge!"
|
||||||
msgstr "Kante mit Länge Null!"
|
msgstr "Kante mit Länge Null!"
|
||||||
|
|
||||||
|
#: importmesh.cpp:136
|
||||||
|
msgid "Text-formated STL files are not currently supported"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: modify.cpp:252
|
#: modify.cpp:252
|
||||||
msgid "Must be sketching in workplane to create tangent arc."
|
msgid "Must be sketching in workplane to create tangent arc."
|
||||||
msgstr "Eine Bogentangente kann nur in einer Arbeitsebene erstellt werden."
|
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 "
|
"Das Bild kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine "
|
||||||
"Arbeitsebene mit \"Skizze -> In Arbeitsebene\"."
|
"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"
|
msgctxt "file-type"
|
||||||
msgid "SolveSpace models"
|
msgid "SolveSpace models"
|
||||||
msgstr "SolveSpace-Modelle"
|
msgstr "SolveSpace-Modelle"
|
||||||
|
@ -1725,105 +1733,105 @@ msgctxt "file-type"
|
||||||
msgid "Comma-separated values"
|
msgid "Comma-separated values"
|
||||||
msgstr "Werte durch Komma getrennt (CSV)"
|
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"
|
msgid "untitled"
|
||||||
msgstr "unbenannt"
|
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
|
#: platform/guiwin.cpp:1639
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Save File"
|
msgid "Save File"
|
||||||
msgstr "Datei speichern"
|
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
|
#: platform/guiwin.cpp:1645
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Open File"
|
msgid "Open File"
|
||||||
msgstr "Datei öffnen"
|
msgstr "Datei öffnen"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Cancel"
|
msgid "_Cancel"
|
||||||
msgstr "_Abbrechen"
|
msgstr "_Abbrechen"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Save"
|
msgid "_Save"
|
||||||
msgstr "_Speichern"
|
msgstr "_Speichern"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Open"
|
msgid "_Open"
|
||||||
msgstr "_Öffnen"
|
msgstr "_Öffnen"
|
||||||
|
|
||||||
#: solvespace.cpp:170
|
#: solvespace.cpp:171
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Autosave Available"
|
msgid "Autosave Available"
|
||||||
msgstr "Automatische Sicherungsdatei verfügbar"
|
msgstr "Automatische Sicherungsdatei verfügbar"
|
||||||
|
|
||||||
#: solvespace.cpp:171
|
#: solvespace.cpp:172
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "An autosave file is available for this sketch."
|
msgid "An autosave file is available for this sketch."
|
||||||
msgstr "Eine automatische Sicherung ist für diese Skizze verfügbar."
|
msgstr "Eine automatische Sicherung ist für diese Skizze verfügbar."
|
||||||
|
|
||||||
#: solvespace.cpp:172
|
#: solvespace.cpp:173
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to load the autosave file instead?"
|
msgid "Do you want to load the autosave file instead?"
|
||||||
msgstr "Wollen Sie die automatische Sicherungsdatei stattdessen laden?"
|
msgstr "Wollen Sie die automatische Sicherungsdatei stattdessen laden?"
|
||||||
|
|
||||||
#: solvespace.cpp:173
|
#: solvespace.cpp:174
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Load autosave"
|
msgid "&Load autosave"
|
||||||
msgstr "AutoDatei &öffnen"
|
msgstr "AutoDatei &öffnen"
|
||||||
|
|
||||||
#: solvespace.cpp:175
|
#: solvespace.cpp:176
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Load"
|
msgid "Do&n't Load"
|
||||||
msgstr "&Nicht laden"
|
msgstr "&Nicht laden"
|
||||||
|
|
||||||
#: solvespace.cpp:598
|
#: solvespace.cpp:599
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Modified File"
|
msgid "Modified File"
|
||||||
msgstr "Geänderte Datei"
|
msgstr "Geänderte Datei"
|
||||||
|
|
||||||
#: solvespace.cpp:600
|
#: solvespace.cpp:601
|
||||||
#, c-format
|
#, c-format
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||||
msgstr "Wollen Sie die Änderungen an der Skizze “%s” sichern?"
|
msgstr "Wollen Sie die Änderungen an der Skizze “%s” sichern?"
|
||||||
|
|
||||||
#: solvespace.cpp:603
|
#: solvespace.cpp:604
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the new sketch?"
|
msgid "Do you want to save the changes you made to the new sketch?"
|
||||||
msgstr "Wollen Sie die Änderungen an der Skizze sichern?"
|
msgstr "Wollen Sie die Änderungen an der Skizze sichern?"
|
||||||
|
|
||||||
#: solvespace.cpp:606
|
#: solvespace.cpp:607
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Your changes will be lost if you don't save them."
|
msgid "Your changes will be lost if you don't save them."
|
||||||
msgstr "Ihre Änderungen werden verworfen, wenn sie nicht abgespeichert werden."
|
msgstr "Ihre Änderungen werden verworfen, wenn sie nicht abgespeichert werden."
|
||||||
|
|
||||||
#: solvespace.cpp:607
|
#: solvespace.cpp:608
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Save"
|
msgid "&Save"
|
||||||
msgstr "&Sichern"
|
msgstr "&Sichern"
|
||||||
|
|
||||||
#: solvespace.cpp:609
|
#: solvespace.cpp:610
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Save"
|
msgid "Do&n't Save"
|
||||||
msgstr "&Verwerfen"
|
msgstr "&Verwerfen"
|
||||||
|
|
||||||
# solvespace.cpp:557
|
# solvespace.cpp:557
|
||||||
#: solvespace.cpp:630
|
#: solvespace.cpp:631
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "(new sketch)"
|
msgid "(new sketch)"
|
||||||
msgstr "(Neue Skizze)"
|
msgstr "(Neue Skizze)"
|
||||||
|
|
||||||
#: solvespace.cpp:637
|
#: solvespace.cpp:638
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Property Browser"
|
msgid "Property Browser"
|
||||||
msgstr "Attribut-Browser"
|
msgstr "Attribut-Browser"
|
||||||
|
|
||||||
#: solvespace.cpp:699
|
#: solvespace.cpp:700
|
||||||
msgid ""
|
msgid ""
|
||||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
"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 "
|
"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 "
|
"wahrscheinlich nicht. Verstecken Sie sie in dem auf den Link oben im "
|
||||||
"Textfenster klicken."
|
"Textfenster klicken."
|
||||||
|
|
||||||
#: solvespace.cpp:771
|
#: solvespace.cpp:772
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
"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 "
|
"Kann den Dateityp der Datei '%s' nicht auf Grund der Dateierweiterung "
|
||||||
"erkennen. Versuchen Sie .dxf oder .dwg."
|
"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."
|
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Die Einschränkung muss einen Namen haben, und darf keine "
|
"Die Einschränkung muss einen Namen haben, und darf keine "
|
||||||
"Referenzdimensionierung sein."
|
"Referenzdimensionierung sein."
|
||||||
|
|
||||||
#: solvespace.cpp:827
|
#: solvespace.cpp:828
|
||||||
msgid "Bad selection for step dimension; select a constraint."
|
msgid "Bad selection for step dimension; select a constraint."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Falsche Auswahl für die Schrittdimensionierung. Wählen Sie eine "
|
"Falsche Auswahl für die Schrittdimensionierung. Wählen Sie eine "
|
||||||
"Einschränkung."
|
"Einschränkung."
|
||||||
|
|
||||||
#: solvespace.cpp:851
|
#: solvespace.cpp:852
|
||||||
msgid "The assembly does not interfere, good."
|
msgid "The assembly does not interfere, good."
|
||||||
msgstr "Der Zusammenbau funktioniert, gut."
|
msgstr "Der Zusammenbau funktioniert, gut."
|
||||||
|
|
||||||
#: solvespace.cpp:867
|
#: solvespace.cpp:868
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The volume of the solid model is:\n"
|
"The volume of the solid model is:\n"
|
||||||
|
@ -1869,7 +1877,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
" %s"
|
" %s"
|
||||||
|
|
||||||
#: solvespace.cpp:876
|
#: solvespace.cpp:877
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1882,7 +1890,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
" %s"
|
" %s"
|
||||||
|
|
||||||
#: solvespace.cpp:881
|
#: solvespace.cpp:882
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1894,7 +1902,7 @@ msgstr ""
|
||||||
"Gekrümmte Flächen wurden als Dreiecksnetz angenähert.\n"
|
"Gekrümmte Flächen wurden als Dreiecksnetz angenähert.\n"
|
||||||
"Das verursacht Fehler, typischerweise um 1%."
|
"Das verursacht Fehler, typischerweise um 1%."
|
||||||
|
|
||||||
#: solvespace.cpp:896
|
#: solvespace.cpp:897
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The surface area of the selected faces is:\n"
|
"The surface area of the selected faces is:\n"
|
||||||
|
@ -1911,7 +1919,7 @@ msgstr ""
|
||||||
"Kurven wurden als gerade Linienstücke angenähert.\n"
|
"Kurven wurden als gerade Linienstücke angenähert.\n"
|
||||||
"Das verursacht Fehler, typischerweise um 1%%."
|
"Das verursacht Fehler, typischerweise um 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:905
|
#: solvespace.cpp:906
|
||||||
msgid ""
|
msgid ""
|
||||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||||
"not coplanar, or self-intersecting."
|
"not coplanar, or self-intersecting."
|
||||||
|
@ -1919,7 +1927,7 @@ msgstr ""
|
||||||
"Diese Gruppe beinhaltet keine korrekt geschlossene 2D Fläche. Sie ist offen, "
|
"Diese Gruppe beinhaltet keine korrekt geschlossene 2D Fläche. Sie ist offen, "
|
||||||
"nicht koplanar, oder überschneidet sich selbst."
|
"nicht koplanar, oder überschneidet sich selbst."
|
||||||
|
|
||||||
#: solvespace.cpp:917
|
#: solvespace.cpp:918
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The area of the region sketched in this group is:\n"
|
"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"
|
"Kurven wurden als gerade Linienstücke angenähert.\n"
|
||||||
"Das verursacht Fehler, typischerweise um 1%%."
|
"Das verursacht Fehler, typischerweise um 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:937
|
#: solvespace.cpp:938
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The total length of the selected entities is:\n"
|
"The total length of the selected entities is:\n"
|
||||||
|
@ -1953,36 +1961,36 @@ msgstr ""
|
||||||
"Kurven wurden als gerade Linienstücke angenähert.\n"
|
"Kurven wurden als gerade Linienstücke angenähert.\n"
|
||||||
"Das verursacht Fehler, typischerweise um 1%%."
|
"Das verursacht Fehler, typischerweise um 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:943
|
#: solvespace.cpp:944
|
||||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||||
msgstr "Falsche Auswahl für Umfang. Wähle Liniensegmente, Bögen und Kurven."
|
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."
|
msgid "Bad selection for trace; select a single point."
|
||||||
msgstr "Falsche Auswahl für Punkt nachzeichnen. Wähle einen einzelnen Punkt."
|
msgstr "Falsche Auswahl für Punkt nachzeichnen. Wähle einen einzelnen Punkt."
|
||||||
|
|
||||||
#: solvespace.cpp:986
|
#: solvespace.cpp:987
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Couldn't write to '%s'"
|
msgid "Couldn't write to '%s'"
|
||||||
msgstr "Konnte '%s' nicht schreiben"
|
msgstr "Konnte '%s' nicht schreiben"
|
||||||
|
|
||||||
#: solvespace.cpp:1016
|
#: solvespace.cpp:1017
|
||||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||||
msgstr "Das Netz schneidet sich selbst: Falsch, ungültig."
|
msgstr "Das Netz schneidet sich selbst: Falsch, ungültig."
|
||||||
|
|
||||||
#: solvespace.cpp:1017
|
#: solvespace.cpp:1018
|
||||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||||
msgstr "Das Netz schneidet sich nicht: Gut, gültig."
|
msgstr "Das Netz schneidet sich nicht: Gut, gültig."
|
||||||
|
|
||||||
#: solvespace.cpp:1019
|
#: solvespace.cpp:1020
|
||||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||||
msgstr "Das Netz hat lose Kanten: Falsch, ungültig."
|
msgstr "Das Netz hat lose Kanten: Falsch, ungültig."
|
||||||
|
|
||||||
#: solvespace.cpp:1020
|
#: solvespace.cpp:1021
|
||||||
msgid "The mesh is watertight (okay, valid)."
|
msgid "The mesh is watertight (okay, valid)."
|
||||||
msgstr "Das Netz hat keine lose Kanten: Gut, gültig."
|
msgstr "Das Netz hat keine lose Kanten: Gut, gültig."
|
||||||
|
|
||||||
#: solvespace.cpp:1023
|
#: solvespace.cpp:1024
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1993,7 +2001,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"Das Modell hat %d Dreiecke, von %d Flächen."
|
"Das Modell hat %d Dreiecke, von %d Flächen."
|
||||||
|
|
||||||
#: solvespace.cpp:1027
|
#: solvespace.cpp:1028
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -2008,7 +2016,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"Keine problematischen Kanten, gut.%s"
|
"Keine problematischen Kanten, gut.%s"
|
||||||
|
|
||||||
#: solvespace.cpp:1030
|
#: solvespace.cpp:1031
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -2023,7 +2031,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"%d problematische Kanten, schlecht.%s"
|
"%d problematische Kanten, schlecht.%s"
|
||||||
|
|
||||||
#: solvespace.cpp:1043
|
#: solvespace.cpp:1044
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is SolveSpace version %s.\n"
|
"This is SolveSpace version %s.\n"
|
||||||
|
@ -2066,23 +2074,23 @@ msgstr ""
|
||||||
msgid "Style name cannot be empty"
|
msgid "Style name cannot be empty"
|
||||||
msgstr "Name des Linientyps kann nicht leer sein."
|
msgstr "Name des Linientyps kann nicht leer sein."
|
||||||
|
|
||||||
#: textscreens.cpp:785
|
#: textscreens.cpp:791
|
||||||
msgid "Can't repeat fewer than 1 time."
|
msgid "Can't repeat fewer than 1 time."
|
||||||
msgstr "Nicht weniger als 1 Wiederholung möglich."
|
msgstr "Nicht weniger als 1 Wiederholung möglich."
|
||||||
|
|
||||||
#: textscreens.cpp:789
|
#: textscreens.cpp:795
|
||||||
msgid "Can't repeat more than 999 times."
|
msgid "Can't repeat more than 999 times."
|
||||||
msgstr "Nicht mehr als 999 Wiederholungen möglich."
|
msgstr "Nicht mehr als 999 Wiederholungen möglich."
|
||||||
|
|
||||||
#: textscreens.cpp:814
|
#: textscreens.cpp:820
|
||||||
msgid "Group name cannot be empty"
|
msgid "Group name cannot be empty"
|
||||||
msgstr "Der Name der Gruppe darf nicht leer sein."
|
msgstr "Der Name der Gruppe darf nicht leer sein."
|
||||||
|
|
||||||
#: textscreens.cpp:866
|
#: textscreens.cpp:872
|
||||||
msgid "Opacity must be between zero and one."
|
msgid "Opacity must be between zero and one."
|
||||||
msgstr "Durchsichtigkeit muss zwischen Null und Eins sein."
|
msgstr "Durchsichtigkeit muss zwischen Null und Eins sein."
|
||||||
|
|
||||||
#: textscreens.cpp:901
|
#: textscreens.cpp:907
|
||||||
msgid "Radius cannot be zero or negative."
|
msgid "Radius cannot be zero or negative."
|
||||||
msgstr "Radius darf nicht null oder negativ sein."
|
msgstr "Radius darf nicht null oder negativ sein."
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
# Copyright (C) 2017 the SolveSpace authors
|
# Copyright (C) 2017 the SolveSpace authors
|
||||||
# This file is distributed under the same license as the SolveSpace package.
|
# This file is distributed under the same license as the SolveSpace package.
|
||||||
# Automatically generated, 2017.
|
# Automatically generated, 2017.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: SolveSpace 3.0\n"
|
"Project-Id-Version: SolveSpace 3.0\n"
|
||||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\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"
|
"PO-Revision-Date: 2017-01-05 10:30+0000\n"
|
||||||
"Last-Translator: Automatically generated\n"
|
"Last-Translator: Automatically generated\n"
|
||||||
"Language-Team: none\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."
|
msgid "Number of copies to paste must be at least one."
|
||||||
msgstr "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."
|
msgid "Scale cannot be zero."
|
||||||
msgstr "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."
|
msgid "No workplane active."
|
||||||
msgstr "No workplane active."
|
msgstr "No workplane active."
|
||||||
|
|
||||||
#: confscreen.cpp:376
|
#: confscreen.cpp:381
|
||||||
msgid "Bad format: specify coordinates as x, y, z"
|
msgid "Bad format: specify coordinates as x, y, z"
|
||||||
msgstr "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"
|
msgid "Bad format: specify color as r, g, b"
|
||||||
msgstr "Bad format: specify color as r, g, b"
|
msgstr "Bad format: specify color as r, g, b"
|
||||||
|
|
||||||
#: confscreen.cpp:412
|
#: confscreen.cpp:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor will have no effect until you enable View -> Use "
|
"The perspective factor will have no effect until you enable View -> Use "
|
||||||
"Perspective Projection."
|
"Perspective Projection."
|
||||||
|
@ -79,24 +79,24 @@ msgstr ""
|
||||||
"The perspective factor will have no effect until you enable View -> Use "
|
"The perspective factor will have no effect until you enable View -> Use "
|
||||||
"Perspective Projection."
|
"Perspective Projection."
|
||||||
|
|
||||||
#: confscreen.cpp:430 confscreen.cpp:440
|
#: confscreen.cpp:435 confscreen.cpp:445
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Specify between 0 and %d digits after the decimal."
|
msgid "Specify between 0 and %d digits after the decimal."
|
||||||
msgstr "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!"
|
msgid "Export scale must not be zero!"
|
||||||
msgstr "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!"
|
msgid "Cutter radius offset must not be negative!"
|
||||||
msgstr "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"
|
msgid "Bad value: autosave interval should be positive"
|
||||||
msgstr "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"
|
msgid "Bad format: specify interval in integral minutes"
|
||||||
msgstr "Bad format: specify interval in integral minutes"
|
msgstr "Bad format: specify interval in integral minutes"
|
||||||
|
|
||||||
|
@ -677,7 +677,7 @@ msgctxt "button"
|
||||||
msgid "&No"
|
msgid "&No"
|
||||||
msgstr "&No"
|
msgstr "&No"
|
||||||
|
|
||||||
#: file.cpp:877 solvespace.cpp:610
|
#: file.cpp:877 solvespace.cpp:611
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Cancel"
|
msgid "&Cancel"
|
||||||
msgstr "&Cancel"
|
msgstr "&Cancel"
|
||||||
|
@ -1130,24 +1130,28 @@ msgstr "&Language"
|
||||||
msgid "&Website / Manual"
|
msgid "&Website / Manual"
|
||||||
msgstr "&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"
|
msgid "&About"
|
||||||
msgstr "&About"
|
msgstr "&About"
|
||||||
|
|
||||||
#: graphicswin.cpp:361
|
#: graphicswin.cpp:362
|
||||||
msgid "(no recent files)"
|
msgid "(no recent files)"
|
||||||
msgstr "(no recent files)"
|
msgstr "(no recent files)"
|
||||||
|
|
||||||
#: graphicswin.cpp:369
|
#: graphicswin.cpp:370
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "File '%s' does not exist."
|
msgid "File '%s' does not exist."
|
||||||
msgstr "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."
|
msgid "No workplane is active, so the grid will not appear."
|
||||||
msgstr "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 ""
|
msgid ""
|
||||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||||
"projection.\n"
|
"projection.\n"
|
||||||
|
@ -1161,17 +1165,17 @@ msgstr ""
|
||||||
"For a perspective projection, modify the perspective factor in the "
|
"For a perspective projection, modify the perspective factor in the "
|
||||||
"configuration screen. A value around 0.3 is typical."
|
"configuration screen. A value around 0.3 is typical."
|
||||||
|
|
||||||
#: graphicswin.cpp:836
|
#: graphicswin.cpp:837
|
||||||
msgid ""
|
msgid ""
|
||||||
"Select a point; this point will become the center of the view on screen."
|
"Select a point; this point will become the center of the view on screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Select a point; this point will become the center of the view on screen."
|
"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."
|
msgid "No additional entities share endpoints with the selected entities."
|
||||||
msgstr "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 ""
|
msgid ""
|
||||||
"To use this command, select a point or other entity from an linked part, or "
|
"To use this command, select a point or other entity from an linked part, or "
|
||||||
"make a link group the active group."
|
"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 "
|
"To use this command, select a point or other entity from an linked part, or "
|
||||||
"make a link group the active group."
|
"make a link group the active group."
|
||||||
|
|
||||||
#: graphicswin.cpp:1177
|
#: graphicswin.cpp:1178
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||||
"to define the plane for the snap grid."
|
"to define the plane for the snap grid."
|
||||||
|
@ -1187,7 +1191,7 @@ msgstr ""
|
||||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||||
"to define the plane for the snap grid."
|
"to define the plane for the snap grid."
|
||||||
|
|
||||||
#: graphicswin.cpp:1184
|
#: graphicswin.cpp:1185
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||||
"with a label. To snap a line, select its endpoints."
|
"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 "
|
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||||
"with a label. To snap a line, select its endpoints."
|
"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."
|
msgid "No workplane selected. Activating default workplane for this group."
|
||||||
msgstr "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 ""
|
msgid ""
|
||||||
"No workplane is selected, and the active group does not have a default "
|
"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. 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. Try selecting a workplane, or activating a sketch-in-new-"
|
||||||
"workplane group."
|
"workplane group."
|
||||||
|
|
||||||
#: graphicswin.cpp:1293
|
#: graphicswin.cpp:1294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||||
"nothing to set up arc parameters."
|
"nothing to set up arc parameters."
|
||||||
|
@ -1217,47 +1221,47 @@ msgstr ""
|
||||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||||
"nothing to set up arc parameters."
|
"nothing to set up arc parameters."
|
||||||
|
|
||||||
#: graphicswin.cpp:1304
|
#: graphicswin.cpp:1305
|
||||||
msgid "click point on arc (draws anti-clockwise)"
|
msgid "click point on arc (draws anti-clockwise)"
|
||||||
msgstr "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"
|
msgid "click to place datum point"
|
||||||
msgstr "click to place datum point"
|
msgstr "click to place datum point"
|
||||||
|
|
||||||
#: graphicswin.cpp:1306
|
#: graphicswin.cpp:1307
|
||||||
msgid "click first point of line segment"
|
msgid "click first point of line segment"
|
||||||
msgstr "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"
|
msgid "click first point of construction line segment"
|
||||||
msgstr "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"
|
msgid "click first point of cubic segment"
|
||||||
msgstr "click first point of cubic segment"
|
msgstr "click first point of cubic segment"
|
||||||
|
|
||||||
#: graphicswin.cpp:1310
|
#: graphicswin.cpp:1311
|
||||||
msgid "click center of circle"
|
msgid "click center of circle"
|
||||||
msgstr "click center of circle"
|
msgstr "click center of circle"
|
||||||
|
|
||||||
#: graphicswin.cpp:1311
|
#: graphicswin.cpp:1312
|
||||||
msgid "click origin of workplane"
|
msgid "click origin of workplane"
|
||||||
msgstr "click origin of workplane"
|
msgstr "click origin of workplane"
|
||||||
|
|
||||||
#: graphicswin.cpp:1312
|
#: graphicswin.cpp:1313
|
||||||
msgid "click one corner of rectangle"
|
msgid "click one corner of rectangle"
|
||||||
msgstr "click one corner of rectangle"
|
msgstr "click one corner of rectangle"
|
||||||
|
|
||||||
#: graphicswin.cpp:1313
|
#: graphicswin.cpp:1314
|
||||||
msgid "click top left of text"
|
msgid "click top left of text"
|
||||||
msgstr "click top left of text"
|
msgstr "click top left of text"
|
||||||
|
|
||||||
#: graphicswin.cpp:1319
|
#: graphicswin.cpp:1320
|
||||||
msgid "click top left of image"
|
msgid "click top left of image"
|
||||||
msgstr "click top left of image"
|
msgstr "click top left of image"
|
||||||
|
|
||||||
#: graphicswin.cpp:1345
|
#: graphicswin.cpp:1346
|
||||||
msgid ""
|
msgid ""
|
||||||
"No entities are selected. Select entities before trying to toggle their "
|
"No entities are selected. Select entities before trying to toggle their "
|
||||||
"construction state."
|
"construction state."
|
||||||
|
@ -1416,6 +1420,10 @@ msgstr "contour is self-intersecting!"
|
||||||
msgid "zero-length edge!"
|
msgid "zero-length edge!"
|
||||||
msgstr "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
|
#: modify.cpp:252
|
||||||
msgid "Must be sketching in workplane to create tangent arc."
|
msgid "Must be sketching in workplane to create tangent arc."
|
||||||
msgstr "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 "
|
"Can't draw image in 3d; first, activate a workplane with Sketch -> In "
|
||||||
"Workplane."
|
"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"
|
msgctxt "file-type"
|
||||||
msgid "SolveSpace models"
|
msgid "SolveSpace models"
|
||||||
msgstr "SolveSpace models"
|
msgstr "SolveSpace models"
|
||||||
|
@ -1705,104 +1713,104 @@ msgctxt "file-type"
|
||||||
msgid "Comma-separated values"
|
msgid "Comma-separated values"
|
||||||
msgstr "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"
|
msgid "untitled"
|
||||||
msgstr "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
|
#: platform/guiwin.cpp:1639
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Save File"
|
msgid "Save File"
|
||||||
msgstr "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
|
#: platform/guiwin.cpp:1645
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Open File"
|
msgid "Open File"
|
||||||
msgstr "Open File"
|
msgstr "Open File"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Cancel"
|
msgid "_Cancel"
|
||||||
msgstr "_Cancel"
|
msgstr "_Cancel"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Save"
|
msgid "_Save"
|
||||||
msgstr "_Save"
|
msgstr "_Save"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Open"
|
msgid "_Open"
|
||||||
msgstr "_Open"
|
msgstr "_Open"
|
||||||
|
|
||||||
#: solvespace.cpp:170
|
#: solvespace.cpp:171
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Autosave Available"
|
msgid "Autosave Available"
|
||||||
msgstr "Autosave Available"
|
msgstr "Autosave Available"
|
||||||
|
|
||||||
#: solvespace.cpp:171
|
#: solvespace.cpp:172
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "An autosave file is available for this sketch."
|
msgid "An autosave file is available for this sketch."
|
||||||
msgstr "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"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to load the autosave file instead?"
|
msgid "Do you want to load the autosave file instead?"
|
||||||
msgstr "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"
|
msgctxt "button"
|
||||||
msgid "&Load autosave"
|
msgid "&Load autosave"
|
||||||
msgstr "&Load autosave"
|
msgstr "&Load autosave"
|
||||||
|
|
||||||
#: solvespace.cpp:175
|
#: solvespace.cpp:176
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Load"
|
msgid "Do&n't Load"
|
||||||
msgstr "Do&n't Load"
|
msgstr "Do&n't Load"
|
||||||
|
|
||||||
#: solvespace.cpp:598
|
#: solvespace.cpp:599
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Modified File"
|
msgid "Modified File"
|
||||||
msgstr "Modified File"
|
msgstr "Modified File"
|
||||||
|
|
||||||
#: solvespace.cpp:600
|
#: solvespace.cpp:601
|
||||||
#, c-format
|
#, c-format
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
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”?"
|
msgstr "Do you want to save the changes you made to the sketch “%s”?"
|
||||||
|
|
||||||
#: solvespace.cpp:603
|
#: solvespace.cpp:604
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the new sketch?"
|
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?"
|
msgstr "Do you want to save the changes you made to the new sketch?"
|
||||||
|
|
||||||
#: solvespace.cpp:606
|
#: solvespace.cpp:607
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Your changes will be lost if you don't save them."
|
msgid "Your changes will be lost if you don't save them."
|
||||||
msgstr "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"
|
msgctxt "button"
|
||||||
msgid "&Save"
|
msgid "&Save"
|
||||||
msgstr "&Save"
|
msgstr "&Save"
|
||||||
|
|
||||||
#: solvespace.cpp:609
|
#: solvespace.cpp:610
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Save"
|
msgid "Do&n't Save"
|
||||||
msgstr "Do&n't Save"
|
msgstr "Do&n't Save"
|
||||||
|
|
||||||
#: solvespace.cpp:630
|
#: solvespace.cpp:631
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "(new sketch)"
|
msgid "(new sketch)"
|
||||||
msgstr "(new sketch)"
|
msgstr "(new sketch)"
|
||||||
|
|
||||||
#: solvespace.cpp:637
|
#: solvespace.cpp:638
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Property Browser"
|
msgid "Property Browser"
|
||||||
msgstr "Property Browser"
|
msgstr "Property Browser"
|
||||||
|
|
||||||
#: solvespace.cpp:699
|
#: solvespace.cpp:700
|
||||||
msgid ""
|
msgid ""
|
||||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
"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 "
|
"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 "
|
"is probably not what you want; hide them by clicking the link at the top of "
|
||||||
"the text window."
|
"the text window."
|
||||||
|
|
||||||
#: solvespace.cpp:771
|
#: solvespace.cpp:772
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
"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 ."
|
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||||
"dwg."
|
"dwg."
|
||||||
|
|
||||||
#: solvespace.cpp:823
|
#: solvespace.cpp:824
|
||||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
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."
|
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."
|
msgid "Bad selection for step dimension; select a constraint."
|
||||||
msgstr "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."
|
msgid "The assembly does not interfere, good."
|
||||||
msgstr "The assembly does not interfere, good."
|
msgstr "The assembly does not interfere, good."
|
||||||
|
|
||||||
#: solvespace.cpp:867
|
#: solvespace.cpp:868
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The volume of the solid model is:\n"
|
"The volume of the solid model is:\n"
|
||||||
|
@ -1844,7 +1852,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
" %s"
|
" %s"
|
||||||
|
|
||||||
#: solvespace.cpp:876
|
#: solvespace.cpp:877
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1857,7 +1865,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
" %s"
|
" %s"
|
||||||
|
|
||||||
#: solvespace.cpp:881
|
#: solvespace.cpp:882
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1869,7 +1877,7 @@ msgstr ""
|
||||||
"Curved surfaces have been approximated as triangles.\n"
|
"Curved surfaces have been approximated as triangles.\n"
|
||||||
"This introduces error, typically of around 1%."
|
"This introduces error, typically of around 1%."
|
||||||
|
|
||||||
#: solvespace.cpp:896
|
#: solvespace.cpp:897
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The surface area of the selected faces is:\n"
|
"The surface area of the selected faces is:\n"
|
||||||
|
@ -1886,7 +1894,7 @@ msgstr ""
|
||||||
"Curves have been approximated as piecewise linear.\n"
|
"Curves have been approximated as piecewise linear.\n"
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:905
|
#: solvespace.cpp:906
|
||||||
msgid ""
|
msgid ""
|
||||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||||
"not coplanar, or self-intersecting."
|
"not coplanar, or self-intersecting."
|
||||||
|
@ -1894,7 +1902,7 @@ msgstr ""
|
||||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||||
"not coplanar, or self-intersecting."
|
"not coplanar, or self-intersecting."
|
||||||
|
|
||||||
#: solvespace.cpp:917
|
#: solvespace.cpp:918
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The area of the region sketched in this group is:\n"
|
"The area of the region sketched in this group is:\n"
|
||||||
|
@ -1911,7 +1919,7 @@ msgstr ""
|
||||||
"Curves have been approximated as piecewise linear.\n"
|
"Curves have been approximated as piecewise linear.\n"
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:937
|
#: solvespace.cpp:938
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The total length of the selected entities is:\n"
|
"The total length of the selected entities is:\n"
|
||||||
|
@ -1928,36 +1936,36 @@ msgstr ""
|
||||||
"Curves have been approximated as piecewise linear.\n"
|
"Curves have been approximated as piecewise linear.\n"
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:943
|
#: solvespace.cpp:944
|
||||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||||
msgstr "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."
|
msgid "Bad selection for trace; select a single point."
|
||||||
msgstr "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
|
#, c-format
|
||||||
msgid "Couldn't write to '%s'"
|
msgid "Couldn't write to '%s'"
|
||||||
msgstr "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)."
|
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||||
msgstr "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)."
|
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||||
msgstr "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)."
|
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||||
msgstr "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)."
|
msgid "The mesh is watertight (okay, valid)."
|
||||||
msgstr "The mesh is watertight (okay, valid)."
|
msgstr "The mesh is watertight (okay, valid)."
|
||||||
|
|
||||||
#: solvespace.cpp:1023
|
#: solvespace.cpp:1024
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1968,7 +1976,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"The model contains %d triangles, from %d surfaces."
|
"The model contains %d triangles, from %d surfaces."
|
||||||
|
|
||||||
#: solvespace.cpp:1027
|
#: solvespace.cpp:1028
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -1983,7 +1991,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"Zero problematic edges, good.%s"
|
"Zero problematic edges, good.%s"
|
||||||
|
|
||||||
#: solvespace.cpp:1030
|
#: solvespace.cpp:1031
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -1998,7 +2006,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"%d problematic edges, bad.%s"
|
"%d problematic edges, bad.%s"
|
||||||
|
|
||||||
#: solvespace.cpp:1043
|
#: solvespace.cpp:1044
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is SolveSpace version %s.\n"
|
"This is SolveSpace version %s.\n"
|
||||||
|
@ -2039,23 +2047,23 @@ msgstr ""
|
||||||
msgid "Style name cannot be empty"
|
msgid "Style name cannot be empty"
|
||||||
msgstr "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."
|
msgid "Can't repeat fewer than 1 time."
|
||||||
msgstr "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."
|
msgid "Can't repeat more than 999 times."
|
||||||
msgstr "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"
|
msgid "Group name cannot be empty"
|
||||||
msgstr "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."
|
msgid "Opacity must be between zero and one."
|
||||||
msgstr "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."
|
msgid "Radius cannot be zero or negative."
|
||||||
msgstr "Radius cannot be zero or negative."
|
msgstr "Radius cannot be zero or negative."
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
# Copyright (C) 2017 the SolveSpace authors
|
# Copyright (C) 2017 the SolveSpace authors
|
||||||
# This file is distributed under the same license as the SolveSpace package.
|
# This file is distributed under the same license as the SolveSpace package.
|
||||||
# Maxi <andesfreedesign@gmail.com>, 2021.
|
# Maxi <andesfreedesign@gmail.com>, 2021.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: SolveSpace 3.0\n"
|
"Project-Id-Version: SolveSpace 3.0\n"
|
||||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\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"
|
"PO-Revision-Date: 2021-09-17 \n"
|
||||||
"Last-Translator: andesfreedesign@gmail.com\n"
|
"Last-Translator: andesfreedesign@gmail.com\n"
|
||||||
"Language-Team: AndesFreeDesign\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."
|
msgid "Number of copies to paste must be at least one."
|
||||||
msgstr "El número de copias para pegar debe ser al menos una."
|
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."
|
msgid "Scale cannot be zero."
|
||||||
msgstr "La escala no puede ser cero."
|
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."
|
msgid "No workplane active."
|
||||||
msgstr "Ningún plano de trabajo activo."
|
msgstr "Ningún plano de trabajo activo."
|
||||||
|
|
||||||
#: confscreen.cpp:376
|
#: confscreen.cpp:381
|
||||||
msgid "Bad format: specify coordinates as x, y, z"
|
msgid "Bad format: specify coordinates as x, y, z"
|
||||||
msgstr "Formato incorrecto: especifique las coordenadas como 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"
|
msgid "Bad format: specify color as r, g, b"
|
||||||
msgstr "Formato incorrecto: especifique color como r, g, b"
|
msgstr "Formato incorrecto: especifique color como r, g, b"
|
||||||
|
|
||||||
#: confscreen.cpp:412
|
#: confscreen.cpp:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor will have no effect until you enable View -> Use "
|
"The perspective factor will have no effect until you enable View -> Use "
|
||||||
"Perspective Projection."
|
"Perspective Projection."
|
||||||
|
@ -79,24 +79,24 @@ msgstr ""
|
||||||
"El factor de perspectiva no tendrá ningún efecto hasta que habilite Ver -> "
|
"El factor de perspectiva no tendrá ningún efecto hasta que habilite Ver -> "
|
||||||
"UsarProyección Perspectiva."
|
"UsarProyección Perspectiva."
|
||||||
|
|
||||||
#: confscreen.cpp:430 confscreen.cpp:440
|
#: confscreen.cpp:435 confscreen.cpp:445
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Specify between 0 and %d digits after the decimal."
|
msgid "Specify between 0 and %d digits after the decimal."
|
||||||
msgstr "Especifique entre 0 y %d dígitos después del 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!"
|
msgid "Export scale must not be zero!"
|
||||||
msgstr "¡La escala de exportación no debe ser cero!"
|
msgstr "¡La escala de exportación no debe ser cero!"
|
||||||
|
|
||||||
#: confscreen.cpp:464
|
#: confscreen.cpp:469
|
||||||
msgid "Cutter radius offset must not be negative!"
|
msgid "Cutter radius offset must not be negative!"
|
||||||
msgstr "¡El desfase del radio de corte no debe ser negativo!"
|
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"
|
msgid "Bad value: autosave interval should be positive"
|
||||||
msgstr "Valor incorrecto: el intervalo de autoguardado debe ser positivo"
|
msgstr "Valor incorrecto: el intervalo de autoguardado debe ser positivo"
|
||||||
|
|
||||||
#: confscreen.cpp:521
|
#: confscreen.cpp:531
|
||||||
msgid "Bad format: specify interval in integral minutes"
|
msgid "Bad format: specify interval in integral minutes"
|
||||||
msgstr "Formato incorrecto: especifique el intervalo en minutos integrales"
|
msgstr "Formato incorrecto: especifique el intervalo en minutos integrales"
|
||||||
|
|
||||||
|
@ -676,7 +676,7 @@ msgctxt "button"
|
||||||
msgid "&No"
|
msgid "&No"
|
||||||
msgstr "&No"
|
msgstr "&No"
|
||||||
|
|
||||||
#: file.cpp:877 solvespace.cpp:610
|
#: file.cpp:877 solvespace.cpp:611
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Cancel"
|
msgid "&Cancel"
|
||||||
msgstr "&Cancelar"
|
msgstr "&Cancelar"
|
||||||
|
@ -1129,25 +1129,29 @@ msgstr "&Lenguaje"
|
||||||
msgid "&Website / Manual"
|
msgid "&Website / Manual"
|
||||||
msgstr "&Sitio Web / Manual"
|
msgstr "&Sitio Web / Manual"
|
||||||
|
|
||||||
#: graphicswin.cpp:187
|
#: graphicswin.cpp:186
|
||||||
|
msgid "&Go to GitHub commit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: graphicswin.cpp:188
|
||||||
msgid "&About"
|
msgid "&About"
|
||||||
msgstr "&Acerca"
|
msgstr "&Acerca"
|
||||||
|
|
||||||
#: graphicswin.cpp:361
|
#: graphicswin.cpp:362
|
||||||
msgid "(no recent files)"
|
msgid "(no recent files)"
|
||||||
msgstr "(no hay archivos recientes)"
|
msgstr "(no hay archivos recientes)"
|
||||||
|
|
||||||
#: graphicswin.cpp:369
|
#: graphicswin.cpp:370
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "File '%s' does not exist."
|
msgid "File '%s' does not exist."
|
||||||
msgstr "El archivo '%s' no existe."
|
msgstr "El archivo '%s' no existe."
|
||||||
|
|
||||||
#: graphicswin.cpp:736
|
#: graphicswin.cpp:737
|
||||||
msgid "No workplane is active, so the grid will not appear."
|
msgid "No workplane is active, so the grid will not appear."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"No hay ningún plano de trabajo activo, por lo que la cuadrícula no aparecerá."
|
"No hay ningún plano de trabajo activo, por lo que la cuadrícula no aparecerá."
|
||||||
|
|
||||||
#: graphicswin.cpp:751
|
#: graphicswin.cpp:752
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||||
"projection.\n"
|
"projection.\n"
|
||||||
|
@ -1161,20 +1165,20 @@ msgstr ""
|
||||||
"Para una proyección en perspectiva, modifique el factor de perspectiva en la "
|
"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."
|
"pantalla de configuración. Un valor de alrededor de 0,3 es típico."
|
||||||
|
|
||||||
#: graphicswin.cpp:836
|
#: graphicswin.cpp:837
|
||||||
msgid ""
|
msgid ""
|
||||||
"Select a point; this point will become the center of the view on screen."
|
"Select a point; this point will become the center of the view on screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Seleccione un punto; este punto se convertirá en el centro de la vista en "
|
"Seleccione un punto; este punto se convertirá en el centro de la vista en "
|
||||||
"pantalla."
|
"pantalla."
|
||||||
|
|
||||||
#: graphicswin.cpp:1136
|
#: graphicswin.cpp:1137
|
||||||
msgid "No additional entities share endpoints with the selected entities."
|
msgid "No additional entities share endpoints with the selected entities."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ninguna entidad adicional comparte puntos finales con las entidades "
|
"Ninguna entidad adicional comparte puntos finales con las entidades "
|
||||||
"seleccionadas."
|
"seleccionadas."
|
||||||
|
|
||||||
#: graphicswin.cpp:1154
|
#: graphicswin.cpp:1155
|
||||||
msgid ""
|
msgid ""
|
||||||
"To use this command, select a point or other entity from an linked part, or "
|
"To use this command, select a point or other entity from an linked part, or "
|
||||||
"make a link group the active group."
|
"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 "
|
"Para usar este comando, seleccione un punto u otra entidad de una parte "
|
||||||
"vinculada, o convertir un grupo de enlaces en el grupo activo."
|
"vinculada, o convertir un grupo de enlaces en el grupo activo."
|
||||||
|
|
||||||
#: graphicswin.cpp:1177
|
#: graphicswin.cpp:1178
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||||
"to define the plane for the snap grid."
|
"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 "
|
"Croquis -> En plano de trabajo) para definir el plano para el enganche a la "
|
||||||
"cuadrícula."
|
"cuadrícula."
|
||||||
|
|
||||||
#: graphicswin.cpp:1184
|
#: graphicswin.cpp:1185
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||||
"with a label. To snap a line, select its endpoints."
|
"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 "
|
"comentarios de texto o restricciones con una etiqueta. Para enganchar una "
|
||||||
"línea, seleccione sus puntos finales."
|
"línea, seleccione sus puntos finales."
|
||||||
|
|
||||||
#: graphicswin.cpp:1269
|
#: graphicswin.cpp:1270
|
||||||
msgid "No workplane selected. Activating default workplane for this group."
|
msgid "No workplane selected. Activating default workplane for this group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"No se seleccionó ningún plano de trabajo. Activando el plano de trabajo "
|
"No se seleccionó ningún plano de trabajo. Activando el plano de trabajo "
|
||||||
"predeterminado para este grupo."
|
"predeterminado para este grupo."
|
||||||
|
|
||||||
#: graphicswin.cpp:1272
|
#: graphicswin.cpp:1273
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is selected, and the active group does not have a default "
|
"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. 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-"
|
"de trabajo. Intente seleccionar un plano de trabajo o activar un croquis-en-"
|
||||||
"nuevo-grupo de plano de trabajo."
|
"nuevo-grupo de plano de trabajo."
|
||||||
|
|
||||||
#: graphicswin.cpp:1293
|
#: graphicswin.cpp:1294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||||
"nothing to set up arc parameters."
|
"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 "
|
"Mala selección de arco tangente en el punto. Seleccione un solo punto o no "
|
||||||
"seleccione nada para configurar los parámetros del arco."
|
"seleccione nada para configurar los parámetros del arco."
|
||||||
|
|
||||||
#: graphicswin.cpp:1304
|
#: graphicswin.cpp:1305
|
||||||
msgid "click point on arc (draws anti-clockwise)"
|
msgid "click point on arc (draws anti-clockwise)"
|
||||||
msgstr "clic en el punto en el arco (dibuja en sentido antihorario)"
|
msgstr "clic en el punto en el arco (dibuja en sentido antihorario)"
|
||||||
|
|
||||||
#: graphicswin.cpp:1305
|
#: graphicswin.cpp:1306
|
||||||
msgid "click to place datum point"
|
msgid "click to place datum point"
|
||||||
msgstr "clic para colocar el punto de referencia"
|
msgstr "clic para colocar el punto de referencia"
|
||||||
|
|
||||||
#: graphicswin.cpp:1306
|
#: graphicswin.cpp:1307
|
||||||
msgid "click first point of line segment"
|
msgid "click first point of line segment"
|
||||||
msgstr "clic en el primer punto del segmento de línea"
|
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"
|
msgid "click first point of construction line segment"
|
||||||
msgstr "clic en el primer punto del segmento de línea de construcción"
|
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"
|
msgid "click first point of cubic segment"
|
||||||
msgstr "clic en el primer punto del segmento cúbico"
|
msgstr "clic en el primer punto del segmento cúbico"
|
||||||
|
|
||||||
#: graphicswin.cpp:1310
|
#: graphicswin.cpp:1311
|
||||||
msgid "click center of circle"
|
msgid "click center of circle"
|
||||||
msgstr "clic en el centro del círculo"
|
msgstr "clic en el centro del círculo"
|
||||||
|
|
||||||
#: graphicswin.cpp:1311
|
#: graphicswin.cpp:1312
|
||||||
msgid "click origin of workplane"
|
msgid "click origin of workplane"
|
||||||
msgstr "clic en origen del plano de trabajo"
|
msgstr "clic en origen del plano de trabajo"
|
||||||
|
|
||||||
#: graphicswin.cpp:1312
|
#: graphicswin.cpp:1313
|
||||||
msgid "click one corner of rectangle"
|
msgid "click one corner of rectangle"
|
||||||
msgstr "clic en una esquina del rectángulo"
|
msgstr "clic en una esquina del rectángulo"
|
||||||
|
|
||||||
#: graphicswin.cpp:1313
|
#: graphicswin.cpp:1314
|
||||||
msgid "click top left of text"
|
msgid "click top left of text"
|
||||||
msgstr "clic en la parte superior izquierda del texto"
|
msgstr "clic en la parte superior izquierda del texto"
|
||||||
|
|
||||||
#: graphicswin.cpp:1319
|
#: graphicswin.cpp:1320
|
||||||
msgid "click top left of image"
|
msgid "click top left of image"
|
||||||
msgstr "clic en la parte superior izquierda de la imagen"
|
msgstr "clic en la parte superior izquierda de la imagen"
|
||||||
|
|
||||||
#: graphicswin.cpp:1345
|
#: graphicswin.cpp:1346
|
||||||
msgid ""
|
msgid ""
|
||||||
"No entities are selected. Select entities before trying to toggle their "
|
"No entities are selected. Select entities before trying to toggle their "
|
||||||
"construction state."
|
"construction state."
|
||||||
|
@ -1418,6 +1422,10 @@ msgstr "¡El contorno se intersecta a sí mismo!"
|
||||||
msgid "zero-length edge!"
|
msgid "zero-length edge!"
|
||||||
msgstr "¡arista de longitud cero!"
|
msgstr "¡arista de longitud cero!"
|
||||||
|
|
||||||
|
#: importmesh.cpp:136
|
||||||
|
msgid "Text-formated STL files are not currently supported"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: modify.cpp:252
|
#: modify.cpp:252
|
||||||
msgid "Must be sketching in workplane to create tangent arc."
|
msgid "Must be sketching in workplane to create tangent arc."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1617,7 +1625,7 @@ msgstr ""
|
||||||
"No se puede dibujar una imagen en 3D; primero, active un plano de trabajo "
|
"No se puede dibujar una imagen en 3D; primero, active un plano de trabajo "
|
||||||
"con Croquis -> En 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"
|
msgctxt "file-type"
|
||||||
msgid "SolveSpace models"
|
msgid "SolveSpace models"
|
||||||
msgstr "SolveSpace modelos"
|
msgstr "SolveSpace modelos"
|
||||||
|
@ -1712,104 +1720,104 @@ msgctxt "file-type"
|
||||||
msgid "Comma-separated values"
|
msgid "Comma-separated values"
|
||||||
msgstr "Valores separados por comas"
|
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"
|
msgid "untitled"
|
||||||
msgstr "sin título"
|
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
|
#: platform/guiwin.cpp:1639
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Save File"
|
msgid "Save File"
|
||||||
msgstr "Guardar Archivo"
|
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
|
#: platform/guiwin.cpp:1645
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Open File"
|
msgid "Open File"
|
||||||
msgstr "Abrir Archivo"
|
msgstr "Abrir Archivo"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Cancel"
|
msgid "_Cancel"
|
||||||
msgstr "_Cancelar"
|
msgstr "_Cancelar"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Save"
|
msgid "_Save"
|
||||||
msgstr "_Guardar"
|
msgstr "_Guardar"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Open"
|
msgid "_Open"
|
||||||
msgstr "_Abrir"
|
msgstr "_Abrir"
|
||||||
|
|
||||||
#: solvespace.cpp:170
|
#: solvespace.cpp:171
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Autosave Available"
|
msgid "Autosave Available"
|
||||||
msgstr "Autoguardado Disponible"
|
msgstr "Autoguardado Disponible"
|
||||||
|
|
||||||
#: solvespace.cpp:171
|
#: solvespace.cpp:172
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "An autosave file is available for this sketch."
|
msgid "An autosave file is available for this sketch."
|
||||||
msgstr "Un archivo de autoguardado está disponible para este croquis."
|
msgstr "Un archivo de autoguardado está disponible para este croquis."
|
||||||
|
|
||||||
#: solvespace.cpp:172
|
#: solvespace.cpp:173
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to load the autosave file instead?"
|
msgid "Do you want to load the autosave file instead?"
|
||||||
msgstr "¿Desea cargar el archivo de autoguardado en su lugar?"
|
msgstr "¿Desea cargar el archivo de autoguardado en su lugar?"
|
||||||
|
|
||||||
#: solvespace.cpp:173
|
#: solvespace.cpp:174
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Load autosave"
|
msgid "&Load autosave"
|
||||||
msgstr "&Cargar autoguardado"
|
msgstr "&Cargar autoguardado"
|
||||||
|
|
||||||
#: solvespace.cpp:175
|
#: solvespace.cpp:176
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Load"
|
msgid "Do&n't Load"
|
||||||
msgstr "No Cargar"
|
msgstr "No Cargar"
|
||||||
|
|
||||||
#: solvespace.cpp:598
|
#: solvespace.cpp:599
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Modified File"
|
msgid "Modified File"
|
||||||
msgstr "Archivo Modificado"
|
msgstr "Archivo Modificado"
|
||||||
|
|
||||||
#: solvespace.cpp:600
|
#: solvespace.cpp:601
|
||||||
#, c-format
|
#, c-format
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
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”?"
|
msgstr "¿Desea guardar los cambios que realizó en el croquis “%s”?"
|
||||||
|
|
||||||
#: solvespace.cpp:603
|
#: solvespace.cpp:604
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the new sketch?"
|
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?"
|
msgstr "¿Desea guardar los cambios que realizó en el nuevo croquis?"
|
||||||
|
|
||||||
#: solvespace.cpp:606
|
#: solvespace.cpp:607
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Your changes will be lost if you don't save them."
|
msgid "Your changes will be lost if you don't save them."
|
||||||
msgstr "Sus cambios se perderán si no los guarda."
|
msgstr "Sus cambios se perderán si no los guarda."
|
||||||
|
|
||||||
#: solvespace.cpp:607
|
#: solvespace.cpp:608
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Save"
|
msgid "&Save"
|
||||||
msgstr "&Guardar"
|
msgstr "&Guardar"
|
||||||
|
|
||||||
#: solvespace.cpp:609
|
#: solvespace.cpp:610
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Save"
|
msgid "Do&n't Save"
|
||||||
msgstr "No& Guardar"
|
msgstr "No& Guardar"
|
||||||
|
|
||||||
#: solvespace.cpp:630
|
#: solvespace.cpp:631
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "(new sketch)"
|
msgid "(new sketch)"
|
||||||
msgstr "(nuevo croquis)"
|
msgstr "(nuevo croquis)"
|
||||||
|
|
||||||
#: solvespace.cpp:637
|
#: solvespace.cpp:638
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Property Browser"
|
msgid "Property Browser"
|
||||||
msgstr "Explorador de Propiedades"
|
msgstr "Explorador de Propiedades"
|
||||||
|
|
||||||
#: solvespace.cpp:699
|
#: solvespace.cpp:700
|
||||||
msgid ""
|
msgid ""
|
||||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
"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 "
|
"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 "
|
"Probablemente esto no sea lo que quieres; ocultarlos haciendo clic en el "
|
||||||
"enlace en la parte superior de la ventana de texto."
|
"enlace en la parte superior de la ventana de texto."
|
||||||
|
|
||||||
#: solvespace.cpp:771
|
#: solvespace.cpp:772
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
"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 "
|
"No se puede identificar el tipo de archivo a partir de la extensión del "
|
||||||
"nombre del archivo '%s'; intente .dxf o .dwg."
|
"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."
|
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"La restricción debe tener una etiqueta y no debe ser una cota de referencia."
|
"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."
|
msgid "Bad selection for step dimension; select a constraint."
|
||||||
msgstr "Mala selección para la cota del paso; seleccione una restricción."
|
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."
|
msgid "The assembly does not interfere, good."
|
||||||
msgstr "El ensamble no interfiere, bien."
|
msgstr "El ensamble no interfiere, bien."
|
||||||
|
|
||||||
#: solvespace.cpp:867
|
#: solvespace.cpp:868
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The volume of the solid model is:\n"
|
"The volume of the solid model is:\n"
|
||||||
|
@ -1852,7 +1860,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
" %s"
|
" %s"
|
||||||
|
|
||||||
#: solvespace.cpp:876
|
#: solvespace.cpp:877
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1865,7 +1873,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
" %s"
|
" %s"
|
||||||
|
|
||||||
#: solvespace.cpp:881
|
#: solvespace.cpp:882
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1877,7 +1885,7 @@ msgstr ""
|
||||||
"Las superficies curvas se han aproximado como triángulos.\n"
|
"Las superficies curvas se han aproximado como triángulos.\n"
|
||||||
"Esto introduce un error, normalmente alrededor del 1%."
|
"Esto introduce un error, normalmente alrededor del 1%."
|
||||||
|
|
||||||
#: solvespace.cpp:896
|
#: solvespace.cpp:897
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The surface area of the selected faces is:\n"
|
"The surface area of the selected faces is:\n"
|
||||||
|
@ -1894,7 +1902,7 @@ msgstr ""
|
||||||
"Las curvas se han aproximado como lineales por partes.\n"
|
"Las curvas se han aproximado como lineales por partes.\n"
|
||||||
"Esto introduce un error, normalmente alrededor del 1%%."
|
"Esto introduce un error, normalmente alrededor del 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:905
|
#: solvespace.cpp:906
|
||||||
msgid ""
|
msgid ""
|
||||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||||
"not coplanar, or self-intersecting."
|
"not coplanar, or self-intersecting."
|
||||||
|
@ -1902,7 +1910,7 @@ msgstr ""
|
||||||
"Este grupo no contiene un área cerrada 2d correctamente formada. Está "
|
"Este grupo no contiene un área cerrada 2d correctamente formada. Está "
|
||||||
"abierta, no coplanares, ni auto-intersectantes."
|
"abierta, no coplanares, ni auto-intersectantes."
|
||||||
|
|
||||||
#: solvespace.cpp:917
|
#: solvespace.cpp:918
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The area of the region sketched in this group is:\n"
|
"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"
|
"Las curvas se han aproximado como lineales por partes.\n"
|
||||||
"Esto introduce un error, normalmente alrededor del 1%%."
|
"Esto introduce un error, normalmente alrededor del 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:937
|
#: solvespace.cpp:938
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The total length of the selected entities is:\n"
|
"The total length of the selected entities is:\n"
|
||||||
|
@ -1936,37 +1944,37 @@ msgstr ""
|
||||||
"Las curvas se han aproximado como lineales por partes.\n"
|
"Las curvas se han aproximado como lineales por partes.\n"
|
||||||
"Esto introduce un error, normalmente alrededor del 1%%."
|
"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."
|
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Mala selección de perímetro; seleccione segmentos de línea, arcos y curvas."
|
"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."
|
msgid "Bad selection for trace; select a single point."
|
||||||
msgstr "Mala selección de rastreo; seleccione un solo punto."
|
msgstr "Mala selección de rastreo; seleccione un solo punto."
|
||||||
|
|
||||||
#: solvespace.cpp:986
|
#: solvespace.cpp:987
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Couldn't write to '%s'"
|
msgid "Couldn't write to '%s'"
|
||||||
msgstr "No pude escribir a '%s'"
|
msgstr "No pude escribir a '%s'"
|
||||||
|
|
||||||
#: solvespace.cpp:1016
|
#: solvespace.cpp:1017
|
||||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||||
msgstr "La malla se intersecta a si misma (NO está bien, no es válida)."
|
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)."
|
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||||
msgstr "La malla no se intersecta (está bien, es válida)."
|
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)."
|
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||||
msgstr "La malla tiene bordes desnudos (NO está bien, no es válida)."
|
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)."
|
msgid "The mesh is watertight (okay, valid)."
|
||||||
msgstr "La malla es estanca (está bien, es válida)."
|
msgstr "La malla es estanca (está bien, es válida)."
|
||||||
|
|
||||||
#: solvespace.cpp:1023
|
#: solvespace.cpp:1024
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1977,7 +1985,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"El modelo contiene %d triángulos, desde %d superficies."
|
"El modelo contiene %d triángulos, desde %d superficies."
|
||||||
|
|
||||||
#: solvespace.cpp:1027
|
#: solvespace.cpp:1028
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -1992,7 +2000,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"Cero aristas problemáticas, bien.%s"
|
"Cero aristas problemáticas, bien.%s"
|
||||||
|
|
||||||
#: solvespace.cpp:1030
|
#: solvespace.cpp:1031
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -2007,7 +2015,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"%d aristas problemáticas, mal.%s"
|
"%d aristas problemáticas, mal.%s"
|
||||||
|
|
||||||
#: solvespace.cpp:1043
|
#: solvespace.cpp:1044
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is SolveSpace version %s.\n"
|
"This is SolveSpace version %s.\n"
|
||||||
|
@ -2048,23 +2056,23 @@ msgstr ""
|
||||||
msgid "Style name cannot be empty"
|
msgid "Style name cannot be empty"
|
||||||
msgstr "El nombre del estilo no puede estar vacío"
|
msgstr "El nombre del estilo no puede estar vacío"
|
||||||
|
|
||||||
#: textscreens.cpp:785
|
#: textscreens.cpp:791
|
||||||
msgid "Can't repeat fewer than 1 time."
|
msgid "Can't repeat fewer than 1 time."
|
||||||
msgstr "No se puede repetir menos de 1 vez."
|
msgstr "No se puede repetir menos de 1 vez."
|
||||||
|
|
||||||
#: textscreens.cpp:789
|
#: textscreens.cpp:795
|
||||||
msgid "Can't repeat more than 999 times."
|
msgid "Can't repeat more than 999 times."
|
||||||
msgstr "No se puede repetir más de 999 veces."
|
msgstr "No se puede repetir más de 999 veces."
|
||||||
|
|
||||||
#: textscreens.cpp:814
|
#: textscreens.cpp:820
|
||||||
msgid "Group name cannot be empty"
|
msgid "Group name cannot be empty"
|
||||||
msgstr "El nombre del grupo no puede estar vacío"
|
msgstr "El nombre del grupo no puede estar vacío"
|
||||||
|
|
||||||
#: textscreens.cpp:866
|
#: textscreens.cpp:872
|
||||||
msgid "Opacity must be between zero and one."
|
msgid "Opacity must be between zero and one."
|
||||||
msgstr "La opacidad debe estar entre cero y uno."
|
msgstr "La opacidad debe estar entre cero y uno."
|
||||||
|
|
||||||
#: textscreens.cpp:901
|
#: textscreens.cpp:907
|
||||||
msgid "Radius cannot be zero or negative."
|
msgid "Radius cannot be zero or negative."
|
||||||
msgstr "El radio no puede ser cero o negativo."
|
msgstr "El radio no puede ser cero o negativo."
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: SolveSpace 3.0\n"
|
"Project-Id-Version: SolveSpace 3.0\n"
|
||||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\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"
|
"PO-Revision-Date: 2018-07-14 06:12+0000\n"
|
||||||
"Last-Translator: whitequark <whitequark@whitequark.org>\n"
|
"Last-Translator: whitequark <whitequark@whitequark.org>\n"
|
||||||
"Language-Team: none\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."
|
msgid "Number of copies to paste must be at least one."
|
||||||
msgstr "Le nombre de copies à coller doit être d'au moins un."
|
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."
|
msgid "Scale cannot be zero."
|
||||||
msgstr "L'échelle ne peut pas être zéro."
|
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."
|
msgid "No workplane active."
|
||||||
msgstr "Pas d'espace de travail actif."
|
msgstr "Pas d'espace de travail actif."
|
||||||
|
|
||||||
#: confscreen.cpp:376
|
#: confscreen.cpp:381
|
||||||
msgid "Bad format: specify coordinates as x, y, z"
|
msgid "Bad format: specify coordinates as x, y, z"
|
||||||
msgstr "Mauvais format: spécifiez les coordonnées comme 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"
|
msgid "Bad format: specify color as r, g, b"
|
||||||
msgstr "Mauvais format; spécifiez la couleur comme r, v, b"
|
msgstr "Mauvais format; spécifiez la couleur comme r, v, b"
|
||||||
|
|
||||||
#: confscreen.cpp:412
|
#: confscreen.cpp:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor will have no effect until you enable View -> Use "
|
"The perspective factor will have no effect until you enable View -> Use "
|
||||||
"Perspective Projection."
|
"Perspective Projection."
|
||||||
|
@ -79,26 +79,26 @@ msgstr ""
|
||||||
"Le facteur de perspective n'aura aucun effet tant que vous n'aurez pas "
|
"Le facteur de perspective n'aura aucun effet tant que vous n'aurez pas "
|
||||||
"activé \"Affichage -> Utiliser la projection de perspective\"."
|
"activé \"Affichage -> Utiliser la projection de perspective\"."
|
||||||
|
|
||||||
#: confscreen.cpp:430 confscreen.cpp:440
|
#: confscreen.cpp:435 confscreen.cpp:445
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Specify between 0 and %d digits after the decimal."
|
msgid "Specify between 0 and %d digits after the decimal."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: confscreen.cpp:452
|
#: confscreen.cpp:457
|
||||||
msgid "Export scale must not be zero!"
|
msgid "Export scale must not be zero!"
|
||||||
msgstr "L'échelle d'export ne doit pas être zéro!"
|
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!"
|
msgid "Cutter radius offset must not be negative!"
|
||||||
msgstr "Le décalage du rayon de coupe ne doit pas être négatif!"
|
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"
|
msgid "Bad value: autosave interval should be positive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Mauvaise valeur: l'intervalle d'enregistrement automatique devrait être "
|
"Mauvaise valeur: l'intervalle d'enregistrement automatique devrait être "
|
||||||
"positif"
|
"positif"
|
||||||
|
|
||||||
#: confscreen.cpp:521
|
#: confscreen.cpp:531
|
||||||
msgid "Bad format: specify interval in integral minutes"
|
msgid "Bad format: specify interval in integral minutes"
|
||||||
msgstr "Mauvais format: spécifiez un nombre entier de minutes"
|
msgstr "Mauvais format: spécifiez un nombre entier de minutes"
|
||||||
|
|
||||||
|
@ -678,7 +678,7 @@ msgctxt "button"
|
||||||
msgid "&No"
|
msgid "&No"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: file.cpp:877 solvespace.cpp:610
|
#: file.cpp:877 solvespace.cpp:611
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Cancel"
|
msgid "&Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1131,24 +1131,28 @@ msgstr "&Langue"
|
||||||
msgid "&Website / Manual"
|
msgid "&Website / Manual"
|
||||||
msgstr "&Site web / Manuel"
|
msgstr "&Site web / Manuel"
|
||||||
|
|
||||||
#: graphicswin.cpp:187
|
#: graphicswin.cpp:186
|
||||||
|
msgid "&Go to GitHub commit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: graphicswin.cpp:188
|
||||||
msgid "&About"
|
msgid "&About"
|
||||||
msgstr "&A propos"
|
msgstr "&A propos"
|
||||||
|
|
||||||
#: graphicswin.cpp:361
|
#: graphicswin.cpp:362
|
||||||
msgid "(no recent files)"
|
msgid "(no recent files)"
|
||||||
msgstr "(pas de fichier récent)"
|
msgstr "(pas de fichier récent)"
|
||||||
|
|
||||||
#: graphicswin.cpp:369
|
#: graphicswin.cpp:370
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "File '%s' does not exist."
|
msgid "File '%s' does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:736
|
#: graphicswin.cpp:737
|
||||||
msgid "No workplane is active, so the grid will not appear."
|
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."
|
msgstr "Pas de plan de travail actif, donc la grille ne va pas apparaître."
|
||||||
|
|
||||||
#: graphicswin.cpp:751
|
#: graphicswin.cpp:752
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||||
"projection.\n"
|
"projection.\n"
|
||||||
|
@ -1162,19 +1166,19 @@ msgstr ""
|
||||||
"Pour une projection en perspective, modifiez le facteur de perspective dans "
|
"Pour une projection en perspective, modifiez le facteur de perspective dans "
|
||||||
"l'écran de configuration. Une valeur d'environ 0,3 est typique."
|
"l'écran de configuration. Une valeur d'environ 0,3 est typique."
|
||||||
|
|
||||||
#: graphicswin.cpp:836
|
#: graphicswin.cpp:837
|
||||||
msgid ""
|
msgid ""
|
||||||
"Select a point; this point will become the center of the view on screen."
|
"Select a point; this point will become the center of the view on screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Sélectionnez un point. Ce point deviendra le centre de la vue à l'écran."
|
"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."
|
msgid "No additional entities share endpoints with the selected entities."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Aucune entité supplémentaire ne partage des points d'extrémité avec les "
|
"Aucune entité supplémentaire ne partage des points d'extrémité avec les "
|
||||||
"entités sélectionnées."
|
"entités sélectionnées."
|
||||||
|
|
||||||
#: graphicswin.cpp:1154
|
#: graphicswin.cpp:1155
|
||||||
msgid ""
|
msgid ""
|
||||||
"To use this command, select a point or other entity from an linked part, or "
|
"To use this command, select a point or other entity from an linked part, or "
|
||||||
"make a link group the active group."
|
"make a link group the active group."
|
||||||
|
@ -1182,7 +1186,7 @@ msgstr ""
|
||||||
"Pour utiliser cette commande, sélectionnez un point ou une autre entité à "
|
"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."
|
"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 ""
|
msgid ""
|
||||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||||
"to define the plane for the snap grid."
|
"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 -"
|
"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."
|
"> Dans plan de travail) pour définir le plan pour la grille d'accrochage."
|
||||||
|
|
||||||
#: graphicswin.cpp:1184
|
#: graphicswin.cpp:1185
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||||
"with a label. To snap a line, select its endpoints."
|
"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 "
|
"des textes de commentaires ou des contraintes avec une étiquette. Pour "
|
||||||
"accrocher une ligne, sélectionnez ses points d'extrémité."
|
"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."
|
msgid "No workplane selected. Activating default workplane for this group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Aucun plan de travail sélectionné. Activation du plan de travail par défaut "
|
"Aucun plan de travail sélectionné. Activation du plan de travail par défaut "
|
||||||
"pour ce groupe."
|
"pour ce groupe."
|
||||||
|
|
||||||
#: graphicswin.cpp:1272
|
#: graphicswin.cpp:1273
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is selected, and the active group does not have a default "
|
"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. 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 "
|
"de travail par défaut. Essayez de sélectionner un plan de travail ou "
|
||||||
"d'activer un groupe de \"Dessin dans nouveau plan travail\"."
|
"d'activer un groupe de \"Dessin dans nouveau plan travail\"."
|
||||||
|
|
||||||
#: graphicswin.cpp:1293
|
#: graphicswin.cpp:1294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||||
"nothing to set up arc parameters."
|
"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, "
|
"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."
|
"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)"
|
msgid "click point on arc (draws anti-clockwise)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"cliquez un point sur l'arc (dessine dans le sens inverse des aiguilles d'une "
|
"cliquez un point sur l'arc (dessine dans le sens inverse des aiguilles d'une "
|
||||||
"montre)"
|
"montre)"
|
||||||
|
|
||||||
#: graphicswin.cpp:1305
|
#: graphicswin.cpp:1306
|
||||||
msgid "click to place datum point"
|
msgid "click to place datum point"
|
||||||
msgstr "cliquez pour placer un point"
|
msgstr "cliquez pour placer un point"
|
||||||
|
|
||||||
#: graphicswin.cpp:1306
|
#: graphicswin.cpp:1307
|
||||||
msgid "click first point of line segment"
|
msgid "click first point of line segment"
|
||||||
msgstr "cliquez le premier point du segment de ligne"
|
msgstr "cliquez le premier point du segment de ligne"
|
||||||
|
|
||||||
#: graphicswin.cpp:1308
|
#: graphicswin.cpp:1309
|
||||||
msgid "click first point of construction line segment"
|
msgid "click first point of construction line segment"
|
||||||
msgstr "cliquez le premier point de la ligne de construction"
|
msgstr "cliquez le premier point de la ligne de construction"
|
||||||
|
|
||||||
#: graphicswin.cpp:1309
|
#: graphicswin.cpp:1310
|
||||||
msgid "click first point of cubic segment"
|
msgid "click first point of cubic segment"
|
||||||
msgstr "cliquez le premier point du segment cubique"
|
msgstr "cliquez le premier point du segment cubique"
|
||||||
|
|
||||||
#: graphicswin.cpp:1310
|
#: graphicswin.cpp:1311
|
||||||
msgid "click center of circle"
|
msgid "click center of circle"
|
||||||
msgstr "cliquez pour placer le centre du cercle"
|
msgstr "cliquez pour placer le centre du cercle"
|
||||||
|
|
||||||
#: graphicswin.cpp:1311
|
#: graphicswin.cpp:1312
|
||||||
msgid "click origin of workplane"
|
msgid "click origin of workplane"
|
||||||
msgstr "cliquez pour placer l'origine du plan de travail"
|
msgstr "cliquez pour placer l'origine du plan de travail"
|
||||||
|
|
||||||
#: graphicswin.cpp:1312
|
#: graphicswin.cpp:1313
|
||||||
msgid "click one corner of rectangle"
|
msgid "click one corner of rectangle"
|
||||||
msgstr "cliquez un coin du rectangle"
|
msgstr "cliquez un coin du rectangle"
|
||||||
|
|
||||||
#: graphicswin.cpp:1313
|
#: graphicswin.cpp:1314
|
||||||
msgid "click top left of text"
|
msgid "click top left of text"
|
||||||
msgstr "cliquez le haut à gauche du texte"
|
msgstr "cliquez le haut à gauche du texte"
|
||||||
|
|
||||||
#: graphicswin.cpp:1319
|
#: graphicswin.cpp:1320
|
||||||
msgid "click top left of image"
|
msgid "click top left of image"
|
||||||
msgstr "cliquez le haut à gauche de l'image"
|
msgstr "cliquez le haut à gauche de l'image"
|
||||||
|
|
||||||
#: graphicswin.cpp:1345
|
#: graphicswin.cpp:1346
|
||||||
msgid ""
|
msgid ""
|
||||||
"No entities are selected. Select entities before trying to toggle their "
|
"No entities are selected. Select entities before trying to toggle their "
|
||||||
"construction state."
|
"construction state."
|
||||||
|
@ -1409,6 +1413,10 @@ msgstr "le contour s'entrecroise!"
|
||||||
msgid "zero-length edge!"
|
msgid "zero-length edge!"
|
||||||
msgstr "arête de longueur nulle!"
|
msgstr "arête de longueur nulle!"
|
||||||
|
|
||||||
|
#: importmesh.cpp:136
|
||||||
|
msgid "Text-formated STL files are not currently supported"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: modify.cpp:252
|
#: modify.cpp:252
|
||||||
msgid "Must be sketching in workplane to create tangent arc."
|
msgid "Must be sketching in workplane to create tangent arc."
|
||||||
msgstr "Vous devez dessiner dans un plan pour créer un arc tangent."
|
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 "
|
"Impossible de dessiner l'image en 3d; D'abord, activez un plan de travail "
|
||||||
"avec \"Dessin -> Dans 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"
|
msgctxt "file-type"
|
||||||
msgid "SolveSpace models"
|
msgid "SolveSpace models"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1699,130 +1707,130 @@ msgctxt "file-type"
|
||||||
msgid "Comma-separated values"
|
msgid "Comma-separated values"
|
||||||
msgstr ""
|
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"
|
msgid "untitled"
|
||||||
msgstr "sans nom"
|
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
|
#: platform/guiwin.cpp:1639
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Save File"
|
msgid "Save File"
|
||||||
msgstr "Sauver fichier"
|
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
|
#: platform/guiwin.cpp:1645
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Open File"
|
msgid "Open File"
|
||||||
msgstr "Ouvrir Fichier"
|
msgstr "Ouvrir Fichier"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Cancel"
|
msgid "_Cancel"
|
||||||
msgstr "_Annuler"
|
msgstr "_Annuler"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Save"
|
msgid "_Save"
|
||||||
msgstr "_Sauver"
|
msgstr "_Sauver"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Open"
|
msgid "_Open"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:170
|
#: solvespace.cpp:171
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Autosave Available"
|
msgid "Autosave Available"
|
||||||
msgstr "Sauvegarde automatique existante"
|
msgstr "Sauvegarde automatique existante"
|
||||||
|
|
||||||
#: solvespace.cpp:171
|
#: solvespace.cpp:172
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "An autosave file is available for this sketch."
|
msgid "An autosave file is available for this sketch."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:172
|
#: solvespace.cpp:173
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to load the autosave file instead?"
|
msgid "Do you want to load the autosave file instead?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:173
|
#: solvespace.cpp:174
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Load autosave"
|
msgid "&Load autosave"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:175
|
#: solvespace.cpp:176
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Load"
|
msgid "Do&n't Load"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:598
|
#: solvespace.cpp:599
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Modified File"
|
msgid "Modified File"
|
||||||
msgstr "Fichier modifié"
|
msgstr "Fichier modifié"
|
||||||
|
|
||||||
#: solvespace.cpp:600
|
#: solvespace.cpp:601
|
||||||
#, c-format
|
#, c-format
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:603
|
#: solvespace.cpp:604
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the new sketch?"
|
msgid "Do you want to save the changes you made to the new sketch?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:606
|
#: solvespace.cpp:607
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Your changes will be lost if you don't save them."
|
msgid "Your changes will be lost if you don't save them."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:607
|
#: solvespace.cpp:608
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Save"
|
msgid "&Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:609
|
#: solvespace.cpp:610
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Save"
|
msgid "Do&n't Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:630
|
#: solvespace.cpp:631
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "(new sketch)"
|
msgid "(new sketch)"
|
||||||
msgstr "(nouveau dessin)"
|
msgstr "(nouveau dessin)"
|
||||||
|
|
||||||
#: solvespace.cpp:637
|
#: solvespace.cpp:638
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Property Browser"
|
msgid "Property Browser"
|
||||||
msgstr "Navigateur de propriété"
|
msgstr "Navigateur de propriété"
|
||||||
|
|
||||||
#: solvespace.cpp:699
|
#: solvespace.cpp:700
|
||||||
msgid ""
|
msgid ""
|
||||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
"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 "
|
"is probably not what you want; hide them by clicking the link at the top of "
|
||||||
"the text window."
|
"the text window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:771
|
#: solvespace.cpp:772
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||||
"dwg."
|
"dwg."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:823
|
#: solvespace.cpp:824
|
||||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:827
|
#: solvespace.cpp:828
|
||||||
msgid "Bad selection for step dimension; select a constraint."
|
msgid "Bad selection for step dimension; select a constraint."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:851
|
#: solvespace.cpp:852
|
||||||
msgid "The assembly does not interfere, good."
|
msgid "The assembly does not interfere, good."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:867
|
#: solvespace.cpp:868
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The volume of the solid model is:\n"
|
"The volume of the solid model is:\n"
|
||||||
|
@ -1830,7 +1838,7 @@ msgid ""
|
||||||
" %s"
|
" %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:876
|
#: solvespace.cpp:877
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1839,7 +1847,7 @@ msgid ""
|
||||||
" %s"
|
" %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:881
|
#: solvespace.cpp:882
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1847,7 +1855,7 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%."
|
"This introduces error, typically of around 1%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:896
|
#: solvespace.cpp:897
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The surface area of the selected faces is:\n"
|
"The surface area of the selected faces is:\n"
|
||||||
|
@ -1858,13 +1866,13 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:905
|
#: solvespace.cpp:906
|
||||||
msgid ""
|
msgid ""
|
||||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||||
"not coplanar, or self-intersecting."
|
"not coplanar, or self-intersecting."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:917
|
#: solvespace.cpp:918
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The area of the region sketched in this group is:\n"
|
"The area of the region sketched in this group is:\n"
|
||||||
|
@ -1875,7 +1883,7 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:937
|
#: solvespace.cpp:938
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The total length of the selected entities is:\n"
|
"The total length of the selected entities is:\n"
|
||||||
|
@ -1886,36 +1894,36 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:943
|
#: solvespace.cpp:944
|
||||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:959
|
#: solvespace.cpp:960
|
||||||
msgid "Bad selection for trace; select a single point."
|
msgid "Bad selection for trace; select a single point."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:986
|
#: solvespace.cpp:987
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Couldn't write to '%s'"
|
msgid "Couldn't write to '%s'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1016
|
#: solvespace.cpp:1017
|
||||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1017
|
#: solvespace.cpp:1018
|
||||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1019
|
#: solvespace.cpp:1020
|
||||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1020
|
#: solvespace.cpp:1021
|
||||||
msgid "The mesh is watertight (okay, valid)."
|
msgid "The mesh is watertight (okay, valid)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1023
|
#: solvespace.cpp:1024
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1923,7 +1931,7 @@ msgid ""
|
||||||
"The model contains %d triangles, from %d surfaces."
|
"The model contains %d triangles, from %d surfaces."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1027
|
#: solvespace.cpp:1028
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -1933,7 +1941,7 @@ msgid ""
|
||||||
"Zero problematic edges, good.%s"
|
"Zero problematic edges, good.%s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1030
|
#: solvespace.cpp:1031
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -1943,7 +1951,7 @@ msgid ""
|
||||||
"%d problematic edges, bad.%s"
|
"%d problematic edges, bad.%s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1043
|
#: solvespace.cpp:1044
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is SolveSpace version %s.\n"
|
"This is SolveSpace version %s.\n"
|
||||||
|
@ -1972,23 +1980,23 @@ msgstr ""
|
||||||
msgid "Style name cannot be empty"
|
msgid "Style name cannot be empty"
|
||||||
msgstr "Le nom d'un style ne peut pas être vide"
|
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."
|
msgid "Can't repeat fewer than 1 time."
|
||||||
msgstr "Je ne peux pas répéter moins de 1 fois."
|
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."
|
msgid "Can't repeat more than 999 times."
|
||||||
msgstr "Je ne peux pas répéter plus de 999 fois."
|
msgstr "Je ne peux pas répéter plus de 999 fois."
|
||||||
|
|
||||||
#: textscreens.cpp:814
|
#: textscreens.cpp:820
|
||||||
msgid "Group name cannot be empty"
|
msgid "Group name cannot be empty"
|
||||||
msgstr "Un nom de groupe ne peut pas être vide"
|
msgstr "Un nom de groupe ne peut pas être vide"
|
||||||
|
|
||||||
#: textscreens.cpp:866
|
#: textscreens.cpp:872
|
||||||
msgid "Opacity must be between zero and one."
|
msgid "Opacity must be between zero and one."
|
||||||
msgstr "L'opacité doit être entre 0 et 1."
|
msgstr "L'opacité doit être entre 0 et 1."
|
||||||
|
|
||||||
#: textscreens.cpp:901
|
#: textscreens.cpp:907
|
||||||
msgid "Radius cannot be zero or negative."
|
msgid "Radius cannot be zero or negative."
|
||||||
msgstr "Le rayon ne peut pas être zéro ou négatif."
|
msgstr "Le rayon ne peut pas être zéro ou négatif."
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: SolveSpace 3.0\n"
|
"Project-Id-Version: SolveSpace 3.0\n"
|
||||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\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"
|
"PO-Revision-Date: 2021-10-04 15:33+0300\n"
|
||||||
"Last-Translator: Olesya Gerasimenko <translation-team@basealt.ru>\n"
|
"Last-Translator: Olesya Gerasimenko <translation-team@basealt.ru>\n"
|
||||||
"Language-Team: Basealt Translation Team\n"
|
"Language-Team: Basealt Translation Team\n"
|
||||||
|
@ -36,7 +36,7 @@ msgstr "Буфер обмена пуст; нечего вставлять."
|
||||||
msgid "Number of copies to paste must be at least one."
|
msgid "Number of copies to paste must be at least one."
|
||||||
msgstr "Укажите в поле 'количество' хотя бы одну копию для вставки."
|
msgstr "Укажите в поле 'количество' хотя бы одну копию для вставки."
|
||||||
|
|
||||||
#: clipboard.cpp:389 textscreens.cpp:827
|
#: clipboard.cpp:389 textscreens.cpp:833
|
||||||
msgid "Scale cannot be zero."
|
msgid "Scale cannot be zero."
|
||||||
msgstr "Масштабный коэффициент не может быть нулевым."
|
msgstr "Масштабный коэффициент не может быть нулевым."
|
||||||
|
|
||||||
|
@ -63,15 +63,15 @@ msgstr "Слишком много элементов для вставки; ра
|
||||||
msgid "No workplane active."
|
msgid "No workplane active."
|
||||||
msgstr "Рабочая плоскость не активна"
|
msgstr "Рабочая плоскость не активна"
|
||||||
|
|
||||||
#: confscreen.cpp:376
|
#: confscreen.cpp:381
|
||||||
msgid "Bad format: specify coordinates as x, y, z"
|
msgid "Bad format: specify coordinates as x, y, z"
|
||||||
msgstr "Неверный формат: введите координаты как 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"
|
msgid "Bad format: specify color as r, g, b"
|
||||||
msgstr "Неверный формат: введите цвет как r, g, b"
|
msgstr "Неверный формат: введите цвет как r, g, b"
|
||||||
|
|
||||||
#: confscreen.cpp:412
|
#: confscreen.cpp:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor will have no effect until you enable View -> Use "
|
"The perspective factor will have no effect until you enable View -> Use "
|
||||||
"Perspective Projection."
|
"Perspective Projection."
|
||||||
|
@ -79,25 +79,25 @@ msgstr ""
|
||||||
"Коэффициент перспективы не будет иметь эффект, пока вы не включите Вид-"
|
"Коэффициент перспективы не будет иметь эффект, пока вы не включите Вид-"
|
||||||
">Перспективная Проекция."
|
">Перспективная Проекция."
|
||||||
|
|
||||||
#: confscreen.cpp:430 confscreen.cpp:440
|
#: confscreen.cpp:435 confscreen.cpp:445
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Specify between 0 and %d digits after the decimal."
|
msgid "Specify between 0 and %d digits after the decimal."
|
||||||
msgstr "Введите число от 0 до %d."
|
msgstr "Введите число от 0 до %d."
|
||||||
|
|
||||||
#: confscreen.cpp:452
|
#: confscreen.cpp:457
|
||||||
msgid "Export scale must not be zero!"
|
msgid "Export scale must not be zero!"
|
||||||
msgstr "Масштабный коэффициент не может быть нулевым!"
|
msgstr "Масштабный коэффициент не может быть нулевым!"
|
||||||
|
|
||||||
#: confscreen.cpp:464
|
#: confscreen.cpp:469
|
||||||
msgid "Cutter radius offset must not be negative!"
|
msgid "Cutter radius offset must not be negative!"
|
||||||
msgstr "Радиус режущего инструмента не может быть отрицательным!"
|
msgstr "Радиус режущего инструмента не может быть отрицательным!"
|
||||||
|
|
||||||
#: confscreen.cpp:518
|
#: confscreen.cpp:528
|
||||||
msgid "Bad value: autosave interval should be positive"
|
msgid "Bad value: autosave interval should be positive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Неверное значение: интервал автосохранения должен быть положительным числом"
|
"Неверное значение: интервал автосохранения должен быть положительным числом"
|
||||||
|
|
||||||
#: confscreen.cpp:521
|
#: confscreen.cpp:531
|
||||||
msgid "Bad format: specify interval in integral minutes"
|
msgid "Bad format: specify interval in integral minutes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Неверный формат: введите целое число, чтобы задать интервал автосохранения"
|
"Неверный формат: введите целое число, чтобы задать интервал автосохранения"
|
||||||
|
@ -405,8 +405,8 @@ msgid ""
|
||||||
" * two arcs\n"
|
" * two arcs\n"
|
||||||
" * one arc and one line segment\n"
|
" * one arc and one line segment\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Неправильное выделение для ограничения 'отношение длин'. Ограничение может"
|
"Неправильное выделение для ограничения 'отношение длин'. Ограничение может "
|
||||||
" принимать в качестве выделения следующие примитивы:\n"
|
"принимать в качестве выделения следующие примитивы:\n"
|
||||||
"\n"
|
"\n"
|
||||||
" * два отрезка\n"
|
" * два отрезка\n"
|
||||||
" * две дуги\n"
|
" * две дуги\n"
|
||||||
|
@ -421,8 +421,8 @@ msgid ""
|
||||||
" * two arcs\n"
|
" * two arcs\n"
|
||||||
" * one arc and one line segment\n"
|
" * one arc and one line segment\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Неправильное выделение для ограничения 'разность длин'. Ограничение может"
|
"Неправильное выделение для ограничения 'разность длин'. Ограничение может "
|
||||||
" принимать в качестве выделения следующие примитивы:\n"
|
"принимать в качестве выделения следующие примитивы:\n"
|
||||||
"\n"
|
"\n"
|
||||||
" * два отрезка\n"
|
" * два отрезка\n"
|
||||||
" * две дуги\n"
|
" * две дуги\n"
|
||||||
|
@ -693,7 +693,7 @@ msgctxt "button"
|
||||||
msgid "&No"
|
msgid "&No"
|
||||||
msgstr "Нет"
|
msgstr "Нет"
|
||||||
|
|
||||||
#: file.cpp:877 solvespace.cpp:610
|
#: file.cpp:877 solvespace.cpp:611
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Cancel"
|
msgid "&Cancel"
|
||||||
msgstr "Отменить"
|
msgstr "Отменить"
|
||||||
|
@ -1146,24 +1146,28 @@ msgstr "&Язык"
|
||||||
msgid "&Website / Manual"
|
msgid "&Website / Manual"
|
||||||
msgstr "Вебсайт / &Справка"
|
msgstr "Вебсайт / &Справка"
|
||||||
|
|
||||||
#: graphicswin.cpp:187
|
#: graphicswin.cpp:186
|
||||||
|
msgid "&Go to GitHub commit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: graphicswin.cpp:188
|
||||||
msgid "&About"
|
msgid "&About"
|
||||||
msgstr "О &Программе"
|
msgstr "О &Программе"
|
||||||
|
|
||||||
#: graphicswin.cpp:361
|
#: graphicswin.cpp:362
|
||||||
msgid "(no recent files)"
|
msgid "(no recent files)"
|
||||||
msgstr "(пусто)"
|
msgstr "(пусто)"
|
||||||
|
|
||||||
#: graphicswin.cpp:369
|
#: graphicswin.cpp:370
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "File '%s' does not exist."
|
msgid "File '%s' does not exist."
|
||||||
msgstr "Файл '%s' не существует."
|
msgstr "Файл '%s' не существует."
|
||||||
|
|
||||||
#: graphicswin.cpp:736
|
#: graphicswin.cpp:737
|
||||||
msgid "No workplane is active, so the grid will not appear."
|
msgid "No workplane is active, so the grid will not appear."
|
||||||
msgstr "Сетку не будет видно, пока рабочая плоскость не активирована."
|
msgstr "Сетку не будет видно, пока рабочая плоскость не активирована."
|
||||||
|
|
||||||
#: graphicswin.cpp:751
|
#: graphicswin.cpp:752
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||||
"projection.\n"
|
"projection.\n"
|
||||||
|
@ -1177,16 +1181,16 @@ msgstr ""
|
||||||
"перспективы на конфигурационной странице браузера.\n"
|
"перспективы на конфигурационной странице браузера.\n"
|
||||||
"Значение по умолчанию 0.3."
|
"Значение по умолчанию 0.3."
|
||||||
|
|
||||||
#: graphicswin.cpp:836
|
#: graphicswin.cpp:837
|
||||||
msgid ""
|
msgid ""
|
||||||
"Select a point; this point will become the center of the view on screen."
|
"Select a point; this point will become the center of the view on screen."
|
||||||
msgstr "Выделите точку. Вид будет отцентрован по этой точке."
|
msgstr "Выделите точку. Вид будет отцентрован по этой точке."
|
||||||
|
|
||||||
#: graphicswin.cpp:1136
|
#: graphicswin.cpp:1137
|
||||||
msgid "No additional entities share endpoints with the selected entities."
|
msgid "No additional entities share endpoints with the selected entities."
|
||||||
msgstr "Нет дополнительных объектов, соединенных с выбранными примитивами."
|
msgstr "Нет дополнительных объектов, соединенных с выбранными примитивами."
|
||||||
|
|
||||||
#: graphicswin.cpp:1154
|
#: graphicswin.cpp:1155
|
||||||
msgid ""
|
msgid ""
|
||||||
"To use this command, select a point or other entity from an linked part, or "
|
"To use this command, select a point or other entity from an linked part, or "
|
||||||
"make a link group the active group."
|
"make a link group the active group."
|
||||||
|
@ -1195,7 +1199,7 @@ msgstr ""
|
||||||
"принадлежащий импортированной детали, или активируйте группу импортированной "
|
"принадлежащий импортированной детали, или активируйте группу импортированной "
|
||||||
"детали."
|
"детали."
|
||||||
|
|
||||||
#: graphicswin.cpp:1177
|
#: graphicswin.cpp:1178
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||||
"to define the plane for the snap grid."
|
"to define the plane for the snap grid."
|
||||||
|
@ -1203,7 +1207,7 @@ msgstr ""
|
||||||
"Рабочая плоскость не активна. Активируйте ее через Эскиз -> В Рабочей "
|
"Рабочая плоскость не активна. Активируйте ее через Эскиз -> В Рабочей "
|
||||||
"Плоскости чтобы определить плоскость для сетки."
|
"Плоскости чтобы определить плоскость для сетки."
|
||||||
|
|
||||||
#: graphicswin.cpp:1184
|
#: graphicswin.cpp:1185
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||||
"with a label. To snap a line, select its endpoints."
|
"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."
|
msgid "No workplane selected. Activating default workplane for this group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Рабочая плоскость не активна. Активирована рабочая плоскость по умолчанию "
|
"Рабочая плоскость не активна. Активирована рабочая плоскость по умолчанию "
|
||||||
"для данной группы."
|
"для данной группы."
|
||||||
|
|
||||||
#: graphicswin.cpp:1272
|
#: graphicswin.cpp:1273
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is selected, and the active group does not have a default "
|
"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. Try selecting a workplane, or activating a sketch-in-new-"
|
||||||
|
@ -1228,7 +1232,7 @@ msgstr ""
|
||||||
"по умолчанию. Попробуйте выделить рабочую плоскость или создать новую с "
|
"по умолчанию. Попробуйте выделить рабочую плоскость или создать новую с "
|
||||||
"помощью Группа -> Создать Эскиз в Новой Рабочей Плоскости."
|
"помощью Группа -> Создать Эскиз в Новой Рабочей Плоскости."
|
||||||
|
|
||||||
#: graphicswin.cpp:1293
|
#: graphicswin.cpp:1294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||||
"nothing to set up arc parameters."
|
"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)"
|
msgid "click point on arc (draws anti-clockwise)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"кликните мышью там, где хотите создать дугу окружности (дуга будет "
|
"кликните мышью там, где хотите создать дугу окружности (дуга будет "
|
||||||
"нарисована против часовой стрелки)"
|
"нарисована против часовой стрелки)"
|
||||||
|
|
||||||
#: graphicswin.cpp:1305
|
#: graphicswin.cpp:1306
|
||||||
msgid "click to place datum point"
|
msgid "click to place datum point"
|
||||||
msgstr "кликните мышью там, где хотите создать опорную точку"
|
msgstr "кликните мышью там, где хотите создать опорную точку"
|
||||||
|
|
||||||
#: graphicswin.cpp:1306
|
#: graphicswin.cpp:1307
|
||||||
msgid "click first point of line segment"
|
msgid "click first point of line segment"
|
||||||
msgstr "кликните мышью там, где хотите создать первую точку отрезка"
|
msgstr "кликните мышью там, где хотите создать первую точку отрезка"
|
||||||
|
|
||||||
#: graphicswin.cpp:1308
|
#: graphicswin.cpp:1309
|
||||||
msgid "click first point of construction line segment"
|
msgid "click first point of construction line segment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"кликните мышью там, где хотите создать первую точку вспомогательного отрезка"
|
"кликните мышью там, где хотите создать первую точку вспомогательного отрезка"
|
||||||
|
|
||||||
#: graphicswin.cpp:1309
|
#: graphicswin.cpp:1310
|
||||||
msgid "click first point of cubic segment"
|
msgid "click first point of cubic segment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"кликните мышью там, где хотите создать первую точку кубического сплайна Безье"
|
"кликните мышью там, где хотите создать первую точку кубического сплайна Безье"
|
||||||
|
|
||||||
#: graphicswin.cpp:1310
|
#: graphicswin.cpp:1311
|
||||||
msgid "click center of circle"
|
msgid "click center of circle"
|
||||||
msgstr "кликните мышью там, где будет находиться центр окружности"
|
msgstr "кликните мышью там, где будет находиться центр окружности"
|
||||||
|
|
||||||
#: graphicswin.cpp:1311
|
#: graphicswin.cpp:1312
|
||||||
msgid "click origin of workplane"
|
msgid "click origin of workplane"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"кликните мышью там, где будет находиться точка, через которую будет "
|
"кликните мышью там, где будет находиться точка, через которую будет "
|
||||||
"построена рабочая плоскость"
|
"построена рабочая плоскость"
|
||||||
|
|
||||||
#: graphicswin.cpp:1312
|
#: graphicswin.cpp:1313
|
||||||
msgid "click one corner of rectangle"
|
msgid "click one corner of rectangle"
|
||||||
msgstr "кликните мышью там, где будет находиться один из углов прямоугольника"
|
msgstr "кликните мышью там, где будет находиться один из углов прямоугольника"
|
||||||
|
|
||||||
#: graphicswin.cpp:1313
|
#: graphicswin.cpp:1314
|
||||||
msgid "click top left of text"
|
msgid "click top left of text"
|
||||||
msgstr "кликните мышью там, где хотите создать текст"
|
msgstr "кликните мышью там, где хотите создать текст"
|
||||||
|
|
||||||
#: graphicswin.cpp:1319
|
#: graphicswin.cpp:1320
|
||||||
msgid "click top left of image"
|
msgid "click top left of image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"кликните мышью там, где будет расположен левый верхний угол изображения"
|
"кликните мышью там, где будет расположен левый верхний угол изображения"
|
||||||
|
|
||||||
#: graphicswin.cpp:1345
|
#: graphicswin.cpp:1346
|
||||||
msgid ""
|
msgid ""
|
||||||
"No entities are selected. Select entities before trying to toggle their "
|
"No entities are selected. Select entities before trying to toggle their "
|
||||||
"construction state."
|
"construction state."
|
||||||
|
@ -1307,9 +1311,8 @@ msgid ""
|
||||||
" * a point and a normal (through the point, orthogonal to the normal)\n"
|
" * a point and a normal (through the point, orthogonal to the normal)\n"
|
||||||
" * a workplane (copy of the workplane)\n"
|
" * a workplane (copy of the workplane)\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Неправильное выделение для создания эскиза в рабочей плоскости. Группа может"
|
"Неправильное выделение для создания эскиза в рабочей плоскости. Группа может "
|
||||||
" быть создана, используя в качестве выделения следующие "
|
"быть создана, используя в качестве выделения следующие примитивы:\n"
|
||||||
"примитивы:\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
" * точку (через точку, ортогонально осям координат)\n"
|
" * точку (через точку, ортогонально осям координат)\n"
|
||||||
" * точку и два отрезка (через точку, параллельно отрезкам)\n"
|
" * точку и два отрезка (через точку, параллельно отрезкам)\n"
|
||||||
|
@ -1462,6 +1465,10 @@ msgstr "контур имеет самопересечения!"
|
||||||
msgid "zero-length edge!"
|
msgid "zero-length edge!"
|
||||||
msgstr "вырожденный отрезок!"
|
msgstr "вырожденный отрезок!"
|
||||||
|
|
||||||
|
#: importmesh.cpp:136
|
||||||
|
msgid "Text-formated STL files are not currently supported"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: modify.cpp:252
|
#: modify.cpp:252
|
||||||
msgid "Must be sketching in workplane to create tangent arc."
|
msgid "Must be sketching in workplane to create tangent arc."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1659,7 +1666,7 @@ msgid ""
|
||||||
"Workplane."
|
"Workplane."
|
||||||
msgstr "Невозможно создать изображение. Активируйте рабочую плоскость."
|
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"
|
msgctxt "file-type"
|
||||||
msgid "SolveSpace models"
|
msgid "SolveSpace models"
|
||||||
msgstr "проекты SolveSpace"
|
msgstr "проекты SolveSpace"
|
||||||
|
@ -1754,104 +1761,104 @@ msgctxt "file-type"
|
||||||
msgid "Comma-separated values"
|
msgid "Comma-separated values"
|
||||||
msgstr "CSV файлы (значения, разделенные запятой)"
|
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"
|
msgid "untitled"
|
||||||
msgstr "без имени"
|
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
|
#: platform/guiwin.cpp:1639
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Save File"
|
msgid "Save File"
|
||||||
msgstr "Сохранить Файл"
|
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
|
#: platform/guiwin.cpp:1645
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Open File"
|
msgid "Open File"
|
||||||
msgstr "Открыть Файл"
|
msgstr "Открыть Файл"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Cancel"
|
msgid "_Cancel"
|
||||||
msgstr "Отменить"
|
msgstr "Отменить"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Save"
|
msgid "_Save"
|
||||||
msgstr "Сохранить"
|
msgstr "Сохранить"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Open"
|
msgid "_Open"
|
||||||
msgstr "_Открыть"
|
msgstr "_Открыть"
|
||||||
|
|
||||||
#: solvespace.cpp:170
|
#: solvespace.cpp:171
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Autosave Available"
|
msgid "Autosave Available"
|
||||||
msgstr "Автосохранение Доступно"
|
msgstr "Автосохранение Доступно"
|
||||||
|
|
||||||
#: solvespace.cpp:171
|
#: solvespace.cpp:172
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "An autosave file is available for this sketch."
|
msgid "An autosave file is available for this sketch."
|
||||||
msgstr "Автоматически сохраненный файл доступен для данного проекта."
|
msgstr "Автоматически сохраненный файл доступен для данного проекта."
|
||||||
|
|
||||||
#: solvespace.cpp:172
|
#: solvespace.cpp:173
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to load the autosave file instead?"
|
msgid "Do you want to load the autosave file instead?"
|
||||||
msgstr "Хотите загрузить автосохраненный файл вместо исходного?"
|
msgstr "Хотите загрузить автосохраненный файл вместо исходного?"
|
||||||
|
|
||||||
#: solvespace.cpp:173
|
#: solvespace.cpp:174
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Load autosave"
|
msgid "&Load autosave"
|
||||||
msgstr "&Загрузить Автосохранение"
|
msgstr "&Загрузить Автосохранение"
|
||||||
|
|
||||||
#: solvespace.cpp:175
|
#: solvespace.cpp:176
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Load"
|
msgid "Do&n't Load"
|
||||||
msgstr "&Не Загружать"
|
msgstr "&Не Загружать"
|
||||||
|
|
||||||
#: solvespace.cpp:598
|
#: solvespace.cpp:599
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Modified File"
|
msgid "Modified File"
|
||||||
msgstr "Измененный Файл"
|
msgstr "Измененный Файл"
|
||||||
|
|
||||||
#: solvespace.cpp:600
|
#: solvespace.cpp:601
|
||||||
#, c-format
|
#, c-format
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||||
msgstr "Сохранить изменения, сделанные в файле “%s”?"
|
msgstr "Сохранить изменения, сделанные в файле “%s”?"
|
||||||
|
|
||||||
#: solvespace.cpp:603
|
#: solvespace.cpp:604
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the new sketch?"
|
msgid "Do you want to save the changes you made to the new sketch?"
|
||||||
msgstr "Сохранить изменения, сделанные в новом проекте?"
|
msgstr "Сохранить изменения, сделанные в новом проекте?"
|
||||||
|
|
||||||
#: solvespace.cpp:606
|
#: solvespace.cpp:607
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Your changes will be lost if you don't save them."
|
msgid "Your changes will be lost if you don't save them."
|
||||||
msgstr "Изменения будут утеряны, если их не сохранить."
|
msgstr "Изменения будут утеряны, если их не сохранить."
|
||||||
|
|
||||||
#: solvespace.cpp:607
|
#: solvespace.cpp:608
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Save"
|
msgid "&Save"
|
||||||
msgstr "&Сохранить"
|
msgstr "&Сохранить"
|
||||||
|
|
||||||
#: solvespace.cpp:609
|
#: solvespace.cpp:610
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Save"
|
msgid "Do&n't Save"
|
||||||
msgstr "&Не Сохранять"
|
msgstr "&Не Сохранять"
|
||||||
|
|
||||||
#: solvespace.cpp:630
|
#: solvespace.cpp:631
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "(new sketch)"
|
msgid "(new sketch)"
|
||||||
msgstr "(новый проект)"
|
msgstr "(новый проект)"
|
||||||
|
|
||||||
#: solvespace.cpp:637
|
#: solvespace.cpp:638
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Property Browser"
|
msgid "Property Browser"
|
||||||
msgstr "Браузер"
|
msgstr "Браузер"
|
||||||
|
|
||||||
#: solvespace.cpp:699
|
#: solvespace.cpp:700
|
||||||
msgid ""
|
msgid ""
|
||||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
"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 "
|
"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
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||||
|
@ -1870,21 +1877,21 @@ msgstr ""
|
||||||
"Неподдерживаемый тип файла '%s'. Поддерживаются файлы с расширением .dxf и ."
|
"Неподдерживаемый тип файла '%s'. Поддерживаются файлы с расширением .dxf и ."
|
||||||
"dwg."
|
"dwg."
|
||||||
|
|
||||||
#: solvespace.cpp:823
|
#: solvespace.cpp:824
|
||||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||||
msgstr "У ограничения должно быть значение и оно не должно быть справочным."
|
msgstr "У ограничения должно быть значение и оно не должно быть справочным."
|
||||||
|
|
||||||
#: solvespace.cpp:827
|
#: solvespace.cpp:828
|
||||||
msgid "Bad selection for step dimension; select a constraint."
|
msgid "Bad selection for step dimension; select a constraint."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Неправильное выделение для операции изменения значения с заданным шагом; "
|
"Неправильное выделение для операции изменения значения с заданным шагом; "
|
||||||
"необходимо выбрать ограничение со значением."
|
"необходимо выбрать ограничение со значением."
|
||||||
|
|
||||||
#: solvespace.cpp:851
|
#: solvespace.cpp:852
|
||||||
msgid "The assembly does not interfere, good."
|
msgid "The assembly does not interfere, good."
|
||||||
msgstr "Сборка не содержит пересечения деталей - это хорошо."
|
msgstr "Сборка не содержит пересечения деталей - это хорошо."
|
||||||
|
|
||||||
#: solvespace.cpp:867
|
#: solvespace.cpp:868
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The volume of the solid model is:\n"
|
"The volume of the solid model is:\n"
|
||||||
|
@ -1895,7 +1902,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
" %s"
|
" %s"
|
||||||
|
|
||||||
#: solvespace.cpp:876
|
#: solvespace.cpp:877
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1908,7 +1915,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
" %s"
|
" %s"
|
||||||
|
|
||||||
#: solvespace.cpp:881
|
#: solvespace.cpp:882
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1920,7 +1927,7 @@ msgstr ""
|
||||||
"Кривые аппроксимированы кусочно-линейными функциями.\n"
|
"Кривые аппроксимированы кусочно-линейными функциями.\n"
|
||||||
"Это приводит к ошибке в расчетах, обычно в пределах 1%."
|
"Это приводит к ошибке в расчетах, обычно в пределах 1%."
|
||||||
|
|
||||||
#: solvespace.cpp:896
|
#: solvespace.cpp:897
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The surface area of the selected faces is:\n"
|
"The surface area of the selected faces is:\n"
|
||||||
|
@ -1937,7 +1944,7 @@ msgstr ""
|
||||||
"Кривые аппроксимированы кусочно-линейными функциями.\n"
|
"Кривые аппроксимированы кусочно-линейными функциями.\n"
|
||||||
"Это приводит к ошибке в расчетах, обычно в пределах 1%%."
|
"Это приводит к ошибке в расчетах, обычно в пределах 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:905
|
#: solvespace.cpp:906
|
||||||
msgid ""
|
msgid ""
|
||||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||||
"not coplanar, or self-intersecting."
|
"not coplanar, or self-intersecting."
|
||||||
|
@ -1945,7 +1952,7 @@ msgstr ""
|
||||||
"Эта группа не содержит замкнутых областей. В ней нет замкнутых контуров, "
|
"Эта группа не содержит замкнутых областей. В ней нет замкнутых контуров, "
|
||||||
"примитивы не лежат в одной плоскости или самопересекаются."
|
"примитивы не лежат в одной плоскости или самопересекаются."
|
||||||
|
|
||||||
#: solvespace.cpp:917
|
#: solvespace.cpp:918
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The area of the region sketched in this group is:\n"
|
"The area of the region sketched in this group is:\n"
|
||||||
|
@ -1962,7 +1969,7 @@ msgstr ""
|
||||||
"Кривые аппроксимированы кусочно-линейными функциями.\n"
|
"Кривые аппроксимированы кусочно-линейными функциями.\n"
|
||||||
"Это приводит к ошибке в расчетах, обычно в пределах 1%%."
|
"Это приводит к ошибке в расчетах, обычно в пределах 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:937
|
#: solvespace.cpp:938
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The total length of the selected entities is:\n"
|
"The total length of the selected entities is:\n"
|
||||||
|
@ -1979,38 +1986,38 @@ msgstr ""
|
||||||
"Кривые аппроксимированы кусочно-линейными функциями.\n"
|
"Кривые аппроксимированы кусочно-линейными функциями.\n"
|
||||||
"Это приводит к ошибке в расчетах, обычно в пределах 1%%."
|
"Это приводит к ошибке в расчетах, обычно в пределах 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:943
|
#: solvespace.cpp:944
|
||||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Неправильное выделение для расчета периметра; необходимо выбирать только "
|
"Неправильное выделение для расчета периметра; необходимо выбирать только "
|
||||||
"отрезки, дуги и кривые в качестве исходных данных"
|
"отрезки, дуги и кривые в качестве исходных данных"
|
||||||
|
|
||||||
#: solvespace.cpp:959
|
#: solvespace.cpp:960
|
||||||
msgid "Bad selection for trace; select a single point."
|
msgid "Bad selection for trace; select a single point."
|
||||||
msgstr "Неправильное выделение для трассировки; необходимо выбрать одну точку."
|
msgstr "Неправильное выделение для трассировки; необходимо выбрать одну точку."
|
||||||
|
|
||||||
#: solvespace.cpp:986
|
#: solvespace.cpp:987
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Couldn't write to '%s'"
|
msgid "Couldn't write to '%s'"
|
||||||
msgstr "Невозможно записать в '%s'"
|
msgstr "Невозможно записать в '%s'"
|
||||||
|
|
||||||
#: solvespace.cpp:1016
|
#: solvespace.cpp:1017
|
||||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||||
msgstr "Полигональная сетка содержит самопересечения (это плохо)"
|
msgstr "Полигональная сетка содержит самопересечения (это плохо)"
|
||||||
|
|
||||||
#: solvespace.cpp:1017
|
#: solvespace.cpp:1018
|
||||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||||
msgstr "Полигональная сетка не содержит самопересечений (это хорошо)"
|
msgstr "Полигональная сетка не содержит самопересечений (это хорошо)"
|
||||||
|
|
||||||
#: solvespace.cpp:1019
|
#: solvespace.cpp:1020
|
||||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||||
msgstr "Полигональная сетка содержит \"оголенные\" ребра (это плохо)"
|
msgstr "Полигональная сетка содержит \"оголенные\" ребра (это плохо)"
|
||||||
|
|
||||||
#: solvespace.cpp:1020
|
#: solvespace.cpp:1021
|
||||||
msgid "The mesh is watertight (okay, valid)."
|
msgid "The mesh is watertight (okay, valid)."
|
||||||
msgstr "Полигональная сетка герметична (это хорошо)"
|
msgstr "Полигональная сетка герметична (это хорошо)"
|
||||||
|
|
||||||
#: solvespace.cpp:1023
|
#: solvespace.cpp:1024
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -2021,7 +2028,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"Модель содержит %d треугольников, содержащихся в %d поверхностях."
|
"Модель содержит %d треугольников, содержащихся в %d поверхностях."
|
||||||
|
|
||||||
#: solvespace.cpp:1027
|
#: solvespace.cpp:1028
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -2036,7 +2043,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"Нет проблемных ребер - это хорошо.%s"
|
"Нет проблемных ребер - это хорошо.%s"
|
||||||
|
|
||||||
#: solvespace.cpp:1030
|
#: solvespace.cpp:1031
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -2051,7 +2058,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"%d найдены проблемные ребра - это плохо.%s"
|
"%d найдены проблемные ребра - это плохо.%s"
|
||||||
|
|
||||||
#: solvespace.cpp:1043
|
#: solvespace.cpp:1044
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is SolveSpace version %s.\n"
|
"This is SolveSpace version %s.\n"
|
||||||
|
@ -2094,23 +2101,23 @@ msgstr ""
|
||||||
msgid "Style name cannot be empty"
|
msgid "Style name cannot be empty"
|
||||||
msgstr "Имя стиля не может быть пустым."
|
msgstr "Имя стиля не может быть пустым."
|
||||||
|
|
||||||
#: textscreens.cpp:785
|
#: textscreens.cpp:791
|
||||||
msgid "Can't repeat fewer than 1 time."
|
msgid "Can't repeat fewer than 1 time."
|
||||||
msgstr "Невозможно сделать повторение меньше, чем 1 раз."
|
msgstr "Невозможно сделать повторение меньше, чем 1 раз."
|
||||||
|
|
||||||
#: textscreens.cpp:789
|
#: textscreens.cpp:795
|
||||||
msgid "Can't repeat more than 999 times."
|
msgid "Can't repeat more than 999 times."
|
||||||
msgstr "Невозможно сделать повтор больше, чем 999 раз."
|
msgstr "Невозможно сделать повтор больше, чем 999 раз."
|
||||||
|
|
||||||
#: textscreens.cpp:814
|
#: textscreens.cpp:820
|
||||||
msgid "Group name cannot be empty"
|
msgid "Group name cannot be empty"
|
||||||
msgstr "Имя группы не может быть пустым."
|
msgstr "Имя группы не может быть пустым."
|
||||||
|
|
||||||
#: textscreens.cpp:866
|
#: textscreens.cpp:872
|
||||||
msgid "Opacity must be between zero and one."
|
msgid "Opacity must be between zero and one."
|
||||||
msgstr "Прозрачность должна быть числом от нуля до единицы."
|
msgstr "Прозрачность должна быть числом от нуля до единицы."
|
||||||
|
|
||||||
#: textscreens.cpp:901
|
#: textscreens.cpp:907
|
||||||
msgid "Radius cannot be zero or negative."
|
msgid "Radius cannot be zero or negative."
|
||||||
msgstr "Радиус не может быть нулевым или отрицательным."
|
msgstr "Радиус не может быть нулевым или отрицательным."
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -6,7 +6,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: SolveSpace 3.0\n"
|
"Project-Id-Version: SolveSpace 3.0\n"
|
||||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\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"
|
"PO-Revision-Date: 2021-04-14 01:42+0300\n"
|
||||||
"Last-Translator: https://github.com/Symbian9\n"
|
"Last-Translator: https://github.com/Symbian9\n"
|
||||||
"Language-Team: app4soft\n"
|
"Language-Team: app4soft\n"
|
||||||
|
@ -35,7 +35,7 @@ msgstr "Буфер обміну порожній; немає чого встав
|
||||||
msgid "Number of copies to paste must be at least one."
|
msgid "Number of copies to paste must be at least one."
|
||||||
msgstr "Кількість копій для вставки має бути не менше одної."
|
msgstr "Кількість копій для вставки має бути не менше одної."
|
||||||
|
|
||||||
#: clipboard.cpp:389 textscreens.cpp:827
|
#: clipboard.cpp:389 textscreens.cpp:833
|
||||||
msgid "Scale cannot be zero."
|
msgid "Scale cannot be zero."
|
||||||
msgstr "Масштаб не може бути нульовим."
|
msgstr "Масштаб не може бути нульовим."
|
||||||
|
|
||||||
|
@ -62,15 +62,15 @@ msgstr "Забагато об'єктів для вставки; рзділіть
|
||||||
msgid "No workplane active."
|
msgid "No workplane active."
|
||||||
msgstr "Немає активної площини."
|
msgstr "Немає активної площини."
|
||||||
|
|
||||||
#: confscreen.cpp:376
|
#: confscreen.cpp:381
|
||||||
msgid "Bad format: specify coordinates as x, y, z"
|
msgid "Bad format: specify coordinates as x, y, z"
|
||||||
msgstr "Некоректний формат: визначте координати 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"
|
msgid "Bad format: specify color as r, g, b"
|
||||||
msgstr "Некоректний формат: визначте колір як R, G, B"
|
msgstr "Некоректний формат: визначте колір як R, G, B"
|
||||||
|
|
||||||
#: confscreen.cpp:412
|
#: confscreen.cpp:417
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor will have no effect until you enable View -> Use "
|
"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
|
#, c-format
|
||||||
msgid "Specify between 0 and %d digits after the decimal."
|
msgid "Specify between 0 and %d digits after the decimal."
|
||||||
msgstr "Визначте кількість десяткових знаків від 0 до %d."
|
msgstr "Визначте кількість десяткових знаків від 0 до %d."
|
||||||
|
|
||||||
#: confscreen.cpp:452
|
#: confscreen.cpp:457
|
||||||
msgid "Export scale must not be zero!"
|
msgid "Export scale must not be zero!"
|
||||||
msgstr "Масштаб експорту не може бути нульовим!"
|
msgstr "Масштаб експорту не може бути нульовим!"
|
||||||
|
|
||||||
#: confscreen.cpp:464
|
#: confscreen.cpp:469
|
||||||
msgid "Cutter radius offset must not be negative!"
|
msgid "Cutter radius offset must not be negative!"
|
||||||
msgstr "Радіус відступу різання не може бути від'ємним!"
|
msgstr "Радіус відступу різання не може бути від'ємним!"
|
||||||
|
|
||||||
#: confscreen.cpp:518
|
#: confscreen.cpp:528
|
||||||
msgid "Bad value: autosave interval should be positive"
|
msgid "Bad value: autosave interval should be positive"
|
||||||
msgstr "Некоректне значення: інтервал автозбереження має бути додатнім"
|
msgstr "Некоректне значення: інтервал автозбереження має бути додатнім"
|
||||||
|
|
||||||
#: confscreen.cpp:521
|
#: confscreen.cpp:531
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Bad format: specify interval in integral minutes"
|
msgid "Bad format: specify interval in integral minutes"
|
||||||
msgstr "Некоректний формат: визначте цілим числом інтервал у хвилинах"
|
msgstr "Некоректний формат: визначте цілим числом інтервал у хвилинах"
|
||||||
|
@ -579,7 +579,7 @@ msgctxt "button"
|
||||||
msgid "&No"
|
msgid "&No"
|
||||||
msgstr "&Ні"
|
msgstr "&Ні"
|
||||||
|
|
||||||
#: file.cpp:877 solvespace.cpp:610
|
#: file.cpp:877 solvespace.cpp:611
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Cancel"
|
msgid "&Cancel"
|
||||||
msgstr "&Відмінити"
|
msgstr "&Відмінити"
|
||||||
|
@ -1032,24 +1032,28 @@ msgstr "&Мова"
|
||||||
msgid "&Website / Manual"
|
msgid "&Website / Manual"
|
||||||
msgstr "&Вебсайт / Посібник"
|
msgstr "&Вебсайт / Посібник"
|
||||||
|
|
||||||
#: graphicswin.cpp:187
|
#: graphicswin.cpp:186
|
||||||
|
msgid "&Go to GitHub commit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: graphicswin.cpp:188
|
||||||
msgid "&About"
|
msgid "&About"
|
||||||
msgstr "&Про програму"
|
msgstr "&Про програму"
|
||||||
|
|
||||||
#: graphicswin.cpp:361
|
#: graphicswin.cpp:362
|
||||||
msgid "(no recent files)"
|
msgid "(no recent files)"
|
||||||
msgstr "(нємає нещодавніх файлів)"
|
msgstr "(нємає нещодавніх файлів)"
|
||||||
|
|
||||||
#: graphicswin.cpp:369
|
#: graphicswin.cpp:370
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "File '%s' does not exist."
|
msgid "File '%s' does not exist."
|
||||||
msgstr "Файл '%s' відсутній."
|
msgstr "Файл '%s' відсутній."
|
||||||
|
|
||||||
#: graphicswin.cpp:736
|
#: graphicswin.cpp:737
|
||||||
msgid "No workplane is active, so the grid will not appear."
|
msgid "No workplane is active, so the grid will not appear."
|
||||||
msgstr "Відсутня активна площина - сітка не відображатиметься."
|
msgstr "Відсутня активна площина - сітка не відображатиметься."
|
||||||
|
|
||||||
#: graphicswin.cpp:751
|
#: graphicswin.cpp:752
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||||
"projection.\n"
|
"projection.\n"
|
||||||
|
@ -1058,91 +1062,91 @@ msgid ""
|
||||||
"configuration screen. A value around 0.3 is typical."
|
"configuration screen. A value around 0.3 is typical."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:836
|
#: graphicswin.cpp:837
|
||||||
msgid ""
|
msgid ""
|
||||||
"Select a point; this point will become the center of the view on screen."
|
"Select a point; this point will become the center of the view on screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1136
|
#: graphicswin.cpp:1137
|
||||||
msgid "No additional entities share endpoints with the selected entities."
|
msgid "No additional entities share endpoints with the selected entities."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1154
|
#: graphicswin.cpp:1155
|
||||||
msgid ""
|
msgid ""
|
||||||
"To use this command, select a point or other entity from an linked part, or "
|
"To use this command, select a point or other entity from an linked part, or "
|
||||||
"make a link group the active group."
|
"make a link group the active group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1177
|
#: graphicswin.cpp:1178
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||||
"to define the plane for the snap grid."
|
"to define the plane for the snap grid."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1184
|
#: graphicswin.cpp:1185
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||||
"with a label. To snap a line, select its endpoints."
|
"with a label. To snap a line, select its endpoints."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1269
|
#: graphicswin.cpp:1270
|
||||||
msgid "No workplane selected. Activating default workplane for this group."
|
msgid "No workplane selected. Activating default workplane for this group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1272
|
#: graphicswin.cpp:1273
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is selected, and the active group does not have a default "
|
"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. Try selecting a workplane, or activating a sketch-in-new-"
|
||||||
"workplane group."
|
"workplane group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1293
|
#: graphicswin.cpp:1294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||||
"nothing to set up arc parameters."
|
"nothing to set up arc parameters."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1304
|
#: graphicswin.cpp:1305
|
||||||
msgid "click point on arc (draws anti-clockwise)"
|
msgid "click point on arc (draws anti-clockwise)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1305
|
#: graphicswin.cpp:1306
|
||||||
msgid "click to place datum point"
|
msgid "click to place datum point"
|
||||||
msgstr "клікніть для встановлення вихідної точки"
|
msgstr "клікніть для встановлення вихідної точки"
|
||||||
|
|
||||||
#: graphicswin.cpp:1306
|
#: graphicswin.cpp:1307
|
||||||
msgid "click first point of line segment"
|
msgid "click first point of line segment"
|
||||||
msgstr "клікніть першу точку прямої лінії"
|
msgstr "клікніть першу точку прямої лінії"
|
||||||
|
|
||||||
#: graphicswin.cpp:1308
|
#: graphicswin.cpp:1309
|
||||||
msgid "click first point of construction line segment"
|
msgid "click first point of construction line segment"
|
||||||
msgstr "клікніть першу точку конструктивної прямої лінії"
|
msgstr "клікніть першу точку конструктивної прямої лінії"
|
||||||
|
|
||||||
#: graphicswin.cpp:1309
|
#: graphicswin.cpp:1310
|
||||||
msgid "click first point of cubic segment"
|
msgid "click first point of cubic segment"
|
||||||
msgstr "клікніть першу точку кривої"
|
msgstr "клікніть першу точку кривої"
|
||||||
|
|
||||||
#: graphicswin.cpp:1310
|
#: graphicswin.cpp:1311
|
||||||
msgid "click center of circle"
|
msgid "click center of circle"
|
||||||
msgstr "клікніть в місце де буде центр коментаря"
|
msgstr "клікніть в місце де буде центр коментаря"
|
||||||
|
|
||||||
#: graphicswin.cpp:1311
|
#: graphicswin.cpp:1312
|
||||||
msgid "click origin of workplane"
|
msgid "click origin of workplane"
|
||||||
msgstr "клікніть в центр відліку площини"
|
msgstr "клікніть в центр відліку площини"
|
||||||
|
|
||||||
#: graphicswin.cpp:1312
|
#: graphicswin.cpp:1313
|
||||||
msgid "click one corner of rectangle"
|
msgid "click one corner of rectangle"
|
||||||
msgstr "клікніть для встановлення першого кута прямокутника"
|
msgstr "клікніть для встановлення першого кута прямокутника"
|
||||||
|
|
||||||
#: graphicswin.cpp:1313
|
#: graphicswin.cpp:1314
|
||||||
msgid "click top left of text"
|
msgid "click top left of text"
|
||||||
msgstr "клікніть для встановлення верхньої лівої межі тексту"
|
msgstr "клікніть для встановлення верхньої лівої межі тексту"
|
||||||
|
|
||||||
#: graphicswin.cpp:1319
|
#: graphicswin.cpp:1320
|
||||||
msgid "click top left of image"
|
msgid "click top left of image"
|
||||||
msgstr "клікніть для встановлення верхньої лівої межі зображення"
|
msgstr "клікніть для встановлення верхньої лівої межі зображення"
|
||||||
|
|
||||||
#: graphicswin.cpp:1345
|
#: graphicswin.cpp:1346
|
||||||
msgid ""
|
msgid ""
|
||||||
"No entities are selected. Select entities before trying to toggle their "
|
"No entities are selected. Select entities before trying to toggle their "
|
||||||
"construction state."
|
"construction state."
|
||||||
|
@ -1271,6 +1275,10 @@ msgstr "контур самоперетинається!"
|
||||||
msgid "zero-length edge!"
|
msgid "zero-length edge!"
|
||||||
msgstr "ребро нульової довжини!"
|
msgstr "ребро нульової довжини!"
|
||||||
|
|
||||||
|
#: importmesh.cpp:136
|
||||||
|
msgid "Text-formated STL files are not currently supported"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: modify.cpp:252
|
#: modify.cpp:252
|
||||||
msgid "Must be sketching in workplane to create tangent arc."
|
msgid "Must be sketching in workplane to create tangent arc."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1452,7 +1460,7 @@ msgid ""
|
||||||
"Workplane."
|
"Workplane."
|
||||||
msgstr ""
|
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"
|
msgctxt "file-type"
|
||||||
msgid "SolveSpace models"
|
msgid "SolveSpace models"
|
||||||
msgstr "SolveSpace модель"
|
msgstr "SolveSpace модель"
|
||||||
|
@ -1547,130 +1555,130 @@ msgctxt "file-type"
|
||||||
msgid "Comma-separated values"
|
msgid "Comma-separated values"
|
||||||
msgstr "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"
|
msgid "untitled"
|
||||||
msgstr "без імені"
|
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
|
#: platform/guiwin.cpp:1639
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Save File"
|
msgid "Save File"
|
||||||
msgstr "Зберегти Файл"
|
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
|
#: platform/guiwin.cpp:1645
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Open File"
|
msgid "Open File"
|
||||||
msgstr "Відкрити Файл"
|
msgstr "Відкрити Файл"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Cancel"
|
msgid "_Cancel"
|
||||||
msgstr "_Скасувати"
|
msgstr "_Скасувати"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Save"
|
msgid "_Save"
|
||||||
msgstr "_Зберегти"
|
msgstr "_Зберегти"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Open"
|
msgid "_Open"
|
||||||
msgstr "_Відкрити"
|
msgstr "_Відкрити"
|
||||||
|
|
||||||
#: solvespace.cpp:170
|
#: solvespace.cpp:171
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Autosave Available"
|
msgid "Autosave Available"
|
||||||
msgstr "Наявні автозбереження"
|
msgstr "Наявні автозбереження"
|
||||||
|
|
||||||
#: solvespace.cpp:171
|
#: solvespace.cpp:172
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "An autosave file is available for this sketch."
|
msgid "An autosave file is available for this sketch."
|
||||||
msgstr "Наявні автозбереження для цього креслення."
|
msgstr "Наявні автозбереження для цього креслення."
|
||||||
|
|
||||||
#: solvespace.cpp:172
|
#: solvespace.cpp:173
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to load the autosave file instead?"
|
msgid "Do you want to load the autosave file instead?"
|
||||||
msgstr "Завантажити файл автозбереження?"
|
msgstr "Завантажити файл автозбереження?"
|
||||||
|
|
||||||
#: solvespace.cpp:173
|
#: solvespace.cpp:174
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Load autosave"
|
msgid "&Load autosave"
|
||||||
msgstr "&Завантажити автозбереження"
|
msgstr "&Завантажити автозбереження"
|
||||||
|
|
||||||
#: solvespace.cpp:175
|
#: solvespace.cpp:176
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Load"
|
msgid "Do&n't Load"
|
||||||
msgstr "&Не Завантажувати"
|
msgstr "&Не Завантажувати"
|
||||||
|
|
||||||
#: solvespace.cpp:598
|
#: solvespace.cpp:599
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Modified File"
|
msgid "Modified File"
|
||||||
msgstr "Файл Змінено"
|
msgstr "Файл Змінено"
|
||||||
|
|
||||||
#: solvespace.cpp:600
|
#: solvespace.cpp:601
|
||||||
#, c-format
|
#, c-format
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||||
msgstr "Чи хочете ви зберегти зміни зроблені вами у ескізі “%s”?"
|
msgstr "Чи хочете ви зберегти зміни зроблені вами у ескізі “%s”?"
|
||||||
|
|
||||||
#: solvespace.cpp:603
|
#: solvespace.cpp:604
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the new sketch?"
|
msgid "Do you want to save the changes you made to the new sketch?"
|
||||||
msgstr "Чи хочете ви зберегти зміни зроблені вами у новому ескізі?"
|
msgstr "Чи хочете ви зберегти зміни зроблені вами у новому ескізі?"
|
||||||
|
|
||||||
#: solvespace.cpp:606
|
#: solvespace.cpp:607
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Your changes will be lost if you don't save them."
|
msgid "Your changes will be lost if you don't save them."
|
||||||
msgstr "Ваші зміни буде втрачено якщо ви не збережете їх."
|
msgstr "Ваші зміни буде втрачено якщо ви не збережете їх."
|
||||||
|
|
||||||
#: solvespace.cpp:607
|
#: solvespace.cpp:608
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Save"
|
msgid "&Save"
|
||||||
msgstr "&Зберегти"
|
msgstr "&Зберегти"
|
||||||
|
|
||||||
#: solvespace.cpp:609
|
#: solvespace.cpp:610
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Save"
|
msgid "Do&n't Save"
|
||||||
msgstr "&Не Зберігати"
|
msgstr "&Не Зберігати"
|
||||||
|
|
||||||
#: solvespace.cpp:630
|
#: solvespace.cpp:631
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "(new sketch)"
|
msgid "(new sketch)"
|
||||||
msgstr "(нове креслення)"
|
msgstr "(нове креслення)"
|
||||||
|
|
||||||
#: solvespace.cpp:637
|
#: solvespace.cpp:638
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Property Browser"
|
msgid "Property Browser"
|
||||||
msgstr "Браузер Властивостей"
|
msgstr "Браузер Властивостей"
|
||||||
|
|
||||||
#: solvespace.cpp:699
|
#: solvespace.cpp:700
|
||||||
msgid ""
|
msgid ""
|
||||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
"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 "
|
"is probably not what you want; hide them by clicking the link at the top of "
|
||||||
"the text window."
|
"the text window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:771
|
#: solvespace.cpp:772
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||||
"dwg."
|
"dwg."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:823
|
#: solvespace.cpp:824
|
||||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||||
msgstr "Обмежувач має містити мітку і бути не відносним розміром."
|
msgstr "Обмежувач має містити мітку і бути не відносним розміром."
|
||||||
|
|
||||||
#: solvespace.cpp:827
|
#: solvespace.cpp:828
|
||||||
msgid "Bad selection for step dimension; select a constraint."
|
msgid "Bad selection for step dimension; select a constraint."
|
||||||
msgstr "Поганий вибір для крокової зміни розміру; оберіть обмежувач."
|
msgstr "Поганий вибір для крокової зміни розміру; оберіть обмежувач."
|
||||||
|
|
||||||
#: solvespace.cpp:851
|
#: solvespace.cpp:852
|
||||||
msgid "The assembly does not interfere, good."
|
msgid "The assembly does not interfere, good."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:867
|
#: solvespace.cpp:868
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The volume of the solid model is:\n"
|
"The volume of the solid model is:\n"
|
||||||
|
@ -1681,7 +1689,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
" %s"
|
" %s"
|
||||||
|
|
||||||
#: solvespace.cpp:876
|
#: solvespace.cpp:877
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1694,7 +1702,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
" %s"
|
" %s"
|
||||||
|
|
||||||
#: solvespace.cpp:881
|
#: solvespace.cpp:882
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1702,7 +1710,7 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%."
|
"This introduces error, typically of around 1%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:896
|
#: solvespace.cpp:897
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The surface area of the selected faces is:\n"
|
"The surface area of the selected faces is:\n"
|
||||||
|
@ -1713,7 +1721,7 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:905
|
#: solvespace.cpp:906
|
||||||
msgid ""
|
msgid ""
|
||||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||||
"not coplanar, or self-intersecting."
|
"not coplanar, or self-intersecting."
|
||||||
|
@ -1721,7 +1729,7 @@ msgstr ""
|
||||||
"Ця група не місить коректно сформованого замкненої 2D площини. Вона "
|
"Ця група не місить коректно сформованого замкненої 2D площини. Вона "
|
||||||
"відкрита, не компланарна, або ж самоперетинається."
|
"відкрита, не компланарна, або ж самоперетинається."
|
||||||
|
|
||||||
#: solvespace.cpp:917
|
#: solvespace.cpp:918
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The area of the region sketched in this group is:\n"
|
"The area of the region sketched in this group is:\n"
|
||||||
|
@ -1738,7 +1746,7 @@ msgstr ""
|
||||||
"Криві наближено до ламаних ліній.\n"
|
"Криві наближено до ламаних ліній.\n"
|
||||||
"Це вносить похибку, зазвичай близько 1%%."
|
"Це вносить похибку, зазвичай близько 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:937
|
#: solvespace.cpp:938
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The total length of the selected entities is:\n"
|
"The total length of the selected entities is:\n"
|
||||||
|
@ -1755,36 +1763,36 @@ msgstr ""
|
||||||
"Криві наближено до ламаних ліній.\n"
|
"Криві наближено до ламаних ліній.\n"
|
||||||
"Це вносить похибку, зазвичай близько 1%%."
|
"Це вносить похибку, зазвичай близько 1%%."
|
||||||
|
|
||||||
#: solvespace.cpp:943
|
#: solvespace.cpp:944
|
||||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||||
msgstr "Поганий вибір для периметру; оберіть відрізки, дуги та криві."
|
msgstr "Поганий вибір для периметру; оберіть відрізки, дуги та криві."
|
||||||
|
|
||||||
#: solvespace.cpp:959
|
#: solvespace.cpp:960
|
||||||
msgid "Bad selection for trace; select a single point."
|
msgid "Bad selection for trace; select a single point."
|
||||||
msgstr "Поганий вибір для вістежування шляху; оберіть одну точку."
|
msgstr "Поганий вибір для вістежування шляху; оберіть одну точку."
|
||||||
|
|
||||||
#: solvespace.cpp:986
|
#: solvespace.cpp:987
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Couldn't write to '%s'"
|
msgid "Couldn't write to '%s'"
|
||||||
msgstr "Неможливо записати у '%s'"
|
msgstr "Неможливо записати у '%s'"
|
||||||
|
|
||||||
#: solvespace.cpp:1016
|
#: solvespace.cpp:1017
|
||||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||||
msgstr "Меш самоперетинається (НЕ добре, недійсний)."
|
msgstr "Меш самоперетинається (НЕ добре, недійсний)."
|
||||||
|
|
||||||
#: solvespace.cpp:1017
|
#: solvespace.cpp:1018
|
||||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||||
msgstr "Меш самоперетинається (добре, дійсний)."
|
msgstr "Меш самоперетинається (добре, дійсний)."
|
||||||
|
|
||||||
#: solvespace.cpp:1019
|
#: solvespace.cpp:1020
|
||||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||||
msgstr "Меш містить оголені ребра (НЕ добре, недійсний)."
|
msgstr "Меш містить оголені ребра (НЕ добре, недійсний)."
|
||||||
|
|
||||||
#: solvespace.cpp:1020
|
#: solvespace.cpp:1021
|
||||||
msgid "The mesh is watertight (okay, valid)."
|
msgid "The mesh is watertight (okay, valid)."
|
||||||
msgstr "Меш водонепроникний (добре, дійсний)."
|
msgstr "Меш водонепроникний (добре, дійсний)."
|
||||||
|
|
||||||
#: solvespace.cpp:1023
|
#: solvespace.cpp:1024
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1792,7 +1800,7 @@ msgid ""
|
||||||
"The model contains %d triangles, from %d surfaces."
|
"The model contains %d triangles, from %d surfaces."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1027
|
#: solvespace.cpp:1028
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -1807,7 +1815,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"Відсутні проблемні ребра, добре.%s"
|
"Відсутні проблемні ребра, добре.%s"
|
||||||
|
|
||||||
#: solvespace.cpp:1030
|
#: solvespace.cpp:1031
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -1822,7 +1830,7 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"%d проблемних ребер, погано.%s"
|
"%d проблемних ребер, погано.%s"
|
||||||
|
|
||||||
#: solvespace.cpp:1043
|
#: solvespace.cpp:1044
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is SolveSpace version %s.\n"
|
"This is SolveSpace version %s.\n"
|
||||||
|
@ -1863,23 +1871,23 @@ msgstr ""
|
||||||
msgid "Style name cannot be empty"
|
msgid "Style name cannot be empty"
|
||||||
msgstr "Стиль не може містити порожнє ім'я"
|
msgstr "Стиль не може містити порожнє ім'я"
|
||||||
|
|
||||||
#: textscreens.cpp:785
|
#: textscreens.cpp:791
|
||||||
msgid "Can't repeat fewer than 1 time."
|
msgid "Can't repeat fewer than 1 time."
|
||||||
msgstr "Не можливо повторити менше 1 разу."
|
msgstr "Не можливо повторити менше 1 разу."
|
||||||
|
|
||||||
#: textscreens.cpp:789
|
#: textscreens.cpp:795
|
||||||
msgid "Can't repeat more than 999 times."
|
msgid "Can't repeat more than 999 times."
|
||||||
msgstr "Не можливо повторити понад 999 разів."
|
msgstr "Не можливо повторити понад 999 разів."
|
||||||
|
|
||||||
#: textscreens.cpp:814
|
#: textscreens.cpp:820
|
||||||
msgid "Group name cannot be empty"
|
msgid "Group name cannot be empty"
|
||||||
msgstr "Група не може містити порожнє ім'я"
|
msgstr "Група не може містити порожнє ім'я"
|
||||||
|
|
||||||
#: textscreens.cpp:866
|
#: textscreens.cpp:872
|
||||||
msgid "Opacity must be between zero and one."
|
msgid "Opacity must be between zero and one."
|
||||||
msgstr "Непрозорість має бути між 0 та 1."
|
msgstr "Непрозорість має бути між 0 та 1."
|
||||||
|
|
||||||
#: textscreens.cpp:901
|
#: textscreens.cpp:907
|
||||||
msgid "Radius cannot be zero or negative."
|
msgid "Radius cannot be zero or negative."
|
||||||
msgstr "Радіус не може бути нульовим чи від'ємним."
|
msgstr "Радіус не може бути нульовим чи від'ємним."
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
# Copyright (C) 2020 the PACKAGE authors
|
# Copyright (C) 2020 the PACKAGE authors
|
||||||
# This file is distributed under the same license as the SolveSpace package.
|
# This file is distributed under the same license as the SolveSpace package.
|
||||||
# <lomatus@163.com>, 2020.
|
# <lomatus@163.com>, 2020.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: SolveSpace 3.0\n"
|
"Project-Id-Version: SolveSpace 3.0\n"
|
||||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\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"
|
"PO-Revision-Date: 2021-04-03 13:10-0400\n"
|
||||||
"Last-Translator: lomatus@163.com\n"
|
"Last-Translator: lomatus@163.com\n"
|
||||||
"Language-Team: none\n"
|
"Language-Team: none\n"
|
||||||
|
@ -35,7 +35,7 @@ msgstr "剪贴板为空;没有要粘贴的内容。"
|
||||||
msgid "Number of copies to paste must be at least one."
|
msgid "Number of copies to paste must be at least one."
|
||||||
msgstr "要粘贴的副本数必须至少为 1 个。"
|
msgstr "要粘贴的副本数必须至少为 1 个。"
|
||||||
|
|
||||||
#: clipboard.cpp:389 textscreens.cpp:827
|
#: clipboard.cpp:389 textscreens.cpp:833
|
||||||
msgid "Scale cannot be zero."
|
msgid "Scale cannot be zero."
|
||||||
msgstr "缩放不能为零。"
|
msgstr "缩放不能为零。"
|
||||||
|
|
||||||
|
@ -61,38 +61,38 @@ msgstr "要粘贴的项目太多; 请把他们拆分。"
|
||||||
msgid "No workplane active."
|
msgid "No workplane active."
|
||||||
msgstr "没有工作平面处于活动状态。"
|
msgstr "没有工作平面处于活动状态。"
|
||||||
|
|
||||||
#: confscreen.cpp:376
|
#: confscreen.cpp:381
|
||||||
msgid "Bad format: specify coordinates as x, y, z"
|
msgid "Bad format: specify coordinates as x, y, z"
|
||||||
msgstr "格式错误:将坐标指定为 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"
|
msgid "Bad format: specify color as r, g, b"
|
||||||
msgstr "格式错误:将颜色指定为 r、g、b"
|
msgstr "格式错误:将颜色指定为 r、g、b"
|
||||||
|
|
||||||
#: confscreen.cpp:412
|
#: confscreen.cpp:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor will have no effect until you enable View -> Use "
|
"The perspective factor will have no effect until you enable View -> Use "
|
||||||
"Perspective Projection."
|
"Perspective Projection."
|
||||||
msgstr "在启用\"视图 -= 使用透视投影\"之前,透视因子将不起作用。"
|
msgstr "在启用\"视图 -= 使用透视投影\"之前,透视因子将不起作用。"
|
||||||
|
|
||||||
#: confscreen.cpp:430 confscreen.cpp:440
|
#: confscreen.cpp:435 confscreen.cpp:445
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Specify between 0 and %d digits after the decimal."
|
msgid "Specify between 0 and %d digits after the decimal."
|
||||||
msgstr "在十进制之后指定 0 和 %d 数字之间。"
|
msgstr "在十进制之后指定 0 和 %d 数字之间。"
|
||||||
|
|
||||||
#: confscreen.cpp:452
|
#: confscreen.cpp:457
|
||||||
msgid "Export scale must not be zero!"
|
msgid "Export scale must not be zero!"
|
||||||
msgstr "输出比例不能为零!"
|
msgstr "输出比例不能为零!"
|
||||||
|
|
||||||
#: confscreen.cpp:464
|
#: confscreen.cpp:469
|
||||||
msgid "Cutter radius offset must not be negative!"
|
msgid "Cutter radius offset must not be negative!"
|
||||||
msgstr "刀具半径偏移不能为负数!"
|
msgstr "刀具半径偏移不能为负数!"
|
||||||
|
|
||||||
#: confscreen.cpp:518
|
#: confscreen.cpp:528
|
||||||
msgid "Bad value: autosave interval should be positive"
|
msgid "Bad value: autosave interval should be positive"
|
||||||
msgstr "坏值:自动保存间隔应为正"
|
msgstr "坏值:自动保存间隔应为正"
|
||||||
|
|
||||||
#: confscreen.cpp:521
|
#: confscreen.cpp:531
|
||||||
msgid "Bad format: specify interval in integral minutes"
|
msgid "Bad format: specify interval in integral minutes"
|
||||||
msgstr "格式错误:以整数分钟为单位指定间隔"
|
msgstr "格式错误:以整数分钟为单位指定间隔"
|
||||||
|
|
||||||
|
@ -632,7 +632,7 @@ msgctxt "button"
|
||||||
msgid "&No"
|
msgid "&No"
|
||||||
msgstr "否(&N)"
|
msgstr "否(&N)"
|
||||||
|
|
||||||
#: file.cpp:877 solvespace.cpp:610
|
#: file.cpp:877 solvespace.cpp:611
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Cancel"
|
msgid "&Cancel"
|
||||||
msgstr "取消(&C)"
|
msgstr "取消(&C)"
|
||||||
|
@ -1085,24 +1085,28 @@ msgstr "语言(&L)"
|
||||||
msgid "&Website / Manual"
|
msgid "&Website / Manual"
|
||||||
msgstr "网页/手册(&W)"
|
msgstr "网页/手册(&W)"
|
||||||
|
|
||||||
#: graphicswin.cpp:187
|
#: graphicswin.cpp:186
|
||||||
|
msgid "&Go to GitHub commit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: graphicswin.cpp:188
|
||||||
msgid "&About"
|
msgid "&About"
|
||||||
msgstr "关于(&A)"
|
msgstr "关于(&A)"
|
||||||
|
|
||||||
#: graphicswin.cpp:361
|
#: graphicswin.cpp:362
|
||||||
msgid "(no recent files)"
|
msgid "(no recent files)"
|
||||||
msgstr "(无文件)"
|
msgstr "(无文件)"
|
||||||
|
|
||||||
#: graphicswin.cpp:369
|
#: graphicswin.cpp:370
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "File '%s' does not exist."
|
msgid "File '%s' does not exist."
|
||||||
msgstr "文件不存在: \"%s\"。"
|
msgstr "文件不存在: \"%s\"。"
|
||||||
|
|
||||||
#: graphicswin.cpp:736
|
#: graphicswin.cpp:737
|
||||||
msgid "No workplane is active, so the grid will not appear."
|
msgid "No workplane is active, so the grid will not appear."
|
||||||
msgstr "没有激活的工作面,因此无法显示轴网。"
|
msgstr "没有激活的工作面,因此无法显示轴网。"
|
||||||
|
|
||||||
#: graphicswin.cpp:751
|
#: graphicswin.cpp:752
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor is set to zero, so the view will always be a parallel "
|
"The perspective factor is set to zero, so the view will always be a parallel "
|
||||||
"projection.\n"
|
"projection.\n"
|
||||||
|
@ -1111,91 +1115,91 @@ msgid ""
|
||||||
"configuration screen. A value around 0.3 is typical."
|
"configuration screen. A value around 0.3 is typical."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:836
|
#: graphicswin.cpp:837
|
||||||
msgid ""
|
msgid ""
|
||||||
"Select a point; this point will become the center of the view on screen."
|
"Select a point; this point will become the center of the view on screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1136
|
#: graphicswin.cpp:1137
|
||||||
msgid "No additional entities share endpoints with the selected entities."
|
msgid "No additional entities share endpoints with the selected entities."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1154
|
#: graphicswin.cpp:1155
|
||||||
msgid ""
|
msgid ""
|
||||||
"To use this command, select a point or other entity from an linked part, or "
|
"To use this command, select a point or other entity from an linked part, or "
|
||||||
"make a link group the active group."
|
"make a link group the active group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1177
|
#: graphicswin.cpp:1178
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
|
||||||
"to define the plane for the snap grid."
|
"to define the plane for the snap grid."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1184
|
#: graphicswin.cpp:1185
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't snap these items to grid; select points, text comments, or constraints "
|
"Can't snap these items to grid; select points, text comments, or constraints "
|
||||||
"with a label. To snap a line, select its endpoints."
|
"with a label. To snap a line, select its endpoints."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1269
|
#: graphicswin.cpp:1270
|
||||||
msgid "No workplane selected. Activating default workplane for this group."
|
msgid "No workplane selected. Activating default workplane for this group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1272
|
#: graphicswin.cpp:1273
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is selected, and the active group does not have a default "
|
"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. Try selecting a workplane, or activating a sketch-in-new-"
|
||||||
"workplane group."
|
"workplane group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1293
|
#: graphicswin.cpp:1294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Bad selection for tangent arc at point. Select a single point, or select "
|
"Bad selection for tangent arc at point. Select a single point, or select "
|
||||||
"nothing to set up arc parameters."
|
"nothing to set up arc parameters."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1304
|
#: graphicswin.cpp:1305
|
||||||
msgid "click point on arc (draws anti-clockwise)"
|
msgid "click point on arc (draws anti-clockwise)"
|
||||||
msgstr "点击弧线的点(逆时针方向绘制)"
|
msgstr "点击弧线的点(逆时针方向绘制)"
|
||||||
|
|
||||||
#: graphicswin.cpp:1305
|
#: graphicswin.cpp:1306
|
||||||
msgid "click to place datum point"
|
msgid "click to place datum point"
|
||||||
msgstr "点击放置基准点"
|
msgstr "点击放置基准点"
|
||||||
|
|
||||||
#: graphicswin.cpp:1306
|
#: graphicswin.cpp:1307
|
||||||
msgid "click first point of line segment"
|
msgid "click first point of line segment"
|
||||||
msgstr "点击线条的起点"
|
msgstr "点击线条的起点"
|
||||||
|
|
||||||
#: graphicswin.cpp:1308
|
#: graphicswin.cpp:1309
|
||||||
msgid "click first point of construction line segment"
|
msgid "click first point of construction line segment"
|
||||||
msgstr "点击构造线的起点"
|
msgstr "点击构造线的起点"
|
||||||
|
|
||||||
#: graphicswin.cpp:1309
|
#: graphicswin.cpp:1310
|
||||||
msgid "click first point of cubic segment"
|
msgid "click first point of cubic segment"
|
||||||
msgstr "点击立方体的起点"
|
msgstr "点击立方体的起点"
|
||||||
|
|
||||||
#: graphicswin.cpp:1310
|
#: graphicswin.cpp:1311
|
||||||
msgid "click center of circle"
|
msgid "click center of circle"
|
||||||
msgstr "点击圆弧的中心"
|
msgstr "点击圆弧的中心"
|
||||||
|
|
||||||
#: graphicswin.cpp:1311
|
#: graphicswin.cpp:1312
|
||||||
msgid "click origin of workplane"
|
msgid "click origin of workplane"
|
||||||
msgstr "点击工作面的原点"
|
msgstr "点击工作面的原点"
|
||||||
|
|
||||||
#: graphicswin.cpp:1312
|
#: graphicswin.cpp:1313
|
||||||
msgid "click one corner of rectangle"
|
msgid "click one corner of rectangle"
|
||||||
msgstr "点击一个矩形倒角"
|
msgstr "点击一个矩形倒角"
|
||||||
|
|
||||||
#: graphicswin.cpp:1313
|
#: graphicswin.cpp:1314
|
||||||
msgid "click top left of text"
|
msgid "click top left of text"
|
||||||
msgstr "点击文字左上角"
|
msgstr "点击文字左上角"
|
||||||
|
|
||||||
#: graphicswin.cpp:1319
|
#: graphicswin.cpp:1320
|
||||||
msgid "click top left of image"
|
msgid "click top left of image"
|
||||||
msgstr "点击图片左上角"
|
msgstr "点击图片左上角"
|
||||||
|
|
||||||
#: graphicswin.cpp:1345
|
#: graphicswin.cpp:1346
|
||||||
msgid ""
|
msgid ""
|
||||||
"No entities are selected. Select entities before trying to toggle their "
|
"No entities are selected. Select entities before trying to toggle their "
|
||||||
"construction state."
|
"construction state."
|
||||||
|
@ -1326,6 +1330,10 @@ msgstr "轮廓自相交!"
|
||||||
msgid "zero-length edge!"
|
msgid "zero-length edge!"
|
||||||
msgstr "边缘长度为零!"
|
msgstr "边缘长度为零!"
|
||||||
|
|
||||||
|
#: importmesh.cpp:136
|
||||||
|
msgid "Text-formated STL files are not currently supported"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: modify.cpp:252
|
#: modify.cpp:252
|
||||||
msgid "Must be sketching in workplane to create tangent arc."
|
msgid "Must be sketching in workplane to create tangent arc."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1505,7 +1513,7 @@ msgid ""
|
||||||
"Workplane."
|
"Workplane."
|
||||||
msgstr "无法在三维空间内绘制图片,可使用 草图->在工作面 激活工作面。"
|
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"
|
msgctxt "file-type"
|
||||||
msgid "SolveSpace models"
|
msgid "SolveSpace models"
|
||||||
msgstr "SolveSpace模型"
|
msgstr "SolveSpace模型"
|
||||||
|
@ -1600,130 +1608,130 @@ msgctxt "file-type"
|
||||||
msgid "Comma-separated values"
|
msgid "Comma-separated values"
|
||||||
msgstr "逗号分隔数据"
|
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"
|
msgid "untitled"
|
||||||
msgstr "未命名"
|
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
|
#: platform/guiwin.cpp:1639
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Save File"
|
msgid "Save File"
|
||||||
msgstr "保存文件"
|
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
|
#: platform/guiwin.cpp:1645
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Open File"
|
msgid "Open File"
|
||||||
msgstr "打开文件"
|
msgstr "打开文件"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Cancel"
|
msgid "_Cancel"
|
||||||
msgstr "取消_C"
|
msgstr "取消_C"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Save"
|
msgid "_Save"
|
||||||
msgstr "保存_S"
|
msgstr "保存_S"
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Open"
|
msgid "_Open"
|
||||||
msgstr "打开_O"
|
msgstr "打开_O"
|
||||||
|
|
||||||
#: solvespace.cpp:170
|
#: solvespace.cpp:171
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Autosave Available"
|
msgid "Autosave Available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:171
|
#: solvespace.cpp:172
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "An autosave file is available for this sketch."
|
msgid "An autosave file is available for this sketch."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:172
|
#: solvespace.cpp:173
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to load the autosave file instead?"
|
msgid "Do you want to load the autosave file instead?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:173
|
#: solvespace.cpp:174
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Load autosave"
|
msgid "&Load autosave"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:175
|
#: solvespace.cpp:176
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Load"
|
msgid "Do&n't Load"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:598
|
#: solvespace.cpp:599
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Modified File"
|
msgid "Modified File"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:600
|
#: solvespace.cpp:601
|
||||||
#, c-format
|
#, c-format
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:603
|
#: solvespace.cpp:604
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the new sketch?"
|
msgid "Do you want to save the changes you made to the new sketch?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:606
|
#: solvespace.cpp:607
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Your changes will be lost if you don't save them."
|
msgid "Your changes will be lost if you don't save them."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:607
|
#: solvespace.cpp:608
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Save"
|
msgid "&Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:609
|
#: solvespace.cpp:610
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Save"
|
msgid "Do&n't Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:630
|
#: solvespace.cpp:631
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "(new sketch)"
|
msgid "(new sketch)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:637
|
#: solvespace.cpp:638
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Property Browser"
|
msgid "Property Browser"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:699
|
#: solvespace.cpp:700
|
||||||
msgid ""
|
msgid ""
|
||||||
"Constraints are currently shown, and will be exported in the toolpath. This "
|
"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 "
|
"is probably not what you want; hide them by clicking the link at the top of "
|
||||||
"the text window."
|
"the text window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:771
|
#: solvespace.cpp:772
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
|
||||||
"dwg."
|
"dwg."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:823
|
#: solvespace.cpp:824
|
||||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:827
|
#: solvespace.cpp:828
|
||||||
msgid "Bad selection for step dimension; select a constraint."
|
msgid "Bad selection for step dimension; select a constraint."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:851
|
#: solvespace.cpp:852
|
||||||
msgid "The assembly does not interfere, good."
|
msgid "The assembly does not interfere, good."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:867
|
#: solvespace.cpp:868
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The volume of the solid model is:\n"
|
"The volume of the solid model is:\n"
|
||||||
|
@ -1731,7 +1739,7 @@ msgid ""
|
||||||
" %s"
|
" %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:876
|
#: solvespace.cpp:877
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1740,7 +1748,7 @@ msgid ""
|
||||||
" %s"
|
" %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:881
|
#: solvespace.cpp:882
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1748,7 +1756,7 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%."
|
"This introduces error, typically of around 1%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:896
|
#: solvespace.cpp:897
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The surface area of the selected faces is:\n"
|
"The surface area of the selected faces is:\n"
|
||||||
|
@ -1759,13 +1767,13 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:905
|
#: solvespace.cpp:906
|
||||||
msgid ""
|
msgid ""
|
||||||
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
"This group does not contain a correctly-formed 2d closed area. It is open, "
|
||||||
"not coplanar, or self-intersecting."
|
"not coplanar, or self-intersecting."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:917
|
#: solvespace.cpp:918
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The area of the region sketched in this group is:\n"
|
"The area of the region sketched in this group is:\n"
|
||||||
|
@ -1776,7 +1784,7 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:937
|
#: solvespace.cpp:938
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The total length of the selected entities is:\n"
|
"The total length of the selected entities is:\n"
|
||||||
|
@ -1787,36 +1795,36 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:943
|
#: solvespace.cpp:944
|
||||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:959
|
#: solvespace.cpp:960
|
||||||
msgid "Bad selection for trace; select a single point."
|
msgid "Bad selection for trace; select a single point."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:986
|
#: solvespace.cpp:987
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Couldn't write to '%s'"
|
msgid "Couldn't write to '%s'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1016
|
#: solvespace.cpp:1017
|
||||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1017
|
#: solvespace.cpp:1018
|
||||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1019
|
#: solvespace.cpp:1020
|
||||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1020
|
#: solvespace.cpp:1021
|
||||||
msgid "The mesh is watertight (okay, valid)."
|
msgid "The mesh is watertight (okay, valid)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1023
|
#: solvespace.cpp:1024
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1824,7 +1832,7 @@ msgid ""
|
||||||
"The model contains %d triangles, from %d surfaces."
|
"The model contains %d triangles, from %d surfaces."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1027
|
#: solvespace.cpp:1028
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -1834,7 +1842,7 @@ msgid ""
|
||||||
"Zero problematic edges, good.%s"
|
"Zero problematic edges, good.%s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1030
|
#: solvespace.cpp:1031
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -1844,7 +1852,7 @@ msgid ""
|
||||||
"%d problematic edges, bad.%s"
|
"%d problematic edges, bad.%s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1043
|
#: solvespace.cpp:1044
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is SolveSpace version %s.\n"
|
"This is SolveSpace version %s.\n"
|
||||||
|
@ -1871,23 +1879,23 @@ msgstr "无法将样式分配给派生自其他实体的实体;尝试将样式
|
||||||
msgid "Style name cannot be empty"
|
msgid "Style name cannot be empty"
|
||||||
msgstr "样式名称不能为空"
|
msgstr "样式名称不能为空"
|
||||||
|
|
||||||
#: textscreens.cpp:785
|
#: textscreens.cpp:791
|
||||||
msgid "Can't repeat fewer than 1 time."
|
msgid "Can't repeat fewer than 1 time."
|
||||||
msgstr "不能重复少于 1 次。"
|
msgstr "不能重复少于 1 次。"
|
||||||
|
|
||||||
#: textscreens.cpp:789
|
#: textscreens.cpp:795
|
||||||
msgid "Can't repeat more than 999 times."
|
msgid "Can't repeat more than 999 times."
|
||||||
msgstr "重复不超过 999 次。"
|
msgstr "重复不超过 999 次。"
|
||||||
|
|
||||||
#: textscreens.cpp:814
|
#: textscreens.cpp:820
|
||||||
msgid "Group name cannot be empty"
|
msgid "Group name cannot be empty"
|
||||||
msgstr "组名称不能为空"
|
msgstr "组名称不能为空"
|
||||||
|
|
||||||
#: textscreens.cpp:866
|
#: textscreens.cpp:872
|
||||||
msgid "Opacity must be between zero and one."
|
msgid "Opacity must be between zero and one."
|
||||||
msgstr "不透明度必须在零和 1 之间。"
|
msgstr "不透明度必须在零和 1 之间。"
|
||||||
|
|
||||||
#: textscreens.cpp:901
|
#: textscreens.cpp:907
|
||||||
msgid "Radius cannot be zero or negative."
|
msgid "Radius cannot be zero or negative."
|
||||||
msgstr "半径偏移不能为负数。"
|
msgstr "半径偏移不能为负数。"
|
||||||
|
|
||||||
|
|
174
res/messages.pot
174
res/messages.pot
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: SolveSpace 3.0\n"
|
"Project-Id-Version: SolveSpace 3.0\n"
|
||||||
"Report-Msgid-Bugs-To: whitequark@whitequark.org\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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -32,7 +32,7 @@ msgstr ""
|
||||||
msgid "Number of copies to paste must be at least one."
|
msgid "Number of copies to paste must be at least one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: clipboard.cpp:389 textscreens.cpp:827
|
#: clipboard.cpp:389 textscreens.cpp:833
|
||||||
msgid "Scale cannot be zero."
|
msgid "Scale cannot be zero."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -56,37 +56,37 @@ msgstr ""
|
||||||
msgid "No workplane active."
|
msgid "No workplane active."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: confscreen.cpp:376
|
#: confscreen.cpp:381
|
||||||
msgid "Bad format: specify coordinates as x, y, z"
|
msgid "Bad format: specify coordinates as x, y, z"
|
||||||
msgstr ""
|
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"
|
msgid "Bad format: specify color as r, g, b"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: confscreen.cpp:412
|
#: confscreen.cpp:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor will have no effect until you enable View -> Use Perspective Projection."
|
"The perspective factor will have no effect until you enable View -> Use Perspective Projection."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: confscreen.cpp:430 confscreen.cpp:440
|
#: confscreen.cpp:435 confscreen.cpp:445
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Specify between 0 and %d digits after the decimal."
|
msgid "Specify between 0 and %d digits after the decimal."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: confscreen.cpp:452
|
#: confscreen.cpp:457
|
||||||
msgid "Export scale must not be zero!"
|
msgid "Export scale must not be zero!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: confscreen.cpp:464
|
#: confscreen.cpp:469
|
||||||
msgid "Cutter radius offset must not be negative!"
|
msgid "Cutter radius offset must not be negative!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: confscreen.cpp:518
|
#: confscreen.cpp:528
|
||||||
msgid "Bad value: autosave interval should be positive"
|
msgid "Bad value: autosave interval should be positive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: confscreen.cpp:521
|
#: confscreen.cpp:531
|
||||||
msgid "Bad format: specify interval in integral minutes"
|
msgid "Bad format: specify interval in integral minutes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -538,7 +538,7 @@ msgctxt "button"
|
||||||
msgid "&No"
|
msgid "&No"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: file.cpp:877 solvespace.cpp:610
|
#: file.cpp:877 solvespace.cpp:611
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Cancel"
|
msgid "&Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -991,24 +991,28 @@ msgstr ""
|
||||||
msgid "&Website / Manual"
|
msgid "&Website / Manual"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:187
|
#: graphicswin.cpp:186
|
||||||
|
msgid "&Go to GitHub commit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: graphicswin.cpp:188
|
||||||
msgid "&About"
|
msgid "&About"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:361
|
#: graphicswin.cpp:362
|
||||||
msgid "(no recent files)"
|
msgid "(no recent files)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:369
|
#: graphicswin.cpp:370
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "File '%s' does not exist."
|
msgid "File '%s' does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:736
|
#: graphicswin.cpp:737
|
||||||
msgid "No workplane is active, so the grid will not appear."
|
msgid "No workplane is active, so the grid will not appear."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:751
|
#: graphicswin.cpp:752
|
||||||
msgid ""
|
msgid ""
|
||||||
"The perspective factor is set to zero, so the view will always be a parallel projection.\n"
|
"The perspective factor is set to zero, so the view will always be a parallel projection.\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1016,89 +1020,89 @@ msgid ""
|
||||||
"around 0.3 is typical."
|
"around 0.3 is typical."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:836
|
#: graphicswin.cpp:837
|
||||||
msgid "Select a point; this point will become the center of the view on screen."
|
msgid "Select a point; this point will become the center of the view on screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1136
|
#: graphicswin.cpp:1137
|
||||||
msgid "No additional entities share endpoints with the selected entities."
|
msgid "No additional entities share endpoints with the selected entities."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1154
|
#: graphicswin.cpp:1155
|
||||||
msgid ""
|
msgid ""
|
||||||
"To use this command, select a point or other entity from an linked part, or make a link group the "
|
"To use this command, select a point or other entity from an linked part, or make a link group the "
|
||||||
"active group."
|
"active group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1177
|
#: graphicswin.cpp:1178
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) to define the plane "
|
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) to define the plane "
|
||||||
"for the snap grid."
|
"for the snap grid."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1184
|
#: graphicswin.cpp:1185
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't snap these items to grid; select points, text comments, or constraints with a label. To "
|
"Can't snap these items to grid; select points, text comments, or constraints with a label. To "
|
||||||
"snap a line, select its endpoints."
|
"snap a line, select its endpoints."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1269
|
#: graphicswin.cpp:1270
|
||||||
msgid "No workplane selected. Activating default workplane for this group."
|
msgid "No workplane selected. Activating default workplane for this group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1272
|
#: graphicswin.cpp:1273
|
||||||
msgid ""
|
msgid ""
|
||||||
"No workplane is selected, and the active group does not have a default workplane. Try selecting a "
|
"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."
|
"workplane, or activating a sketch-in-new-workplane group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1293
|
#: graphicswin.cpp:1294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Bad selection for tangent arc at point. Select a single point, or select nothing to set up arc "
|
"Bad selection for tangent arc at point. Select a single point, or select nothing to set up arc "
|
||||||
"parameters."
|
"parameters."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1304
|
#: graphicswin.cpp:1305
|
||||||
msgid "click point on arc (draws anti-clockwise)"
|
msgid "click point on arc (draws anti-clockwise)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1305
|
#: graphicswin.cpp:1306
|
||||||
msgid "click to place datum point"
|
msgid "click to place datum point"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1306
|
#: graphicswin.cpp:1307
|
||||||
msgid "click first point of line segment"
|
msgid "click first point of line segment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1308
|
#: graphicswin.cpp:1309
|
||||||
msgid "click first point of construction line segment"
|
msgid "click first point of construction line segment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1309
|
#: graphicswin.cpp:1310
|
||||||
msgid "click first point of cubic segment"
|
msgid "click first point of cubic segment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1310
|
#: graphicswin.cpp:1311
|
||||||
msgid "click center of circle"
|
msgid "click center of circle"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1311
|
#: graphicswin.cpp:1312
|
||||||
msgid "click origin of workplane"
|
msgid "click origin of workplane"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1312
|
#: graphicswin.cpp:1313
|
||||||
msgid "click one corner of rectangle"
|
msgid "click one corner of rectangle"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1313
|
#: graphicswin.cpp:1314
|
||||||
msgid "click top left of text"
|
msgid "click top left of text"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1319
|
#: graphicswin.cpp:1320
|
||||||
msgid "click top left of image"
|
msgid "click top left of image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: graphicswin.cpp:1345
|
#: graphicswin.cpp:1346
|
||||||
msgid "No entities are selected. Select entities before trying to toggle their construction state."
|
msgid "No entities are selected. Select entities before trying to toggle their construction state."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1221,6 +1225,10 @@ msgstr ""
|
||||||
msgid "zero-length edge!"
|
msgid "zero-length edge!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: importmesh.cpp:136
|
||||||
|
msgid "Text-formated STL files are not currently supported"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: modify.cpp:252
|
#: modify.cpp:252
|
||||||
msgid "Must be sketching in workplane to create tangent arc."
|
msgid "Must be sketching in workplane to create tangent arc."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1391,7 +1399,7 @@ msgstr ""
|
||||||
msgid "Can't draw image in 3d; first, activate a workplane with Sketch -> In Workplane."
|
msgid "Can't draw image in 3d; first, activate a workplane with Sketch -> In Workplane."
|
||||||
msgstr ""
|
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"
|
msgctxt "file-type"
|
||||||
msgid "SolveSpace models"
|
msgid "SolveSpace models"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1486,127 +1494,127 @@ msgctxt "file-type"
|
||||||
msgid "Comma-separated values"
|
msgid "Comma-separated values"
|
||||||
msgstr ""
|
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"
|
msgid "untitled"
|
||||||
msgstr ""
|
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
|
#: platform/guiwin.cpp:1639
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Save File"
|
msgid "Save File"
|
||||||
msgstr ""
|
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
|
#: platform/guiwin.cpp:1645
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Open File"
|
msgid "Open File"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418
|
#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Cancel"
|
msgid "_Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416
|
#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Save"
|
msgid "_Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417
|
#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "_Open"
|
msgid "_Open"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:170
|
#: solvespace.cpp:171
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Autosave Available"
|
msgid "Autosave Available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:171
|
#: solvespace.cpp:172
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "An autosave file is available for this sketch."
|
msgid "An autosave file is available for this sketch."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:172
|
#: solvespace.cpp:173
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to load the autosave file instead?"
|
msgid "Do you want to load the autosave file instead?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:173
|
#: solvespace.cpp:174
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Load autosave"
|
msgid "&Load autosave"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:175
|
#: solvespace.cpp:176
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Load"
|
msgid "Do&n't Load"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:598
|
#: solvespace.cpp:599
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Modified File"
|
msgid "Modified File"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:600
|
#: solvespace.cpp:601
|
||||||
#, c-format
|
#, c-format
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
msgid "Do you want to save the changes you made to the sketch “%s”?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:603
|
#: solvespace.cpp:604
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Do you want to save the changes you made to the new sketch?"
|
msgid "Do you want to save the changes you made to the new sketch?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:606
|
#: solvespace.cpp:607
|
||||||
msgctxt "dialog"
|
msgctxt "dialog"
|
||||||
msgid "Your changes will be lost if you don't save them."
|
msgid "Your changes will be lost if you don't save them."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:607
|
#: solvespace.cpp:608
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "&Save"
|
msgid "&Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:609
|
#: solvespace.cpp:610
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Do&n't Save"
|
msgid "Do&n't Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:630
|
#: solvespace.cpp:631
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "(new sketch)"
|
msgid "(new sketch)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:637
|
#: solvespace.cpp:638
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Property Browser"
|
msgid "Property Browser"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:699
|
#: solvespace.cpp:700
|
||||||
msgid ""
|
msgid ""
|
||||||
"Constraints are currently shown, and will be exported in the toolpath. This is probably not what "
|
"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."
|
"you want; hide them by clicking the link at the top of the text window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:771
|
#: solvespace.cpp:772
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't identify file type from file extension of filename '%s'; try .dxf or .dwg."
|
msgid "Can't identify file type from file extension of filename '%s'; try .dxf or .dwg."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:823
|
#: solvespace.cpp:824
|
||||||
msgid "Constraint must have a label, and must not be a reference dimension."
|
msgid "Constraint must have a label, and must not be a reference dimension."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:827
|
#: solvespace.cpp:828
|
||||||
msgid "Bad selection for step dimension; select a constraint."
|
msgid "Bad selection for step dimension; select a constraint."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:851
|
#: solvespace.cpp:852
|
||||||
msgid "The assembly does not interfere, good."
|
msgid "The assembly does not interfere, good."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:867
|
#: solvespace.cpp:868
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The volume of the solid model is:\n"
|
"The volume of the solid model is:\n"
|
||||||
|
@ -1614,7 +1622,7 @@ msgid ""
|
||||||
" %s"
|
" %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:876
|
#: solvespace.cpp:877
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1623,7 +1631,7 @@ msgid ""
|
||||||
" %s"
|
" %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:881
|
#: solvespace.cpp:882
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1631,7 +1639,7 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%."
|
"This introduces error, typically of around 1%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:896
|
#: solvespace.cpp:897
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The surface area of the selected faces is:\n"
|
"The surface area of the selected faces is:\n"
|
||||||
|
@ -1642,13 +1650,13 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:905
|
#: solvespace.cpp:906
|
||||||
msgid ""
|
msgid ""
|
||||||
"This group does not contain a correctly-formed 2d closed area. It is open, not coplanar, or self-"
|
"This group does not contain a correctly-formed 2d closed area. It is open, not coplanar, or self-"
|
||||||
"intersecting."
|
"intersecting."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:917
|
#: solvespace.cpp:918
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The area of the region sketched in this group is:\n"
|
"The area of the region sketched in this group is:\n"
|
||||||
|
@ -1659,7 +1667,7 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:937
|
#: solvespace.cpp:938
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The total length of the selected entities is:\n"
|
"The total length of the selected entities is:\n"
|
||||||
|
@ -1670,36 +1678,36 @@ msgid ""
|
||||||
"This introduces error, typically of around 1%%."
|
"This introduces error, typically of around 1%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:943
|
#: solvespace.cpp:944
|
||||||
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
msgid "Bad selection for perimeter; select line segments, arcs, and curves."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:959
|
#: solvespace.cpp:960
|
||||||
msgid "Bad selection for trace; select a single point."
|
msgid "Bad selection for trace; select a single point."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:986
|
#: solvespace.cpp:987
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Couldn't write to '%s'"
|
msgid "Couldn't write to '%s'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1016
|
#: solvespace.cpp:1017
|
||||||
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
msgid "The mesh is self-intersecting (NOT okay, invalid)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1017
|
#: solvespace.cpp:1018
|
||||||
msgid "The mesh is not self-intersecting (okay, valid)."
|
msgid "The mesh is not self-intersecting (okay, valid)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1019
|
#: solvespace.cpp:1020
|
||||||
msgid "The mesh has naked edges (NOT okay, invalid)."
|
msgid "The mesh has naked edges (NOT okay, invalid)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1020
|
#: solvespace.cpp:1021
|
||||||
msgid "The mesh is watertight (okay, valid)."
|
msgid "The mesh is watertight (okay, valid)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1023
|
#: solvespace.cpp:1024
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -1707,7 +1715,7 @@ msgid ""
|
||||||
"The model contains %d triangles, from %d surfaces."
|
"The model contains %d triangles, from %d surfaces."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1027
|
#: solvespace.cpp:1028
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -1717,7 +1725,7 @@ msgid ""
|
||||||
"Zero problematic edges, good.%s"
|
"Zero problematic edges, good.%s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1030
|
#: solvespace.cpp:1031
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -1727,7 +1735,7 @@ msgid ""
|
||||||
"%d problematic edges, bad.%s"
|
"%d problematic edges, bad.%s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: solvespace.cpp:1043
|
#: solvespace.cpp:1044
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is SolveSpace version %s.\n"
|
"This is SolveSpace version %s.\n"
|
||||||
|
@ -1754,23 +1762,23 @@ msgstr ""
|
||||||
msgid "Style name cannot be empty"
|
msgid "Style name cannot be empty"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: textscreens.cpp:785
|
#: textscreens.cpp:791
|
||||||
msgid "Can't repeat fewer than 1 time."
|
msgid "Can't repeat fewer than 1 time."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: textscreens.cpp:789
|
#: textscreens.cpp:795
|
||||||
msgid "Can't repeat more than 999 times."
|
msgid "Can't repeat more than 999 times."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: textscreens.cpp:814
|
#: textscreens.cpp:820
|
||||||
msgid "Group name cannot be empty"
|
msgid "Group name cannot be empty"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: textscreens.cpp:866
|
#: textscreens.cpp:872
|
||||||
msgid "Opacity must be between zero and one."
|
msgid "Opacity must be between zero and one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: textscreens.cpp:901
|
#: textscreens.cpp:907
|
||||||
msgid "Radius cannot be zero or negative."
|
msgid "Radius cannot be zero or negative."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
1 VERSIONINFO
|
1 VERSIONINFO
|
||||||
FILEVERSION ${solvespace_VERSION_MAJOR},${solvespace_VERSION_MINOR},0,0
|
FILEVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},0,0
|
||||||
PRODUCTVERSION ${solvespace_VERSION_MAJOR},${solvespace_VERSION_MINOR},0,0
|
PRODUCTVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},0,0
|
||||||
FILEFLAGSMASK 0
|
FILEFLAGSMASK 0
|
||||||
FILEFLAGS 0
|
FILEFLAGS 0
|
||||||
FILEOS VOS_NT_WINDOWS32
|
FILEOS VOS_NT_WINDOWS32
|
||||||
|
@ -13,12 +13,12 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "The SolveSpace authors"
|
VALUE "CompanyName", "The SolveSpace authors"
|
||||||
VALUE "ProductName", "SolveSpace"
|
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 "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 "OriginalFilename", "solvespace.exe"
|
||||||
VALUE "InternalName", "solvespace"
|
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
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -19,32 +19,63 @@ endif()
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
${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
|
# platform utilities
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(util_LIBRARIES
|
target_link_libraries(slvs_deps INTERFACE
|
||||||
${APPKIT_LIBRARY})
|
${APPKIT_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# libslvs
|
# libslvs
|
||||||
|
add_library(slvs SHARED
|
||||||
set(libslvs_SOURCES
|
solvespace.h
|
||||||
|
platform/platform.h
|
||||||
util.cpp
|
util.cpp
|
||||||
entity.cpp
|
entity.cpp
|
||||||
expr.cpp
|
expr.cpp
|
||||||
constraint.cpp
|
constraint.cpp
|
||||||
constrainteq.cpp
|
constrainteq.cpp
|
||||||
system.cpp
|
system.cpp
|
||||||
platform/platform.cpp)
|
platform/platform.cpp
|
||||||
|
|
||||||
set(libslvs_HEADERS
|
|
||||||
solvespace.h
|
|
||||||
platform/platform.h)
|
|
||||||
|
|
||||||
add_library(slvs SHARED
|
|
||||||
${libslvs_SOURCES}
|
|
||||||
${libslvs_HEADERS}
|
|
||||||
${util_SOURCES}
|
|
||||||
lib.cpp)
|
lib.cpp)
|
||||||
|
|
||||||
target_compile_definitions(slvs
|
target_compile_definitions(slvs
|
||||||
|
@ -53,16 +84,11 @@ target_compile_definitions(slvs
|
||||||
target_include_directories(slvs
|
target_include_directories(slvs
|
||||||
PUBLIC ${CMAKE_SOURCE_DIR}/include)
|
PUBLIC ${CMAKE_SOURCE_DIR}/include)
|
||||||
|
|
||||||
target_link_libraries(slvs
|
target_link_libraries(slvs PRIVATE slvs_deps)
|
||||||
${util_LIBRARIES}
|
|
||||||
mimalloc-static)
|
|
||||||
|
|
||||||
add_dependencies(slvs
|
|
||||||
mimalloc-static)
|
|
||||||
|
|
||||||
set_target_properties(slvs PROPERTIES
|
set_target_properties(slvs PROPERTIES
|
||||||
PUBLIC_HEADER ${CMAKE_SOURCE_DIR}/include/slvs.h
|
PUBLIC_HEADER ${CMAKE_SOURCE_DIR}/include/slvs.h
|
||||||
VERSION ${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}
|
VERSION ${PROJECT_VERSION}
|
||||||
SOVERSION 1)
|
SOVERSION 1)
|
||||||
|
|
||||||
if(NOT WIN32)
|
if(NOT WIN32)
|
||||||
|
@ -72,70 +98,6 @@ if(NOT WIN32)
|
||||||
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
endif()
|
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
|
set(every_platform_SOURCES
|
||||||
platform/guiwin.cpp
|
platform/guiwin.cpp
|
||||||
platform/guigtk.cpp
|
platform/guigtk.cpp
|
||||||
|
@ -143,7 +105,10 @@ set(every_platform_SOURCES
|
||||||
|
|
||||||
# solvespace library
|
# solvespace library
|
||||||
|
|
||||||
set(solvespace_core_HEADERS
|
set(solvespace_core_gl_SOURCES
|
||||||
|
solvespace.cpp)
|
||||||
|
|
||||||
|
add_library(solvespace-core STATIC
|
||||||
dsc.h
|
dsc.h
|
||||||
expr.h
|
expr.h
|
||||||
polygon.h
|
polygon.h
|
||||||
|
@ -153,9 +118,7 @@ set(solvespace_core_HEADERS
|
||||||
platform/platform.h
|
platform/platform.h
|
||||||
render/render.h
|
render/render.h
|
||||||
render/gl3shader.h
|
render/gl3shader.h
|
||||||
srf/surface.h)
|
srf/surface.h
|
||||||
|
|
||||||
set(solvespace_core_SOURCES
|
|
||||||
bsp.cpp
|
bsp.cpp
|
||||||
clipboard.cpp
|
clipboard.cpp
|
||||||
confscreen.cpp
|
confscreen.cpp
|
||||||
|
@ -207,40 +170,14 @@ set(solvespace_core_SOURCES
|
||||||
srf/surfinter.cpp
|
srf/surfinter.cpp
|
||||||
srf/triangulate.cpp)
|
srf/triangulate.cpp)
|
||||||
|
|
||||||
set(solvespace_core_gl_SOURCES
|
target_link_libraries(solvespace-core PUBLIC slvs_deps)
|
||||||
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})
|
|
||||||
|
|
||||||
# solvespace translations
|
# solvespace translations
|
||||||
|
|
||||||
if(HAVE_GETTEXT)
|
if(HAVE_GETTEXT)
|
||||||
|
get_target_property(solvespace_core_SOURCES solvespace-core SOURCES)
|
||||||
set(inputs
|
set(inputs
|
||||||
${solvespace_core_SOURCES}
|
${solvespace_core_SOURCES}
|
||||||
${solvespace_core_HEADERS}
|
|
||||||
${every_platform_SOURCES}
|
${every_platform_SOURCES}
|
||||||
${solvespace_core_gl_SOURCES})
|
${solvespace_core_gl_SOURCES})
|
||||||
|
|
||||||
|
@ -267,7 +204,7 @@ if(HAVE_GETTEXT)
|
||||||
--keyword --keyword=_ --keyword=N_ --keyword=C_:2,1c --keyword=CN_:2,1c
|
--keyword --keyword=_ --keyword=N_ --keyword=C_:2,1c --keyword=CN_:2,1c
|
||||||
--force-po --width=100 --sort-by-file
|
--force-po --width=100 --sort-by-file
|
||||||
--package-name=SolveSpace
|
--package-name=SolveSpace
|
||||||
--package-version=${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}
|
--package-version=${PROJECT_VERSION}
|
||||||
"--copyright-holder=the PACKAGE authors"
|
"--copyright-holder=the PACKAGE authors"
|
||||||
--msgid-bugs-address=whitequark@whitequark.org
|
--msgid-bugs-address=whitequark@whitequark.org
|
||||||
--from-code=utf-8 --output=${gen_output_pot} ${inputs}
|
--from-code=utf-8 --output=${gen_output_pot} ${inputs}
|
||||||
|
@ -323,52 +260,86 @@ endif()
|
||||||
if(ENABLE_GUI)
|
if(ENABLE_GUI)
|
||||||
add_executable(solvespace WIN32 MACOSX_BUNDLE
|
add_executable(solvespace WIN32 MACOSX_BUNDLE
|
||||||
${solvespace_core_gl_SOURCES}
|
${solvespace_core_gl_SOURCES}
|
||||||
${platform_SOURCES}
|
platform/entrygui.cpp
|
||||||
$<TARGET_PROPERTY:resources,EXTRA_SOURCES>)
|
$<TARGET_PROPERTY:resources,EXTRA_SOURCES>)
|
||||||
|
|
||||||
add_dependencies(solvespace
|
add_dependencies(solvespace
|
||||||
resources)
|
resources)
|
||||||
|
|
||||||
target_link_libraries(solvespace
|
target_link_libraries(solvespace
|
||||||
|
PRIVATE
|
||||||
solvespace-core
|
solvespace-core
|
||||||
${OPENGL_LIBRARIES}
|
${OPENGL_LIBRARIES})
|
||||||
${platform_LIBRARIES}
|
|
||||||
${COVERAGE_LIBRARY})
|
|
||||||
|
|
||||||
if(MSVC)
|
# OpenGL version
|
||||||
set_target_properties(solvespace PROPERTIES
|
if(OPENGL STREQUAL 3)
|
||||||
LINK_FLAGS "/MANIFEST:NO /SAFESEH:NO /INCREMENTAL:NO /OPT:REF")
|
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)
|
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
|
set_target_properties(solvespace PROPERTIES
|
||||||
OUTPUT_NAME SolveSpace
|
OUTPUT_NAME SolveSpace
|
||||||
XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME "YES"
|
XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME "YES"
|
||||||
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.solvespace"
|
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.solvespace"
|
||||||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
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()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# solvespace headless library
|
# solvespace headless library
|
||||||
|
|
||||||
set(headless_SOURCES
|
add_library(solvespace-headless STATIC EXCLUDE_FROM_ALL
|
||||||
|
${solvespace_core_gl_SOURCES}
|
||||||
platform/guinone.cpp
|
platform/guinone.cpp
|
||||||
render/rendercairo.cpp)
|
render/rendercairo.cpp)
|
||||||
|
|
||||||
add_library(solvespace-headless STATIC EXCLUDE_FROM_ALL
|
|
||||||
${solvespace_core_gl_SOURCES}
|
|
||||||
${headless_SOURCES})
|
|
||||||
|
|
||||||
target_compile_definitions(solvespace-headless
|
target_compile_definitions(solvespace-headless
|
||||||
PRIVATE -DHEADLESS)
|
PRIVATE HEADLESS)
|
||||||
|
|
||||||
target_include_directories(solvespace-headless
|
target_include_directories(solvespace-headless
|
||||||
INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
|
INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
target_link_libraries(solvespace-headless
|
target_link_libraries(solvespace-headless
|
||||||
solvespace-core
|
PRIVATE
|
||||||
${CAIRO_LIBRARIES})
|
solvespace-core)
|
||||||
|
|
||||||
target_compile_options(solvespace-headless
|
|
||||||
PRIVATE ${COVERAGE_FLAGS})
|
|
||||||
|
|
||||||
# solvespace command-line executable
|
# solvespace command-line executable
|
||||||
|
|
||||||
|
@ -432,4 +403,4 @@ if(APPLE)
|
||||||
COMMENT "Bundling executable solvespace-cli"
|
COMMENT "Bundling executable solvespace-cli"
|
||||||
VERBATIM)
|
VERBATIM)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
#ifndef SOLVESPACE_CONFIG_H
|
#ifndef SOLVESPACE_CONFIG_H
|
||||||
#define 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 */
|
/* Non-OS X *nix only */
|
||||||
#define UNIX_DATADIR "@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_DATAROOTDIR@/solvespace"
|
#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]);
|
Entity *e = SK.GetEntity(gs.points == 1 ? gs.point[0] : gs.entity[0]);
|
||||||
Vector p;
|
Vector p;
|
||||||
|
|
||||||
#define COSTR(p) \
|
#define COSTR_NO_LINK(p) \
|
||||||
SS.MmToString((p).x).c_str(), \
|
SS.MmToString((p).x).c_str(), \
|
||||||
SS.MmToString((p).y).c_str(), \
|
SS.MmToString((p).y).c_str(), \
|
||||||
SS.MmToString((p).z).c_str()
|
SS.MmToString((p).z).c_str()
|
||||||
#define PT_AS_STR "(%Fi%s%E, %Fi%s%E, %Fi%s%E)"
|
#define PT_AS_STR_NO_LINK "(%Fi%s%Fd, %Fi%s%Fd, %Fi%s%Fd)"
|
||||||
#define PT_AS_NUM "(%Fi%3%E, %Fi%3%E, %Fi%3%E)"
|
#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) {
|
switch(e->type) {
|
||||||
case Entity::Type::POINT_IN_3D:
|
case Entity::Type::POINT_IN_3D:
|
||||||
case Entity::Type::POINT_IN_2D:
|
case Entity::Type::POINT_IN_2D:
|
||||||
|
@ -83,7 +90,7 @@ void TextWindow::DescribeSelection() {
|
||||||
case Entity::Type::POINT_N_COPY:
|
case Entity::Type::POINT_N_COPY:
|
||||||
case Entity::Type::POINT_N_ROT_AA:
|
case Entity::Type::POINT_N_ROT_AA:
|
||||||
p = e->PointGetNum();
|
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;
|
break;
|
||||||
|
|
||||||
case Entity::Type::NORMAL_IN_3D:
|
case Entity::Type::NORMAL_IN_3D:
|
||||||
|
@ -104,20 +111,20 @@ void TextWindow::DescribeSelection() {
|
||||||
case Entity::Type::WORKPLANE: {
|
case Entity::Type::WORKPLANE: {
|
||||||
p = SK.GetEntity(e->point[0])->PointGetNum();
|
p = SK.GetEntity(e->point[0])->PointGetNum();
|
||||||
Printf(false, "%FtWORKPLANE%E");
|
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();
|
Quaternion q = e->Normal()->NormalGetNum();
|
||||||
p = q.RotationN();
|
p = q.RotationN();
|
||||||
Printf(true, " normal = " PT_AS_NUM, CO(p));
|
Printf(true, " normal = " PT_AS_NUM_LINK, CO_LINK(e->Normal(), p));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Entity::Type::LINE_SEGMENT: {
|
case Entity::Type::LINE_SEGMENT: {
|
||||||
Vector p0 = SK.GetEntity(e->point[0])->PointGetNum();
|
Vector p0 = SK.GetEntity(e->point[0])->PointGetNum();
|
||||||
p = p0;
|
p = p0;
|
||||||
Printf(false, "%FtLINE SEGMENT%E");
|
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();
|
Vector p1 = SK.GetEntity(e->point[1])->PointGetNum();
|
||||||
p = p1;
|
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",
|
Printf(true, " len = %Fi%s%E",
|
||||||
SS.MmToString((p1.Minus(p0).Magnitude())).c_str());
|
SS.MmToString((p1.Minus(p0).Magnitude())).c_str());
|
||||||
break;
|
break;
|
||||||
|
@ -137,18 +144,18 @@ void TextWindow::DescribeSelection() {
|
||||||
}
|
}
|
||||||
for(int i = 0; i < pts; i++) {
|
for(int i = 0; i < pts; i++) {
|
||||||
p = SK.GetEntity(e->point[i])->PointGetNum();
|
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;
|
break;
|
||||||
|
|
||||||
case Entity::Type::ARC_OF_CIRCLE: {
|
case Entity::Type::ARC_OF_CIRCLE: {
|
||||||
Printf(false, "%FtARC OF A CIRCLE%E");
|
Printf(false, "%FtARC OF A CIRCLE%E");
|
||||||
p = SK.GetEntity(e->point[0])->PointGetNum();
|
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();
|
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();
|
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();
|
double r = e->CircleGetRadiusNum();
|
||||||
Printf(true, " diameter = %Fi%s", SS.MmToString(r*2).c_str());
|
Printf(true, " diameter = %Fi%s", SS.MmToString(r*2).c_str());
|
||||||
Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str());
|
Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str());
|
||||||
|
@ -160,7 +167,7 @@ void TextWindow::DescribeSelection() {
|
||||||
case Entity::Type::CIRCLE: {
|
case Entity::Type::CIRCLE: {
|
||||||
Printf(false, "%FtCIRCLE%E");
|
Printf(false, "%FtCIRCLE%E");
|
||||||
p = SK.GetEntity(e->point[0])->PointGetNum();
|
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();
|
double r = e->CircleGetRadiusNum();
|
||||||
Printf(true, " diameter = %Fi%s", SS.MmToString(r*2).c_str());
|
Printf(true, " diameter = %Fi%s", SS.MmToString(r*2).c_str());
|
||||||
Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str());
|
Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str());
|
||||||
|
@ -175,7 +182,7 @@ void TextWindow::DescribeSelection() {
|
||||||
p = e->FaceGetNormalNum();
|
p = e->FaceGetNormalNum();
|
||||||
Printf(true, " normal = " PT_AS_NUM, CO(p));
|
Printf(true, " normal = " PT_AS_NUM, CO(p));
|
||||||
p = e->FaceGetPointNum();
|
p = e->FaceGetPointNum();
|
||||||
Printf(false, " thru = " PT_AS_STR, COSTR(p));
|
Printf(false, " thru = " PT_AS_STR, COSTR(e, p));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Entity::Type::TTF_TEXT: {
|
case Entity::Type::TTF_TEXT: {
|
||||||
|
@ -315,12 +322,12 @@ void TextWindow::DescribeSelection() {
|
||||||
} else if(gs.n == 2 && gs.points == 2) {
|
} else if(gs.n == 2 && gs.points == 2) {
|
||||||
Printf(false, "%FtTWO POINTS");
|
Printf(false, "%FtTWO POINTS");
|
||||||
Vector p0 = SK.GetEntity(gs.point[0])->PointGetNum();
|
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();
|
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);
|
Vector dv = p1.Minus(p0);
|
||||||
Printf(true, " d = %Fi%s", SS.MmToString(dv.Magnitude()).c_str());
|
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) {
|
} else if(gs.n == 2 && gs.points == 1 && gs.circlesOrArcs == 1) {
|
||||||
Entity *ec = SK.GetEntity(gs.entity[0]);
|
Entity *ec = SK.GetEntity(gs.entity[0]);
|
||||||
if(ec->type == Entity::Type::CIRCLE) {
|
if(ec->type == Entity::Type::CIRCLE) {
|
||||||
|
@ -329,9 +336,9 @@ void TextWindow::DescribeSelection() {
|
||||||
Printf(false, "%FtPOINT AND AN ARC");
|
Printf(false, "%FtPOINT AND AN ARC");
|
||||||
} else ssassert(false, "Unexpected entity type");
|
} else ssassert(false, "Unexpected entity type");
|
||||||
Vector p = SK.GetEntity(gs.point[0])->PointGetNum();
|
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();
|
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();
|
double r = ec->CircleGetRadiusNum();
|
||||||
Printf(false, " diameter = %Fi%s", SS.MmToString(r*2).c_str());
|
Printf(false, " diameter = %Fi%s", SS.MmToString(r*2).c_str());
|
||||||
Printf(false, " radius = %Fi%s", SS.MmToString(r).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) {
|
} else if(gs.n == 2 && gs.faces == 1 && gs.points == 1) {
|
||||||
Printf(false, "%FtA POINT AND A PLANE FACE");
|
Printf(false, "%FtA POINT AND A PLANE FACE");
|
||||||
Vector pt = SK.GetEntity(gs.point[0])->PointGetNum();
|
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();
|
Vector n = SK.GetEntity(gs.face[0])->FaceGetNormalNum();
|
||||||
Printf(true, " plane normal = " PT_AS_NUM, CO(n));
|
Printf(true, " plane normal = " PT_AS_NUM, CO(n));
|
||||||
Vector pl = SK.GetEntity(gs.face[0])->FaceGetPointNum();
|
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);
|
double dd = n.Dot(pl) - n.Dot(pt);
|
||||||
Printf(true, " distance = %Fi%s", SS.MmToString(dd).c_str());
|
Printf(true, " distance = %Fi%s", SS.MmToString(dd).c_str());
|
||||||
} else if(gs.n == 3 && gs.points == 2 && gs.vectors == 1) {
|
} else if(gs.n == 3 && gs.points == 2 && gs.vectors == 1) {
|
||||||
Printf(false, "%FtTWO POINTS AND A VECTOR");
|
Printf(false, "%FtTWO POINTS AND A VECTOR");
|
||||||
Vector p0 = SK.GetEntity(gs.point[0])->PointGetNum();
|
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();
|
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();
|
Vector v = SK.GetEntity(gs.vector[0])->VectorGetNum();
|
||||||
v = v.WithMagnitude(1);
|
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);
|
double d = (p1.Minus(p0)).Dot(v);
|
||||||
Printf(true, " proj_d = %Fi%s", SS.MmToString(d).c_str());
|
Printf(true, " proj_d = %Fi%s", SS.MmToString(d).c_str());
|
||||||
} else if(gs.n == 2 && gs.lineSegments == 1 && gs.points == 1) {
|
} 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(),
|
Vector lp0 = SK.GetEntity(ln->point[0])->PointGetNum(),
|
||||||
lp1 = SK.GetEntity(ln->point[1])->PointGetNum();
|
lp1 = SK.GetEntity(ln->point[1])->PointGetNum();
|
||||||
Printf(false, "%FtLINE SEGMENT AND POINT%E");
|
Printf(false, "%FtLINE SEGMENT AND POINT%E");
|
||||||
Printf(true, " ln thru " PT_AS_STR, COSTR(lp0));
|
Printf(true, " ln thru " PT_AS_STR, COSTR(SK.GetEntity(ln->point[0]), lp0));
|
||||||
Printf(false, " " PT_AS_STR, COSTR(lp1));
|
Printf(false, " " PT_AS_STR, COSTR(SK.GetEntity(ln->point[1]), lp1));
|
||||||
Entity *p = SK.GetEntity(gs.point[0]);
|
Entity *p = SK.GetEntity(gs.point[0]);
|
||||||
Vector pp = p->PointGetNum();
|
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",
|
Printf(true, " pt-ln distance = %Fi%s%E",
|
||||||
SS.MmToString(pp.DistanceToLine(lp0, lp1.Minus(lp0))).c_str());
|
SS.MmToString(pp.DistanceToLine(lp0, lp1.Minus(lp0))).c_str());
|
||||||
hEntity wrkpl = SS.GW.ActiveWorkplane();
|
hEntity wrkpl = SS.GW.ActiveWorkplane();
|
||||||
|
@ -386,8 +393,8 @@ void TextWindow::DescribeSelection() {
|
||||||
v0 = v0.WithMagnitude(1);
|
v0 = v0.WithMagnitude(1);
|
||||||
v1 = v1.WithMagnitude(1);
|
v1 = v1.WithMagnitude(1);
|
||||||
|
|
||||||
Printf(true, " vectorA = " PT_AS_NUM, CO(v0));
|
Printf(true, " vectorA = " PT_AS_NUM_LINK, CO_LINK(SK.GetEntity(gs.entity[0]), v0));
|
||||||
Printf(false, " vectorB = " PT_AS_NUM, CO(v1));
|
Printf(false, " vectorB = " PT_AS_NUM_LINK, CO_LINK(SK.GetEntity(gs.entity[1]), v1));
|
||||||
|
|
||||||
double theta = acos(v0.Dot(v1));
|
double theta = acos(v0.Dot(v1));
|
||||||
Printf(true, " angle = %Fi%2%E degrees", theta*180/PI);
|
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();
|
Vector n0 = SK.GetEntity(gs.face[0])->FaceGetNormalNum();
|
||||||
Printf(true, " planeA normal = " PT_AS_NUM, CO(n0));
|
Printf(true, " planeA normal = " PT_AS_NUM, CO(n0));
|
||||||
Vector p0 = SK.GetEntity(gs.face[0])->FaceGetPointNum();
|
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();
|
Vector n1 = SK.GetEntity(gs.face[1])->FaceGetNormalNum();
|
||||||
Printf(true, " planeB normal = " PT_AS_NUM, CO(n1));
|
Printf(true, " planeB normal = " PT_AS_NUM, CO(n1));
|
||||||
Vector p1 = SK.GetEntity(gs.face[1])->FaceGetPointNum();
|
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));
|
double theta = acos(n0.Dot(n1));
|
||||||
Printf(true, " angle = %Fi%2%E degrees", theta*180/PI);
|
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");
|
ssassert(false, "Unexpected operation");
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t Expr::ParamsUsed() const {
|
void Expr::ParamsUsedList(std::vector<hParam> *list) const {
|
||||||
uint64_t r = 0;
|
if(op == Op::PARAM || op == Op::PARAM_PTR) {
|
||||||
if(op == Op::PARAM) r |= ((uint64_t)1 << (parh.v % 61));
|
// leaf: just add ourselves if we aren't already there
|
||||||
if(op == Op::PARAM_PTR) r |= ((uint64_t)1 << (parp->h.v % 61));
|
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();
|
int c = Children();
|
||||||
if(c >= 1) r |= a->ParamsUsed();
|
if(c >= 1) {
|
||||||
if(c >= 2) r |= b->ParamsUsed();
|
a->ParamsUsedList(list);
|
||||||
return r;
|
if(c >= 2) b->ParamsUsedList(list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Expr::DependsOn(hParam p) const {
|
bool Expr::DependsOn(hParam p) const {
|
||||||
|
@ -424,6 +433,11 @@ bool Expr::DependsOn(hParam p) const {
|
||||||
bool Expr::Tol(double a, double b) {
|
bool Expr::Tol(double a, double b) {
|
||||||
return fabs(a - b) < 0.001;
|
return fabs(a - b) < 0.001;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Expr::IsZeroConst() const {
|
||||||
|
return op == Op::CONSTANT && EXACT(v == 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
Expr *Expr::FoldConstants() {
|
Expr *Expr::FoldConstants() {
|
||||||
Expr *n = AllocExpr();
|
Expr *n = AllocExpr();
|
||||||
*n = *this;
|
*n = *this;
|
||||||
|
|
|
@ -70,9 +70,10 @@ public:
|
||||||
|
|
||||||
Expr *PartialWrt(hParam p) const;
|
Expr *PartialWrt(hParam p) const;
|
||||||
double Eval() const;
|
double Eval() const;
|
||||||
uint64_t ParamsUsed() const;
|
void ParamsUsedList(std::vector<hParam> *list) const;
|
||||||
bool DependsOn(hParam p) const;
|
bool DependsOn(hParam p) const;
|
||||||
static bool Tol(double a, double b);
|
static bool Tol(double a, double b);
|
||||||
|
bool IsZeroConst() const;
|
||||||
Expr *FoldConstants();
|
Expr *FoldConstants();
|
||||||
void Substitute(hParam oldh, hParam newh);
|
void Substitute(hParam oldh, hParam newh);
|
||||||
|
|
||||||
|
|
|
@ -550,8 +550,11 @@ void SolveSpaceUI::SolveGroup(hGroup hg, bool andFindFree) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SolveResult SolveSpaceUI::TestRankForGroup(hGroup hg, int *rank) {
|
SolveResult SolveSpaceUI::TestRankForGroup(hGroup hg, int *rank) {
|
||||||
WriteEqSystemForGroup(hg);
|
|
||||||
Group *g = SK.GetGroup(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);
|
SolveResult result = sys.SolveRank(g, rank);
|
||||||
FreeAllTemporary();
|
FreeAllTemporary();
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -183,6 +183,7 @@ const MenuEntry Menu[] = {
|
||||||
{ 0, N_("&Help"), Command::NONE, 0, KN, mHelp },
|
{ 0, N_("&Help"), Command::NONE, 0, KN, mHelp },
|
||||||
{ 1, N_("&Language"), Command::LOCALE, 0, KN, mHelp },
|
{ 1, N_("&Language"), Command::LOCALE, 0, KN, mHelp },
|
||||||
{ 1, N_("&Website / Manual"), Command::WEBSITE, 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__
|
#ifndef __APPLE__
|
||||||
{ 1, N_("&About"), Command::ABOUT, 0, KN, mHelp },
|
{ 1, N_("&About"), Command::ABOUT, 0, KN, mHelp },
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -136,10 +136,14 @@ void Group::MenuGroup(Command id, Platform::Path linkFile) {
|
||||||
g.predef.negateV = wrkplg->predef.negateV;
|
g.predef.negateV = wrkplg->predef.negateV;
|
||||||
} else if(wrkplg->subtype == Subtype::WORKPLANE_BY_POINT_ORTHO) {
|
} else if(wrkplg->subtype == Subtype::WORKPLANE_BY_POINT_ORTHO) {
|
||||||
g.predef.q = wrkplg->predef.q;
|
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 ssassert(false, "Unexpected workplane subtype");
|
||||||
}
|
}
|
||||||
} else if(gs.anyNormals == 1 && gs.points == 1 && gs.n == 2) {
|
} else if(gs.anyNormals == 1 && gs.points == 1 && gs.n == 2) {
|
||||||
g.subtype = Subtype::WORKPLANE_BY_POINT_NORMAL;
|
g.subtype = Subtype::WORKPLANE_BY_POINT_NORMAL;
|
||||||
|
g.predef.entityB = gs.anyNormal[0];
|
||||||
g.predef.q = SK.GetEntity(gs.anyNormal[0])->NormalGetNum();
|
g.predef.q = SK.GetEntity(gs.anyNormal[0])->NormalGetNum();
|
||||||
g.predef.origin = gs.point[0];
|
g.predef.origin = gs.point[0];
|
||||||
//} else if(gs.faces == 1 && gs.points == 1 && gs.n == 2) {
|
//} 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.negateU) u = u.ScaledBy(-1);
|
||||||
if(predef.negateV) v = v.ScaledBy(-1);
|
if(predef.negateV) v = v.ScaledBy(-1);
|
||||||
q = Quaternion::From(u, v);
|
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.
|
// Already given, numerically.
|
||||||
q = predef.q;
|
q = predef.q;
|
||||||
|
} else if(subtype == Subtype::WORKPLANE_BY_POINT_NORMAL) {
|
||||||
|
q = SK.GetEntity(predef.entityB)->NormalGetNum();
|
||||||
} else ssassert(false, "Unexpected workplane subtype");
|
} else ssassert(false, "Unexpected workplane subtype");
|
||||||
|
|
||||||
Entity normal = {};
|
Entity normal = {};
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#define MIN_POINT_DISTANCE 0.001
|
#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 {
|
class vertex {
|
||||||
public:
|
public:
|
||||||
Vector p;
|
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
|
// 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 = {};
|
Entity en = {};
|
||||||
en.type = Entity::Type::POINT_N_COPY;
|
en.type = Entity::Type::POINT_N_COPY;
|
||||||
en.extraPoints = 0;
|
en.extraPoints = 0;
|
||||||
|
@ -59,7 +59,8 @@ static hEntity newPoint(EntityList *el, int id, Vector p) {
|
||||||
en.actVisible = true;
|
en.actVisible = true;
|
||||||
en.forceHidden = false;
|
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);
|
el->Add(&en);
|
||||||
return en.h;
|
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.
|
// check if a vertex is unique and add it via newPoint if it is.
|
||||||
static void addVertex(EntityList *el, Vector v) {
|
static void addVertex(EntityList *el, Vector v) {
|
||||||
if(el->n < 15000) {
|
if(el->n < 15000) {
|
||||||
int id = el->n+2;
|
int id = el->n;
|
||||||
newPoint(el, id, v);
|
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 = {};
|
Entity en = {};
|
||||||
en.type = Entity::Type::LINE_SEGMENT;
|
en.type = Entity::Type::LINE_SEGMENT;
|
||||||
en.point[0] = p0;
|
en.point[0] = p0;
|
||||||
|
@ -85,7 +108,8 @@ static hEntity newLine(EntityList *el, int id, hEntity p0, hEntity p1) {
|
||||||
en.actVisible = true;
|
en.actVisible = true;
|
||||||
en.forceHidden = false;
|
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);
|
el->Add(&en);
|
||||||
return en.h;
|
return en.h;
|
||||||
}
|
}
|
||||||
|
@ -106,6 +130,13 @@ bool LinkStl(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s
|
||||||
char str[80] = {};
|
char str[80] = {};
|
||||||
f.read(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 n;
|
||||||
uint32_t color;
|
uint32_t color;
|
||||||
|
|
||||||
|
@ -115,9 +146,6 @@ bool LinkStl(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s
|
||||||
float x,y,z;
|
float x,y,z;
|
||||||
float xn,yn,zn;
|
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 = {};
|
std::vector<vertex> verts = {};
|
||||||
|
|
||||||
for(uint32_t i = 0; i<n; i++) {
|
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.b, normal);
|
||||||
addUnique(verts, tr.c, 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 = {};
|
BBox box = {};
|
||||||
box.minp = verts[0].p;
|
box.minp = verts[0].p;
|
||||||
|
@ -183,35 +219,34 @@ bool LinkStl(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s
|
||||||
}
|
}
|
||||||
|
|
||||||
hEntity p[8];
|
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[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[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[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[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[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[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[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[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[1]);
|
||||||
newLine(el, id++, p[0], p[2]);
|
newLine(el, &id, p[0], p[2]);
|
||||||
newLine(el, id++, p[3], p[1]);
|
newLine(el, &id, p[3], p[1]);
|
||||||
newLine(el, id++, p[3], p[2]);
|
newLine(el, &id, p[3], p[2]);
|
||||||
|
|
||||||
newLine(el, id++, p[4], p[5]);
|
newLine(el, &id, p[4], p[5]);
|
||||||
newLine(el, id++, p[4], p[6]);
|
newLine(el, &id, p[4], p[6]);
|
||||||
newLine(el, id++, p[7], p[5]);
|
newLine(el, &id, p[7], p[5]);
|
||||||
newLine(el, id++, p[7], p[6]);
|
newLine(el, &id, p[7], p[6]);
|
||||||
|
|
||||||
newLine(el, id++, p[0], p[4]);
|
newLine(el, &id, p[0], p[4]);
|
||||||
newLine(el, id++, p[1], p[5]);
|
newLine(el, &id, p[1], p[5]);
|
||||||
newLine(el, id++, p[2], p[6]);
|
newLine(el, &id, p[2], p[6]);
|
||||||
newLine(el, id++, p[3], p[7]);
|
newLine(el, &id, p[3], p[7]);
|
||||||
|
|
||||||
for(unsigned int i=0; i<verts.size(); i++) {
|
for(unsigned int i=0; i<verts.size(); i++) {
|
||||||
// create point entities for edge vertexes
|
// create point entities for edge vertexes
|
||||||
if(isEdgeVertex(verts[i])) {
|
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,
|
static std::shared_ptr<Pixmap> ReadPngIntoPixmap(png_struct *png_ptr, png_info *info_ptr,
|
||||||
bool flip) {
|
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>();
|
std::shared_ptr<Pixmap> pixmap = std::make_shared<Pixmap>();
|
||||||
pixmap->width = png_get_image_width(png_ptr, info_ptr);
|
pixmap->width = png_get_image_width(png_ptr, info_ptr);
|
||||||
|
|
|
@ -175,6 +175,7 @@ public:
|
||||||
bool suppress;
|
bool suppress;
|
||||||
bool relaxConstraints;
|
bool relaxConstraints;
|
||||||
bool allowRedundant;
|
bool allowRedundant;
|
||||||
|
bool suppressDofCalculation;
|
||||||
bool allDimsReference;
|
bool allDimsReference;
|
||||||
double scale;
|
double scale;
|
||||||
|
|
||||||
|
@ -622,7 +623,7 @@ public:
|
||||||
bool free;
|
bool free;
|
||||||
|
|
||||||
// Used only in the solver
|
// Used only in the solver
|
||||||
hParam substd;
|
Param *substd;
|
||||||
|
|
||||||
static const hParam NO_PARAM;
|
static const hParam NO_PARAM;
|
||||||
|
|
||||||
|
|
|
@ -1053,7 +1053,11 @@ void SolveSpaceUI::MenuHelp(Command id) {
|
||||||
"law. For details, visit http://gnu.org/licenses/\n"
|
"law. For details, visit http://gnu.org/licenses/\n"
|
||||||
"\n"
|
"\n"
|
||||||
"© 2008-%d Jonathan Westhues and other authors.\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;
|
break;
|
||||||
|
|
||||||
default: ssassert(false, "Unexpected menu ID");
|
default: ssassert(false, "Unexpected menu ID");
|
||||||
|
|
|
@ -34,6 +34,10 @@
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#define EIGEN_NO_DEBUG
|
||||||
|
#undef Success
|
||||||
|
#include <Eigen/SparseCore>
|
||||||
|
|
||||||
// We declare these in advance instead of simply using FT_Library
|
// We declare these in advance instead of simply using FT_Library
|
||||||
// (defined as typedef FT_LibraryRec_* FT_Library) because including
|
// (defined as typedef FT_LibraryRec_* FT_Library) because including
|
||||||
// freetype.h invokes indescribable horrors and we would like to avoid
|
// freetype.h invokes indescribable horrors and we would like to avoid
|
||||||
|
@ -211,7 +215,7 @@ void Error(const char *fmt, ...);
|
||||||
|
|
||||||
class System {
|
class System {
|
||||||
public:
|
public:
|
||||||
enum { MAX_UNKNOWNS = 1024 };
|
enum { MAX_UNKNOWNS = 2048 };
|
||||||
|
|
||||||
EntityList entity;
|
EntityList entity;
|
||||||
ParamList param;
|
ParamList param;
|
||||||
|
@ -233,37 +237,34 @@ public:
|
||||||
// The system Jacobian matrix
|
// The system Jacobian matrix
|
||||||
struct {
|
struct {
|
||||||
// The corresponding equation for each row
|
// The corresponding equation for each row
|
||||||
hEquation eq[MAX_UNKNOWNS];
|
std::vector<Equation *> eq;
|
||||||
|
|
||||||
// The corresponding parameter for each column
|
// The corresponding parameter for each column
|
||||||
hParam param[MAX_UNKNOWNS];
|
std::vector<hParam> param;
|
||||||
|
|
||||||
// We're solving AX = B
|
// We're solving AX = B
|
||||||
int m, n;
|
int m, n;
|
||||||
struct {
|
struct {
|
||||||
Expr *sym[MAX_UNKNOWNS][MAX_UNKNOWNS];
|
// This only observes the Expr - does not own them!
|
||||||
double num[MAX_UNKNOWNS][MAX_UNKNOWNS];
|
Eigen::SparseMatrix<Expr *> sym;
|
||||||
} A;
|
Eigen::SparseMatrix<double> num;
|
||||||
|
} A;
|
||||||
|
|
||||||
double scale[MAX_UNKNOWNS];
|
Eigen::VectorXd scale;
|
||||||
|
Eigen::VectorXd X;
|
||||||
// Some helpers for the least squares solve
|
|
||||||
double AAt[MAX_UNKNOWNS][MAX_UNKNOWNS];
|
|
||||||
double Z[MAX_UNKNOWNS];
|
|
||||||
|
|
||||||
double X[MAX_UNKNOWNS];
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
Expr *sym[MAX_UNKNOWNS];
|
// This only observes the Expr - does not own them!
|
||||||
double num[MAX_UNKNOWNS];
|
std::vector<Expr *> sym;
|
||||||
} B;
|
Eigen::VectorXd num;
|
||||||
|
} B;
|
||||||
} mat;
|
} mat;
|
||||||
|
|
||||||
static const double RANK_MAG_TOLERANCE, CONVERGE_TOLERANCE;
|
static const double CONVERGE_TOLERANCE;
|
||||||
int CalculateRank();
|
int CalculateRank();
|
||||||
bool TestRank(int *rank = NULL);
|
bool TestRank(int *dof = NULL);
|
||||||
static bool SolveLinearSystem(double X[], double A[][MAX_UNKNOWNS],
|
static bool SolveLinearSystem(const Eigen::SparseMatrix<double> &A,
|
||||||
double B[], int N);
|
const Eigen::VectorXd &B, Eigen::VectorXd *X);
|
||||||
bool SolveLeastSquares();
|
bool SolveLeastSquares();
|
||||||
|
|
||||||
bool WriteJacobian(int tag);
|
bool WriteJacobian(int tag);
|
||||||
|
@ -279,7 +280,6 @@ public:
|
||||||
bool NewtonSolve(int tag);
|
bool NewtonSolve(int tag);
|
||||||
|
|
||||||
void MarkParamsFree(bool findFree);
|
void MarkParamsFree(bool findFree);
|
||||||
int CalculateDof();
|
|
||||||
|
|
||||||
SolveResult Solve(Group *g, int *rank = NULL, int *dof = NULL,
|
SolveResult Solve(Group *g, int *rank = NULL, int *dof = NULL,
|
||||||
List<hConstraint> *bad = NULL,
|
List<hConstraint> *bad = NULL,
|
||||||
|
@ -291,6 +291,9 @@ public:
|
||||||
bool andFindBad = false, bool andFindFree = false);
|
bool andFindBad = false, bool andFindFree = false);
|
||||||
|
|
||||||
void Clear();
|
void Clear();
|
||||||
|
Param *GetLastParamSubstitution(Param *p);
|
||||||
|
void SubstituteParamsByLast(Expr *e);
|
||||||
|
void SortSubstitutionByDragged(Param *p);
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "ttf.h"
|
#include "ttf.h"
|
||||||
|
|
430
src/system.cpp
430
src/system.cpp
|
@ -8,81 +8,152 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
#include "solvespace.h"
|
#include "solvespace.h"
|
||||||
|
|
||||||
// This tolerance is used to determine whether two (linearized) constraints
|
#include <Eigen/Core>
|
||||||
// are linearly dependent. If this is too small, then we will attempt to
|
#include <Eigen/SparseQR>
|
||||||
// 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;
|
|
||||||
|
|
||||||
// The solver will converge all unknowns to within this tolerance. This must
|
// 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.
|
// always be much less than LENGTH_EPS, and in practice should be much less.
|
||||||
const double System::CONVERGE_TOLERANCE = (LENGTH_EPS/(1e2));
|
const double System::CONVERGE_TOLERANCE = (LENGTH_EPS/(1e2));
|
||||||
|
|
||||||
|
constexpr size_t LikelyPartialCountPerEq = 10;
|
||||||
|
|
||||||
bool System::WriteJacobian(int tag) {
|
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(Param &p : param) {
|
||||||
for(auto &p : param) {
|
if(p.tag != tag) continue;
|
||||||
if(j >= MAX_UNKNOWNS)
|
mat.param.push_back(p.h);
|
||||||
return false;
|
|
||||||
|
|
||||||
if(p.tag != tag)
|
|
||||||
continue;
|
|
||||||
mat.param[j] = p.h;
|
|
||||||
j++;
|
|
||||||
}
|
}
|
||||||
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) {
|
// Fill the param id to index map
|
||||||
if(i >= MAX_UNKNOWNS) return false;
|
std::map<uint32_t, int> paramToIndex;
|
||||||
|
for(int j = 0; j < mat.n; j++) {
|
||||||
|
paramToIndex[mat.param[j].v] = j;
|
||||||
|
}
|
||||||
|
|
||||||
if(e.tag != tag)
|
if(mat.eq.size() >= MAX_UNKNOWNS) {
|
||||||
continue;
|
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;
|
paramsUsed.clear();
|
||||||
Expr *f = e.e->DeepCopyWithParamsAsPointers(¶m, &(SK.param));
|
f->ParamsUsedList(¶msUsed);
|
||||||
f = f->FoldConstants();
|
|
||||||
|
|
||||||
// Hash table (61 bits) to accelerate generation of zero partials.
|
for(hParam &p : paramsUsed) {
|
||||||
uint64_t scoreboard = f->ParamsUsed();
|
// Find the index of this parameter
|
||||||
for(j = 0; j < mat.n; j++) {
|
auto it = paramToIndex.find(p.v);
|
||||||
Expr *pd;
|
if(it == paramToIndex.end()) continue;
|
||||||
if(scoreboard & ((uint64_t)1 << (mat.param[j].v % 61)) &&
|
// this is the parameter index
|
||||||
f->DependsOn(mat.param[j]))
|
const int j = it->second;
|
||||||
{
|
// compute partial derivative of f
|
||||||
pd = f->PartialWrt(mat.param[j]);
|
Expr *pd = f->PartialWrt(p);
|
||||||
pd = pd->FoldConstants();
|
pd = pd->FoldConstants();
|
||||||
pd = pd->DeepCopyWithParamsAsPointers(¶m, &(SK.param));
|
if(pd->IsZeroConst())
|
||||||
} else {
|
continue;
|
||||||
pd = Expr::From(0.0);
|
mat.A.sym.insert(i, j) = pd;
|
||||||
}
|
|
||||||
mat.A.sym[i][j] = pd;
|
|
||||||
}
|
}
|
||||||
mat.B.sym[i] = f;
|
paramsUsed.clear();
|
||||||
i++;
|
mat.B.sym.push_back(f);
|
||||||
}
|
}
|
||||||
mat.m = i;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void System::EvalJacobian() {
|
void System::EvalJacobian() {
|
||||||
int i, j;
|
using namespace Eigen;
|
||||||
for(i = 0; i < mat.m; i++) {
|
mat.A.num.setZero();
|
||||||
for(j = 0; j < mat.n; j++) {
|
mat.A.num.resize(mat.m, mat.n);
|
||||||
mat.A.num[i][j] = (mat.A.sym[i][j])->Eval();
|
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) {
|
bool System::IsDragged(hParam p) {
|
||||||
hParam *pp;
|
const auto b = dragged.begin();
|
||||||
for(pp = dragged.First(); pp; pp = dragged.NextAfter(pp)) {
|
const auto e = dragged.end();
|
||||||
if(p == *pp) return true;
|
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() {
|
void System::SolveBySubstitution() {
|
||||||
|
@ -102,172 +173,114 @@ void System::SolveBySubstitution() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(IsDragged(a)) {
|
if(a.v == b.v) {
|
||||||
// A is being dragged, so A should stay, and B should go
|
teq.tag = EQ_SUBSTITUTED;
|
||||||
std::swap(a, b);
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(auto &req : eq) {
|
Param *pa = param.FindById(a);
|
||||||
req.e->Substitute(a, b); // A becomes B, B unchanged
|
Param *pb = param.FindById(b);
|
||||||
}
|
|
||||||
for(auto &rp : param) {
|
// Take the last substitution of parameter a
|
||||||
if(rp.substd == a) {
|
// This resulted in creation of substitution chains
|
||||||
rp.substd = b;
|
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;
|
teq.tag = EQ_SUBSTITUTED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//
|
||||||
// Calculate the rank of the Jacobian matrix, by Gram-Schimdt orthogonalization
|
for(Param &p : param) {
|
||||||
// in place. A row (~equation) is considered to be all zeros if its magnitude
|
SortSubstitutionByDragged(&p);
|
||||||
// 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
EvalJacobian();
|
||||||
int jacobianRank = CalculateRank();
|
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;
|
return jacobianRank == mat.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool System::SolveLinearSystem(double X[], double A[][MAX_UNKNOWNS],
|
bool System::SolveLinearSystem(const Eigen::SparseMatrix <double> &A,
|
||||||
double B[], int n)
|
const Eigen::VectorXd &B, Eigen::VectorXd *X)
|
||||||
{
|
{
|
||||||
// Gaussian elimination, with partial pivoting. It's an error if the
|
if(A.outerSize() == 0) return true;
|
||||||
// matrix is singular, because that means two constraints are
|
using namespace Eigen;
|
||||||
// equivalent.
|
SparseQR<SparseMatrix<double>, COLAMDOrdering<int>> solver;
|
||||||
int i, j, ip, jp, imax = 0;
|
//SimplicialLDLT<SparseMatrix<double>> solver;
|
||||||
double max, temp;
|
solver.compute(A);
|
||||||
|
*X = solver.solve(B);
|
||||||
for(i = 0; i < n; i++) {
|
return (solver.info() == Success);
|
||||||
// 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool System::SolveLeastSquares() {
|
bool System::SolveLeastSquares() {
|
||||||
int r, c, i;
|
using namespace Eigen;
|
||||||
|
|
||||||
// Scale the columns; this scale weights the parameters for the least
|
// Scale the columns; this scale weights the parameters for the least
|
||||||
// squares solve, so that we can encourage the solver to make bigger
|
// squares solve, so that we can encourage the solver to make bigger
|
||||||
// changes in some parameters, and smaller in others.
|
// 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])) {
|
if(IsDragged(mat.param[c])) {
|
||||||
// It's least squares, so this parameter doesn't need to be all
|
// It's least squares, so this parameter doesn't need to be all
|
||||||
// that big to get a large effect.
|
// that big to get a large effect.
|
||||||
mat.scale[c] = 1/20.0;
|
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];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write A*A'
|
const int size = mat.A.num.outerSize();
|
||||||
for(r = 0; r < mat.m; r++) {
|
for(int k = 0; k < size; k++) {
|
||||||
for(c = 0; c < mat.m; c++) { // yes, AAt is square
|
for(SparseMatrix<double>::InnerIterator it(mat.A.num, k); it; ++it) {
|
||||||
double sum = 0;
|
it.valueRef() *= mat.scale[it.col()];
|
||||||
for(i = 0; i < mat.n; i++) {
|
|
||||||
sum += mat.A.num[r][i]*mat.A.num[c][i];
|
|
||||||
}
|
|
||||||
mat.AAt[r][c] = sum;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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.
|
if(!SolveLinearSystem(AAt, mat.B.num, &z)) return false;
|
||||||
for(c = 0; c < mat.n; c++) {
|
|
||||||
double sum = 0;
|
mat.X = mat.A.num.transpose() * z;
|
||||||
for(i = 0; i < mat.m; i++) {
|
|
||||||
sum += mat.A.num[i][c]*mat.Z[i];
|
for(int c = 0; c < mat.n; c++) {
|
||||||
}
|
mat.X[c] *= mat.scale[c];
|
||||||
mat.X[c] = sum * mat.scale[c];
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -279,6 +292,7 @@ bool System::NewtonSolve(int tag) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// Evaluate the functions at our operating point.
|
// Evaluate the functions at our operating point.
|
||||||
|
mat.B.num = Eigen::VectorXd(mat.m);
|
||||||
for(i = 0; i < mat.m; i++) {
|
for(i = 0; i < mat.m; i++) {
|
||||||
mat.B.num[i] = (mat.B.sym[i])->Eval();
|
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);
|
WriteEquationsExceptFor(Constraint::NO_CONSTRAINT, g);
|
||||||
|
|
||||||
int i;
|
|
||||||
bool rankOk;
|
bool rankOk;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
int x;
|
||||||
dbp("%d equations", eq.n);
|
dbp("%d equations", eq.n);
|
||||||
for(i = 0; i < eq.n; i++) {
|
for(x = 0; x < eq.n; x++) {
|
||||||
dbp(" %.3f = %s = 0", eq[i].e->Eval(), eq[i].e->Print());
|
dbp(" %.3f = %s = 0", eq[x].e->Eval(), eq[x].e->Print());
|
||||||
}
|
}
|
||||||
dbp("%d parameters", param.n);
|
dbp("%d parameters", param.n);
|
||||||
for(i = 0; i < param.n; i++) {
|
for(x = 0; x < param.n; x++) {
|
||||||
dbp(" param %08x at %.3f", param[i].h.v, param[i].val);
|
dbp(" param %08x at %.3f", param[x].h.v, param[x].val);
|
||||||
} */
|
} */
|
||||||
|
|
||||||
// All params and equations are assigned to group zero.
|
// All params and equations are assigned to group zero.
|
||||||
param.ClearTags();
|
param.ClearTags();
|
||||||
eq.ClearTags();
|
eq.ClearTags();
|
||||||
|
|
||||||
// Solving by substitution eliminates duplicate e.g. H/V constraints, which can cause rank test
|
// Since we are suppressing dof calculation or allowing redundant, we
|
||||||
// to succeed even on overdefined systems, which will fail later.
|
// can't / don't want to catch result of dof checking without substitution
|
||||||
if(!forceDofCheck) {
|
if(g->suppressDofCalculation || g->allowRedundant || !forceDofCheck) {
|
||||||
SolveBySubstitution();
|
SolveBySubstitution();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -462,22 +476,21 @@ SolveResult System::Solve(Group *g, int *rank, int *dof, List<hConstraint> *bad,
|
||||||
if(!WriteJacobian(0)) {
|
if(!WriteJacobian(0)) {
|
||||||
return SolveResult::TOO_MANY_UNKNOWNS;
|
return SolveResult::TOO_MANY_UNKNOWNS;
|
||||||
}
|
}
|
||||||
|
// Clear dof value in order to have indication when dof is actually not calculated
|
||||||
rankOk = TestRank(rank);
|
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
|
// And do the leftovers as one big system
|
||||||
if(!NewtonSolve(0)) {
|
if(!NewtonSolve(0)) {
|
||||||
goto didnt_converge;
|
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(!rankOk) {
|
||||||
if(andFindBad) FindWhichToRemoveToFixJacobian(g, bad, forceDofCheck);
|
if(andFindBad) FindWhichToRemoveToFixJacobian(g, bad, forceDofCheck);
|
||||||
} else {
|
} 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);
|
MarkParamsFree(andFindFree);
|
||||||
}
|
}
|
||||||
// System solved correctly, so write the new values back in to the
|
// 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) {
|
for(auto &p : param) {
|
||||||
double val;
|
double val;
|
||||||
if(p.tag == VAR_SUBSTITUTED) {
|
if(p.tag == VAR_SUBSTITUTED) {
|
||||||
val = param.FindById(p.substd)->val;
|
val = p.substd->val;
|
||||||
} else {
|
} else {
|
||||||
val = p.val;
|
val = p.val;
|
||||||
}
|
}
|
||||||
|
@ -499,12 +512,12 @@ SolveResult System::Solve(Group *g, int *rank, int *dof, List<hConstraint> *bad,
|
||||||
didnt_converge:
|
didnt_converge:
|
||||||
SK.constraint.ClearTags();
|
SK.constraint.ClearTags();
|
||||||
// Not using range-for here because index is used in additional ways
|
// 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])) {
|
if(fabs(mat.B.num[i]) > CONVERGE_TOLERANCE || IsReasonable(mat.B.num[i])) {
|
||||||
// This constraint is unsatisfied.
|
// 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);
|
ConstraintBase *c = SK.constraint.FindByIdNoOops(hc);
|
||||||
if(!c) continue;
|
if(!c) continue;
|
||||||
// Don't double-show constraints that generated multiple
|
// 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;
|
return SolveResult::TOO_MANY_UNKNOWNS;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rankOk = TestRank(rank);
|
bool rankOk = TestRank(dof);
|
||||||
if(!rankOk) {
|
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 {
|
} else {
|
||||||
if(dof) *dof = CalculateDof();
|
|
||||||
MarkParamsFree(andFindFree);
|
MarkParamsFree(andFindFree);
|
||||||
}
|
}
|
||||||
return rankOk ? SolveResult::OKAY : SolveResult::REDUNDANT_OKAY;
|
return rankOk ? SolveResult::OKAY : SolveResult::REDUNDANT_OKAY;
|
||||||
|
@ -549,6 +565,8 @@ void System::Clear() {
|
||||||
param.Clear();
|
param.Clear();
|
||||||
eq.Clear();
|
eq.Clear();
|
||||||
dragged.Clear();
|
dragged.Clear();
|
||||||
|
mat.A.num.setZero();
|
||||||
|
mat.A.sym.setZero();
|
||||||
}
|
}
|
||||||
|
|
||||||
void System::MarkParamsFree(bool find) {
|
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 'e': g->allowRedundant = !(g->allowRedundant); break;
|
||||||
|
|
||||||
|
case 'D': g->suppressDofCalculation = !(g->suppressDofCalculation); break;
|
||||||
|
|
||||||
case 'v': g->visible = !(g->visible); break;
|
case 'v': g->visible = !(g->visible); break;
|
||||||
|
|
||||||
case 'd': g->allDimsReference = !(g->allDimsReference); break;
|
case 'd': g->allDimsReference = !(g->allDimsReference); break;
|
||||||
|
@ -511,6 +513,10 @@ void TextWindow::ShowGroupInfo() {
|
||||||
&TextWindow::ScreenChangeGroupOption,
|
&TextWindow::ScreenChangeGroupOption,
|
||||||
g->allowRedundant ? CHECK_TRUE : CHECK_FALSE);
|
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",
|
Printf(false, " %f%Ld%Fd%s treat all dimensions as reference",
|
||||||
&TextWindow::ScreenChangeGroupOption,
|
&TextWindow::ScreenChangeGroupOption,
|
||||||
g->allDimsReference ? CHECK_TRUE : CHECK_FALSE);
|
g->allDimsReference ? CHECK_TRUE : CHECK_FALSE);
|
||||||
|
|
|
@ -235,6 +235,7 @@ void TextWindow::Init() {
|
||||||
|
|
||||||
using namespace std::placeholders;
|
using namespace std::placeholders;
|
||||||
window->onClose = []() {
|
window->onClose = []() {
|
||||||
|
SS.TW.HideEditControl();
|
||||||
SS.GW.showTextWindow = false;
|
SS.GW.showTextWindow = false;
|
||||||
SS.GW.EnsureValidActives();
|
SS.GW.EnsureValidActives();
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include FT_ADVANCES_H
|
#include FT_ADVANCES_H
|
||||||
|
|
||||||
/* Yecch. Irritatingly, you need to do this nonsense to get the error string table,
|
/* 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__
|
#undef __FTERRORS_H__
|
||||||
#define FT_ERRORDEF(e, v, s) { (e), (s) },
|
#define FT_ERRORDEF(e, v, s) { (e), (s) },
|
||||||
#define FT_ERROR_START_LIST
|
#define FT_ERROR_START_LIST
|
||||||
|
|
Loading…
Reference in New Issue