From: Ryan Pavlik Date: Thu, 21 Jan 2021 15:58:03 +0000 (-0600) Subject: New upstream version 3.0.rc2+repack1 X-Git-Tag: archive/raspbian/3.1+ds1-4+rpi1^2~30^2~4 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=09510d8ddd5e592e0c22ac5872d498d01ed47652;p=solvespace.git New upstream version 3.0.rc2+repack1 --- diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 0681bf2..0000000 --- a/.travis.yml +++ /dev/null @@ -1,113 +0,0 @@ -os: linux -dist: xenial -language: c -git: - submodules: false -if: tag != edge -stages: - - test - - name: clean - if: (NOT type IN (pull_request)) AND (branch = master) - - name: deploy - if: (NOT type IN (pull_request)) AND (branch = master OR tag IS present) -jobs: - include: - - stage: clean - name: Remove Github Release - os: linux - dist: bionic - script: .travis/remove-edge.sh - - stage: test - name: macOS - os: osx - osx_image: xcode12.2 - install: ".travis/install-macos.sh" - script: ".travis/build-macos.sh" - - stage: deploy - name: macOS - os: osx - osx_image: xcode12.2 - install: ".travis/install-macos.sh" - script: ".travis/build-macos.sh release && .travis/sign-macos.sh" - before_deploy: source .travis/tag-edge.sh - deploy: - provider: releases - skip_cleanup: true - prerelease: true - overwrite: true - edge: true - name: ${TRAVIS_TAG:-edge} - release_notes: $TRAVIS_COMMIT_MESSAGE - file: build/bin/SolveSpace.dmg - on: - all_branches: true - - stage: test - name: "Ubuntu" - os: linux - dist: bionic - install: .travis/install-ubuntu.sh - script: .travis/build-ubuntu.sh - - stage: test - name: "Windows" - os: windows - install: .travis/install-windows.sh - script: .travis/build-windows.sh - - stage: deploy - name: "Windows" - os: windows - install: .travis/install-windows.sh - script: .travis/build-windows.sh release - before_deploy: source .travis/tag-edge.sh - deploy: - provider: releases - skip_cleanup: true - prerelease: true - overwrite: true - edge: true - name: ${TRAVIS_TAG:-edge} - release_notes: $TRAVIS_COMMIT_MESSAGE - file: build/bin/RelWithDebInfo/solvespace.exe - on: - all_branches: true - - stage: deploy - name: "Windows with OpenMP" - os: windows - install: .travis/install-windows.sh - script: .travis/build-windows.sh release openmp - before_deploy: source .travis/tag-edge.sh - deploy: - provider: releases - skip_cleanup: true - prerelease: true - overwrite: true - edge: true - name: ${TRAVIS_TAG:-edge} - release_notes: $TRAVIS_COMMIT_MESSAGE - file: build/bin/RelWithDebInfo/solvespace-openmp.exe - on: - all_branches: true - - &deploy-snap - stage: deploy - name: Snap amd64 - os: linux - arch: amd64 - dist: bionic - addons: - snaps: - - name: snapcraft - confinement: classic - script: .travis/build-snap.sh - deploy: - - provider: script - script: sudo .travis/deploy-snap.sh edge - skip_cleanup: true - - provider: script - script: sudo .travis/deploy-snap.sh edge,beta - skip_cleanup: true - on: - tags: true - - <<: *deploy-snap - name: Snap arm64 - arch: arm64-graviton2 - group: edge - virt: lxd diff --git a/CHANGELOG.md b/CHANGELOG.md index f3faa47..8447d0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,8 @@ New sketch features: * "Split Curves at Intersection" can now split curves at point lying on curve, not just at intersection of two curves. * Property browser now shows amount of degrees of freedom in group list. + It also shows a yellow "err" if the sketch has problems (e.g. self + intersecting) that would propagate in subsequent groups. New constraint features: * When dragging an arc or rectangle point, it will be automatically @@ -53,7 +55,8 @@ New export/import features: * Wavefront OBJ: a material file is exported alongside the model, containing mesh color information. * DXF/DWG: 3D DXF files are imported as construction entities, in 3d. - * Q3D: [Q3D](https://github.com/q3k/q3d/) triangle meshes can now be + * [ADDED 2019-02-25](https://github.com/solvespace/solvespace/pull/384) and [REMOVED 2020-11-13](https://github.com/solvespace/solvespace/issues/795): + Q3D: [Q3D](https://github.com/q3k/q3d/) triangle meshes can now be exported. This format allows to easily hack on triangle mesh data created in SolveSpace, supports colour information and is more space efficient than most other formats. @@ -110,6 +113,7 @@ Other new features: that are shortcuts to the respective configuration screens. * New cmake build options using -DENABLE_OPENMP=yes and -DENABLE_LTO=yes to enable support for multi-threading and link-time optimization. + * "Shift+Scroll" for ten times finer zoom. Bugs fixed: * Fixed broken --view options for command line thumbnail image creation. diff --git a/CMakeLists.txt b/CMakeLists.txt index ad23d98..1294878 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -116,7 +116,6 @@ endif() if(ENABLE_OPENMP) find_package( OpenMP REQUIRED ) - include(FindOpenMP) if(OPENMP_FOUND) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") message(STATUS "found OpenMP, compiling with flags: " ${OpenMP_CXX_FLAGS} ) @@ -182,17 +181,6 @@ endif() message(STATUS "Using in-tree libdxfrw") add_subdirectory(extlib/libdxfrw) -message(STATUS "Using in-tree flatbuffers") -set(FLATBUFFERS_BUILD_FLATLIB ON CACHE BOOL "") -set(FLATBUFFERS_BUILD_FLATC ON CACHE BOOL "") -set(FLATBUFFERS_BUILD_FLATHASH OFF CACHE BOOL "") -set(FLATBUFFERS_BUILD_TESTS OFF CACHE BOOL "") -add_subdirectory(extlib/flatbuffers EXCLUDE_FROM_ALL) - -message(STATUS "Using in-tree q3d") -add_subdirectory(extlib/q3d) -set(Q3D_INCLUDE_DIR ${CMAKE_BINARY_DIR}/extlib/q3d) - message(STATUS "Using in-tree mimalloc") set(MI_OVERRIDE OFF CACHE BOOL "") set(MI_BUILD_SHARED OFF CACHE BOOL "") diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4caf715..aee8bb5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,11 +14,11 @@ Bug reports are always welcome! When reporting a bug, please include the followi GitHub does not allow attaching `*.slvs` files, but it does allow attaching `*.zip` files, so any savefiles should first be archived. -Signing the CLA +Licensing --------------- -To contribute code, translations, artwork, or other resources to SolveSpace, it is necessary to -sign a [Contributor License Agreement](https://cla-assistant.io/solvespace/solvespace). +SolveSpace is licensed under the GPLv3 and any contributions must be made available +under the terms of that license. Contributing translations ------------------------- diff --git a/README.md b/README.md index 394e33d..6e575a5 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -SolveSpace Logo +SolveSpace Logo SolveSpace ========== -[![Build Status](https://travis-ci.com/solvespace/solvespace.svg?branch=master)](https://travis-ci.com/solvespace/solvespace) +[![Build Status](https://github.com/solvespace/solvespace/workflows/CD/badge.svg)](https://github.com/solvespace/solvespace/actions) [![solvespace](https://snapcraft.io/solvespace/badge.svg)](https://snapcraft.io/solvespace) [![solvespace](https://snapcraft.io/solvespace/trending.svg?name=0)](https://snapcraft.io/solvespace) @@ -88,7 +88,7 @@ Before building, check out the project and the necessary submodules: git clone https://github.com/solvespace/solvespace cd solvespace - git submodule update --init extlib/libdxfrw extlib/flatbuffers extlib/q3d extlib/mimalloc + git submodule update --init extlib/libdxfrw extlib/mimalloc After that, build SolveSpace as following: @@ -108,7 +108,7 @@ Ubuntu will require 20.04 or above. Cross-compiling with WSL is also confirmed t You will need the usual build tools, CMake, a Windows cross-compiler, and flatc. On a Debian derivative (e.g. Ubuntu) these can be installed with: - apt-get install git build-essential cmake mingw-w64 libflatbuffers-dev + apt-get install git build-essential cmake mingw-w64 Before building, check out the project and the necessary submodules: @@ -182,7 +182,7 @@ Before building, check out the project and the necessary submodules: git clone https://github.com/solvespace/solvespace cd solvespace - git submodule update --init extlib/libdxfrw extlib/flatbuffers extlib/q3d extlib/mimalloc + git submodule update --init extlib/libdxfrw extlib/mimalloc After that, build SolveSpace as following: @@ -254,6 +254,4 @@ and debug SolveSpace. License ------- -SolveSpace is distributed under the terms of the [GPL v3 license](COPYING.txt). It is possible -to license SolveSpace for use in a commercial application; to do so, -[contact](http://solvespace.com/contact.pl) the developers. +SolveSpace is distributed under the terms of the [GPL v3 license](COPYING.txt). diff --git a/extlib/q3d/CMakeLists.txt b/extlib/q3d/CMakeLists.txt deleted file mode 100644 index 01771cf..0000000 --- a/extlib/q3d/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -cmake_minimum_required(VERSION 2.8) - -project(q3d) - -set(Q3D_HEADER_DIR ${CMAKE_CURRENT_BINARY_DIR}) -set(Q3D_SCHEMA ${CMAKE_CURRENT_SOURCE_DIR}/q3d_object.fbs) -set(Q3D_HEADER ${Q3D_HEADER_DIR}/q3d_object_generated.h) - -if(NOT FLATC) - # If not specified explicitly, use flatc from an adjacent flatbuffers - # CMake project. - add_custom_command( - OUTPUT ${Q3D_HEADER} - COMMAND $ --cpp --no-includes -o ${Q3D_HEADER_DIR} - ${Q3D_SCHEMA} - DEPENDS flatc) -else() - add_custom_command( - OUTPUT ${Q3D_HEADER} - COMMAND ${FLATC} --cpp --no-includes -o ${Q3D_HEADER_DIR} ${Q3D_SCHEMA}) -endif() - -add_custom_target(q3d_header DEPENDS ${Q3D_HEADER}) diff --git a/extlib/q3d/README.md b/extlib/q3d/README.md deleted file mode 100644 index 01f7eee..0000000 --- a/extlib/q3d/README.md +++ /dev/null @@ -1,66 +0,0 @@ -q3d - a boneless 3d object format for asset exchange -==================================================== - -q3d is what you should want to use if you want your application to export/import simple 3d meshes. - -It only supports triangle-based meshes. There is no support for NURBS surfaces, Bezier curves, ... It is not meant to be a primary format of storage for a 3d modelling program, or to represent parametric geometry. Instead, it should be used for 'baked' assets, for instance in games, CAM or CAD assembly. - -It's based on [FlatBuffers](https://google.github.io/flatbuffers/), so you get importers/exporters for 'free' in at least the following programming languages: - - C - - C++ - - C# - - Go - - Java - - Lua - - Python - - Rust - -Capabilities ------------- - -Currently we ship the spec for a 'q3d object' (`q3do`) file format. This format defines a single Object, that in turn contains multiple Meshes, each Mesh being made up of a list of Triangles and a Material. - -For more information, see `object.fbs`. - -Tool support ------------- - - - [SolveSpace](http://solvespace.com/index.pl), an open source 3D parametric CAM ([pull request](https://github.com/solvespace/solvespace/pull/384)) - - [HorizonEDA](https://github.com/carrotIndustries/horizon), an open source PCB CAD ([pullrequest](https://github.com/carrotIndustries/horizon/pull/236)) - -Why not..? ----------- - -Other file format? - - - STL: proprietary, no canonical colour support - - STEP: designed by a committee, closed ISO spec - - OBJ/MTL: split files for object and material data, complex feature set - - AMF: designed by a drunk committee, closed ISO spec - - COLLADA: designed by a batshit insane committee - - PLY: underspecified - -Features? - - - Units other than millimeters: No. - -Future development ------------------- - - - Textured triangles - - Examples - - Toolkit (STL converter, viewer, analyzer) - -License -------- - -This entire repository (including the specification, documentation and example code) is licensed under CC0, which means you are free to use it as if it were public domain. - -Usage -===== - -First, read the specification IDL (`object.fbs`). - -You will need FlatBuffers-the-library-for-your language, and FlatBuffers-the-flatc-compiler. - -See the [FlatBuffers website](https://google.github.io/flatbuffers/flatbuffers_guide_building.html) for more information on how to use FlatBuffers. diff --git a/extlib/q3d/q3d_object.fbs b/extlib/q3d/q3d_object.fbs deleted file mode 100644 index c64e870..0000000 --- a/extlib/q3d/q3d_object.fbs +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2019 Serge 'q3k' Bazanski -// This file is licensed under a Creative Commons CC0 license -// (https://creativecommons.org/share-your-work/public-domain/cc0/) - -// q3d - a boneless 3d object format for asset exchange. - -// Vaguely inspired by the Lowest Common Denominator of 3d files, STL. -// This format is extensible within the bounds of what FlatBuffers offer. -// However, such exensions are fundamentally incompatible with upstream 'q3d' -// files, as extension identifiers may clash with other extensions. As such, -// we kindly ask to not claim q3d compatibility if such extensions are in use -// by your application, and instead either wrap the top-level Object in your -// own FlatBuffer IDL, or upstream your required changes. - -namespace q3d; - -struct Vector3 { - x: float32; - y: float32; - z: float32; -} - -table Color { - // Red channel. - r: ubyte (id: 0); - // Green channel. - g: ubyte (id: 1); - // Blue channel. - b: ubyte (id: 2); - // Alpha channel. 0 is transparent, 255 is opaque. - // This is the transparency applied to a mesh triangle during rasterization - // rendering. Backside triangles have no opacity - // at all. Optional. - a: ubyte = 255 (id: 3); -} - -// Single-sided triangle. -table Triangle { - // Three vertices that make up the geometry of the triangle. Required. - // Position of vertices is in mm. - vertex1: Vector3 (required, id: 0); - vertex2: Vector3 (required, id: 1); - vertex3: Vector3 (required, id: 2); - - // Consumers must use normal data in the following way: - // 1) if all three vertex normals are given, they will be used, - // 2) otherwise, if the face normal is given, it will be used, - // 3) otherwise, a face normal will be calculated from trinangle verties - // (in counter-clockwise front-facing mode). - // If the consumer does not support vertex normals, it can skip step 1). - // This means that the producer is free to include either a face normal, - // vertex normals, both or none. - - // Normal vectors do not have to be unit vectors. - - faceNormal: Vector3 (id: 3); - // vertexNormal{1,2,3} correspond to vertices vertex{1,2,3} - vertexNormal1: Vector3 (id: 4); - vertexNormal2: Vector3 (id: 5); - vertexNormal3: Vector3 (id: 6); -} - -// A Material describes the visual properties of a Mesh. -table Material { - // Opaque identifier for material, to be displayed to human end-user by consuming - // tool. Optional. - name: string (id: 0); - // Mesh color, applied to every triangle. Required. - color: Color (required, id: 1); -} - -// A Mesh is a collection of Triangles that introduces material information. -table Mesh { - // Triangles that make up the mesh. Required, can be empty (but why would - // you do that). - // A mesh that represents a closed volume will have all triangles fully - // tesselated. However, this is not required nor guaranteed, and consumers - // should not assume this. - triangles: [Triangle] (required, id: 0); - // Material that the mesh uses. Required. - material: Material (required, id: 1); -} - -// An Object is a collection of Meshes and the Root Type of the format. -table Object { - // Meshes that make up the object. Required. - meshes: [Mesh] (required, id: 0); -} - -// We brand the identifier and file extensions with 'o' for object. In case -// we would also like to convey other data (either multi-object scenes, CAD -// data, ...), these can be implemented in higher-level formats sharing the -// same 'q3d' prefix family. - -file_identifier "Q3DO"; -file_extension "q3do"; -root_type Object; diff --git a/pkg/snap/snap/snapcraft.yaml b/pkg/snap/snap/snapcraft.yaml index 400ea19..5fe5f7b 100644 --- a/pkg/snap/snap/snapcraft.yaml +++ b/pkg/snap/snap/snapcraft.yaml @@ -45,7 +45,7 @@ parts: snapcraftctl set-version "$version" git describe --exact-match HEAD && grade="stable" || grade="devel" snapcraftctl set-grade "$grade" - git submodule update --init extlib/libdxfrw extlib/flatbuffers extlib/q3d extlib/mimalloc + git submodule update --init extlib/libdxfrw extlib/mimalloc configflags: - -DCMAKE_INSTALL_PREFIX=/usr - -DCMAKE_BUILD_TYPE=Release diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt index 5969039..e261ba2 100644 --- a/res/CMakeLists.txt +++ b/res/CMakeLists.txt @@ -213,6 +213,7 @@ add_resources( icons/graphics-window/construction.png icons/graphics-window/equal.png icons/graphics-window/extrude.png + icons/graphics-window/helix.png icons/graphics-window/horiz.png icons/graphics-window/image.png icons/graphics-window/in3d.png @@ -227,6 +228,7 @@ add_resources( icons/graphics-window/point.png icons/graphics-window/rectangle.png icons/graphics-window/ref.png + icons/graphics-window/revolve.png icons/graphics-window/same-orientation.png icons/graphics-window/sketch-in-3d.png icons/graphics-window/sketch-in-plane.png diff --git a/res/fonts/unifont.hex.gz b/res/fonts/unifont.hex.gz deleted file mode 100644 index db7a710..0000000 Binary files a/res/fonts/unifont.hex.gz and /dev/null differ diff --git a/res/icons/graphics-window/helix.png b/res/icons/graphics-window/helix.png new file mode 100644 index 0000000..4b2cda6 Binary files /dev/null and b/res/icons/graphics-window/helix.png differ diff --git a/res/icons/graphics-window/revolve.png b/res/icons/graphics-window/revolve.png new file mode 100644 index 0000000..0cef0fa Binary files /dev/null and b/res/icons/graphics-window/revolve.png differ diff --git a/res/locales/de_DE.po b/res/locales/de_DE.po index bf858b1..9222a1d 100644 --- a/res/locales/de_DE.po +++ b/res/locales/de_DE.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2020-11-17 20:50-0500\n" +"POT-Creation-Date: 2021-01-17 19:54+0200\n" "PO-Revision-Date: 2018-07-19 06:55+0000\n" "Last-Translator: Reini Urban \n" "Language-Team: none\n" @@ -17,7 +17,7 @@ msgstr "" "X-Generator: Zanata 4.5.0\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: clipboard.cpp:274 +#: clipboard.cpp:310 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -28,27 +28,27 @@ msgstr "" "\n" "Aktivieren Sie eine mit Skizze -> In Arbeitsebene" -#: clipboard.cpp:291 +#: clipboard.cpp:327 msgid "Clipboard is empty; nothing to paste." msgstr "Zwischenablage ist leer; es gibt nichts einzufügen." -#: clipboard.cpp:338 +#: clipboard.cpp:374 msgid "Number of copies to paste must be at least one." msgstr "Die Anzahl der einzufügenden Kopien muss mind. 1 sein." -#: clipboard.cpp:354 textscreens.cpp:783 +#: clipboard.cpp:390 textscreens.cpp:783 msgid "Scale cannot be zero." msgstr "Maßstab kann nicht Null sein." -#: clipboard.cpp:396 +#: clipboard.cpp:432 msgid "Select one point to define origin of rotation." msgstr "Wählen Sie einen Punkt, um den Drehmittelpunkt zu definieren." -#: clipboard.cpp:408 +#: clipboard.cpp:444 msgid "Select two points to define translation vector." msgstr "Wählen Sie zwei Punkte, um den Verschiebungsvektor zu definieren." -#: clipboard.cpp:418 +#: clipboard.cpp:454 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." @@ -56,25 +56,25 @@ msgstr "" "Die Transformation ist die Identität. Alle Kopien werden deckungsgleich " "übereinanderliegen." -#: clipboard.cpp:422 +#: clipboard.cpp:458 msgid "Too many items to paste; split this into smaller pastes." msgstr "" "Zuviele Objekte zum Einfügen; teilen Sie diese in kleinere " "Einfügeoperationen auf." -#: clipboard.cpp:427 +#: clipboard.cpp:463 msgid "No workplane active." msgstr "Es ist keine Arbeitsebene aktiv." -#: confscreen.cpp:410 +#: confscreen.cpp:418 msgid "Bad format: specify coordinates as x, y, z" msgstr "Ungültiges Format: geben Sie Koordinaten als x, y, z an" -#: confscreen.cpp:420 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 msgid "Bad format: specify color as r, g, b" msgstr "Ungültiges Format: geben Sie Farben als r, g, b an" -#: confscreen.cpp:446 +#: confscreen.cpp:454 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." @@ -82,25 +82,25 @@ msgstr "" "Der Perspektivfaktor wird sich nicht auswirken, bis Sie Ansicht -> " "Perspektive Projektion aktivieren." -#: confscreen.cpp:459 confscreen.cpp:469 +#: confscreen.cpp:467 confscreen.cpp:477 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "Geben Sie 0 bis %d Ziffern nach dem Dezimalzeichen an." -#: confscreen.cpp:481 +#: confscreen.cpp:489 msgid "Export scale must not be zero!" msgstr "Der Exportmaßstab darf nicht Null sein!" -#: confscreen.cpp:493 +#: confscreen.cpp:501 msgid "Cutter radius offset must not be negative!" msgstr "Der Werkzeugradialabstand darf nicht negativ sein!" -#: confscreen.cpp:547 +#: confscreen.cpp:555 msgid "Bad value: autosave interval should be positive" msgstr "" "Ungültiger Wert: Interval für automatisches Speichern muss positiv sein" -#: confscreen.cpp:550 +#: confscreen.cpp:558 msgid "Bad format: specify interval in integral minutes" msgstr "Ungültiges Format: geben Sie das Interval in ganzen Minuten an" @@ -279,7 +279,33 @@ msgctxt "constr-name" msgid "comment" msgstr "Kommentar" -#: constraint.cpp:171 +#: constraint.cpp:140 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"Die Bogentangente und das Liniensegment müssen einen gemeinsamen Endpunkt " +"haben. Schränken Sie mit \"Einschränkung / Auf Punkt\" ein, bevor Sie die " +"Tangente einschränken. -> Sc" + +#: constraint.cpp:158 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"Die Kurventangente und das Liniensegment müssen einen gemeinsamen Endpunkt " +"haben. Schränken Sie mit \"Einschränkung / Auf Punkt\" ein, bevor Sie die " +"Tangente einschränken. -> Sc" + +#: constraint.cpp:183 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"Die Kurven müssen einen gemeinsamen Endpunkt haben. Schränken Sie mit " +"\"Einschränkung / Auf Punkt\" ein, bevor Sie die Tangente einschränken. -> Sc" + +#: constraint.cpp:231 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -303,7 +329,7 @@ msgstr "" " * eine Seitenfläche und ein Punkt [minimaler Abstand]\n" " * ein Kreis oder ein Bogen [Durchmesser]\n" -#: constraint.cpp:224 +#: constraint.cpp:284 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -323,7 +349,7 @@ msgstr "" " * einen Punkt und einen Kreis oder Bogen [Punkt auf Kurve]\n" " * einen Punkt und eine Seitenfläche [Punkt auf Fläche]\n" -#: constraint.cpp:286 +#: constraint.cpp:346 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -354,7 +380,7 @@ msgstr "" " * ein Liniensegment und ein Bogen [Länge des Liniensegments gleich " "Bogenlänge]\n" -#: constraint.cpp:325 +#: constraint.cpp:385 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" @@ -365,7 +391,7 @@ msgstr "" "\n" " * zwei Liniensegmente\n" -#: constraint.cpp:342 +#: constraint.cpp:402 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" @@ -377,7 +403,7 @@ msgstr "" "\n" " * zwei Liniensegmente\n" -#: constraint.cpp:368 +#: constraint.cpp:428 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -391,7 +417,7 @@ msgstr "" " * ein Liniensegment und eine Arbeitsebene [Mittelpunkt der Linie auf " "Ebene]\n" -#: constraint.cpp:426 +#: constraint.cpp:486 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -412,7 +438,7 @@ msgstr "" " * eine Arbeitsebene und zwei Punkte oder ein Liniensegment [symmetrisch " "zu Arbeitsebene]\n" -#: constraint.cpp:440 +#: constraint.cpp:500 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." @@ -420,7 +446,7 @@ msgstr "" "Eine Arbeitsebene muss aktiv sein, um die Symmetrie ohne explizite " "Symmetrieebene einzuschränken." -#: constraint.cpp:470 +#: constraint.cpp:530 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." @@ -428,7 +454,7 @@ msgstr "" "Aktivieren Sie eine Arbeitsebene (mit Skizze -> In Arbeitsebene), bevor Sie " "horizontal oder vertikal einschränken." -#: constraint.cpp:483 +#: constraint.cpp:543 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -442,7 +468,7 @@ msgstr "" " * zwei Punkte\n" " * ein Liniensegment\n" -#: constraint.cpp:504 +#: constraint.cpp:564 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -454,15 +480,15 @@ msgstr "" "\n" " * zwei Normale\n" -#: constraint.cpp:554 +#: constraint.cpp:614 msgid "Must select an angle constraint." msgstr "Sie müssen einen eingeschränkten Winkel auswählen." -#: constraint.cpp:567 +#: constraint.cpp:627 msgid "Must select a constraint with associated label." msgstr "Sie müssen eine Einschränkung mit zugeordneter Kennzeichnung angeben." -#: constraint.cpp:578 +#: constraint.cpp:638 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -477,38 +503,12 @@ msgstr "" " * ein Liniensegment und eine Normale\n" " * zwei Normale\n" -#: constraint.cpp:635 -msgid "" -"The tangent arc and line segment must share an endpoint. Constrain them with " -"Constrain -> On Point before constraining tangent." -msgstr "" -"Die Bogentangente und das Liniensegment müssen einen gemeinsamen Endpunkt " -"haben. Schränken Sie mit \"Einschränkung / Auf Punkt\" ein, bevor Sie die " -"Tangente einschränken. -> Sc" - -#: constraint.cpp:659 -msgid "" -"The tangent cubic and line segment must share an endpoint. Constrain them " -"with Constrain -> On Point before constraining tangent." -msgstr "" -"Die Kurventangente und das Liniensegment müssen einen gemeinsamen Endpunkt " -"haben. Schränken Sie mit \"Einschränkung / Auf Punkt\" ein, bevor Sie die " -"Tangente einschränken. -> Sc" - -#: constraint.cpp:669 +#: constraint.cpp:701 msgid "Curve-curve tangency must apply in workplane." msgstr "" "Die Kurven-Kurven-Tangente muss in der Arbeitsebene eingeschränkt werden." -#: constraint.cpp:687 -msgid "" -"The curves must share an endpoint. Constrain them with Constrain -> On Point " -"before constraining tangent." -msgstr "" -"Die Kurven müssen einen gemeinsamen Endpunkt haben. Schränken Sie mit " -"\"Einschränkung / Auf Punkt\" ein, bevor Sie die Tangente einschränken. -> Sc" - -#: constraint.cpp:696 +#: constraint.cpp:711 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -527,7 +527,7 @@ msgstr "" " * zwei Liniensegmente, Bögen oder Beziers mit gemeinsamem Endpunkt " "[Tangente]\n" -#: constraint.cpp:714 +#: constraint.cpp:729 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -542,7 +542,7 @@ msgstr "" " * ein Liniensegment und eine Normale\n" " * zwei Normale\n" -#: constraint.cpp:729 +#: constraint.cpp:744 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -554,7 +554,7 @@ msgstr "" "\n" " * einen Punkt\n" -#: constraint.cpp:740 +#: constraint.cpp:755 msgid "click center of comment text" msgstr "Klicken Sie auf die Mitte des Kommentartextes" @@ -660,7 +660,7 @@ msgctxt "button" msgid "&No" msgstr "&Nein" -#: file.cpp:869 +#: file.cpp:869 solvespace.cpp:569 msgctxt "button" msgid "&Cancel" msgstr "&Abbrechen" @@ -826,300 +826,304 @@ msgid "Show Snap &Grid" msgstr "Arbeitsraster anzeigen" #: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Dunklere inaktive Festkörper" + +#: graphicswin.cpp:96 msgid "Use &Perspective Projection" msgstr "Perspektivische Projektion" -#: graphicswin.cpp:96 +#: graphicswin.cpp:97 msgid "Dimension &Units" msgstr "Maßeinheit" -#: graphicswin.cpp:97 +#: graphicswin.cpp:98 msgid "Dimensions in &Millimeters" msgstr "Maße in Millimeter" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in M&eters" msgstr "Masse in M&etern" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in &Inches" msgstr "Maße in Zoll" -#: graphicswin.cpp:101 +#: graphicswin.cpp:102 msgid "Show &Toolbar" msgstr "Werkzeugleiste anzeigen" -#: graphicswin.cpp:102 +#: graphicswin.cpp:103 msgid "Show Property Bro&wser" msgstr "Attributbrowser anzeigen" -#: graphicswin.cpp:104 +#: graphicswin.cpp:105 msgid "&Full Screen" msgstr "Vollbildschirm" -#: graphicswin.cpp:106 +#: graphicswin.cpp:107 msgid "&New Group" msgstr "Neue Gruppe" -#: graphicswin.cpp:107 +#: graphicswin.cpp:108 msgid "Sketch In &3d" msgstr "In 3D skizzieren" -#: graphicswin.cpp:108 +#: graphicswin.cpp:109 msgid "Sketch In New &Workplane" msgstr "In neuer Arbeitsebene skizzieren" -#: graphicswin.cpp:110 +#: graphicswin.cpp:111 msgid "Step &Translating" msgstr "Kopieren und verschieben" -#: graphicswin.cpp:111 +#: graphicswin.cpp:112 msgid "Step &Rotating" msgstr "Kopieren und drehen" -#: graphicswin.cpp:113 +#: graphicswin.cpp:114 msgid "E&xtrude" msgstr "E&xtrudieren" -#: graphicswin.cpp:114 +#: graphicswin.cpp:115 msgid "&Helix" msgstr "&Helix" -#: graphicswin.cpp:115 +#: graphicswin.cpp:116 msgid "&Lathe" msgstr "R&otieren" -#: graphicswin.cpp:116 +#: graphicswin.cpp:117 msgid "Re&volve" msgstr "D&rehen" -#: graphicswin.cpp:118 +#: graphicswin.cpp:119 msgid "Link / Assemble..." msgstr "Verknüpfen / Zusammensetzen" -#: graphicswin.cpp:119 +#: graphicswin.cpp:120 msgid "Link Recent" msgstr "Letzte verknüpfen" -#: graphicswin.cpp:121 +#: graphicswin.cpp:122 msgid "&Sketch" msgstr "&Skizze" -#: graphicswin.cpp:122 +#: graphicswin.cpp:123 msgid "In &Workplane" msgstr "In Arbeitsebene" -#: graphicswin.cpp:123 +#: graphicswin.cpp:124 msgid "Anywhere In &3d" msgstr "Im 3D-Raum" -#: graphicswin.cpp:125 +#: graphicswin.cpp:126 msgid "Datum &Point" msgstr "Bezugspunkt" -#: graphicswin.cpp:126 +#: graphicswin.cpp:127 msgid "&Workplane" msgstr "Arbeits&ebene" -#: graphicswin.cpp:128 +#: graphicswin.cpp:129 msgid "Line &Segment" msgstr "&Linie" -#: graphicswin.cpp:129 +#: graphicswin.cpp:130 msgid "C&onstruction Line Segment" msgstr "K&onstruktionslinie" -#: graphicswin.cpp:130 +#: graphicswin.cpp:131 msgid "&Rectangle" msgstr "&Rechteck" -#: graphicswin.cpp:131 +#: graphicswin.cpp:132 msgid "&Circle" msgstr "&Kreis" -#: graphicswin.cpp:132 +#: graphicswin.cpp:133 msgid "&Arc of a Circle" msgstr "Kreisbogen" -#: graphicswin.cpp:133 +#: graphicswin.cpp:134 msgid "&Bezier Cubic Spline" msgstr "Kubischer &Bezier-Spline" -#: graphicswin.cpp:135 +#: graphicswin.cpp:136 msgid "&Text in TrueType Font" msgstr "&Text in Truetype-Font" -#: graphicswin.cpp:136 +#: graphicswin.cpp:137 msgid "&Image" msgstr "B&ild" -#: graphicswin.cpp:138 +#: graphicswin.cpp:139 msgid "To&ggle Construction" msgstr "Konstruktionselement an/aus" -#: graphicswin.cpp:139 +#: graphicswin.cpp:140 msgid "Tangent &Arc at Point" msgstr "Bogentangente an Punkt" -#: graphicswin.cpp:140 +#: graphicswin.cpp:141 msgid "Split Curves at &Intersection" msgstr "Kurven im Schnittpunkt trennen" -#: graphicswin.cpp:142 +#: graphicswin.cpp:143 msgid "&Constrain" msgstr "&Einschränkung" -#: graphicswin.cpp:143 +#: graphicswin.cpp:144 msgid "&Distance / Diameter" msgstr "Abstand / Durchmesser" -#: graphicswin.cpp:144 +#: graphicswin.cpp:145 msgid "Re&ference Dimension" msgstr "Referenzangabe" -#: graphicswin.cpp:145 +#: graphicswin.cpp:146 msgid "A&ngle" msgstr "Winkel" -#: graphicswin.cpp:146 +#: graphicswin.cpp:147 msgid "Reference An&gle" msgstr "Referenzwinkel" -#: graphicswin.cpp:147 +#: graphicswin.cpp:148 msgid "Other S&upplementary Angle" msgstr "Komplementärwinkel" -#: graphicswin.cpp:148 +#: graphicswin.cpp:149 msgid "Toggle R&eference Dim" msgstr "Referenzangabe ein/aus" -#: graphicswin.cpp:150 +#: graphicswin.cpp:151 msgid "&Horizontal" msgstr "Horizontal" -#: graphicswin.cpp:151 +#: graphicswin.cpp:152 msgid "&Vertical" msgstr "&Vertikal" -#: graphicswin.cpp:153 +#: graphicswin.cpp:154 msgid "&On Point / Curve / Plane" msgstr "Auf Punkt / Kurve / Ebene" -#: graphicswin.cpp:154 +#: graphicswin.cpp:155 msgid "E&qual Length / Radius / Angle" msgstr "Gleicher Abstand / Radius / Winkel" -#: graphicswin.cpp:155 +#: graphicswin.cpp:156 msgid "Length Ra&tio" msgstr "Längenverhältnis" -#: graphicswin.cpp:156 +#: graphicswin.cpp:157 msgid "Length Diff&erence" msgstr "Längendifferenz" -#: graphicswin.cpp:157 +#: graphicswin.cpp:158 msgid "At &Midpoint" msgstr "Auf &Mittelpunkt" -#: graphicswin.cpp:158 +#: graphicswin.cpp:159 msgid "S&ymmetric" msgstr "Symmetrisch" -#: graphicswin.cpp:159 +#: graphicswin.cpp:160 msgid "Para&llel / Tangent" msgstr "Paral&llel / Tangente" -#: graphicswin.cpp:160 +#: graphicswin.cpp:161 msgid "&Perpendicular" msgstr "Rechtwinklig" -#: graphicswin.cpp:161 +#: graphicswin.cpp:162 msgid "Same Orient&ation" msgstr "Gleiche Orientierung" -#: graphicswin.cpp:162 +#: graphicswin.cpp:163 msgid "Lock Point Where &Dragged" msgstr "Punkt an Position fixieren" -#: graphicswin.cpp:164 +#: graphicswin.cpp:165 msgid "Comment" msgstr "Kommentar" -#: graphicswin.cpp:166 +#: graphicswin.cpp:167 msgid "&Analyze" msgstr "&Analyse" -#: graphicswin.cpp:167 +#: graphicswin.cpp:168 msgid "Measure &Volume" msgstr "&Volumen bestimmen" -#: graphicswin.cpp:168 +#: graphicswin.cpp:169 msgid "Measure A&rea" msgstr "Fläche bestimmen" -#: graphicswin.cpp:169 +#: graphicswin.cpp:170 msgid "Measure &Perimeter" msgstr "Umfang bestimmen" -#: graphicswin.cpp:170 +#: graphicswin.cpp:171 msgid "Show &Interfering Parts" msgstr "Überlagernde Teile anzeigen" -#: graphicswin.cpp:171 +#: graphicswin.cpp:172 msgid "Show &Naked Edges" msgstr "Freiliegende Kanten anzeigen" -#: graphicswin.cpp:172 +#: graphicswin.cpp:173 msgid "Show &Center of Mass" msgstr "Massenmittelpunkt anzeigen" -#: graphicswin.cpp:174 +#: graphicswin.cpp:175 msgid "Show &Underconstrained Points" msgstr "&Unterbeschränkte Punkte anzeigen" -#: graphicswin.cpp:176 +#: graphicswin.cpp:177 msgid "&Trace Point" msgstr "Punkt nachzeichnen" -#: graphicswin.cpp:177 +#: graphicswin.cpp:178 msgid "&Stop Tracing..." msgstr "Nachzeichnen beenden" -#: graphicswin.cpp:178 +#: graphicswin.cpp:179 msgid "Step &Dimension..." msgstr "Schrittgröße…" -#: graphicswin.cpp:180 +#: graphicswin.cpp:181 msgid "&Help" msgstr "&Hilfe" -#: graphicswin.cpp:181 +#: graphicswin.cpp:182 msgid "&Language" msgstr "Sprache" -#: graphicswin.cpp:182 +#: graphicswin.cpp:183 msgid "&Website / Manual" msgstr "&Website / Anleitung" -#: graphicswin.cpp:184 +#: graphicswin.cpp:185 msgid "&About" msgstr "Über" -#: graphicswin.cpp:352 +#: graphicswin.cpp:355 msgid "(no recent files)" msgstr "(keine vorhergehenden Dateien)" -#: graphicswin.cpp:360 +#: graphicswin.cpp:363 #, c-format msgid "File '%s' does not exist." -msgstr "" +msgstr "Datei '%s' existiert nicht." -#: graphicswin.cpp:721 +#: graphicswin.cpp:725 msgid "No workplane is active, so the grid will not appear." msgstr "" "Das Raster wird nicht angezeigt, weil keine Arbeitsebene ausgewählt ist." -#: graphicswin.cpp:730 +#: graphicswin.cpp:740 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1133,20 +1137,20 @@ msgstr "" "Ändern Sie den Faktor für die Perspektivprojektion in der " "Konfigurationsmaske. Ein typischer Wert ist ca. 0,3." -#: graphicswin.cpp:809 +#: graphicswin.cpp:819 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "" "Wählen Sie einen Punkt aus; dieser Punkt wird im Mittelpunkt der " "Bildschirmansicht sein." -#: graphicswin.cpp:1103 +#: graphicswin.cpp:1114 msgid "No additional entities share endpoints with the selected entities." msgstr "" "Die ausgewählten Objekte teilen keine gemeinsamen Endpunkte mit anderen " "Objekten." -#: graphicswin.cpp:1121 +#: graphicswin.cpp:1132 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." @@ -1154,7 +1158,7 @@ msgstr "" "Für diesen Befehl wählen Sie einen Punkt oder ein anderes Objekt von einem " "verknüpften Teil aus, oder aktivieren Sie eine verknüpfte Gruppe." -#: graphicswin.cpp:1144 +#: graphicswin.cpp:1155 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." @@ -1163,7 +1167,7 @@ msgstr "" "(mit Skizze -> In Arbeitsebene), um die Ebene für das Gitterraster zu " "definieren." -#: graphicswin.cpp:1151 +#: graphicswin.cpp:1162 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." @@ -1172,13 +1176,13 @@ msgstr "" "für Punkte, Textkommentare, oder Einschränkungen mit einer Bezeichnung. Um " "eine Linie auf das Raster auszurichten, wählen Sie deren Endpunkte aus." -#: graphicswin.cpp:1239 +#: graphicswin.cpp:1247 msgid "No workplane selected. Activating default workplane for this group." msgstr "" "Es wurde keine Arbeitsebene ausgewählt. Die Standard-Arbeitsebene für diese " "Gruppe wird aktiviert." -#: graphicswin.cpp:1242 +#: graphicswin.cpp:1250 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" @@ -1188,7 +1192,7 @@ msgstr "" "standardmäßige Arbeitsebene. Wählen Sie eine Arbeitsebene aus, oder " "erstellen Sie eine Gruppe in einer neuen Arbeitsebene." -#: graphicswin.cpp:1263 +#: graphicswin.cpp:1271 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." @@ -1196,48 +1200,48 @@ msgstr "" "Ungültige Auswahl für Bogentangente an Punkt. Wählen Sie einen einzelnen " "Punkt. Um die Bogenparameter anzugeben, wählen Sie nichts aus." -#: graphicswin.cpp:1274 +#: graphicswin.cpp:1282 msgid "click point on arc (draws anti-clockwise)" msgstr "" "Erstellen Sie einen Punkt auf dem Bogen (zeichnet im Gegenuhrzeigersinn)" -#: graphicswin.cpp:1275 +#: graphicswin.cpp:1283 msgid "click to place datum point" msgstr "Klicken Sie, um einen Bezugspunkt zu platzieren" -#: graphicswin.cpp:1276 +#: graphicswin.cpp:1284 msgid "click first point of line segment" msgstr "Klicken Sie auf den ersten Punkt des Liniensegments" -#: graphicswin.cpp:1278 +#: graphicswin.cpp:1286 msgid "click first point of construction line segment" msgstr "Klicken Sie auf den ersten Punkt der Konstruktionslinie" -#: graphicswin.cpp:1279 +#: graphicswin.cpp:1287 msgid "click first point of cubic segment" msgstr "Klicken Sie auf den ersten Punkt der kubischen Linie" -#: graphicswin.cpp:1280 +#: graphicswin.cpp:1288 msgid "click center of circle" msgstr "Klicken Sie auf den Kreismittelpunkt" -#: graphicswin.cpp:1281 +#: graphicswin.cpp:1289 msgid "click origin of workplane" msgstr "Klicken Sie auf den Ursprungspunkt der Arbeitsebene" -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1290 msgid "click one corner of rectangle" msgstr "Klicken Sie auf eine Ecke des Rechtecks" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1291 msgid "click top left of text" msgstr "Klicken Sie auf die obere linke Ecke des Texts" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1297 msgid "click top left of image" msgstr "Klicken Sie auf die obere linke Ecke des Bilds" -#: graphicswin.cpp:1301 +#: graphicswin.cpp:1309 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1259,7 +1263,7 @@ msgid "" "lines)\n" " * a workplane (copy of the workplane)\n" msgstr "" -"Ungültige Auswahl für Skizze in neuer Arbeitsebene Diese Gruppe kann " +"Ungültige Auswahl für Skizze in neuer Arbeitsebene. Diese Gruppe kann " "erstellt werden mit:\n" "\n" " * einem Punkt (durch den Punkt, orthogonal zu den Koordinatenachsen)\n" @@ -1282,7 +1286,7 @@ msgstr "Extrusion" #: group.cpp:168 msgid "Lathe operation can only be applied to planar sketches." -msgstr "" +msgstr "Rotieren kann nur mit planaren Skizzen ausgeführt werden." #: group.cpp:179 msgid "" @@ -1292,7 +1296,7 @@ msgid "" "to line / normal, through point)\n" " * a line segment (revolved about line segment)\n" msgstr "" -"Ungültige Auswahl für neue Gruppe mit Drehquerschnitt Diese Gruppe kann " +"Ungültige Auswahl für neue Gruppe mit Drehquerschnitt. Diese Gruppe kann " "erstellt werden mit:\n" "\n" " * einem Punkt und einem Liniensegment oder einer Normale (Drehung um " @@ -1306,7 +1310,7 @@ msgstr "Drehung" #: group.cpp:194 msgid "Revolve operation can only be applied to planar sketches." -msgstr "" +msgstr "Revolve kann nur mit planaren Skizzen ausgeführt werden." #: group.cpp:205 msgid "" @@ -1316,15 +1320,21 @@ msgid "" "to line / normal, through point)\n" " * a line segment (revolved about line segment)\n" msgstr "" +"Ungültige Auswahl für eine neue Revolve Gruppe. Diese Gruppe kann erzeugt " +"werden mit:\n" +"\n" +" * einem Punkt und einem Liniensegment oder Normale (gedreht um eine " +"Achse parallel zu Linie / Normale, durch Punkt)\n" +" * einem Liniensegment (gedreht um Liniensegment)\n" #: group.cpp:217 msgctxt "group-name" msgid "revolve" -msgstr "" +msgstr "Revolve" #: group.cpp:222 msgid "Helix operation can only be applied to planar sketches." -msgstr "" +msgstr "Helix kann nur mit planaren Skizzen ausgeführt werden." #: group.cpp:233 msgid "" @@ -1334,11 +1344,17 @@ msgid "" "to line / normal, through point)\n" " * a line segment (revolved about line segment)\n" msgstr "" +"Ungültige Auswahl für eine neue Helix Gruppe. Diese Gruppe kann erzeugt " +"werden mit:\n" +"\n" +" * einem Punkt und einem Liniensegment oder Normale (gedreht um eine " +"Achse parallel zu Linie / Normale, durch Punkt)\n" +" * einem Liniensegment (gedreht um Liniensegment)\n" #: group.cpp:245 msgctxt "group-name" msgid "helix" -msgstr "" +msgstr "Helix" #: group.cpp:258 msgid "" @@ -1349,12 +1365,12 @@ msgid "" " * a point and a line or a normal (rotate about an axis through the " "point, and parallel to line / normal)\n" msgstr "" -"Ungültige Auswahl für neue Rotation Diese Gruppe kann erstellt werden mit:\n" +"Ungültige Auswahl für neue Rotation. Diese Gruppe kann erstellt werden mit:\n" "\n" -" * einem Punkt in vorgegebener Arbeitsebene (in der Ebene um den Punkt " -"drehen)\n" -" * einem Punkt und einer Linie oder einer Normale (um eine Achse durch " -"den Punkt drehen, parallel zur Linie / Normale)\n" +" * einem Punkt in vorgegebener Arbeitsebene (gedreht in der Ebene um den " +"Punkt)\n" +" * einem Punkt und einer Linie oder einer Normale (gedreht um eine Achse " +"durch den Punkt, parallel zur Linie / Normale)\n" #: group.cpp:271 msgctxt "group-name" @@ -1370,19 +1386,19 @@ msgstr "Versetzen" msgid "(unnamed)" msgstr "unbenannt" -#: groupmesh.cpp:708 +#: groupmesh.cpp:709 msgid "not closed contour, or not all same style!" msgstr "Kontur nicht geschlossen, oder kein einheitlicher Linientyp!" -#: groupmesh.cpp:721 +#: groupmesh.cpp:722 msgid "points not all coplanar!" msgstr "Punkte sind nicht alle koplanar!" -#: groupmesh.cpp:723 +#: groupmesh.cpp:724 msgid "contour is self-intersecting!" msgstr "Kontur überschneidet sich selbst!" -#: groupmesh.cpp:725 +#: groupmesh.cpp:726 msgid "zero-length edge!" msgstr "Kante mit Länge Null!" @@ -1524,11 +1540,11 @@ msgstr "Aktive deselektieren" msgid "Zoom to Fit" msgstr "Zoom an Bildschirm anpassen" -#: mouse.cpp:990 mouse.cpp:1277 +#: mouse.cpp:989 mouse.cpp:1276 msgid "click next point of line, or press Esc" msgstr "Klicken Sie auf den nächsten Punkt der Linie, oder drücken Sie Esc" -#: mouse.cpp:996 +#: mouse.cpp:995 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1536,15 +1552,15 @@ msgstr "" "Ein Rechteck kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine " "Arbeitsebene mit \"Skizze -> In Arbeitsebene\"." -#: mouse.cpp:1030 +#: mouse.cpp:1029 msgid "click to place other corner of rectangle" msgstr "Klicken Sie auf die gegenüberliegende Ecke des Rechtecks" -#: mouse.cpp:1050 +#: mouse.cpp:1049 msgid "click to set radius" msgstr "Klicken Sie, um den Radius festzulegen" -#: mouse.cpp:1055 +#: mouse.cpp:1054 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1552,23 +1568,23 @@ msgstr "" "Ein Kreisbogen kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine " "Arbeitsebene mit \"Skizze -> In Arbeitsebene\"." -#: mouse.cpp:1074 +#: mouse.cpp:1073 msgid "click to place point" msgstr "Klicken Sie, um einen Punkt zu platzieren" -#: mouse.cpp:1090 +#: mouse.cpp:1089 msgid "click next point of cubic, or press Esc" msgstr "" "Klicken Sie auf den nächsten Punkt der kubischen Linie, oder drücken Sie Esc" -#: mouse.cpp:1095 +#: mouse.cpp:1094 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" "Eine Arbeitsebene ist bereits aktiv. Skizzieren Sie in 3D, bevor Sie eine " "neue Arbeitsebene erstellen." -#: mouse.cpp:1111 +#: mouse.cpp:1110 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1576,11 +1592,11 @@ msgstr "" "Text kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine " "Arbeitsebene mit \"Skizze -> In Arbeitsebene\"." -#: mouse.cpp:1128 +#: mouse.cpp:1127 msgid "click to place bottom right of text" msgstr "Klicken Sie auf die untere rechte Ecke des Texts" -#: mouse.cpp:1134 +#: mouse.cpp:1133 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1588,11 +1604,11 @@ msgstr "" "Das Bild kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine " "Arbeitsebene mit \"Skizze -> In Arbeitsebene\"." -#: mouse.cpp:1161 +#: mouse.cpp:1160 msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" msgstr "NEUER KOMMENTAR -- DOPPELKLICKEN ZUM BEARBEITEN" -#: platform/gui.cpp:85 platform/gui.cpp:89 +#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 msgctxt "file-type" msgid "SolveSpace models" msgstr "SolveSpace-Modelle" @@ -1600,7 +1616,7 @@ msgstr "SolveSpace-Modelle" #: platform/gui.cpp:90 msgctxt "file-type" msgid "IDF circuit board" -msgstr "" +msgstr "IDF Leiterplatte" #: platform/gui.cpp:94 msgctxt "file-type" @@ -1629,89 +1645,381 @@ msgstr "Three.js-kompatibles Netz, nur Netz" #: platform/gui.cpp:102 msgctxt "file-type" -msgid "Q3D Object file" -msgstr "Q3D Objektdatei" - -#: platform/gui.cpp:103 -msgctxt "file-type" msgid "VRML text file" msgstr "VRML Textdatei" -#: platform/gui.cpp:107 platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 msgctxt "file-type" msgid "STEP file" msgstr "STEP-Datei" -#: platform/gui.cpp:111 +#: platform/gui.cpp:110 msgctxt "file-type" msgid "PDF file" msgstr "PDF-Datei" -#: platform/gui.cpp:112 +#: platform/gui.cpp:111 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "Eingebettetes Postscript" -#: platform/gui.cpp:113 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "Skalierbare Vektorgrafik" -#: platform/gui.cpp:115 platform/gui.cpp:122 +#: platform/gui.cpp:114 platform/gui.cpp:121 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "DXF-Datei (AutoCAD 2007)" -#: platform/gui.cpp:116 +#: platform/gui.cpp:115 msgctxt "file-type" msgid "HPGL file" msgstr "HPGL-Datei" -#: platform/gui.cpp:117 +#: platform/gui.cpp:116 msgctxt "file-type" msgid "G Code" msgstr "G-Code" -#: platform/gui.cpp:126 +#: platform/gui.cpp:125 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "AutoCAD DXF- und DWG-Dateien" -#: platform/gui.cpp:130 +#: platform/gui.cpp:129 msgctxt "file-type" msgid "Comma-separated values" msgstr "Werte durch Komma getrennt (CSV)" -#: platform/guigtk.cpp:1317 platform/guimac.mm:1360 platform/guiwin.cpp:1608 +#: platform/guigtk.cpp:1321 platform/guimac.mm:1363 platform/guiwin.cpp:1630 msgid "untitled" msgstr "unbenannt" -#: platform/guigtk.cpp:1328 platform/guigtk.cpp:1361 platform/guimac.mm:1318 -#: platform/guiwin.cpp:1555 +#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1365 platform/guimac.mm:1321 +#: platform/guiwin.cpp:1573 msgctxt "title" msgid "Save File" msgstr "Datei speichern" -#: platform/guigtk.cpp:1329 platform/guigtk.cpp:1362 platform/guimac.mm:1301 -#: platform/guiwin.cpp:1557 +#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 platform/guimac.mm:1304 +#: platform/guiwin.cpp:1575 msgctxt "title" msgid "Open File" msgstr "Datei öffnen" -#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1368 +#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1372 msgctxt "button" msgid "_Cancel" msgstr "_Abbrechen" -#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 +#: platform/guigtk.cpp:1337 platform/guigtk.cpp:1370 msgctxt "button" msgid "_Save" msgstr "_Speichern" -#: platform/guigtk.cpp:1334 platform/guigtk.cpp:1367 +#: platform/guigtk.cpp:1338 platform/guigtk.cpp:1371 msgctxt "button" msgid "_Open" +msgstr "_Öffnen" + +#: solvespace.cpp:169 +msgctxt "title" +msgid "Autosave Available" +msgstr "Automatische Sicherungsdatei verfügbar" + +#: solvespace.cpp:170 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "Eine automatische Sicherung ist für diese Skizze verfügbar." + +#: solvespace.cpp:171 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "Wollen Sie die automatische Sicherungsdatei stattdessen laden?" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "&Load autosave" +msgstr "AutoDatei &öffnen" + +#: solvespace.cpp:174 +msgctxt "button" +msgid "Do&n't Load" +msgstr "&Nicht laden" + +#: solvespace.cpp:557 +msgctxt "title" +msgid "Modified File" +msgstr "Geänderte Datei" + +#: solvespace.cpp:559 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "Wollen Sie die Änderungen an der Skizze “%s” sichern?" + +#: solvespace.cpp:562 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "Wollen Sie die Änderungen an der Skizze sichern?" + +#: solvespace.cpp:565 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "Ihre Änderungen werden verworfen, wenn sie nicht abgespeichert werden." + +#: solvespace.cpp:566 +msgctxt "button" +msgid "&Save" +msgstr "&Sichern" + +#: solvespace.cpp:568 +msgctxt "button" +msgid "Do&n't Save" +msgstr "&Verwerfen" + +# solvespace.cpp:557 +#: solvespace.cpp:589 +msgctxt "title" +msgid "(new sketch)" +msgstr "(Neue Skizze)" + +#: solvespace.cpp:596 +msgctxt "title" +msgid "Property Browser" +msgstr "Attribut-Browser" + +#: solvespace.cpp:658 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"Einschränkungen sind momentan sichtbar und werden exportiert. Das wollen Sie " +"wahrscheinlich nicht. Verstecken Sie sie in dem auf den Link oben im " +"Textfenster klicken." + +#: solvespace.cpp:730 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" +"Kann den Dateityp der Datei '%s' nicht auf Grund der Dateierweiterung " +"erkennen. Versuchen Sie .dxf oder .dwg." + +#: solvespace.cpp:778 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "" +"Die Einschränkung muss einen Namen haben, und darf keine " +"Referenzdimensionierung sein." + +#: solvespace.cpp:782 +msgid "Bad selection for step dimension; select a constraint." +msgstr "" +"Falsche Auswahl für die Schrittdimensionierung. Wählen Sie eine " +"Einschränkung." + +#: solvespace.cpp:806 +msgid "The assembly does not interfere, good." +msgstr "Der Zusammenbau funktioniert, gut." + +#: solvespace.cpp:822 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"Das Volumen des Modell ist:\n" +"\n" +" %s" + +#: solvespace.cpp:831 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"Das Volumen des Netz der aktiven Gruppe ist:\n" +"\n" +" %s" + +#: solvespace.cpp:836 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." msgstr "" +"\n" +"\n" +"Gekrümmte Flächen wurden als Dreiecksnetz angenähert.\n" +"Das verursacht Fehler, typischerweise um 1%." + +#: solvespace.cpp:851 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Die Fläche der ausgewählten Flächen ist:\n" +"\n" +" %s\n" +"\n" +"Kurven wurden als gerade Linienstücke angenähert.\n" +"Das verursacht Fehler, typischerweise um 1%%." + +#: solvespace.cpp:860 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"Diese Gruppe beinhaltet keine korrekt geschlossene 2D Fläche. Sie ist offen, " +"nicht koplanar, oder überschneidet sich selbst." + +#: solvespace.cpp:872 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Die Summe der Flächen in dieser Gruppe ist:\n" +"\n" +" %s\n" +"\n" +"Kurven wurden als gerade Linienstücke angenähert.\n" +"Das verursacht Fehler, typischerweise um 1%%." + +#: solvespace.cpp:892 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Die Gesamtlänge der ausgwählten Elemente ist:\n" +"\n" +" %s\n" +"\n" +"Kurven wurden als gerade Linienstücke angenähert.\n" +"Das verursacht Fehler, typischerweise um 1%%." + +#: solvespace.cpp:898 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "Falsche Auswahl für Umfang. Wähle Liniensegmente, Bögen und Kurven." + +#: solvespace.cpp:914 +msgid "Bad selection for trace; select a single point." +msgstr "Falsche Auswahl für Punkt nachzeichnen. Wähle einen einzelnen Punkt." + +#: solvespace.cpp:941 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "Konnte '%s' nicht schreiben" + +#: solvespace.cpp:971 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "Das Netz schneidet sich selbst: Falsch, ungültig." + +#: solvespace.cpp:972 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "Das Netz schneidet sich nicht: Gut, gültig." + +#: solvespace.cpp:974 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "Das Netz hat lose Kanten: Falsch, ungültig." + +#: solvespace.cpp:975 +msgid "The mesh is watertight (okay, valid)." +msgstr "Das Netz hat keine lose Kanten: Gut, gültig." + +#: solvespace.cpp:978 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"Das Modell hat %d Dreiecke, von %d Flächen." + +#: solvespace.cpp:982 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Keine problematischen Kanten, gut.%s" + +#: solvespace.cpp:985 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematische Kanten, schlecht.%s" + +#: solvespace.cpp:998 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"Das ist SolveSpace version %s.\n" +"\n" +"Für mehr Information siehe http://solvespace.com/\n" +"\n" +"SolveSpace ist freie Software: Sie steht Ihnen frei sie zu ändern\n" +"und/oder zu vervielfältigen unter der Auflage der GNU\n" +"General Public License (GPL) Version 3 oder späterer Versionen.\n" +"\n" +"Es besteht keinerlei Gewährleistung und Haftung für das Programm, soweit " +"dies gesetzlich zulässig ist.\n" +"Für Details siehe http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues und andere.\n" #: style.cpp:166 msgid "" @@ -1847,31 +2155,39 @@ msgid "New group rotating active sketch" msgstr "Neue Gruppe mit rotierter aktiver Skizze" #: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "Neue Gruppe Helix von aktiver Skizze" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "Neue Gruppe mit gedrehter aktiver Skizze" + +#: toolbar.cpp:76 msgid "New group step and repeat rotating" msgstr "Neue Gruppe mit kopierter gedrehter Skizze" -#: toolbar.cpp:74 +#: toolbar.cpp:78 msgid "New group step and repeat translating" msgstr "Neue Gruppe mit kopierter versetzter Skizze" -#: toolbar.cpp:76 +#: toolbar.cpp:80 msgid "New group in new workplane (thru given entities)" msgstr "" "Neue Gruppe in neuer Arbeitsebene (definiert durch ausgewählte Objekte)" -#: toolbar.cpp:78 +#: toolbar.cpp:82 msgid "New group in 3d" msgstr "Neue Gruppe in 3D" -#: toolbar.cpp:80 +#: toolbar.cpp:84 msgid "New group linking / assembling file" msgstr "Neue Gruppe mit verknüpfter Datei" -#: toolbar.cpp:84 +#: toolbar.cpp:88 msgid "Nearest isometric view" msgstr "Nächste isometrische Ansicht" -#: toolbar.cpp:86 +#: toolbar.cpp:90 msgid "Align view to active workplane" msgstr "Ansicht auf Arbeitsebene ausrichten" @@ -1898,14 +2214,9 @@ msgstr "Der Maßstab kann nicht Null oder negativ sein." msgid "Bad format: specify x, y, z" msgstr "Ungültiges Format: geben Sie x, y, z ein" -# solvespace.cpp:557 -#~ msgctxt "title" -#~ msgid "(new sketch)" -#~ msgstr "(Neue Skizze)" - -#~ msgctxt "title" -#~ msgid "Property Browser" -#~ msgstr "Attribut-Browser" +#~ msgctxt "file-type" +#~ msgid "Q3D Object file" +#~ msgstr "Q3D Objektdatei" #~ msgid "Specify between 0 and 8 digits after the decimal." #~ msgstr "Geben Sie 0 bis 8 Ziffern nach dem Dezimalzeichen an." @@ -1983,10 +2294,6 @@ msgstr "Ungültiges Format: geben Sie x, y, z ein" #~ "\n" #~ "Möchten Sie die Änderungen speichern?" -#~ msgctxt "title" -#~ msgid "Modified File" -#~ msgstr "Geänderte Datei" - #~ msgctxt "button" #~ msgid "Do_n't Save" #~ msgstr "Nicht speichern" @@ -2000,10 +2307,6 @@ msgstr "Ungültiges Format: geben Sie x, y, z ein" #~ "\n" #~ "Wollen Sie die automatisch gespeicherte Datei öffnen?" -#~ msgctxt "title" -#~ msgid "Autosave Available" -#~ msgstr "Automatische Speicherdatei verfügbar" - #~ msgctxt "button" #~ msgid "_Load autosave" #~ msgstr "AutoDatei öffnen" diff --git a/res/locales/en_US.po b/res/locales/en_US.po index 485950f..e7acd7e 100644 --- a/res/locales/en_US.po +++ b/res/locales/en_US.po @@ -2,12 +2,12 @@ # Copyright (C) 2017 the SolveSpace authors # This file is distributed under the same license as the SolveSpace package. # Automatically generated, 2017. -# +# msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2020-11-17 20:50-0500\n" +"POT-Creation-Date: 2021-01-17 19:54+0200\n" "PO-Revision-Date: 2017-01-05 10:30+0000\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: clipboard.cpp:274 +#: clipboard.cpp:310 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -27,27 +27,27 @@ msgstr "" "\n" "Activate one with Sketch -> In Workplane." -#: clipboard.cpp:291 +#: clipboard.cpp:327 msgid "Clipboard is empty; nothing to paste." msgstr "Clipboard is empty; nothing to paste." -#: clipboard.cpp:338 +#: clipboard.cpp:374 msgid "Number of copies to paste must be at least one." msgstr "Number of copies to paste must be at least one." -#: clipboard.cpp:354 textscreens.cpp:783 +#: clipboard.cpp:390 textscreens.cpp:783 msgid "Scale cannot be zero." msgstr "Scale cannot be zero." -#: clipboard.cpp:396 +#: clipboard.cpp:432 msgid "Select one point to define origin of rotation." msgstr "Select one point to define origin of rotation." -#: clipboard.cpp:408 +#: clipboard.cpp:444 msgid "Select two points to define translation vector." msgstr "Select two points to define translation vector." -#: clipboard.cpp:418 +#: clipboard.cpp:454 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." @@ -55,23 +55,23 @@ msgstr "" "Transformation is identity. So all copies will be exactly on top of each " "other." -#: clipboard.cpp:422 +#: clipboard.cpp:458 msgid "Too many items to paste; split this into smaller pastes." msgstr "Too many items to paste; split this into smaller pastes." -#: clipboard.cpp:427 +#: clipboard.cpp:463 msgid "No workplane active." msgstr "No workplane active." -#: confscreen.cpp:410 +#: confscreen.cpp:418 msgid "Bad format: specify coordinates as x, y, z" msgstr "Bad format: specify coordinates as x, y, z" -#: confscreen.cpp:420 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 msgid "Bad format: specify color as r, g, b" msgstr "Bad format: specify color as r, g, b" -#: confscreen.cpp:446 +#: confscreen.cpp:454 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." @@ -79,24 +79,24 @@ msgstr "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." -#: confscreen.cpp:459 confscreen.cpp:469 +#: confscreen.cpp:467 confscreen.cpp:477 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "Specify between 0 and %d digits after the decimal." -#: confscreen.cpp:481 +#: confscreen.cpp:489 msgid "Export scale must not be zero!" msgstr "Export scale must not be zero!" -#: confscreen.cpp:493 +#: confscreen.cpp:501 msgid "Cutter radius offset must not be negative!" msgstr "Cutter radius offset must not be negative!" -#: confscreen.cpp:547 +#: confscreen.cpp:555 msgid "Bad value: autosave interval should be positive" msgstr "Bad value: autosave interval should be positive" -#: confscreen.cpp:550 +#: confscreen.cpp:558 msgid "Bad format: specify interval in integral minutes" msgstr "Bad format: specify interval in integral minutes" @@ -275,7 +275,31 @@ msgctxt "constr-name" msgid "comment" msgstr "comment" -#: constraint.cpp:171 +#: constraint.cpp:140 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." + +#: constraint.cpp:158 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." + +#: constraint.cpp:183 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." + +#: constraint.cpp:231 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -299,7 +323,7 @@ msgstr "" " * a plane face and a point (minimum distance)\n" " * a circle or an arc (diameter)\n" -#: constraint.cpp:224 +#: constraint.cpp:284 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -319,7 +343,7 @@ msgstr "" " * a point and a circle or arc (point on curve)\n" " * a point and a plane face (point on face)\n" -#: constraint.cpp:286 +#: constraint.cpp:346 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -347,7 +371,7 @@ msgstr "" " * two circles or arcs (equal radius)\n" " * a line segment and an arc (line segment length equals arc length)\n" -#: constraint.cpp:325 +#: constraint.cpp:385 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" @@ -357,7 +381,7 @@ msgstr "" "\n" " * two line segments\n" -#: constraint.cpp:342 +#: constraint.cpp:402 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" @@ -369,7 +393,7 @@ msgstr "" "\n" " * two line segments\n" -#: constraint.cpp:368 +#: constraint.cpp:428 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -381,7 +405,7 @@ msgstr "" " * a line segment and a point (point at midpoint)\n" " * a line segment and a workplane (line's midpoint on plane)\n" -#: constraint.cpp:426 +#: constraint.cpp:486 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -401,7 +425,7 @@ msgstr "" " * workplane, and two points or a line segment (symmetric about " "workplane)\n" -#: constraint.cpp:440 +#: constraint.cpp:500 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." @@ -409,7 +433,7 @@ msgstr "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." -#: constraint.cpp:470 +#: constraint.cpp:530 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." @@ -417,7 +441,7 @@ msgstr "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." -#: constraint.cpp:483 +#: constraint.cpp:543 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -431,7 +455,7 @@ msgstr "" " * two points\n" " * a line segment\n" -#: constraint.cpp:504 +#: constraint.cpp:564 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -443,15 +467,15 @@ msgstr "" "\n" " * two normals\n" -#: constraint.cpp:554 +#: constraint.cpp:614 msgid "Must select an angle constraint." msgstr "Must select an angle constraint." -#: constraint.cpp:567 +#: constraint.cpp:627 msgid "Must select a constraint with associated label." msgstr "Must select a constraint with associated label." -#: constraint.cpp:578 +#: constraint.cpp:638 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -465,35 +489,11 @@ msgstr "" " * a line segment and a normal\n" " * two normals\n" -#: constraint.cpp:635 -msgid "" -"The tangent arc and line segment must share an endpoint. Constrain them with " -"Constrain -> On Point before constraining tangent." -msgstr "" -"The tangent arc and line segment must share an endpoint. Constrain them with " -"Constrain -> On Point before constraining tangent." - -#: constraint.cpp:659 -msgid "" -"The tangent cubic and line segment must share an endpoint. Constrain them " -"with Constrain -> On Point before constraining tangent." -msgstr "" -"The tangent cubic and line segment must share an endpoint. Constrain them " -"with Constrain -> On Point before constraining tangent." - -#: constraint.cpp:669 +#: constraint.cpp:701 msgid "Curve-curve tangency must apply in workplane." msgstr "Curve-curve tangency must apply in workplane." -#: constraint.cpp:687 -msgid "" -"The curves must share an endpoint. Constrain them with Constrain -> On Point " -"before constraining tangent." -msgstr "" -"The curves must share an endpoint. Constrain them with Constrain -> On Point " -"before constraining tangent." - -#: constraint.cpp:696 +#: constraint.cpp:711 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -511,7 +511,7 @@ msgstr "" " * two normals (parallel)\n" " * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" -#: constraint.cpp:714 +#: constraint.cpp:729 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -525,7 +525,7 @@ msgstr "" " * a line segment and a normal\n" " * two normals\n" -#: constraint.cpp:729 +#: constraint.cpp:744 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -537,7 +537,7 @@ msgstr "" "\n" " * a point\n" -#: constraint.cpp:740 +#: constraint.cpp:755 msgid "click center of comment text" msgstr "click center of comment text" @@ -641,7 +641,7 @@ msgctxt "button" msgid "&No" msgstr "&No" -#: file.cpp:869 +#: file.cpp:869 solvespace.cpp:569 msgctxt "button" msgid "&Cancel" msgstr "&Cancel" @@ -807,299 +807,303 @@ msgid "Show Snap &Grid" msgstr "Show Snap &Grid" #: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Darken Inactive Solids" + +#: graphicswin.cpp:96 msgid "Use &Perspective Projection" msgstr "Use &Perspective Projection" -#: graphicswin.cpp:96 +#: graphicswin.cpp:97 msgid "Dimension &Units" msgstr "Dimension &Units" -#: graphicswin.cpp:97 +#: graphicswin.cpp:98 msgid "Dimensions in &Millimeters" msgstr "Dimensions in &Millimeters" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in M&eters" msgstr "Dimensions in M&eters" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in &Inches" msgstr "Dimensions in &Inches" -#: graphicswin.cpp:101 +#: graphicswin.cpp:102 msgid "Show &Toolbar" msgstr "Show &Toolbar" -#: graphicswin.cpp:102 +#: graphicswin.cpp:103 msgid "Show Property Bro&wser" msgstr "Show Property Bro&wser" -#: graphicswin.cpp:104 +#: graphicswin.cpp:105 msgid "&Full Screen" msgstr "&Full Screen" -#: graphicswin.cpp:106 +#: graphicswin.cpp:107 msgid "&New Group" msgstr "&New Group" -#: graphicswin.cpp:107 +#: graphicswin.cpp:108 msgid "Sketch In &3d" msgstr "Sketch In &3d" -#: graphicswin.cpp:108 +#: graphicswin.cpp:109 msgid "Sketch In New &Workplane" msgstr "Sketch In New &Workplane" -#: graphicswin.cpp:110 +#: graphicswin.cpp:111 msgid "Step &Translating" msgstr "Step &Translating" -#: graphicswin.cpp:111 +#: graphicswin.cpp:112 msgid "Step &Rotating" msgstr "Step &Rotating" -#: graphicswin.cpp:113 +#: graphicswin.cpp:114 msgid "E&xtrude" msgstr "E&xtrude" -#: graphicswin.cpp:114 +#: graphicswin.cpp:115 msgid "&Helix" msgstr "&Helix" -#: graphicswin.cpp:115 +#: graphicswin.cpp:116 msgid "&Lathe" msgstr "&Lathe" -#: graphicswin.cpp:116 +#: graphicswin.cpp:117 msgid "Re&volve" msgstr "Re&volve" -#: graphicswin.cpp:118 +#: graphicswin.cpp:119 msgid "Link / Assemble..." msgstr "Link / Assemble..." -#: graphicswin.cpp:119 +#: graphicswin.cpp:120 msgid "Link Recent" msgstr "Link Recent" -#: graphicswin.cpp:121 +#: graphicswin.cpp:122 msgid "&Sketch" msgstr "&Sketch" -#: graphicswin.cpp:122 +#: graphicswin.cpp:123 msgid "In &Workplane" msgstr "In &Workplane" -#: graphicswin.cpp:123 +#: graphicswin.cpp:124 msgid "Anywhere In &3d" msgstr "Anywhere In &3d" -#: graphicswin.cpp:125 +#: graphicswin.cpp:126 msgid "Datum &Point" msgstr "Datum &Point" -#: graphicswin.cpp:126 +#: graphicswin.cpp:127 msgid "&Workplane" msgstr "&Workplane" -#: graphicswin.cpp:128 +#: graphicswin.cpp:129 msgid "Line &Segment" msgstr "Line &Segment" -#: graphicswin.cpp:129 +#: graphicswin.cpp:130 msgid "C&onstruction Line Segment" msgstr "C&onstruction Line Segment" -#: graphicswin.cpp:130 +#: graphicswin.cpp:131 msgid "&Rectangle" msgstr "&Rectangle" -#: graphicswin.cpp:131 +#: graphicswin.cpp:132 msgid "&Circle" msgstr "&Circle" -#: graphicswin.cpp:132 +#: graphicswin.cpp:133 msgid "&Arc of a Circle" msgstr "&Arc of a Circle" -#: graphicswin.cpp:133 +#: graphicswin.cpp:134 msgid "&Bezier Cubic Spline" msgstr "&Bezier Cubic Spline" -#: graphicswin.cpp:135 +#: graphicswin.cpp:136 msgid "&Text in TrueType Font" msgstr "&Text in TrueType Font" -#: graphicswin.cpp:136 +#: graphicswin.cpp:137 msgid "&Image" msgstr "&Image" -#: graphicswin.cpp:138 +#: graphicswin.cpp:139 msgid "To&ggle Construction" msgstr "To&ggle Construction" -#: graphicswin.cpp:139 +#: graphicswin.cpp:140 msgid "Tangent &Arc at Point" msgstr "Tangent &Arc at Point" -#: graphicswin.cpp:140 +#: graphicswin.cpp:141 msgid "Split Curves at &Intersection" msgstr "Split Curves at &Intersection" -#: graphicswin.cpp:142 +#: graphicswin.cpp:143 msgid "&Constrain" msgstr "&Constrain" -#: graphicswin.cpp:143 +#: graphicswin.cpp:144 msgid "&Distance / Diameter" msgstr "&Distance / Diameter" -#: graphicswin.cpp:144 +#: graphicswin.cpp:145 msgid "Re&ference Dimension" msgstr "Re&ference Dimension" -#: graphicswin.cpp:145 +#: graphicswin.cpp:146 msgid "A&ngle" msgstr "A&ngle" -#: graphicswin.cpp:146 +#: graphicswin.cpp:147 msgid "Reference An&gle" msgstr "Reference An&gle" -#: graphicswin.cpp:147 +#: graphicswin.cpp:148 msgid "Other S&upplementary Angle" msgstr "Other S&upplementary Angle" -#: graphicswin.cpp:148 +#: graphicswin.cpp:149 msgid "Toggle R&eference Dim" msgstr "Toggle R&eference Dim" -#: graphicswin.cpp:150 +#: graphicswin.cpp:151 msgid "&Horizontal" msgstr "&Horizontal" -#: graphicswin.cpp:151 +#: graphicswin.cpp:152 msgid "&Vertical" msgstr "&Vertical" -#: graphicswin.cpp:153 +#: graphicswin.cpp:154 msgid "&On Point / Curve / Plane" msgstr "&On Point / Curve / Plane" -#: graphicswin.cpp:154 +#: graphicswin.cpp:155 msgid "E&qual Length / Radius / Angle" msgstr "E&qual Length / Radius / Angle" -#: graphicswin.cpp:155 +#: graphicswin.cpp:156 msgid "Length Ra&tio" msgstr "Length Ra&tio" -#: graphicswin.cpp:156 +#: graphicswin.cpp:157 msgid "Length Diff&erence" msgstr "Length Diff&erence" -#: graphicswin.cpp:157 +#: graphicswin.cpp:158 msgid "At &Midpoint" msgstr "At &Midpoint" -#: graphicswin.cpp:158 +#: graphicswin.cpp:159 msgid "S&ymmetric" msgstr "S&ymmetric" -#: graphicswin.cpp:159 +#: graphicswin.cpp:160 msgid "Para&llel / Tangent" msgstr "Para&llel / Tangent" -#: graphicswin.cpp:160 +#: graphicswin.cpp:161 msgid "&Perpendicular" msgstr "&Perpendicular" -#: graphicswin.cpp:161 +#: graphicswin.cpp:162 msgid "Same Orient&ation" msgstr "Same Orient&ation" -#: graphicswin.cpp:162 +#: graphicswin.cpp:163 msgid "Lock Point Where &Dragged" msgstr "Lock Point Where &Dragged" -#: graphicswin.cpp:164 +#: graphicswin.cpp:165 msgid "Comment" msgstr "Comment" -#: graphicswin.cpp:166 +#: graphicswin.cpp:167 msgid "&Analyze" msgstr "&Analyze" -#: graphicswin.cpp:167 +#: graphicswin.cpp:168 msgid "Measure &Volume" msgstr "Measure &Volume" -#: graphicswin.cpp:168 +#: graphicswin.cpp:169 msgid "Measure A&rea" msgstr "Measure A&rea" -#: graphicswin.cpp:169 +#: graphicswin.cpp:170 msgid "Measure &Perimeter" msgstr "Measure &Perimeter" -#: graphicswin.cpp:170 +#: graphicswin.cpp:171 msgid "Show &Interfering Parts" msgstr "Show &Interfering Parts" -#: graphicswin.cpp:171 +#: graphicswin.cpp:172 msgid "Show &Naked Edges" msgstr "Show &Naked Edges" -#: graphicswin.cpp:172 +#: graphicswin.cpp:173 msgid "Show &Center of Mass" msgstr "Show &Center of Mass" -#: graphicswin.cpp:174 +#: graphicswin.cpp:175 msgid "Show &Underconstrained Points" msgstr "Show &Underconstrained Points" -#: graphicswin.cpp:176 +#: graphicswin.cpp:177 msgid "&Trace Point" msgstr "&Trace Point" -#: graphicswin.cpp:177 +#: graphicswin.cpp:178 msgid "&Stop Tracing..." msgstr "&Stop Tracing..." -#: graphicswin.cpp:178 +#: graphicswin.cpp:179 msgid "Step &Dimension..." msgstr "Step &Dimension..." -#: graphicswin.cpp:180 +#: graphicswin.cpp:181 msgid "&Help" msgstr "&Help" -#: graphicswin.cpp:181 +#: graphicswin.cpp:182 msgid "&Language" msgstr "&Language" -#: graphicswin.cpp:182 +#: graphicswin.cpp:183 msgid "&Website / Manual" msgstr "&Website / Manual" -#: graphicswin.cpp:184 +#: graphicswin.cpp:185 msgid "&About" msgstr "&About" -#: graphicswin.cpp:352 +#: graphicswin.cpp:355 msgid "(no recent files)" msgstr "(no recent files)" -#: graphicswin.cpp:360 +#: graphicswin.cpp:363 #, c-format msgid "File '%s' does not exist." msgstr "File '%s' does not exist." -#: graphicswin.cpp:721 +#: graphicswin.cpp:725 msgid "No workplane is active, so the grid will not appear." msgstr "No workplane is active, so the grid will not appear." -#: graphicswin.cpp:730 +#: graphicswin.cpp:740 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1113,17 +1117,17 @@ msgstr "" "For a perspective projection, modify the perspective factor in the " "configuration screen. A value around 0.3 is typical." -#: graphicswin.cpp:809 +#: graphicswin.cpp:819 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "" "Select a point; this point will become the center of the view on screen." -#: graphicswin.cpp:1103 +#: graphicswin.cpp:1114 msgid "No additional entities share endpoints with the selected entities." msgstr "No additional entities share endpoints with the selected entities." -#: graphicswin.cpp:1121 +#: graphicswin.cpp:1132 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." @@ -1131,7 +1135,7 @@ msgstr "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." -#: graphicswin.cpp:1144 +#: graphicswin.cpp:1155 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." @@ -1139,7 +1143,7 @@ msgstr "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." -#: graphicswin.cpp:1151 +#: graphicswin.cpp:1162 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." @@ -1147,11 +1151,11 @@ msgstr "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." -#: graphicswin.cpp:1239 +#: graphicswin.cpp:1247 msgid "No workplane selected. Activating default workplane for this group." msgstr "No workplane selected. Activating default workplane for this group." -#: graphicswin.cpp:1242 +#: graphicswin.cpp:1250 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" @@ -1161,7 +1165,7 @@ msgstr "" "workplane. Try selecting a workplane, or activating a sketch-in-new-" "workplane group." -#: graphicswin.cpp:1263 +#: graphicswin.cpp:1271 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." @@ -1169,47 +1173,47 @@ msgstr "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." -#: graphicswin.cpp:1274 +#: graphicswin.cpp:1282 msgid "click point on arc (draws anti-clockwise)" msgstr "click point on arc (draws anti-clockwise)" -#: graphicswin.cpp:1275 +#: graphicswin.cpp:1283 msgid "click to place datum point" msgstr "click to place datum point" -#: graphicswin.cpp:1276 +#: graphicswin.cpp:1284 msgid "click first point of line segment" msgstr "click first point of line segment" -#: graphicswin.cpp:1278 +#: graphicswin.cpp:1286 msgid "click first point of construction line segment" msgstr "click first point of construction line segment" -#: graphicswin.cpp:1279 +#: graphicswin.cpp:1287 msgid "click first point of cubic segment" msgstr "click first point of cubic segment" -#: graphicswin.cpp:1280 +#: graphicswin.cpp:1288 msgid "click center of circle" msgstr "click center of circle" -#: graphicswin.cpp:1281 +#: graphicswin.cpp:1289 msgid "click origin of workplane" msgstr "click origin of workplane" -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1290 msgid "click one corner of rectangle" msgstr "click one corner of rectangle" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1291 msgid "click top left of text" msgstr "click top left of text" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1297 msgid "click top left of image" msgstr "click top left of image" -#: graphicswin.cpp:1301 +#: graphicswin.cpp:1309 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1350,19 +1354,19 @@ msgstr "translate" msgid "(unnamed)" msgstr "(unnamed)" -#: groupmesh.cpp:708 +#: groupmesh.cpp:709 msgid "not closed contour, or not all same style!" msgstr "not closed contour, or not all same style!" -#: groupmesh.cpp:721 +#: groupmesh.cpp:722 msgid "points not all coplanar!" msgstr "points not all coplanar!" -#: groupmesh.cpp:723 +#: groupmesh.cpp:724 msgid "contour is self-intersecting!" msgstr "contour is self-intersecting!" -#: groupmesh.cpp:725 +#: groupmesh.cpp:726 msgid "zero-length edge!" msgstr "zero-length edge!" @@ -1498,11 +1502,11 @@ msgstr "Unselect Hovered" msgid "Zoom to Fit" msgstr "Zoom to Fit" -#: mouse.cpp:990 mouse.cpp:1277 +#: mouse.cpp:989 mouse.cpp:1276 msgid "click next point of line, or press Esc" msgstr "click next point of line, or press Esc" -#: mouse.cpp:996 +#: mouse.cpp:995 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1510,15 +1514,15 @@ msgstr "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." -#: mouse.cpp:1030 +#: mouse.cpp:1029 msgid "click to place other corner of rectangle" msgstr "click to place other corner of rectangle" -#: mouse.cpp:1050 +#: mouse.cpp:1049 msgid "click to set radius" msgstr "click to set radius" -#: mouse.cpp:1055 +#: mouse.cpp:1054 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1526,21 +1530,21 @@ msgstr "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." -#: mouse.cpp:1074 +#: mouse.cpp:1073 msgid "click to place point" msgstr "click to place point" -#: mouse.cpp:1090 +#: mouse.cpp:1089 msgid "click next point of cubic, or press Esc" msgstr "click next point of cubic, or press Esc" -#: mouse.cpp:1095 +#: mouse.cpp:1094 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" "Sketching in a workplane already; sketch in 3d before creating new workplane." -#: mouse.cpp:1111 +#: mouse.cpp:1110 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1548,11 +1552,11 @@ msgstr "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." -#: mouse.cpp:1128 +#: mouse.cpp:1127 msgid "click to place bottom right of text" msgstr "click to place bottom right of text" -#: mouse.cpp:1134 +#: mouse.cpp:1133 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1560,11 +1564,11 @@ msgstr "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." -#: mouse.cpp:1161 +#: mouse.cpp:1160 msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" msgstr "NEW COMMENT -- DOUBLE-CLICK TO EDIT" -#: platform/gui.cpp:85 platform/gui.cpp:89 +#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 msgctxt "file-type" msgid "SolveSpace models" msgstr "SolveSpace models" @@ -1601,90 +1605,376 @@ msgstr "Three.js-compatible mesh, mesh only" #: platform/gui.cpp:102 msgctxt "file-type" -msgid "Q3D Object file" -msgstr "Q3D Object file" - -#: platform/gui.cpp:103 -msgctxt "file-type" msgid "VRML text file" msgstr "VRML text file" -#: platform/gui.cpp:107 platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 msgctxt "file-type" msgid "STEP file" msgstr "STEP file" -#: platform/gui.cpp:111 +#: platform/gui.cpp:110 msgctxt "file-type" msgid "PDF file" msgstr "PDF file" -#: platform/gui.cpp:112 +#: platform/gui.cpp:111 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "Encapsulated PostScript" -#: platform/gui.cpp:113 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "Scalable Vector Graphics" -#: platform/gui.cpp:115 platform/gui.cpp:122 +#: platform/gui.cpp:114 platform/gui.cpp:121 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "DXF file (AutoCAD 2007)" -#: platform/gui.cpp:116 +#: platform/gui.cpp:115 msgctxt "file-type" msgid "HPGL file" msgstr "HPGL file" -#: platform/gui.cpp:117 +#: platform/gui.cpp:116 msgctxt "file-type" msgid "G Code" msgstr "G Code" -#: platform/gui.cpp:126 +#: platform/gui.cpp:125 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "AutoCAD DXF and DWG files" -#: platform/gui.cpp:130 +#: platform/gui.cpp:129 msgctxt "file-type" msgid "Comma-separated values" msgstr "Comma-separated values" -#: platform/guigtk.cpp:1317 platform/guimac.mm:1360 platform/guiwin.cpp:1608 +#: platform/guigtk.cpp:1321 platform/guimac.mm:1363 platform/guiwin.cpp:1630 msgid "untitled" msgstr "untitled" -#: platform/guigtk.cpp:1328 platform/guigtk.cpp:1361 platform/guimac.mm:1318 -#: platform/guiwin.cpp:1555 +#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1365 platform/guimac.mm:1321 +#: platform/guiwin.cpp:1573 msgctxt "title" msgid "Save File" msgstr "Save File" -#: platform/guigtk.cpp:1329 platform/guigtk.cpp:1362 platform/guimac.mm:1301 -#: platform/guiwin.cpp:1557 +#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 platform/guimac.mm:1304 +#: platform/guiwin.cpp:1575 msgctxt "title" msgid "Open File" msgstr "Open File" -#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1368 +#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1372 msgctxt "button" msgid "_Cancel" msgstr "_Cancel" -#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 +#: platform/guigtk.cpp:1337 platform/guigtk.cpp:1370 msgctxt "button" msgid "_Save" msgstr "_Save" -#: platform/guigtk.cpp:1334 platform/guigtk.cpp:1367 +#: platform/guigtk.cpp:1338 platform/guigtk.cpp:1371 msgctxt "button" msgid "_Open" msgstr "_Open" +#: solvespace.cpp:169 +msgctxt "title" +msgid "Autosave Available" +msgstr "Autosave Available" + +#: solvespace.cpp:170 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "An autosave file is available for this sketch." + +#: solvespace.cpp:171 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "Do you want to load the autosave file instead?" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "&Load autosave" +msgstr "&Load autosave" + +#: solvespace.cpp:174 +msgctxt "button" +msgid "Do&n't Load" +msgstr "Do&n't Load" + +#: solvespace.cpp:557 +msgctxt "title" +msgid "Modified File" +msgstr "Modified File" + +#: solvespace.cpp:559 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "Do you want to save the changes you made to the sketch “%s”?" + +#: solvespace.cpp:562 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "Do you want to save the changes you made to the new sketch?" + +#: solvespace.cpp:565 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "Your changes will be lost if you don't save them." + +#: solvespace.cpp:566 +msgctxt "button" +msgid "&Save" +msgstr "&Save" + +#: solvespace.cpp:568 +msgctxt "button" +msgid "Do&n't Save" +msgstr "Do&n't Save" + +#: solvespace.cpp:589 +msgctxt "title" +msgid "(new sketch)" +msgstr "(new sketch)" + +#: solvespace.cpp:596 +msgctxt "title" +msgid "Property Browser" +msgstr "Property Browser" + +#: solvespace.cpp:658 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"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." + +#: solvespace.cpp:730 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." + +#: solvespace.cpp:778 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "Constraint must have a label, and must not be a reference dimension." + +#: solvespace.cpp:782 +msgid "Bad selection for step dimension; select a constraint." +msgstr "Bad selection for step dimension; select a constraint." + +#: solvespace.cpp:806 +msgid "The assembly does not interfere, good." +msgstr "The assembly does not interfere, good." + +#: solvespace.cpp:822 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"The volume of the solid model is:\n" +"\n" +" %s" + +#: solvespace.cpp:831 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" + +#: solvespace.cpp:836 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." + +#: solvespace.cpp:851 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." + +#: solvespace.cpp:860 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." + +#: solvespace.cpp:872 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." + +#: solvespace.cpp:892 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." + +#: solvespace.cpp:898 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "Bad selection for perimeter; select line segments, arcs, and curves." + +#: solvespace.cpp:914 +msgid "Bad selection for trace; select a single point." +msgstr "Bad selection for trace; select a single point." + +#: solvespace.cpp:941 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "Couldn't write to '%s'" + +#: solvespace.cpp:971 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "The mesh is self-intersecting (NOT okay, invalid)." + +#: solvespace.cpp:972 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "The mesh is not self-intersecting (okay, valid)." + +#: solvespace.cpp:974 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "The mesh has naked edges (NOT okay, invalid)." + +#: solvespace.cpp:975 +msgid "The mesh is watertight (okay, valid)." +msgstr "The mesh is watertight (okay, valid)." + +#: solvespace.cpp:978 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." + +#: solvespace.cpp:982 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" + +#: solvespace.cpp:985 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" + +#: solvespace.cpp:998 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" + #: style.cpp:166 msgid "" "Can't assign style to an entity that's derived from another entity; try " @@ -1818,30 +2108,38 @@ msgid "New group rotating active sketch" msgstr "New group rotating active sketch" #: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "New group helix from active sketch" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "New group revolve active sketch" + +#: toolbar.cpp:76 msgid "New group step and repeat rotating" msgstr "New group step and repeat rotating" -#: toolbar.cpp:74 +#: toolbar.cpp:78 msgid "New group step and repeat translating" msgstr "New group step and repeat translating" -#: toolbar.cpp:76 +#: toolbar.cpp:80 msgid "New group in new workplane (thru given entities)" msgstr "New group in new workplane (thru given entities)" -#: toolbar.cpp:78 +#: toolbar.cpp:82 msgid "New group in 3d" msgstr "New group in 3d" -#: toolbar.cpp:80 +#: toolbar.cpp:84 msgid "New group linking / assembling file" msgstr "New group linking / assembling file" -#: toolbar.cpp:84 +#: toolbar.cpp:88 msgid "Nearest isometric view" msgstr "Nearest isometric view" -#: toolbar.cpp:86 +#: toolbar.cpp:90 msgid "Align view to active workplane" msgstr "Align view to active workplane" @@ -1868,10 +2166,6 @@ msgstr "Scale cannot be zero or negative." msgid "Bad format: specify x, y, z" msgstr "Bad format: specify x, y, z" -#~ msgctxt "title" -#~ msgid "(new sketch)" -#~ msgstr "(new sketch)" - -#~ msgctxt "title" -#~ msgid "Property Browser" -#~ msgstr "Property Browser" +#~ msgctxt "file-type" +#~ msgid "Q3D Object file" +#~ msgstr "Q3D Object file" diff --git a/res/locales/fr_FR.po b/res/locales/fr_FR.po index 8bea1a9..784b961 100644 --- a/res/locales/fr_FR.po +++ b/res/locales/fr_FR.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2020-11-17 20:50-0500\n" +"POT-Creation-Date: 2021-01-17 19:54+0200\n" "PO-Revision-Date: 2018-07-14 06:12+0000\n" "Last-Translator: whitequark \n" "Language-Team: none\n" @@ -17,7 +17,7 @@ msgstr "" "X-Generator: Zanata 4.4.5\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: clipboard.cpp:274 +#: clipboard.cpp:310 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -27,27 +27,27 @@ msgstr "" "\n" "Activez un plan avec \"Dessin -> Dans plan de travail\"." -#: clipboard.cpp:291 +#: clipboard.cpp:327 msgid "Clipboard is empty; nothing to paste." msgstr "Presse papier vide; rien à coller." -#: clipboard.cpp:338 +#: clipboard.cpp:374 msgid "Number of copies to paste must be at least one." msgstr "Le nombre de copies à coller doit être d'au moins un." -#: clipboard.cpp:354 textscreens.cpp:783 +#: clipboard.cpp:390 textscreens.cpp:783 msgid "Scale cannot be zero." msgstr "L'échelle ne peut pas être zéro." -#: clipboard.cpp:396 +#: clipboard.cpp:432 msgid "Select one point to define origin of rotation." msgstr "Sélectionnez un point pour définir l'origine de la rotation." -#: clipboard.cpp:408 +#: clipboard.cpp:444 msgid "Select two points to define translation vector." msgstr "Sélectionnez deux points pour définir le vecteur de translation." -#: clipboard.cpp:418 +#: clipboard.cpp:454 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." @@ -55,23 +55,23 @@ msgstr "" "Transformation identique. Donc, toutes les copies seront exactement les unes " "au-dessus des autres." -#: clipboard.cpp:422 +#: clipboard.cpp:458 msgid "Too many items to paste; split this into smaller pastes." msgstr "Trop d'éléments à coller; Divisez-les en plus petits groupes." -#: clipboard.cpp:427 +#: clipboard.cpp:463 msgid "No workplane active." msgstr "Pas d'espace de travail actif." -#: confscreen.cpp:410 +#: confscreen.cpp:418 msgid "Bad format: specify coordinates as x, y, z" msgstr "Mauvais format: spécifiez les coordonnées comme x, y, z" -#: confscreen.cpp:420 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 msgid "Bad format: specify color as r, g, b" msgstr "Mauvais format; spécifiez la couleur comme r, v, b" -#: confscreen.cpp:446 +#: confscreen.cpp:454 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." @@ -79,26 +79,26 @@ msgstr "" "Le facteur de perspective n'aura aucun effet tant que vous n'aurez pas " "activé \"Affichage -> Utiliser la projection de perspective\"." -#: confscreen.cpp:459 confscreen.cpp:469 +#: confscreen.cpp:467 confscreen.cpp:477 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "" -#: confscreen.cpp:481 +#: confscreen.cpp:489 msgid "Export scale must not be zero!" msgstr "L'échelle d'export ne doit pas être zéro!" -#: confscreen.cpp:493 +#: confscreen.cpp:501 msgid "Cutter radius offset must not be negative!" msgstr "Le décalage du rayon de coupe ne doit pas être négatif!" -#: confscreen.cpp:547 +#: confscreen.cpp:555 msgid "Bad value: autosave interval should be positive" msgstr "" "Mauvaise valeur: l'intervalle d'enregistrement automatique devrait être " "positif" -#: confscreen.cpp:550 +#: confscreen.cpp:558 msgid "Bad format: specify interval in integral minutes" msgstr "Mauvais format: spécifiez un nombre entier de minutes" @@ -277,7 +277,33 @@ msgctxt "constr-name" msgid "comment" msgstr "commentaire" -#: constraint.cpp:171 +#: constraint.cpp:140 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"L'arc tangent et le segment de ligne doivent partager un point final. " +"Contraignez-les avec \"Contrainte -> Sur point avant de contraindre la " +"tangente\"." + +#: constraint.cpp:158 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"La tangente cubique et le segment de ligne doivent partager un point final. " +"Contraignez-les avec \"Contrainte -> Sur point avant de contraindre la " +"tangente\"." + +#: constraint.cpp:183 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"Les courbes doivent partager un point final. Contraignez-les avec " +"\"Contrainte -> Sur point avant de contraindre la tangente\"." + +#: constraint.cpp:231 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -301,7 +327,7 @@ msgstr "" "    * Une face plane et un point (distance minimale)\n" "    * Un cercle ou un arc (diamètre)\n" -#: constraint.cpp:224 +#: constraint.cpp:284 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -321,7 +347,7 @@ msgstr "" "    * Un point et un cercle ou un arc (point sur courbe)\n" "    * Un point et une face plane (point sur une face)\n" -#: constraint.cpp:286 +#: constraint.cpp:346 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -352,7 +378,7 @@ msgstr "" "    * Un segment de ligne et un arc (la longueur de segment de ligne est " "égale à la longueur d'arc)\n" -#: constraint.cpp:325 +#: constraint.cpp:385 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" @@ -363,7 +389,7 @@ msgstr "" "\n" "    * Deux segments de ligne\n" -#: constraint.cpp:342 +#: constraint.cpp:402 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" @@ -375,7 +401,7 @@ msgstr "" "\n" "    * Deux segments de ligne\n" -#: constraint.cpp:368 +#: constraint.cpp:428 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -388,7 +414,7 @@ msgstr "" "    * Un segment de ligne et un point (point au milieu)\n" "    * Un segment de ligne et un plan de travail (point médian dans le plan)\n" -#: constraint.cpp:426 +#: constraint.cpp:486 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -409,7 +435,7 @@ msgstr "" "    * Plan de travail, et deux points ou un segment de ligne (symétrique au " "plan de travail)\n" -#: constraint.cpp:440 +#: constraint.cpp:500 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." @@ -417,7 +443,7 @@ msgstr "" "Un plan de travail doit être actif lors d'une contrainte de symétrie sans " "plan de symétrie explicite." -#: constraint.cpp:470 +#: constraint.cpp:530 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." @@ -425,7 +451,7 @@ msgstr "" "Activez un plan de travail (avec Dessin -> Dans plan de travail) avant " "d'appliquer une contrainte horizontale ou verticale." -#: constraint.cpp:483 +#: constraint.cpp:543 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -439,7 +465,7 @@ msgstr "" "    * deux points\n" "    * Un segment de ligne\n" -#: constraint.cpp:504 +#: constraint.cpp:564 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -451,15 +477,15 @@ msgstr "" "\n" " * Deux normales\n" -#: constraint.cpp:554 +#: constraint.cpp:614 msgid "Must select an angle constraint." msgstr "Vous devez sélectionner une contrainte d'angle." -#: constraint.cpp:567 +#: constraint.cpp:627 msgid "Must select a constraint with associated label." msgstr "Vous devez sélectionner une contrainte avec une étiquette associée." -#: constraint.cpp:578 +#: constraint.cpp:638 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -474,37 +500,11 @@ msgstr "" "    * Un segment de ligne et une normale\n" "    * Deux normales\n" -#: constraint.cpp:635 -msgid "" -"The tangent arc and line segment must share an endpoint. Constrain them with " -"Constrain -> On Point before constraining tangent." -msgstr "" -"L'arc tangent et le segment de ligne doivent partager un point final. " -"Contraignez-les avec \"Contrainte -> Sur point avant de contraindre la " -"tangente\"." - -#: constraint.cpp:659 -msgid "" -"The tangent cubic and line segment must share an endpoint. Constrain them " -"with Constrain -> On Point before constraining tangent." -msgstr "" -"La tangente cubique et le segment de ligne doivent partager un point final. " -"Contraignez-les avec \"Contrainte -> Sur point avant de contraindre la " -"tangente\"." - -#: constraint.cpp:669 +#: constraint.cpp:701 msgid "Curve-curve tangency must apply in workplane." msgstr "Courbe-Courbe tangence doit s'appliquer dans le plan de travail." -#: constraint.cpp:687 -msgid "" -"The curves must share an endpoint. Constrain them with Constrain -> On Point " -"before constraining tangent." -msgstr "" -"Les courbes doivent partager un point final. Contraignez-les avec " -"\"Contrainte -> Sur point avant de contraindre la tangente\"." - -#: constraint.cpp:696 +#: constraint.cpp:711 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -523,7 +523,7 @@ msgstr "" "    * Deux segments de ligne, des arcs ou des Béziers, qui partagent un " "point final (tangent)\n" -#: constraint.cpp:714 +#: constraint.cpp:729 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -538,7 +538,7 @@ msgstr "" "    * Un segment de ligne et une normale\n" "    * Deux normales\n" -#: constraint.cpp:729 +#: constraint.cpp:744 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -550,7 +550,7 @@ msgstr "" "\n" "    * un point\n" -#: constraint.cpp:740 +#: constraint.cpp:755 msgid "click center of comment text" msgstr "cliquez le centre du texte de commentaire" @@ -654,7 +654,7 @@ msgctxt "button" msgid "&No" msgstr "" -#: file.cpp:869 +#: file.cpp:869 solvespace.cpp:569 msgctxt "button" msgid "&Cancel" msgstr "" @@ -820,299 +820,303 @@ msgid "Show Snap &Grid" msgstr "Afficher la &grille d'accrochage" #: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "" + +#: graphicswin.cpp:96 msgid "Use &Perspective Projection" msgstr "Utiliser la vue en &Perspective" -#: graphicswin.cpp:96 +#: graphicswin.cpp:97 msgid "Dimension &Units" msgstr "&Unités de dimensions" -#: graphicswin.cpp:97 +#: graphicswin.cpp:98 msgid "Dimensions in &Millimeters" msgstr "Dimensions en &Millimètres" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in M&eters" msgstr "Dimensions en &Mètres" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in &Inches" msgstr "Dimensions en &Pouces" -#: graphicswin.cpp:101 +#: graphicswin.cpp:102 msgid "Show &Toolbar" msgstr "Affichage &Barre d'outils" -#: graphicswin.cpp:102 +#: graphicswin.cpp:103 msgid "Show Property Bro&wser" msgstr "Affichage du &Navigateur de Propriété" -#: graphicswin.cpp:104 +#: graphicswin.cpp:105 msgid "&Full Screen" msgstr "&Plein Ecran" -#: graphicswin.cpp:106 +#: graphicswin.cpp:107 msgid "&New Group" msgstr "&Nouveau Groupe" -#: graphicswin.cpp:107 +#: graphicswin.cpp:108 msgid "Sketch In &3d" msgstr "Dessin en &3d" -#: graphicswin.cpp:108 +#: graphicswin.cpp:109 msgid "Sketch In New &Workplane" msgstr "Dessin dans un nouveau &Plan de travail" -#: graphicswin.cpp:110 +#: graphicswin.cpp:111 msgid "Step &Translating" msgstr "Espacement &Linéaire" -#: graphicswin.cpp:111 +#: graphicswin.cpp:112 msgid "Step &Rotating" msgstr "Espacement &Circulaire" -#: graphicswin.cpp:113 +#: graphicswin.cpp:114 msgid "E&xtrude" msgstr "E&xtruder" -#: graphicswin.cpp:114 +#: graphicswin.cpp:115 msgid "&Helix" msgstr "&Helix" -#: graphicswin.cpp:115 +#: graphicswin.cpp:116 msgid "&Lathe" msgstr "&Lathe" -#: graphicswin.cpp:116 +#: graphicswin.cpp:117 msgid "Re&volve" msgstr "Ré&volution" -#: graphicswin.cpp:118 +#: graphicswin.cpp:119 msgid "Link / Assemble..." msgstr "Lié / Assembler..." -#: graphicswin.cpp:119 +#: graphicswin.cpp:120 msgid "Link Recent" msgstr "Lié Récent" -#: graphicswin.cpp:121 +#: graphicswin.cpp:122 msgid "&Sketch" msgstr "&Dessin" -#: graphicswin.cpp:122 +#: graphicswin.cpp:123 msgid "In &Workplane" msgstr "Dans le &Plan de travail" -#: graphicswin.cpp:123 +#: graphicswin.cpp:124 msgid "Anywhere In &3d" msgstr "N'importe où dans la &3d" -#: graphicswin.cpp:125 +#: graphicswin.cpp:126 msgid "Datum &Point" msgstr "&Point" -#: graphicswin.cpp:126 +#: graphicswin.cpp:127 msgid "&Workplane" msgstr "&Plan de travail" -#: graphicswin.cpp:128 +#: graphicswin.cpp:129 msgid "Line &Segment" msgstr "Ligne - &Polyligne" -#: graphicswin.cpp:129 +#: graphicswin.cpp:130 msgid "C&onstruction Line Segment" msgstr "Ligne de C&onstruction" -#: graphicswin.cpp:130 +#: graphicswin.cpp:131 msgid "&Rectangle" msgstr "&Rectangle" -#: graphicswin.cpp:131 +#: graphicswin.cpp:132 msgid "&Circle" msgstr "&Cercle" -#: graphicswin.cpp:132 +#: graphicswin.cpp:133 msgid "&Arc of a Circle" msgstr "&Arc de Cercle" -#: graphicswin.cpp:133 +#: graphicswin.cpp:134 msgid "&Bezier Cubic Spline" msgstr "Spline Cubique de &Beziers" -#: graphicswin.cpp:135 +#: graphicswin.cpp:136 msgid "&Text in TrueType Font" msgstr "&Texte en Police TrueType" -#: graphicswin.cpp:136 +#: graphicswin.cpp:137 msgid "&Image" msgstr "&Image" -#: graphicswin.cpp:138 +#: graphicswin.cpp:139 msgid "To&ggle Construction" msgstr "&Basculer en mode \"Construction\"" -#: graphicswin.cpp:139 +#: graphicswin.cpp:140 msgid "Tangent &Arc at Point" msgstr "&Arc Tangent au Point" -#: graphicswin.cpp:140 +#: graphicswin.cpp:141 msgid "Split Curves at &Intersection" msgstr "Diviser les Courbes à l'&Intersection" -#: graphicswin.cpp:142 +#: graphicswin.cpp:143 msgid "&Constrain" msgstr "&Constraintes" -#: graphicswin.cpp:143 +#: graphicswin.cpp:144 msgid "&Distance / Diameter" msgstr "&Distance / Diamètre" -#: graphicswin.cpp:144 +#: graphicswin.cpp:145 msgid "Re&ference Dimension" msgstr "Dimension Maîtresse / Indicative" -#: graphicswin.cpp:145 +#: graphicswin.cpp:146 msgid "A&ngle" msgstr "A&ngle" -#: graphicswin.cpp:146 +#: graphicswin.cpp:147 msgid "Reference An&gle" msgstr "An&gle Maître / Indicatif" -#: graphicswin.cpp:147 +#: graphicswin.cpp:148 msgid "Other S&upplementary Angle" msgstr "Autre angle S&upplémentaire" -#: graphicswin.cpp:148 +#: graphicswin.cpp:149 msgid "Toggle R&eference Dim" msgstr "Basculer cote Maîtresse / cote Indicative" -#: graphicswin.cpp:150 +#: graphicswin.cpp:151 msgid "&Horizontal" msgstr "&Horizontal" -#: graphicswin.cpp:151 +#: graphicswin.cpp:152 msgid "&Vertical" msgstr "&Vertical" -#: graphicswin.cpp:153 +#: graphicswin.cpp:154 msgid "&On Point / Curve / Plane" msgstr "&Sur Point / Courbe / Plan" -#: graphicswin.cpp:154 +#: graphicswin.cpp:155 msgid "E&qual Length / Radius / Angle" msgstr "&Egale Longueur / Rayon / Angle" -#: graphicswin.cpp:155 +#: graphicswin.cpp:156 msgid "Length Ra&tio" msgstr "R&apport de Longueur" -#: graphicswin.cpp:156 +#: graphicswin.cpp:157 msgid "Length Diff&erence" msgstr "D&ifférence de Longueur" -#: graphicswin.cpp:157 +#: graphicswin.cpp:158 msgid "At &Midpoint" msgstr "Au &Milieu" -#: graphicswin.cpp:158 +#: graphicswin.cpp:159 msgid "S&ymmetric" msgstr "&Symétrique" -#: graphicswin.cpp:159 +#: graphicswin.cpp:160 msgid "Para&llel / Tangent" msgstr "Para&llèle / Tangent" -#: graphicswin.cpp:160 +#: graphicswin.cpp:161 msgid "&Perpendicular" msgstr "&Perpendiculaire" -#: graphicswin.cpp:161 +#: graphicswin.cpp:162 msgid "Same Orient&ation" msgstr "Même Orient&ation" -#: graphicswin.cpp:162 +#: graphicswin.cpp:163 msgid "Lock Point Where &Dragged" msgstr "Accrocher le point à l'&Emplacement" -#: graphicswin.cpp:164 +#: graphicswin.cpp:165 msgid "Comment" msgstr "Commentaire" -#: graphicswin.cpp:166 +#: graphicswin.cpp:167 msgid "&Analyze" msgstr "&Analyse" -#: graphicswin.cpp:167 +#: graphicswin.cpp:168 msgid "Measure &Volume" msgstr "Mesure &Volume" -#: graphicswin.cpp:168 +#: graphicswin.cpp:169 msgid "Measure A&rea" msgstr "Mesure &Aire" -#: graphicswin.cpp:169 +#: graphicswin.cpp:170 msgid "Measure &Perimeter" msgstr "Mesure &Périmètre" -#: graphicswin.cpp:170 +#: graphicswin.cpp:171 msgid "Show &Interfering Parts" msgstr "Montrer les Pièces &Interférentes" -#: graphicswin.cpp:171 +#: graphicswin.cpp:172 msgid "Show &Naked Edges" msgstr "Montrer les Arêtes &Nues" -#: graphicswin.cpp:172 +#: graphicswin.cpp:173 msgid "Show &Center of Mass" msgstr "Montrer le &Centre de Gravité" -#: graphicswin.cpp:174 +#: graphicswin.cpp:175 msgid "Show &Underconstrained Points" msgstr "Montrer les &sous-contraintes Points" -#: graphicswin.cpp:176 +#: graphicswin.cpp:177 msgid "&Trace Point" msgstr "&Tracer Point" -#: graphicswin.cpp:177 +#: graphicswin.cpp:178 msgid "&Stop Tracing..." msgstr "&Arrêt Tracé..." -#: graphicswin.cpp:178 +#: graphicswin.cpp:179 msgid "Step &Dimension..." msgstr "Espacement &Dimension..." -#: graphicswin.cpp:180 +#: graphicswin.cpp:181 msgid "&Help" msgstr "&Aide" -#: graphicswin.cpp:181 +#: graphicswin.cpp:182 msgid "&Language" msgstr "&Langue" -#: graphicswin.cpp:182 +#: graphicswin.cpp:183 msgid "&Website / Manual" msgstr "&Site web / Manuel" -#: graphicswin.cpp:184 +#: graphicswin.cpp:185 msgid "&About" msgstr "&A propos" -#: graphicswin.cpp:352 +#: graphicswin.cpp:355 msgid "(no recent files)" msgstr "(pas de fichier récent)" -#: graphicswin.cpp:360 +#: graphicswin.cpp:363 #, c-format msgid "File '%s' does not exist." msgstr "" -#: graphicswin.cpp:721 +#: graphicswin.cpp:725 msgid "No workplane is active, so the grid will not appear." msgstr "Pas de plan de travail actif, donc la grille ne va pas apparaître." -#: graphicswin.cpp:730 +#: graphicswin.cpp:740 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1126,19 +1130,19 @@ msgstr "" "Pour une projection en perspective, modifiez le facteur de perspective dans " "l'écran de configuration. Une valeur d'environ 0,3 est typique." -#: graphicswin.cpp:809 +#: graphicswin.cpp:819 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "" "Sélectionnez un point. Ce point deviendra le centre de la vue à l'écran." -#: graphicswin.cpp:1103 +#: graphicswin.cpp:1114 msgid "No additional entities share endpoints with the selected entities." msgstr "" "Aucune entité supplémentaire ne partage des points d'extrémité avec les " "entités sélectionnées." -#: graphicswin.cpp:1121 +#: graphicswin.cpp:1132 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." @@ -1146,7 +1150,7 @@ msgstr "" "Pour utiliser cette commande, sélectionnez un point ou une autre entité à " "partir d'une pièce liée ou créez un groupe de liens dans le groupe actif." -#: graphicswin.cpp:1144 +#: graphicswin.cpp:1155 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." @@ -1154,7 +1158,7 @@ msgstr "" "Aucun plan de travail n'est actif. Activez un plan de travail (avec Dessin -" "> Dans plan de travail) pour définir le plan pour la grille d'accrochage." -#: graphicswin.cpp:1151 +#: graphicswin.cpp:1162 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." @@ -1163,13 +1167,13 @@ msgstr "" "des textes de commentaires ou des contraintes avec une étiquette. Pour " "accrocher une ligne, sélectionnez ses points d'extrémité." -#: graphicswin.cpp:1239 +#: graphicswin.cpp:1247 msgid "No workplane selected. Activating default workplane for this group." msgstr "" "Aucun plan de travail sélectionné. Activation du plan de travail par défaut " "pour ce groupe." -#: graphicswin.cpp:1242 +#: graphicswin.cpp:1250 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" @@ -1179,7 +1183,7 @@ msgstr "" "de travail par défaut. Essayez de sélectionner un plan de travail ou " "d'activer un groupe de \"Dessin dans nouveau plan travail\"." -#: graphicswin.cpp:1263 +#: graphicswin.cpp:1271 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." @@ -1187,49 +1191,49 @@ msgstr "" "Mauvaise sélection pour l'arc tangent au point. Sélectionnez un seul point, " "ou ne sélectionnez rien pour configurer les paramètres de l'arc." -#: graphicswin.cpp:1274 +#: graphicswin.cpp:1282 msgid "click point on arc (draws anti-clockwise)" msgstr "" "cliquez un point sur l'arc (dessine dans le sens inverse des aiguilles d'une " "montre)" -#: graphicswin.cpp:1275 +#: graphicswin.cpp:1283 msgid "click to place datum point" msgstr "cliquez pour placer un point" -#: graphicswin.cpp:1276 +#: graphicswin.cpp:1284 msgid "click first point of line segment" msgstr "cliquez le premier point du segment de ligne" -#: graphicswin.cpp:1278 +#: graphicswin.cpp:1286 msgid "click first point of construction line segment" msgstr "cliquez le premier point de la ligne de construction" -#: graphicswin.cpp:1279 +#: graphicswin.cpp:1287 msgid "click first point of cubic segment" msgstr "cliquez le premier point du segment cubique" -#: graphicswin.cpp:1280 +#: graphicswin.cpp:1288 msgid "click center of circle" msgstr "cliquez pour placer le centre du cercle" -#: graphicswin.cpp:1281 +#: graphicswin.cpp:1289 msgid "click origin of workplane" msgstr "cliquez pour placer l'origine du plan de travail" -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1290 msgid "click one corner of rectangle" msgstr "cliquez un coin du rectangle" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1291 msgid "click top left of text" msgstr "cliquez le haut à gauche du texte" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1297 msgid "click top left of image" msgstr "cliquez le haut à gauche de l'image" -#: graphicswin.cpp:1301 +#: graphicswin.cpp:1309 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1363,19 +1367,19 @@ msgstr "translation" msgid "(unnamed)" msgstr "(sans nom)" -#: groupmesh.cpp:708 +#: groupmesh.cpp:709 msgid "not closed contour, or not all same style!" msgstr "contour non fermé ou tout n'est pas du même style!" -#: groupmesh.cpp:721 +#: groupmesh.cpp:722 msgid "points not all coplanar!" msgstr "les points ne sont pas tous coplanaires!" -#: groupmesh.cpp:723 +#: groupmesh.cpp:724 msgid "contour is self-intersecting!" msgstr "le contour s'entrecroise!" -#: groupmesh.cpp:725 +#: groupmesh.cpp:726 msgid "zero-length edge!" msgstr "arête de longueur nulle!" @@ -1511,11 +1515,11 @@ msgstr "Désélectionner survolé" msgid "Zoom to Fit" msgstr "Zoom pour ajuster" -#: mouse.cpp:990 mouse.cpp:1277 +#: mouse.cpp:989 mouse.cpp:1276 msgid "click next point of line, or press Esc" msgstr "cliquez pou le prochain point de ligne or appuyez sur Esc" -#: mouse.cpp:996 +#: mouse.cpp:995 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1523,15 +1527,15 @@ msgstr "" "Impossible de dessiner un rectangle en 3d; D'abord, activez un plan de " "travail avec \"Dessin -> Dans plan de travail\"." -#: mouse.cpp:1030 +#: mouse.cpp:1029 msgid "click to place other corner of rectangle" msgstr "cliquez pour placer un autre coin de rectangle" -#: mouse.cpp:1050 +#: mouse.cpp:1049 msgid "click to set radius" msgstr "cliquez pour ajuster le rayon" -#: mouse.cpp:1055 +#: mouse.cpp:1054 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1539,22 +1543,22 @@ msgstr "" "Ne peut pas dessiner l'arc en 3d; D'abord, activez un plan de travail avec " "\"Dessin -> Dans plan de travail\"." -#: mouse.cpp:1074 +#: mouse.cpp:1073 msgid "click to place point" msgstr "cliquez pour placer un point" -#: mouse.cpp:1090 +#: mouse.cpp:1089 msgid "click next point of cubic, or press Esc" msgstr "cliquez le prochain point cubique ou appuyez sur Esc" -#: mouse.cpp:1095 +#: mouse.cpp:1094 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" "Vous dessinez déjà dans un plan de travail; Sélectionner \"Dessiner en 3d\" " "avant de créer un nouveau plan de travail." -#: mouse.cpp:1111 +#: mouse.cpp:1110 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1562,11 +1566,11 @@ msgstr "" "Impossible de dessiner du texte en 3d; D'abord, activer un plan de travail " "avec \"Dessin -> Dans plan de travail\"." -#: mouse.cpp:1128 +#: mouse.cpp:1127 msgid "click to place bottom right of text" msgstr "" -#: mouse.cpp:1134 +#: mouse.cpp:1133 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1574,11 +1578,11 @@ msgstr "" "Impossible de dessiner l'image en 3d; D'abord, activez un plan de travail " "avec \"Dessin -> Dans plan de travail\"." -#: mouse.cpp:1161 +#: mouse.cpp:1160 msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" msgstr "NOUVEAU COMMENTAIRE - DOUBLE-CLIQUE POUR EDITER" -#: platform/gui.cpp:85 platform/gui.cpp:89 +#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 msgctxt "file-type" msgid "SolveSpace models" msgstr "" @@ -1615,90 +1619,315 @@ msgstr "" #: platform/gui.cpp:102 msgctxt "file-type" -msgid "Q3D Object file" -msgstr "" - -#: platform/gui.cpp:103 -msgctxt "file-type" msgid "VRML text file" msgstr "" -#: platform/gui.cpp:107 platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 msgctxt "file-type" msgid "STEP file" msgstr "" -#: platform/gui.cpp:111 +#: platform/gui.cpp:110 msgctxt "file-type" msgid "PDF file" msgstr "" -#: platform/gui.cpp:112 +#: platform/gui.cpp:111 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "" -#: platform/gui.cpp:113 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "" -#: platform/gui.cpp:115 platform/gui.cpp:122 +#: platform/gui.cpp:114 platform/gui.cpp:121 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "" -#: platform/gui.cpp:116 +#: platform/gui.cpp:115 msgctxt "file-type" msgid "HPGL file" msgstr "" -#: platform/gui.cpp:117 +#: platform/gui.cpp:116 msgctxt "file-type" msgid "G Code" msgstr "" -#: platform/gui.cpp:126 +#: platform/gui.cpp:125 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "" -#: platform/gui.cpp:130 +#: platform/gui.cpp:129 msgctxt "file-type" msgid "Comma-separated values" msgstr "" -#: platform/guigtk.cpp:1317 platform/guimac.mm:1360 platform/guiwin.cpp:1608 +#: platform/guigtk.cpp:1321 platform/guimac.mm:1363 platform/guiwin.cpp:1630 msgid "untitled" msgstr "sans nom" -#: platform/guigtk.cpp:1328 platform/guigtk.cpp:1361 platform/guimac.mm:1318 -#: platform/guiwin.cpp:1555 +#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1365 platform/guimac.mm:1321 +#: platform/guiwin.cpp:1573 msgctxt "title" msgid "Save File" msgstr "Sauver fichier" -#: platform/guigtk.cpp:1329 platform/guigtk.cpp:1362 platform/guimac.mm:1301 -#: platform/guiwin.cpp:1557 +#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 platform/guimac.mm:1304 +#: platform/guiwin.cpp:1575 msgctxt "title" msgid "Open File" msgstr "Ouvrir Fichier" -#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1368 +#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1372 msgctxt "button" msgid "_Cancel" msgstr "_Annuler" -#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 +#: platform/guigtk.cpp:1337 platform/guigtk.cpp:1370 msgctxt "button" msgid "_Save" msgstr "_Sauver" -#: platform/guigtk.cpp:1334 platform/guigtk.cpp:1367 +#: platform/guigtk.cpp:1338 platform/guigtk.cpp:1371 msgctxt "button" msgid "_Open" msgstr "" +#: solvespace.cpp:169 +msgctxt "title" +msgid "Autosave Available" +msgstr "Sauvegarde automatique existante" + +#: solvespace.cpp:170 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "" + +#: solvespace.cpp:171 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "&Load autosave" +msgstr "" + +#: solvespace.cpp:174 +msgctxt "button" +msgid "Do&n't Load" +msgstr "" + +#: solvespace.cpp:557 +msgctxt "title" +msgid "Modified File" +msgstr "Fichier modifié" + +#: solvespace.cpp:559 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "" + +#: solvespace.cpp:562 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "" + +#: solvespace.cpp:565 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "" + +#: solvespace.cpp:566 +msgctxt "button" +msgid "&Save" +msgstr "" + +#: solvespace.cpp:568 +msgctxt "button" +msgid "Do&n't Save" +msgstr "" + +#: solvespace.cpp:589 +msgctxt "title" +msgid "(new sketch)" +msgstr "(nouveau dessin)" + +#: solvespace.cpp:596 +msgctxt "title" +msgid "Property Browser" +msgstr "Navigateur de propriété" + +#: solvespace.cpp:658 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" + +#: solvespace.cpp:730 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" + +#: solvespace.cpp:778 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "" + +#: solvespace.cpp:782 +msgid "Bad selection for step dimension; select a constraint." +msgstr "" + +#: solvespace.cpp:806 +msgid "The assembly does not interfere, good." +msgstr "" + +#: solvespace.cpp:822 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" + +#: solvespace.cpp:831 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" + +#: solvespace.cpp:836 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" + +#: solvespace.cpp:851 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:860 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" + +#: solvespace.cpp:872 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:892 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:898 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "" + +#: solvespace.cpp:914 +msgid "Bad selection for trace; select a single point." +msgstr "" + +#: solvespace.cpp:941 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "" + +#: solvespace.cpp:971 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "" + +#: solvespace.cpp:972 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "" + +#: solvespace.cpp:974 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "" + +#: solvespace.cpp:975 +msgid "The mesh is watertight (okay, valid)." +msgstr "" + +#: solvespace.cpp:978 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" + +#: solvespace.cpp:982 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" + +#: solvespace.cpp:985 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" + +#: solvespace.cpp:998 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" + #: style.cpp:166 msgid "" "Can't assign style to an entity that's derived from another entity; try " @@ -1832,31 +2061,39 @@ msgid "New group rotating active sketch" msgstr "Nouveau groupe de révolution du dessin actif" #: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "" + +#: toolbar.cpp:76 msgid "New group step and repeat rotating" msgstr "Nouveau groupe de répétition circulaire" -#: toolbar.cpp:74 +#: toolbar.cpp:78 msgid "New group step and repeat translating" msgstr "Nouveau groupe de répétition linéaire" -#: toolbar.cpp:76 +#: toolbar.cpp:80 msgid "New group in new workplane (thru given entities)" msgstr "" "Nouveau groupe dans un nouveau plan de travail (Par des entités données)" -#: toolbar.cpp:78 +#: toolbar.cpp:82 msgid "New group in 3d" msgstr "Nouveau groupe en 3d" -#: toolbar.cpp:80 +#: toolbar.cpp:84 msgid "New group linking / assembling file" msgstr "Nouveau groupe lié / assemblage" -#: toolbar.cpp:84 +#: toolbar.cpp:88 msgid "Nearest isometric view" msgstr "Vue isométrique la plus proche" -#: toolbar.cpp:86 +#: toolbar.cpp:90 msgid "Align view to active workplane" msgstr "Aligner la vue sur le plan de travail actif" @@ -1883,14 +2120,6 @@ msgstr "L'échelle ne peut pas être zéro ou négative." msgid "Bad format: specify x, y, z" msgstr "Mauvais format: Spécifiez x, y, z" -#~ msgctxt "title" -#~ msgid "(new sketch)" -#~ msgstr "(nouveau dessin)" - -#~ msgctxt "title" -#~ msgid "Property Browser" -#~ msgstr "Navigateur de propriété" - #~ msgid "Specify between 0 and 8 digits after the decimal." #~ msgstr "Spécifiez entre 0 et 8 chiffres après la virgule." @@ -1967,18 +2196,10 @@ msgstr "Mauvais format: Spécifiez x, y, z" #~ "\n" #~ "Voulez-vous enregistrer les modifications?" -#~ msgctxt "title" -#~ msgid "Modified File" -#~ msgstr "Fichier modifié" - #~ msgctxt "button" #~ msgid "Do_n't Save" #~ msgstr "_Ne pas sauver" -#~ msgctxt "title" -#~ msgid "Autosave Available" -#~ msgstr "Sauvegarde automatique existante" - #~ msgctxt "button" #~ msgid "_Load autosave" #~ msgstr "_Charger la sauvegarde automatique" diff --git a/res/locales/ru_RU.po b/res/locales/ru_RU.po index aa6078e..8cc4e60 100644 --- a/res/locales/ru_RU.po +++ b/res/locales/ru_RU.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2020-11-17 20:50-0500\n" +"POT-Creation-Date: 2021-01-17 19:54+0200\n" "PO-Revision-Date: 2017-04-21 10:29+0700\n" "Last-Translator: evilspirit@evilspirit.org\n" "Language-Team: EvilSpirit\n" @@ -17,7 +17,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.0.1\n" -#: clipboard.cpp:274 +#: clipboard.cpp:310 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -27,50 +27,50 @@ msgstr "" "можно только находясь в рабочей плоскости.\n" "Активируйте рабочую плоскость через Эскиз->В Рабочей Плоскости" -#: clipboard.cpp:291 +#: clipboard.cpp:327 msgid "Clipboard is empty; nothing to paste." msgstr "Буфер обмена пуст; нечего вставлять." -#: clipboard.cpp:338 +#: clipboard.cpp:374 msgid "Number of copies to paste must be at least one." msgstr "Укажите в поле 'количество' хотя бы одну копию для вставки." -#: clipboard.cpp:354 textscreens.cpp:783 +#: clipboard.cpp:390 textscreens.cpp:783 msgid "Scale cannot be zero." msgstr "Масштабный коэффициент не может быть нулевым." -#: clipboard.cpp:396 +#: clipboard.cpp:432 msgid "Select one point to define origin of rotation." msgstr "Выберите одну точку в качестве центра вращения." -#: clipboard.cpp:408 +#: clipboard.cpp:444 msgid "Select two points to define translation vector." msgstr "Выберите две точки, чтобы задать вектор смещения." -#: clipboard.cpp:418 +#: clipboard.cpp:454 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." msgstr "" "Трансформация не задана. Все копии будут расположены в одном и том же месте." -#: clipboard.cpp:422 +#: clipboard.cpp:458 msgid "Too many items to paste; split this into smaller pastes." msgstr "Слишком много элементов для вставки; разбейте на несколько частей." -#: clipboard.cpp:427 +#: clipboard.cpp:463 msgid "No workplane active." msgstr "Рабочая плоскость не активна" -#: confscreen.cpp:410 +#: confscreen.cpp:418 msgid "Bad format: specify coordinates as x, y, z" msgstr "Неверный формат: введите координаты как x, y, z" -#: confscreen.cpp:420 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 msgid "Bad format: specify color as r, g, b" msgstr "Неверный формат: введите цвет как r, g, b" -#: confscreen.cpp:446 +#: confscreen.cpp:454 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." @@ -78,25 +78,25 @@ msgstr "" "Коэффициент перспективы не будет иметь эффект, пока вы не включите Вид-" ">Перспективная Проекция." -#: confscreen.cpp:459 confscreen.cpp:469 +#: confscreen.cpp:467 confscreen.cpp:477 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "Введите число от 0 до %d." -#: confscreen.cpp:481 +#: confscreen.cpp:489 msgid "Export scale must not be zero!" msgstr "Масштабный коэффициент не может быть нулевым!" -#: confscreen.cpp:493 +#: confscreen.cpp:501 msgid "Cutter radius offset must not be negative!" msgstr "Радиус режущего инструмента не может быть отрицательным!" -#: confscreen.cpp:547 +#: confscreen.cpp:555 msgid "Bad value: autosave interval should be positive" msgstr "" "Неверное значение: интервал автосохранения должен быть положительным числом" -#: confscreen.cpp:550 +#: confscreen.cpp:558 msgid "Bad format: specify interval in integral minutes" msgstr "" "Неверный формат: введите целое число, чтобы задать интервал автосохранения" @@ -276,7 +276,34 @@ msgctxt "constr-name" msgid "comment" msgstr "комментарий" -#: constraint.cpp:171 +#: constraint.cpp:140 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"Дуга и отрезок должны быть соединены. Соедините их крайние точки с помощью " +"'Ограничения -> Точка на Примитиве' перед тем, как применять ограничение " +"касательности." + +#: constraint.cpp:158 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"Сплайн и отрезок должны быть соединены. Соедините их крайние точки с помощью " +"'Ограничения -> Точка на Примитиве' перед тем, как применять ограничение " +"касательности." + +#: constraint.cpp:183 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"Кривые должны быть соединены. Соедините их крайние точки с помощью " +"'Ограничения -> Точка на Примитиве' перед тем, как применять ограничение " +"касательности." + +#: constraint.cpp:231 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -301,7 +328,7 @@ msgstr "" " * грань и точку (расстояние от точки до плоскости грани)\n" " * окружность или дугу (диаметр / радиус)\n" -#: constraint.cpp:224 +#: constraint.cpp:284 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -321,7 +348,7 @@ msgstr "" " * точку и окружность / дугу / сплайн (точка на кривой)\n" " * точку и грань (точка на грани)\n" -#: constraint.cpp:286 +#: constraint.cpp:346 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -349,7 +376,7 @@ msgstr "" " * две окружности / дуги (равенство радиусов)\n" " * отрезок и дугу (равенство длины отрезка и длины дуги)\n" -#: constraint.cpp:325 +#: constraint.cpp:385 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" @@ -360,7 +387,7 @@ msgstr "" "\n" " * два отрезка\n" -#: constraint.cpp:342 +#: constraint.cpp:402 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" @@ -372,7 +399,7 @@ msgstr "" "\n" " * два отрезка\n" -#: constraint.cpp:368 +#: constraint.cpp:428 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -385,7 +412,7 @@ msgstr "" " * точку и отрезок (точка на середине отрезка)\n" " * отрезок и рабочую плоскость (середина отрезка на плоскости)\n" -#: constraint.cpp:426 +#: constraint.cpp:486 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -405,7 +432,7 @@ msgstr "" " * рабочую плоскость и две точки / отрезок (симметричность относительно " "рабочей плоскости\n" -#: constraint.cpp:440 +#: constraint.cpp:500 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." @@ -413,7 +440,7 @@ msgstr "" "Рабочая плоскость должна быть активна для того, чтобы создать\n" "ограничение симметричности без явного указания плоскости симметрии." -#: constraint.cpp:470 +#: constraint.cpp:530 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." @@ -421,7 +448,7 @@ msgstr "" "Рабочая плоскость должна быть активирована (Эскиз -> В рабочей плоскости)\n" "перед тем, как накладывать ограничения горизонтальности / вертикальности." -#: constraint.cpp:483 +#: constraint.cpp:543 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -435,7 +462,7 @@ msgstr "" " * две точки\n" " * отрезок\n" -#: constraint.cpp:504 +#: constraint.cpp:564 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -447,18 +474,18 @@ msgstr "" "\n" " * два координатных базиса('нормали')\n" -#: constraint.cpp:554 +#: constraint.cpp:614 msgid "Must select an angle constraint." msgstr "" "Переключатся между смежными углами можно только выбрав ограничение угла." -#: constraint.cpp:567 +#: constraint.cpp:627 msgid "Must select a constraint with associated label." msgstr "" "Переключать режим 'размера для справок' возможно только для ограничений, " "имеющих размерное значение." -#: constraint.cpp:578 +#: constraint.cpp:638 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -473,39 +500,12 @@ msgstr "" " * отрезок и координатный базис (нормаль)\n" " * два координатных базиса (нормали)\n" -#: constraint.cpp:635 -msgid "" -"The tangent arc and line segment must share an endpoint. Constrain them with " -"Constrain -> On Point before constraining tangent." -msgstr "" -"Дуга и отрезок должны быть соединены. Соедините их крайние точки с помощью " -"'Ограничения -> Точка на Примитиве' перед тем, как применять ограничение " -"касательности." - -#: constraint.cpp:659 -msgid "" -"The tangent cubic and line segment must share an endpoint. Constrain them " -"with Constrain -> On Point before constraining tangent." -msgstr "" -"Сплайн и отрезок должны быть соединены. Соедините их крайние точки с помощью " -"'Ограничения -> Точка на Примитиве' перед тем, как применять ограничение " -"касательности." - -#: constraint.cpp:669 +#: constraint.cpp:701 msgid "Curve-curve tangency must apply in workplane." msgstr "" "Ограничение касательности может быть наложено только в рабочей плоскости." -#: constraint.cpp:687 -msgid "" -"The curves must share an endpoint. Constrain them with Constrain -> On Point " -"before constraining tangent." -msgstr "" -"Кривые должны быть соединены. Соедините их крайние точки с помощью " -"'Ограничения -> Точка на Примитиве' перед тем, как применять ограничение " -"касательности." - -#: constraint.cpp:696 +#: constraint.cpp:711 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -524,7 +524,7 @@ msgstr "" " * два отрезка, две дуги или два сплайна, соединенных крайними точками " "(касательность)\n" -#: constraint.cpp:714 +#: constraint.cpp:729 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -539,7 +539,7 @@ msgstr "" " * отрезок и координатный базис (нормаль)\n" " * два координатных базиса (нормали)\n" -#: constraint.cpp:729 +#: constraint.cpp:744 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -551,7 +551,7 @@ msgstr "" "\n" " * точку\n" -#: constraint.cpp:740 +#: constraint.cpp:755 msgid "click center of comment text" msgstr "кликните мышью там, где будет расположен текстовый комментарий" @@ -648,7 +648,7 @@ msgctxt "button" msgid "&No" msgstr "Нет" -#: file.cpp:869 +#: file.cpp:869 solvespace.cpp:569 msgctxt "button" msgid "&Cancel" msgstr "Отменить" @@ -814,299 +814,303 @@ msgid "Show Snap &Grid" msgstr "Показать &Сетку" #: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "" + +#: graphicswin.cpp:96 msgid "Use &Perspective Projection" msgstr "Перспективная Прое&кция" -#: graphicswin.cpp:96 +#: graphicswin.cpp:97 msgid "Dimension &Units" msgstr "" -#: graphicswin.cpp:97 +#: graphicswin.cpp:98 msgid "Dimensions in &Millimeters" msgstr "Размеры в Ми&ллиметрах" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in M&eters" msgstr "" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in &Inches" msgstr "Размеры в Дю&ймах" -#: graphicswin.cpp:101 +#: graphicswin.cpp:102 msgid "Show &Toolbar" msgstr "Показывать Па&нель Инструментов" -#: graphicswin.cpp:102 +#: graphicswin.cpp:103 msgid "Show Property Bro&wser" msgstr "Показывать Брау&зер" -#: graphicswin.cpp:104 +#: graphicswin.cpp:105 msgid "&Full Screen" msgstr "Полно&экранный Режим" -#: graphicswin.cpp:106 +#: graphicswin.cpp:107 msgid "&New Group" msgstr "&Группа" -#: graphicswin.cpp:107 +#: graphicswin.cpp:108 msgid "Sketch In &3d" msgstr "Создать Эскиз в &3d" -#: graphicswin.cpp:108 +#: graphicswin.cpp:109 msgid "Sketch In New &Workplane" msgstr "Создать Эскиз в Новой &Рабочей Плоскости" -#: graphicswin.cpp:110 +#: graphicswin.cpp:111 msgid "Step &Translating" msgstr "&Линейный Массив" -#: graphicswin.cpp:111 +#: graphicswin.cpp:112 msgid "Step &Rotating" msgstr "&Круговой Массив" -#: graphicswin.cpp:113 +#: graphicswin.cpp:114 msgid "E&xtrude" msgstr "Тело &Выдавливания" -#: graphicswin.cpp:114 +#: graphicswin.cpp:115 msgid "&Helix" msgstr "" -#: graphicswin.cpp:115 +#: graphicswin.cpp:116 msgid "&Lathe" msgstr "Тело В&ращения" -#: graphicswin.cpp:116 +#: graphicswin.cpp:117 msgid "Re&volve" msgstr "" -#: graphicswin.cpp:118 +#: graphicswin.cpp:119 msgid "Link / Assemble..." msgstr "&Импорт Детали / Сборка..." -#: graphicswin.cpp:119 +#: graphicswin.cpp:120 msgid "Link Recent" msgstr "Последние &Детали" -#: graphicswin.cpp:121 +#: graphicswin.cpp:122 msgid "&Sketch" msgstr "&Эскиз" -#: graphicswin.cpp:122 +#: graphicswin.cpp:123 msgid "In &Workplane" msgstr "В &Рабочей Плоскости" -#: graphicswin.cpp:123 +#: graphicswin.cpp:124 msgid "Anywhere In &3d" msgstr "Режим &3d" -#: graphicswin.cpp:125 +#: graphicswin.cpp:126 msgid "Datum &Point" msgstr "Опорная &Точка" -#: graphicswin.cpp:126 +#: graphicswin.cpp:127 msgid "&Workplane" msgstr "Рабочая &Плоскость" -#: graphicswin.cpp:128 +#: graphicswin.cpp:129 msgid "Line &Segment" msgstr "&Отрезок" -#: graphicswin.cpp:129 +#: graphicswin.cpp:130 msgid "C&onstruction Line Segment" msgstr "&Вспомогательный Отрезок" -#: graphicswin.cpp:130 +#: graphicswin.cpp:131 msgid "&Rectangle" msgstr "Прямоу&гольник" -#: graphicswin.cpp:131 +#: graphicswin.cpp:132 msgid "&Circle" msgstr "О&кружность" -#: graphicswin.cpp:132 +#: graphicswin.cpp:133 msgid "&Arc of a Circle" msgstr "Д&уга Окружности" -#: graphicswin.cpp:133 +#: graphicswin.cpp:134 msgid "&Bezier Cubic Spline" msgstr "Кубический &Сплайн Безье" -#: graphicswin.cpp:135 +#: graphicswin.cpp:136 msgid "&Text in TrueType Font" msgstr "Т&екст TrueType" -#: graphicswin.cpp:136 +#: graphicswin.cpp:137 msgid "&Image" msgstr "И&зображение" -#: graphicswin.cpp:138 +#: graphicswin.cpp:139 msgid "To&ggle Construction" msgstr "Переключить Режим Вс&помогательных Построений" -#: graphicswin.cpp:139 +#: graphicswin.cpp:140 msgid "Tangent &Arc at Point" msgstr "Кас&ательная в Точке" -#: graphicswin.cpp:140 +#: graphicswin.cpp:141 msgid "Split Curves at &Intersection" msgstr "Ра&збить Кривые Пересечением" -#: graphicswin.cpp:142 +#: graphicswin.cpp:143 msgid "&Constrain" msgstr "&Ограничения" -#: graphicswin.cpp:143 +#: graphicswin.cpp:144 msgid "&Distance / Diameter" msgstr "&Расстояние / Диаметр" -#: graphicswin.cpp:144 +#: graphicswin.cpp:145 msgid "Re&ference Dimension" msgstr "&Справочный Размер" -#: graphicswin.cpp:145 +#: graphicswin.cpp:146 msgid "A&ngle" msgstr "&Угол" -#: graphicswin.cpp:146 +#: graphicswin.cpp:147 msgid "Reference An&gle" msgstr "С&правочный Угол" -#: graphicswin.cpp:147 +#: graphicswin.cpp:148 msgid "Other S&upplementary Angle" msgstr "Переключить Сме&жный Угол" -#: graphicswin.cpp:148 +#: graphicswin.cpp:149 msgid "Toggle R&eference Dim" msgstr "Переключить Режим Размера Для Спра&вок" -#: graphicswin.cpp:150 +#: graphicswin.cpp:151 msgid "&Horizontal" msgstr "&Горизонтальность" -#: graphicswin.cpp:151 +#: graphicswin.cpp:152 msgid "&Vertical" msgstr "&Вертикальность" -#: graphicswin.cpp:153 +#: graphicswin.cpp:154 msgid "&On Point / Curve / Plane" msgstr "&Точка на Примитиве" -#: graphicswin.cpp:154 +#: graphicswin.cpp:155 msgid "E&qual Length / Radius / Angle" msgstr "&Равенство Длин / Радиусов / Углов" -#: graphicswin.cpp:155 +#: graphicswin.cpp:156 msgid "Length Ra&tio" msgstr "Отно&шение Длин" -#: graphicswin.cpp:156 +#: graphicswin.cpp:157 msgid "Length Diff&erence" msgstr "Ра&зница Длин" -#: graphicswin.cpp:157 +#: graphicswin.cpp:158 msgid "At &Midpoint" msgstr "&На Середине" -#: graphicswin.cpp:158 +#: graphicswin.cpp:159 msgid "S&ymmetric" msgstr "С&имметричность" -#: graphicswin.cpp:159 +#: graphicswin.cpp:160 msgid "Para&llel / Tangent" msgstr "Пара&ллельность / Касательность" -#: graphicswin.cpp:160 +#: graphicswin.cpp:161 msgid "&Perpendicular" msgstr "Перпендикул&ярность" -#: graphicswin.cpp:161 +#: graphicswin.cpp:162 msgid "Same Orient&ation" msgstr "Идентичная &Ориентация" -#: graphicswin.cpp:162 +#: graphicswin.cpp:163 msgid "Lock Point Where &Dragged" msgstr "За&фиксировать" -#: graphicswin.cpp:164 +#: graphicswin.cpp:165 msgid "Comment" msgstr "Текстовый &Комментарий" -#: graphicswin.cpp:166 +#: graphicswin.cpp:167 msgid "&Analyze" msgstr "&Анализ" -#: graphicswin.cpp:167 +#: graphicswin.cpp:168 msgid "Measure &Volume" msgstr "Измерить &Объем" -#: graphicswin.cpp:168 +#: graphicswin.cpp:169 msgid "Measure A&rea" msgstr "Измерить П&лощадь" -#: graphicswin.cpp:169 +#: graphicswin.cpp:170 msgid "Measure &Perimeter" msgstr "Измерить П&ериметр" -#: graphicswin.cpp:170 +#: graphicswin.cpp:171 msgid "Show &Interfering Parts" msgstr "Показать Пе&ресекающиеся Детали" -#: graphicswin.cpp:171 +#: graphicswin.cpp:172 msgid "Show &Naked Edges" msgstr "Показать Про&блемные Ребра" -#: graphicswin.cpp:172 +#: graphicswin.cpp:173 msgid "Show &Center of Mass" msgstr "" -#: graphicswin.cpp:174 +#: graphicswin.cpp:175 msgid "Show &Underconstrained Points" msgstr "" -#: graphicswin.cpp:176 +#: graphicswin.cpp:177 msgid "&Trace Point" msgstr "Включить &Трассировку Точки" -#: graphicswin.cpp:177 +#: graphicswin.cpp:178 msgid "&Stop Tracing..." msgstr "Остановить Тра&ссировку..." -#: graphicswin.cpp:178 +#: graphicswin.cpp:179 msgid "Step &Dimension..." msgstr "Плавное Из&менение Размера..." -#: graphicswin.cpp:180 +#: graphicswin.cpp:181 msgid "&Help" msgstr "&Помощь" -#: graphicswin.cpp:181 +#: graphicswin.cpp:182 msgid "&Language" msgstr "&Язык" -#: graphicswin.cpp:182 +#: graphicswin.cpp:183 msgid "&Website / Manual" msgstr "Вебсайт / &Справка" -#: graphicswin.cpp:184 +#: graphicswin.cpp:185 msgid "&About" msgstr "О &Программе" -#: graphicswin.cpp:352 +#: graphicswin.cpp:355 msgid "(no recent files)" msgstr "(пусто)" -#: graphicswin.cpp:360 +#: graphicswin.cpp:363 #, c-format msgid "File '%s' does not exist." msgstr "" -#: graphicswin.cpp:721 +#: graphicswin.cpp:725 msgid "No workplane is active, so the grid will not appear." msgstr "Сетку не будет видно, пока рабочая плоскость не активирована." -#: graphicswin.cpp:730 +#: graphicswin.cpp:740 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1120,16 +1124,16 @@ msgstr "" "перспективы на конфигурационной странице браузера.\n" "Значение по умолчанию 0.3." -#: graphicswin.cpp:809 +#: graphicswin.cpp:819 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "Выделите точку. Вид будет отцентрован по этой точке." -#: graphicswin.cpp:1103 +#: graphicswin.cpp:1114 msgid "No additional entities share endpoints with the selected entities." msgstr "Нет дополнительных объектов, соединенных с выбранными примитивами." -#: graphicswin.cpp:1121 +#: graphicswin.cpp:1132 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." @@ -1138,7 +1142,7 @@ msgstr "" "принадлежащий импортированной детали или активируйте группу импортированной " "детали." -#: graphicswin.cpp:1144 +#: graphicswin.cpp:1155 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." @@ -1146,7 +1150,7 @@ msgstr "" "Рабочая плоскость не активна. Активируйте ее через Эскиз -> В Рабочей " "Плоскости чтобы определить плоскость для сетки." -#: graphicswin.cpp:1151 +#: graphicswin.cpp:1162 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." @@ -1155,13 +1159,13 @@ msgstr "" "текстовые комментарии или ограничения с размерными значениями. Чтобы " "привязать отрезок или другой примитив, выбирайте его точки." -#: graphicswin.cpp:1239 +#: graphicswin.cpp:1247 msgid "No workplane selected. Activating default workplane for this group." msgstr "" "Рабочая плоскость не активна. Активирована рабочая плоскость по умолчанию " "для данной группы." -#: graphicswin.cpp:1242 +#: graphicswin.cpp:1250 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" @@ -1171,7 +1175,7 @@ msgstr "" "по умолчанию. Попробуйте выделить рабочую плоскость или создать новую с " "помощью Группа -> Создать Эскиз в Новой Рабочей Плоскости." -#: graphicswin.cpp:1263 +#: graphicswin.cpp:1271 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." @@ -1180,53 +1184,53 @@ msgstr "" "точку, либо запустите команду без выделения, чтобы перейти к окну настроек " "этой команды." -#: graphicswin.cpp:1274 +#: graphicswin.cpp:1282 msgid "click point on arc (draws anti-clockwise)" msgstr "" "кликните мышью там, где хотите создать дугу окружности (дуга будет " "нарисована против часовой стрелки)" -#: graphicswin.cpp:1275 +#: graphicswin.cpp:1283 msgid "click to place datum point" msgstr "кликните мышью там, где хотите создать опорную точку" -#: graphicswin.cpp:1276 +#: graphicswin.cpp:1284 msgid "click first point of line segment" msgstr "кликните мышью там, где хотите создать первую точку отрезка" -#: graphicswin.cpp:1278 +#: graphicswin.cpp:1286 msgid "click first point of construction line segment" msgstr "" "кликните мышью там, где хотите создать первую точку вспомогательного отрезка" -#: graphicswin.cpp:1279 +#: graphicswin.cpp:1287 msgid "click first point of cubic segment" msgstr "" "кликните мышью там, где хотите создать первую точку кубического сплайна Безье" -#: graphicswin.cpp:1280 +#: graphicswin.cpp:1288 msgid "click center of circle" msgstr "кликните мышью там, где будет находиться центр окружности" -#: graphicswin.cpp:1281 +#: graphicswin.cpp:1289 msgid "click origin of workplane" msgstr "" "кликните мышью там, где будет находиться точка, через которую будет " "построена рабочая плоскость" -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1290 msgid "click one corner of rectangle" msgstr "кликните мышью там, где будет находиться один из углов прямоугольника" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1291 msgid "click top left of text" msgstr "кликните мышью там, где хотите создать текст" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1297 msgid "click top left of image" msgstr "" -#: graphicswin.cpp:1301 +#: graphicswin.cpp:1309 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1366,19 +1370,19 @@ msgstr "линейный-массив" msgid "(unnamed)" msgstr "(без имени)" -#: groupmesh.cpp:708 +#: groupmesh.cpp:709 msgid "not closed contour, or not all same style!" msgstr "незамкнутый контур или несовпадение стилей!" -#: groupmesh.cpp:721 +#: groupmesh.cpp:722 msgid "points not all coplanar!" msgstr "не все точки лежат в одной плоскости!" -#: groupmesh.cpp:723 +#: groupmesh.cpp:724 msgid "contour is self-intersecting!" msgstr "контур имеет самопересечения!" -#: groupmesh.cpp:725 +#: groupmesh.cpp:726 msgid "zero-length edge!" msgstr "вырожденный отрезок!" @@ -1519,69 +1523,69 @@ msgstr "Снять Выделение с Выбранного" msgid "Zoom to Fit" msgstr "Показать Все" -#: mouse.cpp:990 mouse.cpp:1277 +#: mouse.cpp:989 mouse.cpp:1276 msgid "click next point of line, or press Esc" msgstr "кликните мышью там, где хотите расположить следующую точку" -#: mouse.cpp:996 +#: mouse.cpp:995 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" "Невозможно начертить прямоугольник, когда рабочая плоскость не активна." -#: mouse.cpp:1030 +#: mouse.cpp:1029 msgid "click to place other corner of rectangle" msgstr "кликните мышью там, где хотите расположить другой угол прямоугольника" -#: mouse.cpp:1050 +#: mouse.cpp:1049 msgid "click to set radius" msgstr "кликните, чтобы задать радиус" -#: mouse.cpp:1055 +#: mouse.cpp:1054 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "Невозможно создать дугу, когда нет активной рабочей плоскости." -#: mouse.cpp:1074 +#: mouse.cpp:1073 msgid "click to place point" msgstr "кликните мышью там, где хотите создать точку" -#: mouse.cpp:1090 +#: mouse.cpp:1089 msgid "click next point of cubic, or press Esc" msgstr "" "кликните мышью там, где хотите создать следующую точку сплайна или нажмите " "Esc для завершения операции." -#: mouse.cpp:1095 +#: mouse.cpp:1094 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" "Рабочая плоскость уже активна. Перейдите в режим 3d перед созданием новой " "рабочей плоскости." -#: mouse.cpp:1111 +#: mouse.cpp:1110 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "Невозможно создать текст, когда нет активной рабочей плоскости." -#: mouse.cpp:1128 +#: mouse.cpp:1127 msgid "click to place bottom right of text" msgstr "" -#: mouse.cpp:1134 +#: mouse.cpp:1133 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -#: mouse.cpp:1161 +#: mouse.cpp:1160 msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" msgstr "КОММЕНТАРИЙ -- ДВОЙНОЙ ЩЕЛЧОК ДЛЯ РЕДАКТИРОВАНИЯ" -#: platform/gui.cpp:85 platform/gui.cpp:89 +#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 msgctxt "file-type" msgid "SolveSpace models" msgstr "проекты SolveSpace" @@ -1618,90 +1622,315 @@ msgstr "Three.js-совместимая полигональная сетка" #: platform/gui.cpp:102 msgctxt "file-type" -msgid "Q3D Object file" -msgstr "" - -#: platform/gui.cpp:103 -msgctxt "file-type" msgid "VRML text file" msgstr "" -#: platform/gui.cpp:107 platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 msgctxt "file-type" msgid "STEP file" msgstr "STEP файл" -#: platform/gui.cpp:111 +#: platform/gui.cpp:110 msgctxt "file-type" msgid "PDF file" msgstr "PDF документ" -#: platform/gui.cpp:112 +#: platform/gui.cpp:111 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "Encapsulated PostScript" -#: platform/gui.cpp:113 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "SVG изображение" -#: platform/gui.cpp:115 platform/gui.cpp:122 +#: platform/gui.cpp:114 platform/gui.cpp:121 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "DXF файл (AutoCAD 2007)" -#: platform/gui.cpp:116 +#: platform/gui.cpp:115 msgctxt "file-type" msgid "HPGL file" msgstr "HPGL файл" -#: platform/gui.cpp:117 +#: platform/gui.cpp:116 msgctxt "file-type" msgid "G Code" msgstr "G Code" -#: platform/gui.cpp:126 +#: platform/gui.cpp:125 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "AutoCAD DXF и DWG файлы" -#: platform/gui.cpp:130 +#: platform/gui.cpp:129 msgctxt "file-type" msgid "Comma-separated values" msgstr "CSV файлы (значения, разделенные запятой)" -#: platform/guigtk.cpp:1317 platform/guimac.mm:1360 platform/guiwin.cpp:1608 +#: platform/guigtk.cpp:1321 platform/guimac.mm:1363 platform/guiwin.cpp:1630 msgid "untitled" msgstr "без имени" -#: platform/guigtk.cpp:1328 platform/guigtk.cpp:1361 platform/guimac.mm:1318 -#: platform/guiwin.cpp:1555 +#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1365 platform/guimac.mm:1321 +#: platform/guiwin.cpp:1573 msgctxt "title" msgid "Save File" msgstr "Сохранить Файл" -#: platform/guigtk.cpp:1329 platform/guigtk.cpp:1362 platform/guimac.mm:1301 -#: platform/guiwin.cpp:1557 +#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 platform/guimac.mm:1304 +#: platform/guiwin.cpp:1575 msgctxt "title" msgid "Open File" msgstr "Открыть Файл" -#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1368 +#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1372 msgctxt "button" msgid "_Cancel" msgstr "Отменить" -#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 +#: platform/guigtk.cpp:1337 platform/guigtk.cpp:1370 msgctxt "button" msgid "_Save" msgstr "Сохранить" -#: platform/guigtk.cpp:1334 platform/guigtk.cpp:1367 +#: platform/guigtk.cpp:1338 platform/guigtk.cpp:1371 msgctxt "button" msgid "_Open" msgstr "" +#: solvespace.cpp:169 +msgctxt "title" +msgid "Autosave Available" +msgstr "Автосохранение Доступно" + +#: solvespace.cpp:170 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "" + +#: solvespace.cpp:171 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "&Load autosave" +msgstr "" + +#: solvespace.cpp:174 +msgctxt "button" +msgid "Do&n't Load" +msgstr "" + +#: solvespace.cpp:557 +msgctxt "title" +msgid "Modified File" +msgstr "Измененный Файл" + +#: solvespace.cpp:559 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "" + +#: solvespace.cpp:562 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "" + +#: solvespace.cpp:565 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "" + +#: solvespace.cpp:566 +msgctxt "button" +msgid "&Save" +msgstr "" + +#: solvespace.cpp:568 +msgctxt "button" +msgid "Do&n't Save" +msgstr "" + +#: solvespace.cpp:589 +msgctxt "title" +msgid "(new sketch)" +msgstr "(новый проект)" + +#: solvespace.cpp:596 +msgctxt "title" +msgid "Property Browser" +msgstr "Браузер" + +#: solvespace.cpp:658 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" + +#: solvespace.cpp:730 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" + +#: solvespace.cpp:778 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "" + +#: solvespace.cpp:782 +msgid "Bad selection for step dimension; select a constraint." +msgstr "" + +#: solvespace.cpp:806 +msgid "The assembly does not interfere, good." +msgstr "" + +#: solvespace.cpp:822 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" + +#: solvespace.cpp:831 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" + +#: solvespace.cpp:836 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" + +#: solvespace.cpp:851 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:860 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" + +#: solvespace.cpp:872 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:892 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:898 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "" + +#: solvespace.cpp:914 +msgid "Bad selection for trace; select a single point." +msgstr "" + +#: solvespace.cpp:941 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "" + +#: solvespace.cpp:971 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "" + +#: solvespace.cpp:972 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "" + +#: solvespace.cpp:974 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "" + +#: solvespace.cpp:975 +msgid "The mesh is watertight (okay, valid)." +msgstr "" + +#: solvespace.cpp:978 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" + +#: solvespace.cpp:982 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" + +#: solvespace.cpp:985 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" + +#: solvespace.cpp:998 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" + #: style.cpp:166 msgid "" "Can't assign style to an entity that's derived from another entity; try " @@ -1835,30 +2064,38 @@ msgid "New group rotating active sketch" msgstr "Создать группу вращения текущего эскиза" #: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "" + +#: toolbar.cpp:76 msgid "New group step and repeat rotating" msgstr "Создать группу кругового массива" -#: toolbar.cpp:74 +#: toolbar.cpp:78 msgid "New group step and repeat translating" msgstr "Создать группу линейного массива" -#: toolbar.cpp:76 +#: toolbar.cpp:80 msgid "New group in new workplane (thru given entities)" msgstr "Создать группу в новой рабочей плоскости (через выбранные примитивы)" -#: toolbar.cpp:78 +#: toolbar.cpp:82 msgid "New group in 3d" msgstr "Новая группа в 3d" -#: toolbar.cpp:80 +#: toolbar.cpp:84 msgid "New group linking / assembling file" msgstr "Новая группа импорта детали / сборки" -#: toolbar.cpp:84 +#: toolbar.cpp:88 msgid "Nearest isometric view" msgstr "Ближайший изометрический вид" -#: toolbar.cpp:86 +#: toolbar.cpp:90 msgid "Align view to active workplane" msgstr "Выровнять вид на рабочую плоскость" @@ -1885,14 +2122,6 @@ msgstr "Масштабный коэффициент не может быть н msgid "Bad format: specify x, y, z" msgstr "Неверный формат: введите данные как x, y, z" -#~ msgctxt "title" -#~ msgid "(new sketch)" -#~ msgstr "(новый проект)" - -#~ msgctxt "title" -#~ msgid "Property Browser" -#~ msgstr "Браузер" - #~ msgid "Specify between 0 and 8 digits after the decimal." #~ msgstr "Введите число от 0 до 8." @@ -1970,10 +2199,6 @@ msgstr "Неверный формат: введите данные как x, y, #~ "\n" #~ "Хотите сохранить их?" -#~ msgctxt "title" -#~ msgid "Modified File" -#~ msgstr "Измененный Файл" - #~ msgctxt "button" #~ msgid "Do_n't Save" #~ msgstr "Не Сохранять" @@ -1987,10 +2212,6 @@ msgstr "Неверный формат: введите данные как x, y, #~ "\n" #~ "Хотите загрузить их вместо открываемого файла?" -#~ msgctxt "title" -#~ msgid "Autosave Available" -#~ msgstr "Автосохранение Доступно" - #~ msgctxt "button" #~ msgid "_Load autosave" #~ msgstr "Загрузить Автосохранение" diff --git a/res/locales/uk_UA.po b/res/locales/uk_UA.po index e987066..1f2a210 100644 --- a/res/locales/uk_UA.po +++ b/res/locales/uk_UA.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2020-11-17 20:50-0500\n" +"POT-Creation-Date: 2021-01-17 19:54+0200\n" "PO-Revision-Date: 2017-01-05 10:30+0000\n" "Last-Translator: appsoft@ua.fm\n" "Language-Team: OpenOrienteeringUkraine\n" @@ -16,79 +16,79 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: clipboard.cpp:274 +#: clipboard.cpp:310 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" "Activate one with Sketch -> In Workplane." msgstr "" -#: clipboard.cpp:291 +#: clipboard.cpp:327 msgid "Clipboard is empty; nothing to paste." msgstr "" -#: clipboard.cpp:338 +#: clipboard.cpp:374 msgid "Number of copies to paste must be at least one." msgstr "" -#: clipboard.cpp:354 textscreens.cpp:783 +#: clipboard.cpp:390 textscreens.cpp:783 msgid "Scale cannot be zero." msgstr "" -#: clipboard.cpp:396 +#: clipboard.cpp:432 msgid "Select one point to define origin of rotation." msgstr "" -#: clipboard.cpp:408 +#: clipboard.cpp:444 msgid "Select two points to define translation vector." msgstr "" -#: clipboard.cpp:418 +#: clipboard.cpp:454 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." msgstr "" -#: clipboard.cpp:422 +#: clipboard.cpp:458 msgid "Too many items to paste; split this into smaller pastes." msgstr "" -#: clipboard.cpp:427 +#: clipboard.cpp:463 msgid "No workplane active." msgstr "" -#: confscreen.cpp:410 +#: confscreen.cpp:418 msgid "Bad format: specify coordinates as x, y, z" msgstr "" -#: confscreen.cpp:420 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 msgid "Bad format: specify color as r, g, b" msgstr "" -#: confscreen.cpp:446 +#: confscreen.cpp:454 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." msgstr "" -#: confscreen.cpp:459 confscreen.cpp:469 +#: confscreen.cpp:467 confscreen.cpp:477 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "" -#: confscreen.cpp:481 +#: confscreen.cpp:489 msgid "Export scale must not be zero!" msgstr "" -#: confscreen.cpp:493 +#: confscreen.cpp:501 msgid "Cutter radius offset must not be negative!" msgstr "" -#: confscreen.cpp:547 +#: confscreen.cpp:555 msgid "Bad value: autosave interval should be positive" msgstr "" -#: confscreen.cpp:550 +#: confscreen.cpp:558 msgid "Bad format: specify interval in integral minutes" msgstr "" @@ -267,7 +267,25 @@ msgctxt "constr-name" msgid "comment" msgstr "" -#: constraint.cpp:171 +#: constraint.cpp:140 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" + +#: constraint.cpp:158 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" + +#: constraint.cpp:183 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" + +#: constraint.cpp:231 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -281,7 +299,7 @@ msgid "" " * a circle or an arc (diameter)\n" msgstr "" -#: constraint.cpp:224 +#: constraint.cpp:284 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -293,7 +311,7 @@ msgid "" " * a point and a plane face (point on face)\n" msgstr "" -#: constraint.cpp:286 +#: constraint.cpp:346 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -309,14 +327,14 @@ msgid "" " * a line segment and an arc (line segment length equals arc length)\n" msgstr "" -#: constraint.cpp:325 +#: constraint.cpp:385 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" " * two line segments\n" msgstr "" -#: constraint.cpp:342 +#: constraint.cpp:402 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" @@ -324,7 +342,7 @@ msgid "" " * two line segments\n" msgstr "" -#: constraint.cpp:368 +#: constraint.cpp:428 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -332,7 +350,7 @@ msgid "" " * a line segment and a workplane (line's midpoint on plane)\n" msgstr "" -#: constraint.cpp:426 +#: constraint.cpp:486 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -344,19 +362,19 @@ msgid "" "workplane)\n" msgstr "" -#: constraint.cpp:440 +#: constraint.cpp:500 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." msgstr "" -#: constraint.cpp:470 +#: constraint.cpp:530 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." msgstr "" -#: constraint.cpp:483 +#: constraint.cpp:543 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -365,7 +383,7 @@ msgid "" " * a line segment\n" msgstr "" -#: constraint.cpp:504 +#: constraint.cpp:564 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -373,15 +391,15 @@ msgid "" " * two normals\n" msgstr "" -#: constraint.cpp:554 +#: constraint.cpp:614 msgid "Must select an angle constraint." msgstr "" -#: constraint.cpp:567 +#: constraint.cpp:627 msgid "Must select a constraint with associated label." msgstr "" -#: constraint.cpp:578 +#: constraint.cpp:638 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -390,29 +408,11 @@ msgid "" " * two normals\n" msgstr "" -#: constraint.cpp:635 -msgid "" -"The tangent arc and line segment must share an endpoint. Constrain them with " -"Constrain -> On Point before constraining tangent." -msgstr "" - -#: constraint.cpp:659 -msgid "" -"The tangent cubic and line segment must share an endpoint. Constrain them " -"with Constrain -> On Point before constraining tangent." -msgstr "" - -#: constraint.cpp:669 +#: constraint.cpp:701 msgid "Curve-curve tangency must apply in workplane." msgstr "" -#: constraint.cpp:687 -msgid "" -"The curves must share an endpoint. Constrain them with Constrain -> On Point " -"before constraining tangent." -msgstr "" - -#: constraint.cpp:696 +#: constraint.cpp:711 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -423,7 +423,7 @@ msgid "" " * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" msgstr "" -#: constraint.cpp:714 +#: constraint.cpp:729 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -432,7 +432,7 @@ msgid "" " * two normals\n" msgstr "" -#: constraint.cpp:729 +#: constraint.cpp:744 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -440,7 +440,7 @@ msgid "" " * a point\n" msgstr "" -#: constraint.cpp:740 +#: constraint.cpp:755 msgid "click center of comment text" msgstr "" @@ -528,7 +528,7 @@ msgctxt "button" msgid "&No" msgstr "" -#: file.cpp:869 +#: file.cpp:869 solvespace.cpp:569 msgctxt "button" msgid "&Cancel" msgstr "" @@ -694,299 +694,303 @@ msgid "Show Snap &Grid" msgstr "Показати &Сітку Прикріплення" #: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "" + +#: graphicswin.cpp:96 msgid "Use &Perspective Projection" msgstr "Використовувати &Перспективну Проекцію" -#: graphicswin.cpp:96 +#: graphicswin.cpp:97 msgid "Dimension &Units" msgstr "" -#: graphicswin.cpp:97 +#: graphicswin.cpp:98 msgid "Dimensions in &Millimeters" msgstr "Розміри в &Міліметрах" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in M&eters" msgstr "" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in &Inches" msgstr "Розміри в &Дюймах" -#: graphicswin.cpp:101 +#: graphicswin.cpp:102 msgid "Show &Toolbar" msgstr "Показати Панель &Інструментів" -#: graphicswin.cpp:102 +#: graphicswin.cpp:103 msgid "Show Property Bro&wser" msgstr "Показати Вікно Власти&востей" -#: graphicswin.cpp:104 +#: graphicswin.cpp:105 msgid "&Full Screen" msgstr "&Повний Екран" -#: graphicswin.cpp:106 +#: graphicswin.cpp:107 msgid "&New Group" msgstr "&Нова Група" -#: graphicswin.cpp:107 +#: graphicswin.cpp:108 msgid "Sketch In &3d" msgstr "Креслення В &3d" -#: graphicswin.cpp:108 +#: graphicswin.cpp:109 msgid "Sketch In New &Workplane" msgstr "Креслення В Новій Робочій &Площині" -#: graphicswin.cpp:110 +#: graphicswin.cpp:111 msgid "Step &Translating" msgstr "Покрокове &Переміщення" -#: graphicswin.cpp:111 +#: graphicswin.cpp:112 msgid "Step &Rotating" msgstr "Покрокове &Обертання" -#: graphicswin.cpp:113 +#: graphicswin.cpp:114 msgid "E&xtrude" msgstr "Ви&давити" -#: graphicswin.cpp:114 +#: graphicswin.cpp:115 msgid "&Helix" msgstr "" -#: graphicswin.cpp:115 +#: graphicswin.cpp:116 msgid "&Lathe" msgstr "&Виточити" -#: graphicswin.cpp:116 +#: graphicswin.cpp:117 msgid "Re&volve" msgstr "" -#: graphicswin.cpp:118 +#: graphicswin.cpp:119 msgid "Link / Assemble..." msgstr "Приєднати / Монтувати..." -#: graphicswin.cpp:119 +#: graphicswin.cpp:120 msgid "Link Recent" msgstr "Приєднати Недавні" -#: graphicswin.cpp:121 +#: graphicswin.cpp:122 msgid "&Sketch" msgstr "&Креслення" -#: graphicswin.cpp:122 +#: graphicswin.cpp:123 msgid "In &Workplane" msgstr "В Робочій &Площині" -#: graphicswin.cpp:123 +#: graphicswin.cpp:124 msgid "Anywhere In &3d" msgstr "Будь-де В &3d" -#: graphicswin.cpp:125 +#: graphicswin.cpp:126 msgid "Datum &Point" msgstr "Опорна &Точка" -#: graphicswin.cpp:126 +#: graphicswin.cpp:127 msgid "&Workplane" msgstr "Робоча &Площина" -#: graphicswin.cpp:128 +#: graphicswin.cpp:129 msgid "Line &Segment" msgstr "&Відрізок Прямої" -#: graphicswin.cpp:129 +#: graphicswin.cpp:130 msgid "C&onstruction Line Segment" msgstr "Контсрук&ційний Відрізок Прямої" -#: graphicswin.cpp:130 +#: graphicswin.cpp:131 msgid "&Rectangle" msgstr "&Прямокутник" -#: graphicswin.cpp:131 +#: graphicswin.cpp:132 msgid "&Circle" msgstr "&Коло" -#: graphicswin.cpp:132 +#: graphicswin.cpp:133 msgid "&Arc of a Circle" msgstr "&Дуга Кола" -#: graphicswin.cpp:133 +#: graphicswin.cpp:134 msgid "&Bezier Cubic Spline" msgstr "Кубічний Сплайн &Без'є" -#: graphicswin.cpp:135 +#: graphicswin.cpp:136 msgid "&Text in TrueType Font" msgstr "&Текст з TrueType Шрифтом" -#: graphicswin.cpp:136 +#: graphicswin.cpp:137 msgid "&Image" msgstr "" -#: graphicswin.cpp:138 +#: graphicswin.cpp:139 msgid "To&ggle Construction" msgstr "Пере&мкнути Конструктивність" -#: graphicswin.cpp:139 +#: graphicswin.cpp:140 msgid "Tangent &Arc at Point" msgstr "Дотична &Дуга на Точці" -#: graphicswin.cpp:140 +#: graphicswin.cpp:141 msgid "Split Curves at &Intersection" msgstr "Розрізати Криві на &Перетині" -#: graphicswin.cpp:142 +#: graphicswin.cpp:143 msgid "&Constrain" msgstr "&Обмежити" -#: graphicswin.cpp:143 +#: graphicswin.cpp:144 msgid "&Distance / Diameter" msgstr "&Відстань / Діаметр" -#: graphicswin.cpp:144 +#: graphicswin.cpp:145 msgid "Re&ference Dimension" msgstr "Від&носний Розмір" -#: graphicswin.cpp:145 +#: graphicswin.cpp:146 msgid "A&ngle" msgstr "К&ут" -#: graphicswin.cpp:146 +#: graphicswin.cpp:147 msgid "Reference An&gle" msgstr "Відносний К&ут" -#: graphicswin.cpp:147 +#: graphicswin.cpp:148 msgid "Other S&upplementary Angle" msgstr "Інший Су&міжний Кут" -#: graphicswin.cpp:148 +#: graphicswin.cpp:149 msgid "Toggle R&eference Dim" msgstr "Перемкнути Від&носність Розмірів" -#: graphicswin.cpp:150 +#: graphicswin.cpp:151 msgid "&Horizontal" msgstr "&Горизонтально" -#: graphicswin.cpp:151 +#: graphicswin.cpp:152 msgid "&Vertical" msgstr "&Вертикально" -#: graphicswin.cpp:153 +#: graphicswin.cpp:154 msgid "&On Point / Curve / Plane" msgstr "&На точці / Кривій / Площині" -#: graphicswin.cpp:154 +#: graphicswin.cpp:155 msgid "E&qual Length / Radius / Angle" msgstr "Рі&вні Довжина / Радіус / Кут" -#: graphicswin.cpp:155 +#: graphicswin.cpp:156 msgid "Length Ra&tio" msgstr "Про&порція Довжин" -#: graphicswin.cpp:156 +#: graphicswin.cpp:157 msgid "Length Diff&erence" msgstr "Рі&зниця Довжин" -#: graphicswin.cpp:157 +#: graphicswin.cpp:158 msgid "At &Midpoint" msgstr "До &Середини" -#: graphicswin.cpp:158 +#: graphicswin.cpp:159 msgid "S&ymmetric" msgstr "Си&метрично" -#: graphicswin.cpp:159 +#: graphicswin.cpp:160 msgid "Para&llel / Tangent" msgstr "Пара&лельно / Дотична" -#: graphicswin.cpp:160 +#: graphicswin.cpp:161 msgid "&Perpendicular" msgstr "&Препендикулярно" -#: graphicswin.cpp:161 +#: graphicswin.cpp:162 msgid "Same Orient&ation" msgstr "Однакова Орієн&тація" -#: graphicswin.cpp:162 +#: graphicswin.cpp:163 msgid "Lock Point Where &Dragged" msgstr "Фіксувати Точку Після &Переміщення" -#: graphicswin.cpp:164 +#: graphicswin.cpp:165 msgid "Comment" msgstr "Коментар" -#: graphicswin.cpp:166 +#: graphicswin.cpp:167 msgid "&Analyze" msgstr "&Аналізувати" -#: graphicswin.cpp:167 +#: graphicswin.cpp:168 msgid "Measure &Volume" msgstr "Обрахувати &Об'єм" -#: graphicswin.cpp:168 +#: graphicswin.cpp:169 msgid "Measure A&rea" msgstr "Обрахувати Пл&ощу" -#: graphicswin.cpp:169 +#: graphicswin.cpp:170 msgid "Measure &Perimeter" msgstr "Обрахувати &Периметр" -#: graphicswin.cpp:170 +#: graphicswin.cpp:171 msgid "Show &Interfering Parts" msgstr "Показати &Дотичні Частини" -#: graphicswin.cpp:171 +#: graphicswin.cpp:172 msgid "Show &Naked Edges" msgstr "Показати &Приховані Ребра" -#: graphicswin.cpp:172 +#: graphicswin.cpp:173 msgid "Show &Center of Mass" msgstr "" -#: graphicswin.cpp:174 +#: graphicswin.cpp:175 msgid "Show &Underconstrained Points" msgstr "" -#: graphicswin.cpp:176 +#: graphicswin.cpp:177 msgid "&Trace Point" msgstr "&Трасувати Точку" -#: graphicswin.cpp:177 +#: graphicswin.cpp:178 msgid "&Stop Tracing..." msgstr "&Зупити Трасування..." -#: graphicswin.cpp:178 +#: graphicswin.cpp:179 msgid "Step &Dimension..." msgstr "Прорахувати &Розмір..." -#: graphicswin.cpp:180 +#: graphicswin.cpp:181 msgid "&Help" msgstr "&Довідка" -#: graphicswin.cpp:181 +#: graphicswin.cpp:182 msgid "&Language" msgstr "&Мова" -#: graphicswin.cpp:182 +#: graphicswin.cpp:183 msgid "&Website / Manual" msgstr "&Вебсайт / Посібник" -#: graphicswin.cpp:184 +#: graphicswin.cpp:185 msgid "&About" msgstr "&Про програму" -#: graphicswin.cpp:352 +#: graphicswin.cpp:355 msgid "(no recent files)" msgstr "" -#: graphicswin.cpp:360 +#: graphicswin.cpp:363 #, c-format msgid "File '%s' does not exist." msgstr "" -#: graphicswin.cpp:721 +#: graphicswin.cpp:725 msgid "No workplane is active, so the grid will not appear." msgstr "" -#: graphicswin.cpp:730 +#: graphicswin.cpp:740 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -995,91 +999,91 @@ msgid "" "configuration screen. A value around 0.3 is typical." msgstr "" -#: graphicswin.cpp:809 +#: graphicswin.cpp:819 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "" -#: graphicswin.cpp:1103 +#: graphicswin.cpp:1114 msgid "No additional entities share endpoints with the selected entities." msgstr "" -#: graphicswin.cpp:1121 +#: graphicswin.cpp:1132 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." msgstr "" -#: graphicswin.cpp:1144 +#: graphicswin.cpp:1155 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." msgstr "" -#: graphicswin.cpp:1151 +#: graphicswin.cpp:1162 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." msgstr "" -#: graphicswin.cpp:1239 +#: graphicswin.cpp:1247 msgid "No workplane selected. Activating default workplane for this group." msgstr "" -#: graphicswin.cpp:1242 +#: graphicswin.cpp:1250 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" "workplane group." msgstr "" -#: graphicswin.cpp:1263 +#: graphicswin.cpp:1271 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." msgstr "" -#: graphicswin.cpp:1274 +#: graphicswin.cpp:1282 msgid "click point on arc (draws anti-clockwise)" msgstr "" -#: graphicswin.cpp:1275 +#: graphicswin.cpp:1283 msgid "click to place datum point" msgstr "" -#: graphicswin.cpp:1276 +#: graphicswin.cpp:1284 msgid "click first point of line segment" msgstr "" -#: graphicswin.cpp:1278 +#: graphicswin.cpp:1286 msgid "click first point of construction line segment" msgstr "" -#: graphicswin.cpp:1279 +#: graphicswin.cpp:1287 msgid "click first point of cubic segment" msgstr "" -#: graphicswin.cpp:1280 +#: graphicswin.cpp:1288 msgid "click center of circle" msgstr "" -#: graphicswin.cpp:1281 +#: graphicswin.cpp:1289 msgid "click origin of workplane" msgstr "" -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1290 msgid "click one corner of rectangle" msgstr "" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1291 msgid "click top left of text" msgstr "" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1297 msgid "click top left of image" msgstr "" -#: graphicswin.cpp:1301 +#: graphicswin.cpp:1309 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1189,19 +1193,19 @@ msgstr "" msgid "(unnamed)" msgstr "" -#: groupmesh.cpp:708 +#: groupmesh.cpp:709 msgid "not closed contour, or not all same style!" msgstr "" -#: groupmesh.cpp:721 +#: groupmesh.cpp:722 msgid "points not all coplanar!" msgstr "" -#: groupmesh.cpp:723 +#: groupmesh.cpp:724 msgid "contour is self-intersecting!" msgstr "" -#: groupmesh.cpp:725 +#: groupmesh.cpp:726 msgid "zero-length edge!" msgstr "" @@ -1331,64 +1335,64 @@ msgstr "Зняти Виділення з Наведеного" msgid "Zoom to Fit" msgstr "Умістити на Екрані" -#: mouse.cpp:990 mouse.cpp:1277 +#: mouse.cpp:989 mouse.cpp:1276 msgid "click next point of line, or press Esc" msgstr "" -#: mouse.cpp:996 +#: mouse.cpp:995 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -#: mouse.cpp:1030 +#: mouse.cpp:1029 msgid "click to place other corner of rectangle" msgstr "" -#: mouse.cpp:1050 +#: mouse.cpp:1049 msgid "click to set radius" msgstr "" -#: mouse.cpp:1055 +#: mouse.cpp:1054 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -#: mouse.cpp:1074 +#: mouse.cpp:1073 msgid "click to place point" msgstr "" -#: mouse.cpp:1090 +#: mouse.cpp:1089 msgid "click next point of cubic, or press Esc" msgstr "" -#: mouse.cpp:1095 +#: mouse.cpp:1094 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" -#: mouse.cpp:1111 +#: mouse.cpp:1110 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -#: mouse.cpp:1128 +#: mouse.cpp:1127 msgid "click to place bottom right of text" msgstr "" -#: mouse.cpp:1134 +#: mouse.cpp:1133 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -#: mouse.cpp:1161 +#: mouse.cpp:1160 msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" msgstr "" -#: platform/gui.cpp:85 platform/gui.cpp:89 +#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 msgctxt "file-type" msgid "SolveSpace models" msgstr "" @@ -1425,90 +1429,315 @@ msgstr "" #: platform/gui.cpp:102 msgctxt "file-type" -msgid "Q3D Object file" -msgstr "" - -#: platform/gui.cpp:103 -msgctxt "file-type" msgid "VRML text file" msgstr "" -#: platform/gui.cpp:107 platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 msgctxt "file-type" msgid "STEP file" msgstr "" -#: platform/gui.cpp:111 +#: platform/gui.cpp:110 msgctxt "file-type" msgid "PDF file" msgstr "" -#: platform/gui.cpp:112 +#: platform/gui.cpp:111 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "" -#: platform/gui.cpp:113 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "" -#: platform/gui.cpp:115 platform/gui.cpp:122 +#: platform/gui.cpp:114 platform/gui.cpp:121 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "" -#: platform/gui.cpp:116 +#: platform/gui.cpp:115 msgctxt "file-type" msgid "HPGL file" msgstr "" -#: platform/gui.cpp:117 +#: platform/gui.cpp:116 msgctxt "file-type" msgid "G Code" msgstr "" -#: platform/gui.cpp:126 +#: platform/gui.cpp:125 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "" -#: platform/gui.cpp:130 +#: platform/gui.cpp:129 msgctxt "file-type" msgid "Comma-separated values" msgstr "" -#: platform/guigtk.cpp:1317 platform/guimac.mm:1360 platform/guiwin.cpp:1608 +#: platform/guigtk.cpp:1321 platform/guimac.mm:1363 platform/guiwin.cpp:1630 msgid "untitled" msgstr "" -#: platform/guigtk.cpp:1328 platform/guigtk.cpp:1361 platform/guimac.mm:1318 -#: platform/guiwin.cpp:1555 +#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1365 platform/guimac.mm:1321 +#: platform/guiwin.cpp:1573 msgctxt "title" msgid "Save File" msgstr "" -#: platform/guigtk.cpp:1329 platform/guigtk.cpp:1362 platform/guimac.mm:1301 -#: platform/guiwin.cpp:1557 +#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 platform/guimac.mm:1304 +#: platform/guiwin.cpp:1575 msgctxt "title" msgid "Open File" msgstr "" -#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1368 +#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1372 msgctxt "button" msgid "_Cancel" msgstr "" -#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 +#: platform/guigtk.cpp:1337 platform/guigtk.cpp:1370 msgctxt "button" msgid "_Save" msgstr "" -#: platform/guigtk.cpp:1334 platform/guigtk.cpp:1367 +#: platform/guigtk.cpp:1338 platform/guigtk.cpp:1371 msgctxt "button" msgid "_Open" msgstr "" +#: solvespace.cpp:169 +msgctxt "title" +msgid "Autosave Available" +msgstr "" + +#: solvespace.cpp:170 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "" + +#: solvespace.cpp:171 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "&Load autosave" +msgstr "" + +#: solvespace.cpp:174 +msgctxt "button" +msgid "Do&n't Load" +msgstr "" + +#: solvespace.cpp:557 +msgctxt "title" +msgid "Modified File" +msgstr "" + +#: solvespace.cpp:559 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "" + +#: solvespace.cpp:562 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "" + +#: solvespace.cpp:565 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "" + +#: solvespace.cpp:566 +msgctxt "button" +msgid "&Save" +msgstr "" + +#: solvespace.cpp:568 +msgctxt "button" +msgid "Do&n't Save" +msgstr "" + +#: solvespace.cpp:589 +msgctxt "title" +msgid "(new sketch)" +msgstr "" + +#: solvespace.cpp:596 +msgctxt "title" +msgid "Property Browser" +msgstr "" + +#: solvespace.cpp:658 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" + +#: solvespace.cpp:730 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" + +#: solvespace.cpp:778 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "" + +#: solvespace.cpp:782 +msgid "Bad selection for step dimension; select a constraint." +msgstr "" + +#: solvespace.cpp:806 +msgid "The assembly does not interfere, good." +msgstr "" + +#: solvespace.cpp:822 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" + +#: solvespace.cpp:831 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" + +#: solvespace.cpp:836 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" + +#: solvespace.cpp:851 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:860 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" + +#: solvespace.cpp:872 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:892 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:898 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "" + +#: solvespace.cpp:914 +msgid "Bad selection for trace; select a single point." +msgstr "" + +#: solvespace.cpp:941 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "" + +#: solvespace.cpp:971 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "" + +#: solvespace.cpp:972 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "" + +#: solvespace.cpp:974 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "" + +#: solvespace.cpp:975 +msgid "The mesh is watertight (okay, valid)." +msgstr "" + +#: solvespace.cpp:978 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" + +#: solvespace.cpp:982 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" + +#: solvespace.cpp:985 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" + +#: solvespace.cpp:998 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" + #: style.cpp:166 msgid "" "Can't assign style to an entity that's derived from another entity; try " @@ -1640,30 +1869,38 @@ msgid "New group rotating active sketch" msgstr "Нова група обертання актиного креслення" #: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "" + +#: toolbar.cpp:76 msgid "New group step and repeat rotating" msgstr "Нова група крокування і повторення обертання" -#: toolbar.cpp:74 +#: toolbar.cpp:78 msgid "New group step and repeat translating" msgstr "Нова група крокування і повторення зміщення" -#: toolbar.cpp:76 +#: toolbar.cpp:80 msgid "New group in new workplane (thru given entities)" msgstr "Нова група в новій площині (через обрані об'екти)" -#: toolbar.cpp:78 +#: toolbar.cpp:82 msgid "New group in 3d" msgstr "Нова група в 3d" -#: toolbar.cpp:80 +#: toolbar.cpp:84 msgid "New group linking / assembling file" msgstr "Нова група приєднання / монтування файлу" -#: toolbar.cpp:84 +#: toolbar.cpp:88 msgid "Nearest isometric view" msgstr "Найближчий ізометричний вигляд" -#: toolbar.cpp:86 +#: toolbar.cpp:90 msgid "Align view to active workplane" msgstr "Вирівняти вигляд до активної робочої площини" diff --git a/res/locales/zh_CN.po b/res/locales/zh_CN.po index a2e1b45..245b452 100644 --- a/res/locales/zh_CN.po +++ b/res/locales/zh_CN.po @@ -2,12 +2,12 @@ # Copyright (C) 2020 the PACKAGE authors # This file is distributed under the same license as the SolveSpace package. # , 2020. -# +# msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2020-11-17 20:50-0500\n" +"POT-Creation-Date: 2021-01-17 19:54+0200\n" "PO-Revision-Date: 2020-09-28 12:42+0800\n" "Last-Translator: lomatus@163.com\n" "Language-Team: none\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.4.1\n" -#: clipboard.cpp:274 +#: clipboard.cpp:310 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -27,72 +27,72 @@ msgstr "" "\n" "使用\"工作平面中的草图 -+\"激活一个。" -#: clipboard.cpp:291 +#: clipboard.cpp:327 msgid "Clipboard is empty; nothing to paste." msgstr "剪贴板为空;没有要粘贴的内容。" -#: clipboard.cpp:338 +#: clipboard.cpp:374 msgid "Number of copies to paste must be at least one." msgstr "要粘贴的副本数必须至少为 1 个。" -#: clipboard.cpp:354 textscreens.cpp:783 +#: clipboard.cpp:390 textscreens.cpp:783 msgid "Scale cannot be zero." msgstr "缩放不能为零。" -#: clipboard.cpp:396 +#: clipboard.cpp:432 msgid "Select one point to define origin of rotation." msgstr "选择一个点以定义旋转原点。" -#: clipboard.cpp:408 +#: clipboard.cpp:444 msgid "Select two points to define translation vector." msgstr "选择两个点来定义转换向量。" -#: clipboard.cpp:418 +#: clipboard.cpp:454 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." msgstr "转换就是标识,因此所有的复制在彼此之上。" -#: clipboard.cpp:422 +#: clipboard.cpp:458 msgid "Too many items to paste; split this into smaller pastes." msgstr "要粘贴的项目太多; 请把他们拆分。" -#: clipboard.cpp:427 +#: clipboard.cpp:463 msgid "No workplane active." msgstr "没有工作平面处于活动状态。" -#: confscreen.cpp:410 +#: confscreen.cpp:418 msgid "Bad format: specify coordinates as x, y, z" msgstr "格式错误:将坐标指定为 x、y、z" -#: confscreen.cpp:420 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 msgid "Bad format: specify color as r, g, b" msgstr "格式错误:将颜色指定为 r、g、b" -#: confscreen.cpp:446 +#: confscreen.cpp:454 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." msgstr "在启用\"视图 -= 使用透视投影\"之前,透视因子将不起作用。" -#: confscreen.cpp:459 confscreen.cpp:469 +#: confscreen.cpp:467 confscreen.cpp:477 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "在十进制之后指定 0 和 %d 数字之间。" -#: confscreen.cpp:481 +#: confscreen.cpp:489 msgid "Export scale must not be zero!" msgstr "输出比例不能为零!" -#: confscreen.cpp:493 +#: confscreen.cpp:501 msgid "Cutter radius offset must not be negative!" msgstr "刀具半径偏移不能为负数!" -#: confscreen.cpp:547 +#: confscreen.cpp:555 msgid "Bad value: autosave interval should be positive" msgstr "坏值:自动保存间隔应为正" -#: confscreen.cpp:550 +#: confscreen.cpp:558 msgid "Bad format: specify interval in integral minutes" msgstr "格式错误:以整数分钟为单位指定间隔" @@ -271,7 +271,26 @@ msgctxt "constr-name" msgid "comment" msgstr "备注" -#: constraint.cpp:171 +#: constraint.cpp:140 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "切线弧和线段必须共享一个端点。在约束切线之前,使用约束 -= 点约束它们。" + +#: constraint.cpp:158 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"切线立方段和线段必须共享终结点。在约束切线之前,使用约束 -= 点约束它们。" + +#: constraint.cpp:183 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "曲线必须共享一个终结点。在约束切线之前,使用约束 -= 点约束它们。" + +#: constraint.cpp:231 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -294,7 +313,7 @@ msgstr "" " * 平面面和点(最小距离)\n" " * 圆或弧(直径)\n" -#: constraint.cpp:224 +#: constraint.cpp:284 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -313,7 +332,7 @@ msgstr "" " * 一个点和一个圆或圆(曲线上的点)\n" " * 点和平面面(点在脸上)\n" -#: constraint.cpp:286 +#: constraint.cpp:346 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -339,7 +358,7 @@ msgstr "" " * 两个圆或圆(相等半径)\n" " * 线段和圆弧(线段长度等于弧长)\n" -#: constraint.cpp:325 +#: constraint.cpp:385 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" @@ -349,7 +368,7 @@ msgstr "" "\n" "* 两个线段\n" -#: constraint.cpp:342 +#: constraint.cpp:402 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" @@ -360,7 +379,7 @@ msgstr "" "\n" "* 两个线段\n" -#: constraint.cpp:368 +#: constraint.cpp:428 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -372,7 +391,7 @@ msgstr "" "* 线段和点(点在中点)\n" " * 线段和工作平面(平面上的线中点)\n" -#: constraint.cpp:426 +#: constraint.cpp:486 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -389,19 +408,19 @@ msgstr "" " * 线段,和两个点或线段(对称的线段)\n" " * 工作平面和两个点或线段(工作平面对称)\n" -#: constraint.cpp:440 +#: constraint.cpp:500 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." msgstr "在没有显式对称平面约束对称时,工作平面必须处于活动状态。" -#: constraint.cpp:470 +#: constraint.cpp:530 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." msgstr "在应用水平或垂直约束之前,激活工作平面(使用草图 -= 在工作平面中)。" -#: constraint.cpp:483 +#: constraint.cpp:543 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -414,7 +433,7 @@ msgstr "" "• 两点\n" " • 线段\n" -#: constraint.cpp:504 +#: constraint.cpp:564 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -425,15 +444,15 @@ msgstr "" "\n" "• 两个法线\n" -#: constraint.cpp:554 +#: constraint.cpp:614 msgid "Must select an angle constraint." msgstr "必须选择角度约束。" -#: constraint.cpp:567 +#: constraint.cpp:627 msgid "Must select a constraint with associated label." msgstr "必须选择具有关联标签的约束。" -#: constraint.cpp:578 +#: constraint.cpp:638 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -447,30 +466,11 @@ msgstr "" " * 线段和法线\n" " • 两个法线\n" -#: constraint.cpp:635 -msgid "" -"The tangent arc and line segment must share an endpoint. Constrain them with " -"Constrain -> On Point before constraining tangent." -msgstr "切线弧和线段必须共享一个端点。在约束切线之前,使用约束 -= 点约束它们。" - -#: constraint.cpp:659 -msgid "" -"The tangent cubic and line segment must share an endpoint. Constrain them " -"with Constrain -> On Point before constraining tangent." -msgstr "" -"切线立方段和线段必须共享终结点。在约束切线之前,使用约束 -= 点约束它们。" - -#: constraint.cpp:669 +#: constraint.cpp:701 msgid "Curve-curve tangency must apply in workplane." msgstr "曲线曲线切线必须应用于工作平面。" -#: constraint.cpp:687 -msgid "" -"The curves must share an endpoint. Constrain them with Constrain -> On Point " -"before constraining tangent." -msgstr "曲线必须共享一个终结点。在约束切线之前,使用约束 -= 点约束它们。" - -#: constraint.cpp:696 +#: constraint.cpp:711 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -487,7 +487,7 @@ msgstr "" " * 两个法线(平行)\n" " * 共享端点的两条线段、弧线或贝塞尔(切线)\n" -#: constraint.cpp:714 +#: constraint.cpp:729 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -501,7 +501,7 @@ msgstr "" " * 线段和法线\n" " • 两个法线\n" -#: constraint.cpp:729 +#: constraint.cpp:744 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -512,7 +512,7 @@ msgstr "" "\n" "• 一点\n" -#: constraint.cpp:740 +#: constraint.cpp:755 msgid "click center of comment text" msgstr "单击注释文本的中心" @@ -606,7 +606,7 @@ msgctxt "button" msgid "&No" msgstr "否(&N)" -#: file.cpp:869 +#: file.cpp:869 solvespace.cpp:569 msgctxt "button" msgid "&Cancel" msgstr "取消(&C)" @@ -772,299 +772,303 @@ msgid "Show Snap &Grid" msgstr "显示捕捉轴线 (&G)" #: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "" + +#: graphicswin.cpp:96 msgid "Use &Perspective Projection" msgstr "使用远景透视(&P)" -#: graphicswin.cpp:96 +#: graphicswin.cpp:97 msgid "Dimension &Units" msgstr "标注单位(&U)" -#: graphicswin.cpp:97 +#: graphicswin.cpp:98 msgid "Dimensions in &Millimeters" msgstr "标注单位 mm (&M)" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in M&eters" msgstr "标注单位m (&E)" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in &Inches" msgstr "标准单位英寸 (&I)" -#: graphicswin.cpp:101 +#: graphicswin.cpp:102 msgid "Show &Toolbar" msgstr "显示工具条(&T)" -#: graphicswin.cpp:102 +#: graphicswin.cpp:103 msgid "Show Property Bro&wser" msgstr "显示属性浏览器(&W)" -#: graphicswin.cpp:104 +#: graphicswin.cpp:105 msgid "&Full Screen" msgstr "全屏(&F)" -#: graphicswin.cpp:106 +#: graphicswin.cpp:107 msgid "&New Group" msgstr "新组合(&N)" -#: graphicswin.cpp:107 +#: graphicswin.cpp:108 msgid "Sketch In &3d" msgstr "在三维内绘制(&3)" -#: graphicswin.cpp:108 +#: graphicswin.cpp:109 msgid "Sketch In New &Workplane" msgstr "在新工作面绘制(&W)" -#: graphicswin.cpp:110 +#: graphicswin.cpp:111 msgid "Step &Translating" msgstr "移动(&T)" -#: graphicswin.cpp:111 +#: graphicswin.cpp:112 msgid "Step &Rotating" msgstr "旋转(&R)" -#: graphicswin.cpp:113 +#: graphicswin.cpp:114 msgid "E&xtrude" msgstr "挤出(&E)" -#: graphicswin.cpp:114 +#: graphicswin.cpp:115 msgid "&Helix" msgstr "螺旋(&H)" -#: graphicswin.cpp:115 +#: graphicswin.cpp:116 msgid "&Lathe" msgstr "扫略(&L)" -#: graphicswin.cpp:116 +#: graphicswin.cpp:117 msgid "Re&volve" msgstr "旋转(&V)" -#: graphicswin.cpp:118 +#: graphicswin.cpp:119 msgid "Link / Assemble..." msgstr "链接/装配..." -#: graphicswin.cpp:119 +#: graphicswin.cpp:120 msgid "Link Recent" msgstr "连接最近文件" -#: graphicswin.cpp:121 +#: graphicswin.cpp:122 msgid "&Sketch" msgstr "绘图(&S)" -#: graphicswin.cpp:122 +#: graphicswin.cpp:123 msgid "In &Workplane" msgstr "在工作平面(&W)" -#: graphicswin.cpp:123 +#: graphicswin.cpp:124 msgid "Anywhere In &3d" msgstr "在3D的任何位置(&3)" -#: graphicswin.cpp:125 +#: graphicswin.cpp:126 msgid "Datum &Point" msgstr "基准点(&P)" -#: graphicswin.cpp:126 +#: graphicswin.cpp:127 msgid "&Workplane" msgstr "工作面(&W)" -#: graphicswin.cpp:128 +#: graphicswin.cpp:129 msgid "Line &Segment" msgstr "线段(&S)" -#: graphicswin.cpp:129 +#: graphicswin.cpp:130 msgid "C&onstruction Line Segment" msgstr "构造线段(&C)" -#: graphicswin.cpp:130 +#: graphicswin.cpp:131 msgid "&Rectangle" msgstr "矩形(&R)" -#: graphicswin.cpp:131 +#: graphicswin.cpp:132 msgid "&Circle" msgstr "圆线(&C)" -#: graphicswin.cpp:132 +#: graphicswin.cpp:133 msgid "&Arc of a Circle" msgstr "圆弧(&A)" -#: graphicswin.cpp:133 +#: graphicswin.cpp:134 msgid "&Bezier Cubic Spline" msgstr "立方体线的贝塞尔曲线(&B)" -#: graphicswin.cpp:135 +#: graphicswin.cpp:136 msgid "&Text in TrueType Font" msgstr "TrueTyoe字体文字(&T)" -#: graphicswin.cpp:136 +#: graphicswin.cpp:137 msgid "&Image" msgstr "图片(&I)" -#: graphicswin.cpp:138 +#: graphicswin.cpp:139 msgid "To&ggle Construction" msgstr "切换构造(&G)" -#: graphicswin.cpp:139 +#: graphicswin.cpp:140 msgid "Tangent &Arc at Point" msgstr "弧线切线点(&A)" -#: graphicswin.cpp:140 +#: graphicswin.cpp:141 msgid "Split Curves at &Intersection" msgstr "在交叉处拆分曲线(&I)" -#: graphicswin.cpp:142 +#: graphicswin.cpp:143 msgid "&Constrain" msgstr "约束(&C)" -#: graphicswin.cpp:143 +#: graphicswin.cpp:144 msgid "&Distance / Diameter" msgstr "距离/直径(&D)" -#: graphicswin.cpp:144 +#: graphicswin.cpp:145 msgid "Re&ference Dimension" msgstr "参考标注(&F)" -#: graphicswin.cpp:145 +#: graphicswin.cpp:146 msgid "A&ngle" msgstr "角度(&A)" -#: graphicswin.cpp:146 +#: graphicswin.cpp:147 msgid "Reference An&gle" msgstr "参考角度(&G)" -#: graphicswin.cpp:147 +#: graphicswin.cpp:148 msgid "Other S&upplementary Angle" msgstr "其它增补角度(&U)" -#: graphicswin.cpp:148 +#: graphicswin.cpp:149 msgid "Toggle R&eference Dim" msgstr "切换参考标注(&E)" -#: graphicswin.cpp:150 +#: graphicswin.cpp:151 msgid "&Horizontal" msgstr "水平约束(&H)" -#: graphicswin.cpp:151 +#: graphicswin.cpp:152 msgid "&Vertical" msgstr "垂直约束(&V)" -#: graphicswin.cpp:153 +#: graphicswin.cpp:154 msgid "&On Point / Curve / Plane" msgstr "在点线面(&O)" -#: graphicswin.cpp:154 +#: graphicswin.cpp:155 msgid "E&qual Length / Radius / Angle" msgstr "等于/长度/半径/角度(&Q)" -#: graphicswin.cpp:155 +#: graphicswin.cpp:156 msgid "Length Ra&tio" msgstr "长度比例(&T)" -#: graphicswin.cpp:156 +#: graphicswin.cpp:157 msgid "Length Diff&erence" msgstr "长度偏差(&E)" -#: graphicswin.cpp:157 +#: graphicswin.cpp:158 msgid "At &Midpoint" msgstr "在中点(&M)" -#: graphicswin.cpp:158 +#: graphicswin.cpp:159 msgid "S&ymmetric" msgstr "对称(&Y)" -#: graphicswin.cpp:159 +#: graphicswin.cpp:160 msgid "Para&llel / Tangent" msgstr "水平/切线(&L)" -#: graphicswin.cpp:160 +#: graphicswin.cpp:161 msgid "&Perpendicular" msgstr "垂直的(&P)" -#: graphicswin.cpp:161 +#: graphicswin.cpp:162 msgid "Same Orient&ation" msgstr "相同方向(&A)" -#: graphicswin.cpp:162 +#: graphicswin.cpp:163 msgid "Lock Point Where &Dragged" msgstr "锁定点位置(&D)" -#: graphicswin.cpp:164 +#: graphicswin.cpp:165 msgid "Comment" msgstr "备注" -#: graphicswin.cpp:166 +#: graphicswin.cpp:167 msgid "&Analyze" msgstr "分析(&A)" -#: graphicswin.cpp:167 +#: graphicswin.cpp:168 msgid "Measure &Volume" msgstr "测量体积(&V)" -#: graphicswin.cpp:168 +#: graphicswin.cpp:169 msgid "Measure A&rea" msgstr "测量面积(&R)" -#: graphicswin.cpp:169 +#: graphicswin.cpp:170 msgid "Measure &Perimeter" msgstr "测量周长(&P)" -#: graphicswin.cpp:170 +#: graphicswin.cpp:171 msgid "Show &Interfering Parts" msgstr "显示干涉零件(&I)" -#: graphicswin.cpp:171 +#: graphicswin.cpp:172 msgid "Show &Naked Edges" msgstr "显示孤立边(&N)" -#: graphicswin.cpp:172 +#: graphicswin.cpp:173 msgid "Show &Center of Mass" msgstr "显示中心(&C)" -#: graphicswin.cpp:174 +#: graphicswin.cpp:175 msgid "Show &Underconstrained Points" msgstr "显示无效约束点(&U)" -#: graphicswin.cpp:176 +#: graphicswin.cpp:177 msgid "&Trace Point" msgstr "跟踪点(&T)" -#: graphicswin.cpp:177 +#: graphicswin.cpp:178 msgid "&Stop Tracing..." msgstr "停止跟踪(&S)" -#: graphicswin.cpp:178 +#: graphicswin.cpp:179 msgid "Step &Dimension..." msgstr "逐步标注(&D)" -#: graphicswin.cpp:180 +#: graphicswin.cpp:181 msgid "&Help" msgstr "帮助(&H)" -#: graphicswin.cpp:181 +#: graphicswin.cpp:182 msgid "&Language" msgstr "语言(&L)" -#: graphicswin.cpp:182 +#: graphicswin.cpp:183 msgid "&Website / Manual" msgstr "网页/手册(&W)" -#: graphicswin.cpp:184 +#: graphicswin.cpp:185 msgid "&About" msgstr "关于(&A)" -#: graphicswin.cpp:352 +#: graphicswin.cpp:355 msgid "(no recent files)" msgstr "(无文件)" -#: graphicswin.cpp:360 +#: graphicswin.cpp:363 #, c-format msgid "File '%s' does not exist." msgstr "文件不存在: \"%s\"。" -#: graphicswin.cpp:721 +#: graphicswin.cpp:725 msgid "No workplane is active, so the grid will not appear." msgstr "没有激活的工作面,因此无法显示轴网。" -#: graphicswin.cpp:730 +#: graphicswin.cpp:740 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1073,91 +1077,91 @@ msgid "" "configuration screen. A value around 0.3 is typical." msgstr "" -#: graphicswin.cpp:809 +#: graphicswin.cpp:819 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "" -#: graphicswin.cpp:1103 +#: graphicswin.cpp:1114 msgid "No additional entities share endpoints with the selected entities." msgstr "" -#: graphicswin.cpp:1121 +#: graphicswin.cpp:1132 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." msgstr "" -#: graphicswin.cpp:1144 +#: graphicswin.cpp:1155 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." msgstr "" -#: graphicswin.cpp:1151 +#: graphicswin.cpp:1162 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." msgstr "" -#: graphicswin.cpp:1239 +#: graphicswin.cpp:1247 msgid "No workplane selected. Activating default workplane for this group." msgstr "" -#: graphicswin.cpp:1242 +#: graphicswin.cpp:1250 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" "workplane group." msgstr "" -#: graphicswin.cpp:1263 +#: graphicswin.cpp:1271 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." msgstr "" -#: graphicswin.cpp:1274 +#: graphicswin.cpp:1282 msgid "click point on arc (draws anti-clockwise)" msgstr "点击弧线的点(逆时针方向绘制)" -#: graphicswin.cpp:1275 +#: graphicswin.cpp:1283 msgid "click to place datum point" msgstr "点击放置基准点" -#: graphicswin.cpp:1276 +#: graphicswin.cpp:1284 msgid "click first point of line segment" msgstr "点击线条的起点" -#: graphicswin.cpp:1278 +#: graphicswin.cpp:1286 msgid "click first point of construction line segment" msgstr "点击构造线的起点" -#: graphicswin.cpp:1279 +#: graphicswin.cpp:1287 msgid "click first point of cubic segment" msgstr "点击立方体的起点" -#: graphicswin.cpp:1280 +#: graphicswin.cpp:1288 msgid "click center of circle" msgstr "点击圆弧的中心" -#: graphicswin.cpp:1281 +#: graphicswin.cpp:1289 msgid "click origin of workplane" msgstr "点击工作面的原点" -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1290 msgid "click one corner of rectangle" msgstr "点击一个矩形倒角" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1291 msgid "click top left of text" msgstr "点击文字左上角" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1297 msgid "click top left of image" msgstr "点击图片左上角" -#: graphicswin.cpp:1301 +#: graphicswin.cpp:1309 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1276,19 +1280,19 @@ msgstr "移动" msgid "(unnamed)" msgstr "(未命名)" -#: groupmesh.cpp:708 +#: groupmesh.cpp:709 msgid "not closed contour, or not all same style!" msgstr "未闭合轮廓,或样式不一致!" -#: groupmesh.cpp:721 +#: groupmesh.cpp:722 msgid "points not all coplanar!" msgstr "点不在相同平面!" -#: groupmesh.cpp:723 +#: groupmesh.cpp:724 msgid "contour is self-intersecting!" msgstr "轮廓自相交!" -#: groupmesh.cpp:725 +#: groupmesh.cpp:726 msgid "zero-length edge!" msgstr "边缘长度为零!" @@ -1418,64 +1422,64 @@ msgstr "取消覆盖区域的全选" msgid "Zoom to Fit" msgstr "自动缩放" -#: mouse.cpp:990 mouse.cpp:1277 +#: mouse.cpp:989 mouse.cpp:1276 msgid "click next point of line, or press Esc" msgstr "点击下一个点或取消(ESC)" -#: mouse.cpp:996 +#: mouse.cpp:995 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "无法在3D内绘制矩形; 首先,激活工作面,草图->在工作面。" -#: mouse.cpp:1030 +#: mouse.cpp:1029 msgid "click to place other corner of rectangle" msgstr "点击放置其它矩形倒角" -#: mouse.cpp:1050 +#: mouse.cpp:1049 msgid "click to set radius" msgstr "点击设置半径" -#: mouse.cpp:1055 +#: mouse.cpp:1054 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "无法在3D空间内绘制弧线,可使用 草图->在工作面 激活工作面。" -#: mouse.cpp:1074 +#: mouse.cpp:1073 msgid "click to place point" msgstr "点击放置点" -#: mouse.cpp:1090 +#: mouse.cpp:1089 msgid "click next point of cubic, or press Esc" msgstr "点击下一个点或取消(ESC)" -#: mouse.cpp:1095 +#: mouse.cpp:1094 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "已经在工作面绘制;在新建工作面前在三维空间绘制。" -#: mouse.cpp:1111 +#: mouse.cpp:1110 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "无法在三维空间内绘制文字,可使用 草图->在工作面 激活工作面。" -#: mouse.cpp:1128 +#: mouse.cpp:1127 msgid "click to place bottom right of text" msgstr "点击文字的右下角放置" -#: mouse.cpp:1134 +#: mouse.cpp:1133 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "无法在三维空间内绘制图片,可使用 草图->在工作面 激活工作面。" -#: mouse.cpp:1161 +#: mouse.cpp:1160 msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" msgstr "新备注 - 双击编辑" -#: platform/gui.cpp:85 platform/gui.cpp:89 +#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 msgctxt "file-type" msgid "SolveSpace models" msgstr "SolveSpace模型" @@ -1512,90 +1516,315 @@ msgstr "Three.js-仅网格" #: platform/gui.cpp:102 msgctxt "file-type" -msgid "Q3D Object file" -msgstr "Q3D对象文件" - -#: platform/gui.cpp:103 -msgctxt "file-type" msgid "VRML text file" msgstr "VRML文本文件" -#: platform/gui.cpp:107 platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 msgctxt "file-type" msgid "STEP file" msgstr "STEP文件" -#: platform/gui.cpp:111 +#: platform/gui.cpp:110 msgctxt "file-type" msgid "PDF file" msgstr "PDF文件" -#: platform/gui.cpp:112 +#: platform/gui.cpp:111 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "封装好的PostScript" -#: platform/gui.cpp:113 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "SVG矢量图" -#: platform/gui.cpp:115 platform/gui.cpp:122 +#: platform/gui.cpp:114 platform/gui.cpp:121 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "DXF文件(AutoCAD 2007)" -#: platform/gui.cpp:116 +#: platform/gui.cpp:115 msgctxt "file-type" msgid "HPGL file" msgstr "HPGL文件" -#: platform/gui.cpp:117 +#: platform/gui.cpp:116 msgctxt "file-type" msgid "G Code" msgstr "G Code" -#: platform/gui.cpp:126 +#: platform/gui.cpp:125 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "AutoCAD DXF/DWG文件" -#: platform/gui.cpp:130 +#: platform/gui.cpp:129 msgctxt "file-type" msgid "Comma-separated values" msgstr "逗号分隔数据" -#: platform/guigtk.cpp:1317 platform/guimac.mm:1360 platform/guiwin.cpp:1608 +#: platform/guigtk.cpp:1321 platform/guimac.mm:1363 platform/guiwin.cpp:1630 msgid "untitled" msgstr "未命名" -#: platform/guigtk.cpp:1328 platform/guigtk.cpp:1361 platform/guimac.mm:1318 -#: platform/guiwin.cpp:1555 +#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1365 platform/guimac.mm:1321 +#: platform/guiwin.cpp:1573 msgctxt "title" msgid "Save File" msgstr "保存文件" -#: platform/guigtk.cpp:1329 platform/guigtk.cpp:1362 platform/guimac.mm:1301 -#: platform/guiwin.cpp:1557 +#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 platform/guimac.mm:1304 +#: platform/guiwin.cpp:1575 msgctxt "title" msgid "Open File" msgstr "打开文件" -#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1368 +#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1372 msgctxt "button" msgid "_Cancel" msgstr "取消_C" -#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 +#: platform/guigtk.cpp:1337 platform/guigtk.cpp:1370 msgctxt "button" msgid "_Save" msgstr "保存_S" -#: platform/guigtk.cpp:1334 platform/guigtk.cpp:1367 +#: platform/guigtk.cpp:1338 platform/guigtk.cpp:1371 msgctxt "button" msgid "_Open" msgstr "打开_O" +#: solvespace.cpp:169 +msgctxt "title" +msgid "Autosave Available" +msgstr "" + +#: solvespace.cpp:170 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "" + +#: solvespace.cpp:171 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "&Load autosave" +msgstr "" + +#: solvespace.cpp:174 +msgctxt "button" +msgid "Do&n't Load" +msgstr "" + +#: solvespace.cpp:557 +msgctxt "title" +msgid "Modified File" +msgstr "" + +#: solvespace.cpp:559 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "" + +#: solvespace.cpp:562 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "" + +#: solvespace.cpp:565 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "" + +#: solvespace.cpp:566 +msgctxt "button" +msgid "&Save" +msgstr "" + +#: solvespace.cpp:568 +msgctxt "button" +msgid "Do&n't Save" +msgstr "" + +#: solvespace.cpp:589 +msgctxt "title" +msgid "(new sketch)" +msgstr "" + +#: solvespace.cpp:596 +msgctxt "title" +msgid "Property Browser" +msgstr "" + +#: solvespace.cpp:658 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" + +#: solvespace.cpp:730 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" + +#: solvespace.cpp:778 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "" + +#: solvespace.cpp:782 +msgid "Bad selection for step dimension; select a constraint." +msgstr "" + +#: solvespace.cpp:806 +msgid "The assembly does not interfere, good." +msgstr "" + +#: solvespace.cpp:822 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" + +#: solvespace.cpp:831 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" + +#: solvespace.cpp:836 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" + +#: solvespace.cpp:851 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:860 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" + +#: solvespace.cpp:872 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:892 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:898 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "" + +#: solvespace.cpp:914 +msgid "Bad selection for trace; select a single point." +msgstr "" + +#: solvespace.cpp:941 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "" + +#: solvespace.cpp:971 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "" + +#: solvespace.cpp:972 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "" + +#: solvespace.cpp:974 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "" + +#: solvespace.cpp:975 +msgid "The mesh is watertight (okay, valid)." +msgstr "" + +#: solvespace.cpp:978 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" + +#: solvespace.cpp:982 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" + +#: solvespace.cpp:985 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" + +#: solvespace.cpp:998 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" + #: style.cpp:166 msgid "" "Can't assign style to an entity that's derived from another entity; try " @@ -1727,30 +1956,38 @@ msgid "New group rotating active sketch" msgstr "新组中旋转体当前草图" #: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "" + +#: toolbar.cpp:76 msgid "New group step and repeat rotating" msgstr "新组中逐步重复旋转体" -#: toolbar.cpp:74 +#: toolbar.cpp:78 msgid "New group step and repeat translating" msgstr "新组中逐步重复移动体" -#: toolbar.cpp:76 +#: toolbar.cpp:80 msgid "New group in new workplane (thru given entities)" msgstr "在新工作平面创建组(通过指定对象)" -#: toolbar.cpp:78 +#: toolbar.cpp:82 msgid "New group in 3d" msgstr "在3D中新建组" -#: toolbar.cpp:80 +#: toolbar.cpp:84 msgid "New group linking / assembling file" msgstr "新组 连接/装配文件" -#: toolbar.cpp:84 +#: toolbar.cpp:88 msgid "Nearest isometric view" msgstr "ISO视图" -#: toolbar.cpp:86 +#: toolbar.cpp:90 msgid "Align view to active workplane" msgstr "切换视图至当前工作面" @@ -1776,3 +2013,7 @@ msgstr "缩放不能为零。" #: view.cpp:90 view.cpp:99 msgid "Bad format: specify x, y, z" msgstr "格式错误: 需指定 x, y, z" + +#~ msgctxt "file-type" +#~ msgid "Q3D Object file" +#~ msgstr "Q3D对象文件" diff --git a/res/messages.pot b/res/messages.pot index 7f02500..c5ce2b7 100644 --- a/res/messages.pot +++ b/res/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2020-11-17 20:50-0500\n" +"POT-Creation-Date: 2021-01-17 19:54+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,76 +17,76 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: clipboard.cpp:274 +#: clipboard.cpp:310 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" "Activate one with Sketch -> In Workplane." msgstr "" -#: clipboard.cpp:291 +#: clipboard.cpp:327 msgid "Clipboard is empty; nothing to paste." msgstr "" -#: clipboard.cpp:338 +#: clipboard.cpp:374 msgid "Number of copies to paste must be at least one." msgstr "" -#: clipboard.cpp:354 textscreens.cpp:783 +#: clipboard.cpp:390 textscreens.cpp:783 msgid "Scale cannot be zero." msgstr "" -#: clipboard.cpp:396 +#: clipboard.cpp:432 msgid "Select one point to define origin of rotation." msgstr "" -#: clipboard.cpp:408 +#: clipboard.cpp:444 msgid "Select two points to define translation vector." msgstr "" -#: clipboard.cpp:418 +#: clipboard.cpp:454 msgid "Transformation is identity. So all copies will be exactly on top of each other." msgstr "" -#: clipboard.cpp:422 +#: clipboard.cpp:458 msgid "Too many items to paste; split this into smaller pastes." msgstr "" -#: clipboard.cpp:427 +#: clipboard.cpp:463 msgid "No workplane active." msgstr "" -#: confscreen.cpp:410 +#: confscreen.cpp:418 msgid "Bad format: specify coordinates as x, y, z" msgstr "" -#: confscreen.cpp:420 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 msgid "Bad format: specify color as r, g, b" msgstr "" -#: confscreen.cpp:446 +#: confscreen.cpp:454 msgid "" "The perspective factor will have no effect until you enable View -> Use Perspective Projection." msgstr "" -#: confscreen.cpp:459 confscreen.cpp:469 +#: confscreen.cpp:467 confscreen.cpp:477 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "" -#: confscreen.cpp:481 +#: confscreen.cpp:489 msgid "Export scale must not be zero!" msgstr "" -#: confscreen.cpp:493 +#: confscreen.cpp:501 msgid "Cutter radius offset must not be negative!" msgstr "" -#: confscreen.cpp:547 +#: confscreen.cpp:555 msgid "Bad value: autosave interval should be positive" msgstr "" -#: confscreen.cpp:550 +#: confscreen.cpp:558 msgid "Bad format: specify interval in integral minutes" msgstr "" @@ -265,7 +265,25 @@ msgctxt "constr-name" msgid "comment" msgstr "" -#: constraint.cpp:171 +#: constraint.cpp:140 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with Constrain -> On " +"Point before constraining tangent." +msgstr "" + +#: constraint.cpp:158 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them with Constrain -> On " +"Point before constraining tangent." +msgstr "" + +#: constraint.cpp:183 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point before constraining " +"tangent." +msgstr "" + +#: constraint.cpp:231 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply to:\n" "\n" @@ -278,7 +296,7 @@ msgid "" " * a circle or an arc (diameter)\n" msgstr "" -#: constraint.cpp:224 +#: constraint.cpp:284 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can apply to:\n" "\n" @@ -289,7 +307,7 @@ msgid "" " * a point and a plane face (point on face)\n" msgstr "" -#: constraint.cpp:286 +#: constraint.cpp:346 msgid "" "Bad selection for equal length / radius constraint. This constraint can apply to:\n" "\n" @@ -303,21 +321,21 @@ msgid "" " * a line segment and an arc (line segment length equals arc length)\n" msgstr "" -#: constraint.cpp:325 +#: constraint.cpp:385 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" " * two line segments\n" msgstr "" -#: constraint.cpp:342 +#: constraint.cpp:402 msgid "" "Bad selection for length difference constraint. This constraint can apply to:\n" "\n" " * two line segments\n" msgstr "" -#: constraint.cpp:368 +#: constraint.cpp:428 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -325,7 +343,7 @@ msgid "" " * a line segment and a workplane (line's midpoint on plane)\n" msgstr "" -#: constraint.cpp:426 +#: constraint.cpp:486 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -334,17 +352,17 @@ msgid "" " * workplane, and two points or a line segment (symmetric about workplane)\n" msgstr "" -#: constraint.cpp:440 +#: constraint.cpp:500 msgid "A workplane must be active when constraining symmetric without an explicit symmetry plane." msgstr "" -#: constraint.cpp:470 +#: constraint.cpp:530 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a horizontal or vertical " "constraint." msgstr "" -#: constraint.cpp:483 +#: constraint.cpp:543 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can apply to:\n" "\n" @@ -352,22 +370,22 @@ msgid "" " * a line segment\n" msgstr "" -#: constraint.cpp:504 +#: constraint.cpp:564 msgid "" "Bad selection for same orientation constraint. This constraint can apply to:\n" "\n" " * two normals\n" msgstr "" -#: constraint.cpp:554 +#: constraint.cpp:614 msgid "Must select an angle constraint." msgstr "" -#: constraint.cpp:567 +#: constraint.cpp:627 msgid "Must select a constraint with associated label." msgstr "" -#: constraint.cpp:578 +#: constraint.cpp:638 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -376,29 +394,11 @@ msgid "" " * two normals\n" msgstr "" -#: constraint.cpp:635 -msgid "" -"The tangent arc and line segment must share an endpoint. Constrain them with Constrain -> On " -"Point before constraining tangent." -msgstr "" - -#: constraint.cpp:659 -msgid "" -"The tangent cubic and line segment must share an endpoint. Constrain them with Constrain -> On " -"Point before constraining tangent." -msgstr "" - -#: constraint.cpp:669 +#: constraint.cpp:701 msgid "Curve-curve tangency must apply in workplane." msgstr "" -#: constraint.cpp:687 -msgid "" -"The curves must share an endpoint. Constrain them with Constrain -> On Point before constraining " -"tangent." -msgstr "" - -#: constraint.cpp:696 +#: constraint.cpp:711 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply to:\n" "\n" @@ -408,7 +408,7 @@ msgid "" " * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" msgstr "" -#: constraint.cpp:714 +#: constraint.cpp:729 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -417,14 +417,14 @@ msgid "" " * two normals\n" msgstr "" -#: constraint.cpp:729 +#: constraint.cpp:744 msgid "" "Bad selection for lock point where dragged constraint. This constraint can apply to:\n" "\n" " * a point\n" msgstr "" -#: constraint.cpp:740 +#: constraint.cpp:755 msgid "click center of comment text" msgstr "" @@ -506,7 +506,7 @@ msgctxt "button" msgid "&No" msgstr "" -#: file.cpp:869 +#: file.cpp:869 solvespace.cpp:569 msgctxt "button" msgid "&Cancel" msgstr "" @@ -672,299 +672,303 @@ msgid "Show Snap &Grid" msgstr "" #: graphicswin.cpp:95 -msgid "Use &Perspective Projection" +msgid "Darken Inactive Solids" msgstr "" #: graphicswin.cpp:96 -msgid "Dimension &Units" +msgid "Use &Perspective Projection" msgstr "" #: graphicswin.cpp:97 -msgid "Dimensions in &Millimeters" +msgid "Dimension &Units" msgstr "" #: graphicswin.cpp:98 -msgid "Dimensions in M&eters" +msgid "Dimensions in &Millimeters" msgstr "" #: graphicswin.cpp:99 +msgid "Dimensions in M&eters" +msgstr "" + +#: graphicswin.cpp:100 msgid "Dimensions in &Inches" msgstr "" -#: graphicswin.cpp:101 +#: graphicswin.cpp:102 msgid "Show &Toolbar" msgstr "" -#: graphicswin.cpp:102 +#: graphicswin.cpp:103 msgid "Show Property Bro&wser" msgstr "" -#: graphicswin.cpp:104 +#: graphicswin.cpp:105 msgid "&Full Screen" msgstr "" -#: graphicswin.cpp:106 +#: graphicswin.cpp:107 msgid "&New Group" msgstr "" -#: graphicswin.cpp:107 +#: graphicswin.cpp:108 msgid "Sketch In &3d" msgstr "" -#: graphicswin.cpp:108 +#: graphicswin.cpp:109 msgid "Sketch In New &Workplane" msgstr "" -#: graphicswin.cpp:110 +#: graphicswin.cpp:111 msgid "Step &Translating" msgstr "" -#: graphicswin.cpp:111 +#: graphicswin.cpp:112 msgid "Step &Rotating" msgstr "" -#: graphicswin.cpp:113 +#: graphicswin.cpp:114 msgid "E&xtrude" msgstr "" -#: graphicswin.cpp:114 +#: graphicswin.cpp:115 msgid "&Helix" msgstr "" -#: graphicswin.cpp:115 +#: graphicswin.cpp:116 msgid "&Lathe" msgstr "" -#: graphicswin.cpp:116 +#: graphicswin.cpp:117 msgid "Re&volve" msgstr "" -#: graphicswin.cpp:118 +#: graphicswin.cpp:119 msgid "Link / Assemble..." msgstr "" -#: graphicswin.cpp:119 +#: graphicswin.cpp:120 msgid "Link Recent" msgstr "" -#: graphicswin.cpp:121 +#: graphicswin.cpp:122 msgid "&Sketch" msgstr "" -#: graphicswin.cpp:122 +#: graphicswin.cpp:123 msgid "In &Workplane" msgstr "" -#: graphicswin.cpp:123 +#: graphicswin.cpp:124 msgid "Anywhere In &3d" msgstr "" -#: graphicswin.cpp:125 +#: graphicswin.cpp:126 msgid "Datum &Point" msgstr "" -#: graphicswin.cpp:126 +#: graphicswin.cpp:127 msgid "&Workplane" msgstr "" -#: graphicswin.cpp:128 +#: graphicswin.cpp:129 msgid "Line &Segment" msgstr "" -#: graphicswin.cpp:129 +#: graphicswin.cpp:130 msgid "C&onstruction Line Segment" msgstr "" -#: graphicswin.cpp:130 +#: graphicswin.cpp:131 msgid "&Rectangle" msgstr "" -#: graphicswin.cpp:131 +#: graphicswin.cpp:132 msgid "&Circle" msgstr "" -#: graphicswin.cpp:132 +#: graphicswin.cpp:133 msgid "&Arc of a Circle" msgstr "" -#: graphicswin.cpp:133 +#: graphicswin.cpp:134 msgid "&Bezier Cubic Spline" msgstr "" -#: graphicswin.cpp:135 +#: graphicswin.cpp:136 msgid "&Text in TrueType Font" msgstr "" -#: graphicswin.cpp:136 +#: graphicswin.cpp:137 msgid "&Image" msgstr "" -#: graphicswin.cpp:138 +#: graphicswin.cpp:139 msgid "To&ggle Construction" msgstr "" -#: graphicswin.cpp:139 +#: graphicswin.cpp:140 msgid "Tangent &Arc at Point" msgstr "" -#: graphicswin.cpp:140 +#: graphicswin.cpp:141 msgid "Split Curves at &Intersection" msgstr "" -#: graphicswin.cpp:142 +#: graphicswin.cpp:143 msgid "&Constrain" msgstr "" -#: graphicswin.cpp:143 +#: graphicswin.cpp:144 msgid "&Distance / Diameter" msgstr "" -#: graphicswin.cpp:144 +#: graphicswin.cpp:145 msgid "Re&ference Dimension" msgstr "" -#: graphicswin.cpp:145 +#: graphicswin.cpp:146 msgid "A&ngle" msgstr "" -#: graphicswin.cpp:146 +#: graphicswin.cpp:147 msgid "Reference An&gle" msgstr "" -#: graphicswin.cpp:147 +#: graphicswin.cpp:148 msgid "Other S&upplementary Angle" msgstr "" -#: graphicswin.cpp:148 +#: graphicswin.cpp:149 msgid "Toggle R&eference Dim" msgstr "" -#: graphicswin.cpp:150 +#: graphicswin.cpp:151 msgid "&Horizontal" msgstr "" -#: graphicswin.cpp:151 +#: graphicswin.cpp:152 msgid "&Vertical" msgstr "" -#: graphicswin.cpp:153 +#: graphicswin.cpp:154 msgid "&On Point / Curve / Plane" msgstr "" -#: graphicswin.cpp:154 +#: graphicswin.cpp:155 msgid "E&qual Length / Radius / Angle" msgstr "" -#: graphicswin.cpp:155 +#: graphicswin.cpp:156 msgid "Length Ra&tio" msgstr "" -#: graphicswin.cpp:156 +#: graphicswin.cpp:157 msgid "Length Diff&erence" msgstr "" -#: graphicswin.cpp:157 +#: graphicswin.cpp:158 msgid "At &Midpoint" msgstr "" -#: graphicswin.cpp:158 +#: graphicswin.cpp:159 msgid "S&ymmetric" msgstr "" -#: graphicswin.cpp:159 +#: graphicswin.cpp:160 msgid "Para&llel / Tangent" msgstr "" -#: graphicswin.cpp:160 +#: graphicswin.cpp:161 msgid "&Perpendicular" msgstr "" -#: graphicswin.cpp:161 +#: graphicswin.cpp:162 msgid "Same Orient&ation" msgstr "" -#: graphicswin.cpp:162 +#: graphicswin.cpp:163 msgid "Lock Point Where &Dragged" msgstr "" -#: graphicswin.cpp:164 +#: graphicswin.cpp:165 msgid "Comment" msgstr "" -#: graphicswin.cpp:166 +#: graphicswin.cpp:167 msgid "&Analyze" msgstr "" -#: graphicswin.cpp:167 +#: graphicswin.cpp:168 msgid "Measure &Volume" msgstr "" -#: graphicswin.cpp:168 +#: graphicswin.cpp:169 msgid "Measure A&rea" msgstr "" -#: graphicswin.cpp:169 +#: graphicswin.cpp:170 msgid "Measure &Perimeter" msgstr "" -#: graphicswin.cpp:170 +#: graphicswin.cpp:171 msgid "Show &Interfering Parts" msgstr "" -#: graphicswin.cpp:171 +#: graphicswin.cpp:172 msgid "Show &Naked Edges" msgstr "" -#: graphicswin.cpp:172 +#: graphicswin.cpp:173 msgid "Show &Center of Mass" msgstr "" -#: graphicswin.cpp:174 +#: graphicswin.cpp:175 msgid "Show &Underconstrained Points" msgstr "" -#: graphicswin.cpp:176 +#: graphicswin.cpp:177 msgid "&Trace Point" msgstr "" -#: graphicswin.cpp:177 +#: graphicswin.cpp:178 msgid "&Stop Tracing..." msgstr "" -#: graphicswin.cpp:178 +#: graphicswin.cpp:179 msgid "Step &Dimension..." msgstr "" -#: graphicswin.cpp:180 +#: graphicswin.cpp:181 msgid "&Help" msgstr "" -#: graphicswin.cpp:181 +#: graphicswin.cpp:182 msgid "&Language" msgstr "" -#: graphicswin.cpp:182 +#: graphicswin.cpp:183 msgid "&Website / Manual" msgstr "" -#: graphicswin.cpp:184 +#: graphicswin.cpp:185 msgid "&About" msgstr "" -#: graphicswin.cpp:352 +#: graphicswin.cpp:355 msgid "(no recent files)" msgstr "" -#: graphicswin.cpp:360 +#: graphicswin.cpp:363 #, c-format msgid "File '%s' does not exist." msgstr "" -#: graphicswin.cpp:721 +#: graphicswin.cpp:725 msgid "No workplane is active, so the grid will not appear." msgstr "" -#: graphicswin.cpp:730 +#: graphicswin.cpp:740 msgid "" "The perspective factor is set to zero, so the view will always be a parallel projection.\n" "\n" @@ -972,89 +976,89 @@ msgid "" "around 0.3 is typical." msgstr "" -#: graphicswin.cpp:809 +#: graphicswin.cpp:819 msgid "Select a point; this point will become the center of the view on screen." msgstr "" -#: graphicswin.cpp:1103 +#: graphicswin.cpp:1114 msgid "No additional entities share endpoints with the selected entities." msgstr "" -#: graphicswin.cpp:1121 +#: graphicswin.cpp:1132 msgid "" "To use this command, select a point or other entity from an linked part, or make a link group the " "active group." msgstr "" -#: graphicswin.cpp:1144 +#: graphicswin.cpp:1155 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) to define the plane " "for the snap grid." msgstr "" -#: graphicswin.cpp:1151 +#: graphicswin.cpp:1162 msgid "" "Can't snap these items to grid; select points, text comments, or constraints with a label. To " "snap a line, select its endpoints." msgstr "" -#: graphicswin.cpp:1239 +#: graphicswin.cpp:1247 msgid "No workplane selected. Activating default workplane for this group." msgstr "" -#: graphicswin.cpp:1242 +#: graphicswin.cpp:1250 msgid "" "No workplane is selected, and the active group does not have a default workplane. Try selecting a " "workplane, or activating a sketch-in-new-workplane group." msgstr "" -#: graphicswin.cpp:1263 +#: graphicswin.cpp:1271 msgid "" "Bad selection for tangent arc at point. Select a single point, or select nothing to set up arc " "parameters." msgstr "" -#: graphicswin.cpp:1274 +#: graphicswin.cpp:1282 msgid "click point on arc (draws anti-clockwise)" msgstr "" -#: graphicswin.cpp:1275 +#: graphicswin.cpp:1283 msgid "click to place datum point" msgstr "" -#: graphicswin.cpp:1276 +#: graphicswin.cpp:1284 msgid "click first point of line segment" msgstr "" -#: graphicswin.cpp:1278 +#: graphicswin.cpp:1286 msgid "click first point of construction line segment" msgstr "" -#: graphicswin.cpp:1279 +#: graphicswin.cpp:1287 msgid "click first point of cubic segment" msgstr "" -#: graphicswin.cpp:1280 +#: graphicswin.cpp:1288 msgid "click center of circle" msgstr "" -#: graphicswin.cpp:1281 +#: graphicswin.cpp:1289 msgid "click origin of workplane" msgstr "" -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1290 msgid "click one corner of rectangle" msgstr "" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1291 msgid "click top left of text" msgstr "" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1297 msgid "click top left of image" msgstr "" -#: graphicswin.cpp:1301 +#: graphicswin.cpp:1309 msgid "No entities are selected. Select entities before trying to toggle their construction state." msgstr "" @@ -1160,19 +1164,19 @@ msgstr "" msgid "(unnamed)" msgstr "" -#: groupmesh.cpp:708 +#: groupmesh.cpp:709 msgid "not closed contour, or not all same style!" msgstr "" -#: groupmesh.cpp:721 +#: groupmesh.cpp:722 msgid "points not all coplanar!" msgstr "" -#: groupmesh.cpp:723 +#: groupmesh.cpp:724 msgid "contour is self-intersecting!" msgstr "" -#: groupmesh.cpp:725 +#: groupmesh.cpp:726 msgid "zero-length edge!" msgstr "" @@ -1302,55 +1306,55 @@ msgstr "" msgid "Zoom to Fit" msgstr "" -#: mouse.cpp:990 mouse.cpp:1277 +#: mouse.cpp:989 mouse.cpp:1276 msgid "click next point of line, or press Esc" msgstr "" -#: mouse.cpp:996 +#: mouse.cpp:995 msgid "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In Workplane." msgstr "" -#: mouse.cpp:1030 +#: mouse.cpp:1029 msgid "click to place other corner of rectangle" msgstr "" -#: mouse.cpp:1050 +#: mouse.cpp:1049 msgid "click to set radius" msgstr "" -#: mouse.cpp:1055 +#: mouse.cpp:1054 msgid "Can't draw arc in 3d; first, activate a workplane with Sketch -> In Workplane." msgstr "" -#: mouse.cpp:1074 +#: mouse.cpp:1073 msgid "click to place point" msgstr "" -#: mouse.cpp:1090 +#: mouse.cpp:1089 msgid "click next point of cubic, or press Esc" msgstr "" -#: mouse.cpp:1095 +#: mouse.cpp:1094 msgid "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" -#: mouse.cpp:1111 +#: mouse.cpp:1110 msgid "Can't draw text in 3d; first, activate a workplane with Sketch -> In Workplane." msgstr "" -#: mouse.cpp:1128 +#: mouse.cpp:1127 msgid "click to place bottom right of text" msgstr "" -#: mouse.cpp:1134 +#: mouse.cpp:1133 msgid "Can't draw image in 3d; first, activate a workplane with Sketch -> In Workplane." msgstr "" -#: mouse.cpp:1161 +#: mouse.cpp:1160 msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" msgstr "" -#: platform/gui.cpp:85 platform/gui.cpp:89 +#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 msgctxt "file-type" msgid "SolveSpace models" msgstr "" @@ -1387,90 +1391,312 @@ msgstr "" #: platform/gui.cpp:102 msgctxt "file-type" -msgid "Q3D Object file" -msgstr "" - -#: platform/gui.cpp:103 -msgctxt "file-type" msgid "VRML text file" msgstr "" -#: platform/gui.cpp:107 platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 msgctxt "file-type" msgid "STEP file" msgstr "" -#: platform/gui.cpp:111 +#: platform/gui.cpp:110 msgctxt "file-type" msgid "PDF file" msgstr "" -#: platform/gui.cpp:112 +#: platform/gui.cpp:111 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "" -#: platform/gui.cpp:113 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "" -#: platform/gui.cpp:115 platform/gui.cpp:122 +#: platform/gui.cpp:114 platform/gui.cpp:121 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "" -#: platform/gui.cpp:116 +#: platform/gui.cpp:115 msgctxt "file-type" msgid "HPGL file" msgstr "" -#: platform/gui.cpp:117 +#: platform/gui.cpp:116 msgctxt "file-type" msgid "G Code" msgstr "" -#: platform/gui.cpp:126 +#: platform/gui.cpp:125 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "" -#: platform/gui.cpp:130 +#: platform/gui.cpp:129 msgctxt "file-type" msgid "Comma-separated values" msgstr "" -#: platform/guigtk.cpp:1317 platform/guimac.mm:1360 platform/guiwin.cpp:1608 +#: platform/guigtk.cpp:1321 platform/guimac.mm:1363 platform/guiwin.cpp:1630 msgid "untitled" msgstr "" -#: platform/guigtk.cpp:1328 platform/guigtk.cpp:1361 platform/guimac.mm:1318 -#: platform/guiwin.cpp:1555 +#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1365 platform/guimac.mm:1321 +#: platform/guiwin.cpp:1573 msgctxt "title" msgid "Save File" msgstr "" -#: platform/guigtk.cpp:1329 platform/guigtk.cpp:1362 platform/guimac.mm:1301 -#: platform/guiwin.cpp:1557 +#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 platform/guimac.mm:1304 +#: platform/guiwin.cpp:1575 msgctxt "title" msgid "Open File" msgstr "" -#: platform/guigtk.cpp:1332 platform/guigtk.cpp:1368 +#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1372 msgctxt "button" msgid "_Cancel" msgstr "" -#: platform/guigtk.cpp:1333 platform/guigtk.cpp:1366 +#: platform/guigtk.cpp:1337 platform/guigtk.cpp:1370 msgctxt "button" msgid "_Save" msgstr "" -#: platform/guigtk.cpp:1334 platform/guigtk.cpp:1367 +#: platform/guigtk.cpp:1338 platform/guigtk.cpp:1371 msgctxt "button" msgid "_Open" msgstr "" +#: solvespace.cpp:169 +msgctxt "title" +msgid "Autosave Available" +msgstr "" + +#: solvespace.cpp:170 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "" + +#: solvespace.cpp:171 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "&Load autosave" +msgstr "" + +#: solvespace.cpp:174 +msgctxt "button" +msgid "Do&n't Load" +msgstr "" + +#: solvespace.cpp:557 +msgctxt "title" +msgid "Modified File" +msgstr "" + +#: solvespace.cpp:559 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "" + +#: solvespace.cpp:562 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "" + +#: solvespace.cpp:565 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "" + +#: solvespace.cpp:566 +msgctxt "button" +msgid "&Save" +msgstr "" + +#: solvespace.cpp:568 +msgctxt "button" +msgid "Do&n't Save" +msgstr "" + +#: solvespace.cpp:589 +msgctxt "title" +msgid "(new sketch)" +msgstr "" + +#: solvespace.cpp:596 +msgctxt "title" +msgid "Property Browser" +msgstr "" + +#: solvespace.cpp:658 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This is probably not what " +"you want; hide them by clicking the link at the top of the text window." +msgstr "" + +#: solvespace.cpp:730 +#, c-format +msgid "Can't identify file type from file extension of filename '%s'; try .dxf or .dwg." +msgstr "" + +#: solvespace.cpp:778 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "" + +#: solvespace.cpp:782 +msgid "Bad selection for step dimension; select a constraint." +msgstr "" + +#: solvespace.cpp:806 +msgid "The assembly does not interfere, good." +msgstr "" + +#: solvespace.cpp:822 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" + +#: solvespace.cpp:831 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" + +#: solvespace.cpp:836 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" + +#: solvespace.cpp:851 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:860 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, not coplanar, or self-" +"intersecting." +msgstr "" + +#: solvespace.cpp:872 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:892 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:898 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "" + +#: solvespace.cpp:914 +msgid "Bad selection for trace; select a single point." +msgstr "" + +#: solvespace.cpp:941 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "" + +#: solvespace.cpp:971 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "" + +#: solvespace.cpp:972 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "" + +#: solvespace.cpp:974 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "" + +#: solvespace.cpp:975 +msgid "The mesh is watertight (okay, valid)." +msgstr "" + +#: solvespace.cpp:978 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" + +#: solvespace.cpp:982 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" + +#: solvespace.cpp:985 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" + +#: solvespace.cpp:998 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" + #: style.cpp:166 msgid "" "Can't assign style to an entity that's derived from another entity; try assigning a style to this " @@ -1602,30 +1828,38 @@ msgid "New group rotating active sketch" msgstr "" #: toolbar.cpp:72 -msgid "New group step and repeat rotating" +msgid "New group helix from active sketch" msgstr "" #: toolbar.cpp:74 -msgid "New group step and repeat translating" +msgid "New group revolve active sketch" msgstr "" #: toolbar.cpp:76 -msgid "New group in new workplane (thru given entities)" +msgid "New group step and repeat rotating" msgstr "" #: toolbar.cpp:78 -msgid "New group in 3d" +msgid "New group step and repeat translating" msgstr "" #: toolbar.cpp:80 -msgid "New group linking / assembling file" +msgid "New group in new workplane (thru given entities)" +msgstr "" + +#: toolbar.cpp:82 +msgid "New group in 3d" msgstr "" #: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "" + +#: toolbar.cpp:88 msgid "Nearest isometric view" msgstr "" -#: toolbar.cpp:86 +#: toolbar.cpp:90 msgid "Align view to active workplane" msgstr "" diff --git a/res/threejs/three-r76.js.gz b/res/threejs/three-r76.js.gz deleted file mode 100644 index e2b9ca1..0000000 Binary files a/res/threejs/three-r76.js.gz and /dev/null differ diff --git a/res/win32/versioninfo.rc.in b/res/win32/versioninfo.rc.in index 0772a39..e6e9005 100644 --- a/res/win32/versioninfo.rc.in +++ b/res/win32/versioninfo.rc.in @@ -18,7 +18,7 @@ BEGIN VALUE "FileVersion", "${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}~${solvespace_GIT_HASH}" VALUE "OriginalFilename", "solvespace.exe" VALUE "InternalName", "solvespace" - VALUE "LegalCopyright", "(c) 2008-2016 Jonathan Westhues and other authors" + VALUE "LegalCopyright", "(c) 2008-2021 Jonathan Westhues and other authors" END END diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1a46e24..45dab94 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -80,8 +80,8 @@ include_directories( ${PNG_PNG_INCLUDE_DIR} ${FREETYPE_INCLUDE_DIRS} ${CAIRO_INCLUDE_DIRS} - ${Q3D_INCLUDE_DIR} - ${MIMALLOC_INCLUDE_DIR}) + ${MIMALLOC_INCLUDE_DIR} + ${OpenMP_CXX_INCLUDE_DIRS}) if(Backtrace_FOUND) include_directories( @@ -214,7 +214,6 @@ add_library(solvespace-core STATIC ${solvespace_core_SOURCES}) add_dependencies(solvespace-core - q3d_header mimalloc-static) target_link_libraries(solvespace-core @@ -224,7 +223,6 @@ target_link_libraries(solvespace-core ${ZLIB_LIBRARY} ${PNG_LIBRARY} ${FREETYPE_LIBRARY} - flatbuffers mimalloc-static) if(Backtrace_FOUND) @@ -241,7 +239,8 @@ if(HAVE_GETTEXT) set(inputs ${solvespace_core_SOURCES} ${solvespace_core_HEADERS} - ${every_platform_SOURCES}) + ${every_platform_SOURCES} + ${solvespace_core_gl_SOURCES}) set(templ_po ${CMAKE_CURRENT_BINARY_DIR}/../res/messages.po) diff --git a/src/clipboard.cpp b/src/clipboard.cpp index 011b658..d43ec45 100644 --- a/src/clipboard.cpp +++ b/src/clipboard.cpp @@ -227,7 +227,6 @@ void GraphicsWindow::PasteClipboard(Vector trans, double theta, double scale) { MakeSelected(hr.entity(j)); } } - Constraint *cc; for(cc = SS.clipboard.c.First(); cc; cc = SS.clipboard.c.NextAfter(cc)) { Constraint c = {}; @@ -246,25 +245,62 @@ void GraphicsWindow::PasteClipboard(Vector trans, double theta, double scale) { c.reference = cc->reference; c.disp = cc->disp; c.comment = cc->comment; + bool dontAddConstraint = false; switch(c.type) { case Constraint::Type::COMMENT: c.disp.offset = c.disp.offset.Plus(trans); break; - case Constraint::Type::PT_PT_DISTANCE: case Constraint::Type::PT_LINE_DISTANCE: case Constraint::Type::PROJ_PT_DISTANCE: case Constraint::Type::DIAMETER: c.valA *= fabs(scale); break; - + case Constraint::Type::ARC_LINE_TANGENT: { + Entity *line = SK.GetEntity(c.entityB), + *arc = SK.GetEntity(c.entityA); + if(line->type == Entity::Type::ARC_OF_CIRCLE) { + swap(line, arc); + } + Constraint::ConstrainArcLineTangent(&c, line, arc); + break; + } + case Constraint::Type::CUBIC_LINE_TANGENT: { + Entity *line = SK.GetEntity(c.entityB), + *cubic = SK.GetEntity(c.entityA); + if(line->type == Entity::Type::CUBIC) { + swap(line, cubic); + } + Constraint::ConstrainCubicLineTangent(&c, line, cubic); + break; + } + case Constraint::Type::CURVE_CURVE_TANGENT: { + Entity *eA = SK.GetEntity(c.entityA), + *eB = SK.GetEntity(c.entityB); + Constraint::ConstrainCurveCurveTangent(&c, eA, eB); + break; + } + case Constraint::Type::HORIZONTAL: + case Constraint::Type::VERTICAL: + // When rotating 90 or 270 degrees, swap the vertical / horizontal constaints + if (EXACT(fmod(theta + (PI/2), PI) == 0)) { + if(c.type == Constraint::Type::HORIZONTAL) { + c.type = Constraint::Type::VERTICAL; + } else { + c.type = Constraint::Type::HORIZONTAL; + } + } else if (fmod(theta, PI/2) != 0) { + dontAddConstraint = true; + } + break; default: break; } - - hConstraint hc = Constraint::AddConstraint(&c, /*rememberForUndo=*/false); - if(c.type == Constraint::Type::COMMENT) { - MakeSelected(hc); + if (!dontAddConstraint) { + hConstraint hc = Constraint::AddConstraint(&c, /*rememberForUndo=*/false); + if(c.type == Constraint::Type::COMMENT) { + MakeSelected(hc); + } } } } diff --git a/src/confscreen.cpp b/src/confscreen.cpp index 07c42b7..c7e2815 100644 --- a/src/confscreen.cpp +++ b/src/confscreen.cpp @@ -5,6 +5,9 @@ // Copyright 2008-2013 Jonathan Westhues. //----------------------------------------------------------------------------- #include "solvespace.h" +#if defined(_OPENMP) +#include +#endif void TextWindow::ScreenChangeLightDirection(int link, uint32_t v) { SS.TW.ShowEditControl(8, ssprintf("%.2f, %.2f, %.2f", CO(SS.lightDir[v]))); @@ -389,6 +392,11 @@ void TextWindow::ShowConfiguration() { Printf(false, " %Ft renderer %E%s", gl_renderer); Printf(false, " %Ft version %E%s", gl_version); } + + #if defined(_OPENMP) + Printf(false, " %FtOpenMP enabled"); + Printf(false, " %Ft threads %E%d", omp_get_max_threads()); + #endif } bool TextWindow::EditControlDoneForConfiguration(const std::string &s) { diff --git a/src/constraint.cpp b/src/constraint.cpp index a66f6d3..2acc211 100644 --- a/src/constraint.cpp +++ b/src/constraint.cpp @@ -127,6 +127,66 @@ hConstraint Constraint::ConstrainCoincident(hEntity ptA, hEntity ptB) { Entity::NO_ENTITY, Entity::NO_ENTITY, /*other=*/false, /*other2=*/false); } +void Constraint::ConstrainArcLineTangent(Constraint *c, Entity *line, Entity *arc) { + Vector l0 = SK.GetEntity(line->point[0])->PointGetNum(), + l1 = SK.GetEntity(line->point[1])->PointGetNum(); + Vector a1 = SK.GetEntity(arc->point[1])->PointGetNum(), + a2 = SK.GetEntity(arc->point[2])->PointGetNum(); + if(l0.Equals(a1) || l1.Equals(a1)) { + c->other = false; + } else if(l0.Equals(a2) || l1.Equals(a2)) { + c->other = true; + } else { + Error(_("The tangent arc and line segment must share an " + "endpoint. Constrain them with Constrain -> " + "On Point before constraining tangent.")); + return; + } +} + +void Constraint::ConstrainCubicLineTangent(Constraint *c, Entity *line, Entity *cubic) { + Vector l0 = SK.GetEntity(line->point[0])->PointGetNum(), + l1 = SK.GetEntity(line->point[1])->PointGetNum(); + Vector as = cubic->CubicGetStartNum(), + af = cubic->CubicGetFinishNum(); + + if(l0.Equals(as) || l1.Equals(as)) { + c->other = false; + } else if(l0.Equals(af) || l1.Equals(af)) { + c->other = true; + } else { + Error(_("The tangent cubic and line segment must share an " + "endpoint. Constrain them with Constrain -> " + "On Point before constraining tangent.")); + return; + } +} + +void Constraint::ConstrainCurveCurveTangent(Constraint *c, Entity *eA, Entity *eB) { + Vector as = eA->EndpointStart(), + af = eA->EndpointFinish(), + bs = eB->EndpointStart(), + bf = eB->EndpointFinish(); + if(as.Equals(bs)) { + c->other = false; + c->other2 = false; + } else if(as.Equals(bf)) { + c->other = false; + c->other2 = true; + } else if(af.Equals(bs)) { + c->other = true; + c->other2 = false; + } else if(af.Equals(bf)) { + c->other = true; + c->other2 = true; + } else { + Error(_("The curves must share an endpoint. Constrain them " + "with Constrain -> On Point before constraining " + "tangent.")); + return; + } +} + void Constraint::MenuConstrain(Command id) { Constraint c = {}; c.group = SS.GW.activeGroup; @@ -617,50 +677,22 @@ void Constraint::MenuConstrain(Command id) { c.entityA = gs.vector[0]; c.entityB = gs.vector[1]; } else if(gs.lineSegments == 1 && gs.arcs == 1 && gs.n == 2) { - Entity *line = SK.GetEntity(gs.entity[0]); - Entity *arc = SK.GetEntity(gs.entity[1]); + Entity *line = SK.GetEntity(gs.entity[0]), + *arc = SK.GetEntity(gs.entity[1]); if(line->type == Entity::Type::ARC_OF_CIRCLE) { swap(line, arc); } - Vector l0 = SK.GetEntity(line->point[0])->PointGetNum(), - l1 = SK.GetEntity(line->point[1])->PointGetNum(); - Vector a1 = SK.GetEntity(arc->point[1])->PointGetNum(), - a2 = SK.GetEntity(arc->point[2])->PointGetNum(); - - if(l0.Equals(a1) || l1.Equals(a1)) { - c.other = false; - } else if(l0.Equals(a2) || l1.Equals(a2)) { - c.other = true; - } else { - Error(_("The tangent arc and line segment must share an " - "endpoint. Constrain them with Constrain -> " - "On Point before constraining tangent.")); - return; - } + ConstrainArcLineTangent(&c, line, arc); c.type = Type::ARC_LINE_TANGENT; c.entityA = arc->h; c.entityB = line->h; } else if(gs.lineSegments == 1 && gs.cubics == 1 && gs.n == 2) { - Entity *line = SK.GetEntity(gs.entity[0]); - Entity *cubic = SK.GetEntity(gs.entity[1]); + Entity *line = SK.GetEntity(gs.entity[0]), + *cubic = SK.GetEntity(gs.entity[1]); if(line->type == Entity::Type::CUBIC) { swap(line, cubic); } - Vector l0 = SK.GetEntity(line->point[0])->PointGetNum(), - l1 = SK.GetEntity(line->point[1])->PointGetNum(); - Vector as = cubic->CubicGetStartNum(), - af = cubic->CubicGetFinishNum(); - - if(l0.Equals(as) || l1.Equals(as)) { - c.other = false; - } else if(l0.Equals(af) || l1.Equals(af)) { - c.other = true; - } else { - Error(_("The tangent cubic and line segment must share an " - "endpoint. Constrain them with Constrain -> " - "On Point before constraining tangent.")); - return; - } + ConstrainCubicLineTangent(&c, line, cubic); c.type = Type::CUBIC_LINE_TANGENT; c.entityA = cubic->h; c.entityB = line->h; @@ -671,24 +703,7 @@ void Constraint::MenuConstrain(Command id) { } Entity *eA = SK.GetEntity(gs.entity[0]), *eB = SK.GetEntity(gs.entity[1]); - Vector as = eA->EndpointStart(), - af = eA->EndpointFinish(), - bs = eB->EndpointStart(), - bf = eB->EndpointFinish(); - if(as.Equals(bs)) { - c.other = false; c.other2 = false; - } else if(as.Equals(bf)) { - c.other = false; c.other2 = true; - } else if(af.Equals(bs)) { - c.other = true; c.other2 = false; - } else if(af.Equals(bf)) { - c.other = true; c.other2 = true; - } else { - Error(_("The curves must share an endpoint. Constrain them " - "with Constrain -> On Point before constraining " - "tangent.")); - return; - } + ConstrainCurveCurveTangent(&c, eA, eB); c.type = Type::CURVE_CURVE_TANGENT; c.entityA = eA->h; c.entityB = eB->h; diff --git a/src/draw.cpp b/src/draw.cpp index 0a21c19..ccaeb96 100644 --- a/src/draw.cpp +++ b/src/draw.cpp @@ -207,8 +207,8 @@ void GraphicsWindow::MakeSelected(Selection *stog) { //----------------------------------------------------------------------------- void GraphicsWindow::SelectByMarquee() { Point2d marqueePoint = ProjectPoint(orig.marqueePoint); - BBox marqueeBBox = BBox::From(Vector::From(marqueePoint.x, marqueePoint.y, -1), - Vector::From(orig.mouse.x, orig.mouse.y, 1)); + BBox marqueeBBox = BBox::From(Vector::From(marqueePoint.x, marqueePoint.y, VERY_NEGATIVE), + Vector::From(orig.mouse.x, orig.mouse.y, VERY_POSITIVE)); Entity *e; for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { diff --git a/src/drawentity.cpp b/src/drawentity.cpp index fab4071..b8e3cbd 100644 --- a/src/drawentity.cpp +++ b/src/drawentity.cpp @@ -64,13 +64,13 @@ BBox Entity::GetOrGenerateScreenBBox(bool *hasBBox) { Vector proj = SS.GW.ProjectPoint3(PointGetNum()); screenBBox = BBox::From(proj, proj); } else if(IsNormal()) { - Vector proj = SK.GetEntity(point[0])->PointGetNum(); + Vector proj = SS.GW.ProjectPoint3(SK.GetEntity(point[0])->PointGetNum()); screenBBox = BBox::From(proj, proj); } else if(!sbl->l.IsEmpty()) { Vector first = SS.GW.ProjectPoint3(sbl->l[0].ctrl[0]); screenBBox = BBox::From(first, first); for(auto &sb : sbl->l) { - for(int i = 0; i < sb.deg; ++i) { screenBBox.Include(SS.GW.ProjectPoint3(sb.ctrl[i])); } + for(int i = 0; i <= sb.deg; ++i) { screenBBox.Include(SS.GW.ProjectPoint3(sb.ctrl[i])); } } } else ssassert(false, "Expected entity to be a point or have beziers"); @@ -472,13 +472,13 @@ void Entity::Draw(DrawAs how, Canvas *canvas) { int zIndex; if(IsPoint()) { - zIndex = 5; + zIndex = 6; } else if(how == DrawAs::HIDDEN) { zIndex = 2; } else if(group != SS.GW.activeGroup) { zIndex = 3; } else { - zIndex = 4; + zIndex = 5; } hStyle hs; @@ -488,6 +488,9 @@ void Entity::Draw(DrawAs how, Canvas *canvas) { hs.v = Style::NORMALS; } else { hs = Style::ForEntity(h); + if (hs.v == Style::CONSTRUCTION) { + zIndex = 4; + } } Canvas::Stroke stroke = Style::Stroke(hs); @@ -612,7 +615,7 @@ void Entity::Draw(DrawAs how, Canvas *canvas) { double w = 60 - camera.width / 2.0; // Shift the axis to the right if they would overlap with the toolbar. if(SS.showToolbar) { - if(h + 30 > -(34*16 + 3*16 + 8) / 2) + if(h + 30 > -(32*18 + 3*16 + 8) / 2) w += 60; } tail = camera.projRight.ScaledBy(w/s).Plus( diff --git a/src/export.cpp b/src/export.cpp index e0c6182..f5649b6 100644 --- a/src/export.cpp +++ b/src/export.cpp @@ -843,8 +843,6 @@ void SolveSpaceUI::ExportMeshTo(const Platform::Path &filename) { ExportMeshAsObjTo(f, fMtl, m); fclose(fMtl); - } else if(filename.HasExtension("q3do")) { - ExportMeshAsQ3doTo(f, m); } else if(filename.HasExtension("js") || filename.HasExtension("html")) { SOutlineList *e = &(SK.GetGroup(SS.GW.activeGroup)->displayOutlines); @@ -898,54 +896,6 @@ void SolveSpaceUI::ExportMeshAsStlTo(FILE *f, SMesh *sm) { } } -//----------------------------------------------------------------------------- -// Export the mesh as a Q3DO (https://github.com/q3k/q3d) file. -//----------------------------------------------------------------------------- - -#include "q3d_object_generated.h" -void SolveSpaceUI::ExportMeshAsQ3doTo(FILE *f, SMesh *sm) { - flatbuffers::FlatBufferBuilder builder(1024); - double s = SS.exportScale; - - // Create a material for every colour used, keep note of triangles belonging to color/material. - std::map, RgbaColorCompare> materials; - std::map>, RgbaColorCompare> materialTriangles; - for (const STriangle &t : sm->l) { - auto color = t.meta.color; - if (materials.find(color) == materials.end()) { - auto name = builder.CreateString(ssprintf("Color #%02x%02x%02x%02x", color.red, color.green, color.blue, color.alpha)); - auto co = q3d::CreateColor(builder, color.red, color.green, color.blue, color.alpha); - auto mo = q3d::CreateMaterial(builder, name, co); - materials.emplace(color, mo); - } - - Vector faceNormal = t.Normal(); - auto a = q3d::Vector3((float)(t.a.x/s), (float)(t.a.y/s), (float)(t.a.z/s)); - auto b = q3d::Vector3((float)(t.b.x/s), (float)(t.b.y/s), (float)(t.b.z/s)); - auto c = q3d::Vector3((float)(t.c.x/s), (float)(t.c.y/s), (float)(t.c.z/s)); - auto fn = q3d::Vector3((float)faceNormal.x, (float)faceNormal.y, (float)faceNormal.x); - auto n1 = q3d::Vector3((float)t.normals[0].x, (float)t.normals[0].y, (float)t.normals[0].z); - auto n2 = q3d::Vector3((float)t.normals[1].x, (float)t.normals[1].y, (float)t.normals[1].z); - auto n3 = q3d::Vector3((float)t.normals[2].x, (float)t.normals[2].y, (float)t.normals[2].z); - auto tri = q3d::CreateTriangle(builder, &a, &b, &c, &fn, &n1, &n2, &n3); - materialTriangles[color].push_back(tri); - } - - // Build all meshes sorted by material. - std::vector> meshes; - for (auto &it : materials) { - auto &mato = it.second; - auto to = builder.CreateVector(materialTriangles[it.first]); - auto mo = q3d::CreateMesh(builder, to, mato); - meshes.push_back(mo); - } - - auto mo = builder.CreateVector(meshes); - auto o = q3d::CreateObject(builder, mo); - q3d::FinishObjectBuffer(builder, o); - fwrite(builder.GetBufferPointer(), builder.GetSize(), 1, f); -} - //----------------------------------------------------------------------------- // Export the mesh as Wavefront OBJ format. This requires us to reduce all the // identical vertices to the same identifier, so do that first. diff --git a/src/file.cpp b/src/file.cpp index acb931f..f36e49b 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -904,11 +904,13 @@ try_again: } else if(linkMap.count(g.linkFile) == 0) { dbp("Missing file for group: %s", g.name.c_str()); // The file was moved; prompt the user for its new location. - switch(LocateImportedFile(g.linkFile.RelativeTo(saveFile), canCancel)) { + const auto linkFileRelative = g.linkFile.RelativeTo(saveFile); + switch(LocateImportedFile(linkFileRelative, canCancel)) { case Platform::MessageDialog::Response::YES: { Platform::FileDialogRef dialog = Platform::CreateOpenFileDialog(SS.GW.window); dialog->AddFilters(Platform::SolveSpaceModelFileFilters); dialog->ThawChoices(settings, "LinkSketch"); + dialog->SuggestFilename(linkFileRelative); if(dialog->RunModal()) { dialog->FreezeChoices(settings, "LinkSketch"); linkMap[g.linkFile] = dialog->GetFilename(); @@ -985,6 +987,7 @@ bool SolveSpaceUI::ReloadLinkedImage(const Platform::Path &saveFile, Platform::FileDialogRef dialog = Platform::CreateOpenFileDialog(SS.GW.window); dialog->AddFilters(Platform::RasterFileFilters); dialog->ThawChoices(settings, "LinkImage"); + dialog->SuggestFilename(filename->RelativeTo(saveFile)); if(dialog->RunModal()) { dialog->FreezeChoices(settings, "LinkImage"); *filename = dialog->GetFilename(); diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp index 5aed966..32b4b08 100644 --- a/src/graphicswin.cpp +++ b/src/graphicswin.cpp @@ -92,6 +92,7 @@ const MenuEntry Menu[] = { { 1, N_("&Center View At Point"), Command::CENTER_VIEW, F|4, KN, mView }, { 1, NULL, Command::NONE, 0, KN, NULL }, { 1, N_("Show Snap &Grid"), Command::SHOW_GRID, '>', KC, mView }, +{ 1, N_("Darken Inactive Solids"), Command::DIM_SOLID_MODEL, 0, KC, mView }, { 1, N_("Use &Perspective Projection"), Command::PERSPECTIVE_PROJ, '`', KC, mView }, { 1, N_("Dimension &Units"), Command::NONE, 0, KN, NULL }, { 2, N_("Dimensions in &Millimeters"), Command::UNITS_MM, 0, KR, mView }, @@ -312,6 +313,8 @@ void GraphicsWindow::PopulateMainMenu() { if(Menu[i].cmd == Command::SHOW_GRID) { showGridMenuItem = menuItem; + } else if(Menu[i].cmd == Command::DIM_SOLID_MODEL) { + dimSolidModelMenuItem = menuItem; } else if(Menu[i].cmd == Command::PERSPECTIVE_PROJ) { perspectiveProjMenuItem = menuItem; } else if(Menu[i].cmd == Command::SHOW_TOOLBAR) { @@ -406,6 +409,7 @@ void GraphicsWindow::Init() { showTextWindow = true; showSnapGrid = false; + dimSolidModel = true; context.active = false; toolbarHovered = Command::NONE; @@ -722,6 +726,12 @@ void GraphicsWindow::MenuView(Command id) { } break; + case Command::DIM_SOLID_MODEL: + SS.GW.dimSolidModel = !SS.GW.dimSolidModel; + SS.GW.EnsureValidActives(); + SS.GW.Invalidate(/*clearPersistent=*/true); + break; + case Command::PERSPECTIVE_PROJ: SS.usePerspectiveProj = !SS.usePerspectiveProj; SS.GW.EnsureValidActives(); @@ -923,6 +933,7 @@ void GraphicsWindow::EnsureValidActives() { showTextWndMenuItem->SetActive(SS.GW.showTextWindow); showGridMenuItem->SetActive(SS.GW.showSnapGrid); + dimSolidModelMenuItem->SetActive(SS.GW.dimSolidModel); perspectiveProjMenuItem->SetActive(SS.usePerspectiveProj); showToolbarMenuItem->SetActive(SS.showToolbar); fullScreenMenuItem->SetActive(SS.GW.window->IsFullScreen()); @@ -1175,10 +1186,7 @@ void GraphicsWindow::MenuEdit(Command id) { } // Regenerate, with these points marked as dragged so that they // get placed as close as possible to our snap grid. - SS.GW.ClearPending(); - SS.GW.ClearSelection(); - SS.GW.Invalidate(); break; } diff --git a/src/groupmesh.cpp b/src/groupmesh.cpp index 2d509ae..f1041d6 100644 --- a/src/groupmesh.cpp +++ b/src/groupmesh.cpp @@ -569,7 +569,8 @@ void Group::DrawMesh(DrawMeshAs how, Canvas *canvas) { if(!SS.GW.showShaded) { fillFront.layer = Canvas::Layer::DEPTH_ONLY; } - if(type == Type::DRAWING_3D || type == Type::DRAWING_WORKPLANE) { + if((type == Type::DRAWING_3D || type == Type::DRAWING_WORKPLANE) + && SS.GW.dimSolidModel) { fillFront.color = Style::Color(Style::DIM_SOLID); } Canvas::hFill hcfFront = canvas->GetFill(fillFront); diff --git a/src/mouse.cpp b/src/mouse.cpp index 699f3e2..729c8ee 100644 --- a/src/mouse.cpp +++ b/src/mouse.cpp @@ -877,7 +877,6 @@ bool GraphicsWindow::ConstrainPointByHovered(hEntity pt, const Point2d *projecte bool GraphicsWindow::MouseEvent(Platform::MouseEvent event) { using Platform::MouseEvent; - double width, height; window->GetContentSize(&width, &height); @@ -918,7 +917,7 @@ bool GraphicsWindow::MouseEvent(Platform::MouseEvent event) { break; case MouseEvent::Type::SCROLL_VERT: - this->MouseScroll(event.x, event.y, (int)event.scrollDelta); + this->MouseScroll(event.x, event.y, event.shiftDown ? event.scrollDelta / 10 : event.scrollDelta); break; case MouseEvent::Type::LEAVE: @@ -1117,7 +1116,7 @@ void GraphicsWindow::MouseLeftDown(double mx, double my, bool shiftDown, bool ct AddToPending(hr); Request *r = SK.GetRequest(hr); r->str = "Abc"; - r->font = "BitstreamVeraSans-Roman-builtin.ttf"; + r->font = Platform::embeddedFont; for(int i = 1; i <= 4; i++) { SK.GetEntity(hr.entity(i))->PointForceTo(v); @@ -1472,18 +1471,25 @@ void GraphicsWindow::EditControlDone(const std::string &s) { } } -void GraphicsWindow::MouseScroll(double x, double y, int delta) { +void GraphicsWindow::MouseScroll(double x, double y, double delta) { double offsetRight = offset.Dot(projRight); double offsetUp = offset.Dot(projUp); double righti = x/scale - offsetRight; double upi = y/scale - offsetUp; - if(delta > 0) { - scale *= 1.2; - } else if(delta < 0) { - scale /= 1.2; - } else return; + // The default zoom factor is 1.2x for one scroll wheel click (delta==1). + // To support smooth scrolling where scroll wheel events come in increments + // smaller (or larger) than 1 we do: + // scale *= exp(ln(1.2) * delta); + // to ensure that the same total scroll delta always results in the same + // total zoom irrespective of in how many increments the zoom was applied. + // For example if we scroll a total delta of a+b in two events vs. one then + // scale * e^a * e^b == scale * e^(a+b) + // while + // scale * a * b != scale * (a+b) + // So this constant is ln(1.2) = 0.1823216 to make the default zoom 1.2x + scale *= exp(0.1823216 * delta); double rightf = x/scale - offsetRight; double upf = y/scale - offsetUp; diff --git a/src/platform/gui.cpp b/src/platform/gui.cpp index ff9b2cf..28fded4 100644 --- a/src/platform/gui.cpp +++ b/src/platform/gui.cpp @@ -99,7 +99,6 @@ std::vector MeshFileFilters = { { CN_("file-type", "Wavefront OBJ mesh"), { "obj" } }, { CN_("file-type", "Three.js-compatible mesh, with viewer"), { "html" } }, { CN_("file-type", "Three.js-compatible mesh, mesh only"), { "js" } }, - { CN_("file-type", "Q3D Object file"), { "q3do" } }, { CN_("file-type", "VRML text file"), { "wrl" } }, }; diff --git a/src/platform/gui.h b/src/platform/gui.h index 7b2cdf5..1608a6f 100644 --- a/src/platform/gui.h +++ b/src/platform/gui.h @@ -356,6 +356,7 @@ public: virtual Platform::Path GetFilename() = 0; virtual void SetFilename(Platform::Path path) = 0; + virtual void SuggestFilename(Platform::Path path) = 0; virtual void AddFilter(std::string name, std::vector extensions) = 0; void AddFilter(const FileFilter &filter); diff --git a/src/platform/guigtk.cpp b/src/platform/guigtk.cpp index cd5d0b8..e8113ed 100644 --- a/src/platform/guigtk.cpp +++ b/src/platform/guigtk.cpp @@ -472,7 +472,7 @@ protected: } bool process_pointer_event(MouseEvent::Type type, double x, double y, - guint state, guint button = 0, int scroll_delta = 0) { + guint state, guint button = 0, double scroll_delta = 0) { MouseEvent event = {}; event.type = type; event.x = x; @@ -536,7 +536,7 @@ protected: } bool on_scroll_event(GdkEventScroll *gdk_event) override { - int delta; + double delta; if(gdk_event->delta_y < 0 || gdk_event->direction == GDK_SCROLL_UP) { delta = 1; } else if(gdk_event->delta_y > 0 || gdk_event->direction == GDK_SCROLL_DOWN) { @@ -1246,6 +1246,10 @@ public: gtkChooser->set_filename(path.raw); } + void SuggestFilename(Platform::Path path) override { + gtkChooser->set_current_name(path.FileStem()+"."+GetExtension()); + } + void AddFilter(std::string name, std::vector extensions) override { Glib::RefPtr gtkFilter = Gtk::FileFilter::create(); Glib::ustring desc; diff --git a/src/platform/guimac.mm b/src/platform/guimac.mm index 5aa7f05..b2b07a8 100644 --- a/src/platform/guimac.mm +++ b/src/platform/guimac.mm @@ -554,7 +554,9 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) { MouseEvent event = [self convertMouseEvent:nsEvent]; event.type = MouseEvent::Type::SCROLL_VERT; - event.scrollDelta = [nsEvent deltaY]; + + bool isPrecise = [nsEvent hasPreciseScrollingDeltas]; + event.scrollDelta = [nsEvent scrollingDeltaY] / (isPrecise ? 50 : 5); if(receiver->onMouseEvent) { receiver->onMouseEvent(event); @@ -975,9 +977,6 @@ public: if(GetScrollbarPosition() == pos) return; [nsScroller setDoubleValue:(pos / (ssView.scrollerMax - ssView.scrollerMin))]; - if(onScrollbarAdjusted) { - onScrollbarAdjusted(pos); - } } void Invalidate() override { @@ -1274,6 +1273,10 @@ public: nsPanel.nameFieldStringValue = Wrap(path.FileStem()); } + void SuggestFilename(Platform::Path path) override { + SetFilename(path.WithExtension("")); + } + void FreezeChoices(SettingsRef settings, const std::string &key) override { settings->FreezeString("Dialog_" + key + "_Folder", [nsPanel.directoryURL.absoluteString UTF8String]); diff --git a/src/platform/guiwin.cpp b/src/platform/guiwin.cpp index 43e7a59..d885195 100644 --- a/src/platform/guiwin.cpp +++ b/src/platform/guiwin.cpp @@ -183,7 +183,7 @@ public: HKEY GetKey() { if(hKey == NULL) { - sscheck(RegCreateKeyExW(HKEY_CURRENT_USER, L"Software\\SolveSpace", 0, NULL, 0, + sscheck(ERROR_SUCCESS == RegCreateKeyExW(HKEY_CURRENT_USER, L"Software\\SolveSpace", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hKey, NULL)); } return hKey; @@ -191,12 +191,12 @@ public: ~SettingsImplWin32() { if(hKey != NULL) { - sscheck(RegCloseKey(hKey)); + sscheck(ERROR_SUCCESS == RegCloseKey(hKey)); } } void FreezeInt(const std::string &key, uint32_t value) { - sscheck(RegSetValueExW(GetKey(), &Widen(key)[0], 0, + sscheck(ERROR_SUCCESS == RegSetValueExW(GetKey(), &Widen(key)[0], 0, REG_DWORD, (const BYTE *)&value, sizeof(value))); } @@ -212,7 +212,7 @@ public: } void FreezeFloat(const std::string &key, double value) { - sscheck(RegSetValueExW(GetKey(), &Widen(key)[0], 0, + sscheck(ERROR_SUCCESS == RegSetValueExW(GetKey(), &Widen(key)[0], 0, REG_QWORD, (const BYTE *)&value, sizeof(value))); } @@ -231,7 +231,7 @@ public: ssassert(value.length() == strlen(value.c_str()), "illegal null byte in middle of a string setting"); std::wstring valueW = Widen(value); - sscheck(RegSetValueExW(GetKey(), &Widen(key)[0], 0, + sscheck(ERROR_SUCCESS == RegSetValueExW(GetKey(), &Widen(key)[0], 0, REG_SZ, (const BYTE *)&valueW[0], (valueW.length() + 1) * 2)); } @@ -242,7 +242,7 @@ public: if(result == ERROR_SUCCESS && type == REG_SZ) { std::wstring valueW; valueW.resize(length / 2 - 1); - sscheck(RegQueryValueExW(GetKey(), &Widen(key)[0], 0, + sscheck(ERROR_SUCCESS == RegQueryValueExW(GetKey(), &Widen(key)[0], 0, &type, (BYTE *)&valueW[0], &length)); return Narrow(valueW); } @@ -734,6 +734,11 @@ public: event.type = SixDofEvent::Type::RELEASE; event.button = SixDofEvent::Button::FIT; } + } else { + return 0; + } + if(window->onSixDofEvent) { + window->onSixDofEvent(event); } return 0; } @@ -907,8 +912,8 @@ public: // Make the mousewheel work according to which window the mouse is // over, not according to which window is active. POINT pt; - pt.x = LOWORD(lParam); - pt.y = HIWORD(lParam); + pt.x = GET_X_LPARAM(lParam); + pt.y = GET_Y_LPARAM(lParam); HWND hWindowUnderMouse; sscheck(hWindowUnderMouse = WindowFromPoint(pt)); if(hWindowUnderMouse && hWindowUnderMouse != h) { @@ -917,8 +922,15 @@ public: break; } + // Convert the mouse coordinates from screen to client area so that + // scroll wheel zooming remains centered irrespective of the window + // position. + ScreenToClient(hWindowUnderMouse, &pt); + event.x = pt.x / pixelRatio; + event.y = pt.y / pixelRatio; + event.type = MouseEvent::Type::SCROLL_VERT; - event.scrollDelta = GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? 1 : -1; + event.scrollDelta = GET_WHEEL_DELTA_WPARAM(wParam) / WHEEL_DELTA; break; case WM_MOUSELEAVE: @@ -1094,12 +1106,12 @@ public: bool IsVisible() override { BOOL isVisible; - sscheck(isVisible = IsWindowVisible(hWindow)); + isVisible = IsWindowVisible(hWindow); return isVisible == TRUE; } void SetVisible(bool visible) override { - sscheck(ShowWindow(hWindow, visible ? SW_SHOW : SW_HIDE)); + ShowWindow(hWindow, visible ? SW_SHOW : SW_HIDE); } void Focus() override { @@ -1267,7 +1279,7 @@ public: bool IsEditorVisible() override { BOOL visible; - sscheck(visible = IsWindowVisible(hEditor)); + visible = IsWindowVisible(hEditor); return visible == TRUE; } @@ -1309,7 +1321,7 @@ public: sscheck(MoveWindow(hEditor, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, /*bRepaint=*/true)); - sscheck(ShowWindow(hEditor, SW_SHOW)); + ShowWindow(hEditor, SW_SHOW); if(!textW.empty()) { sscheck(SendMessageW(hEditor, WM_SETTEXT, 0, (LPARAM)textW.c_str())); sscheck(SendMessageW(hEditor, EM_SETSEL, 0, textW.length())); @@ -1320,7 +1332,7 @@ public: void HideEditor() override { if(!IsEditorVisible()) return; - sscheck(ShowWindow(hEditor, SW_HIDE)); + ShowWindow(hEditor, SW_HIDE); } void SetScrollbarVisible(bool visible) override { @@ -1335,7 +1347,7 @@ public: si.nMin = (UINT)(min * SCROLLBAR_UNIT); si.nMax = (UINT)(max * SCROLLBAR_UNIT); si.nPage = (UINT)(pageSize * SCROLLBAR_UNIT); - sscheck(SetScrollInfo(hWindow, SB_VERT, &si, /*redraw=*/TRUE)); + SetScrollInfo(hWindow, SB_VERT, &si, /*redraw=*/TRUE); // Returns scrollbar position } double GetScrollbarPosition() override { @@ -1359,7 +1371,7 @@ public: return; si.nPos = (int)(pos * SCROLLBAR_UNIT); - sscheck(SetScrollInfo(hWindow, SB_VERT, &si, /*redraw=*/TRUE)); + SetScrollInfo(hWindow, SB_VERT, &si, /*redraw=*/TRUE); // Returns scrollbar position // Windows won't synthesize a WM_VSCROLL for us here. if(onScrollbarAdjusted) { @@ -1443,7 +1455,10 @@ public: void SetType(Type type) override { switch(type) { case Type::INFORMATION: - style = MB_ICONINFORMATION; + style = MB_USERICON; // Avoid beep + mbp.hInstance = GetModuleHandle(NULL); + mbp.lpszIcon = MAKEINTRESOURCE(4000); // Use SolveSpace icon + // mbp.lpszIcon = IDI_INFORMATION; break; case Type::QUESTION: @@ -1455,7 +1470,10 @@ public: break; case Type::ERROR: - style = MB_ICONERROR; + style = MB_USERICON; // Avoid beep + mbp.hInstance = GetModuleHandle(NULL); + mbp.lpszIcon = MAKEINTRESOURCE(4000); // Use SolveSpace icon + // mbp.lpszIcon = IDI_ERROR; break; } } @@ -1575,6 +1593,10 @@ public: wcsncpy(filenameWC, Widen(path.raw).c_str(), sizeof(filenameWC) / sizeof(wchar_t) - 1); } + void SuggestFilename(Platform::Path path) override { + SetFilename(Platform::Path::From(path.FileStem())); + } + void AddFilter(std::string name, std::vector extensions) override { std::string desc, patterns; for(auto extension : extensions) { diff --git a/src/platform/platform.cpp b/src/platform/platform.cpp index f025c86..0085413 100644 --- a/src/platform/platform.cpp +++ b/src/platform/platform.cpp @@ -185,8 +185,10 @@ Path Path::WithExtension(std::string ext) const { if(dot != std::string::npos) { withExt.raw.erase(dot); } - withExt.raw += "."; - withExt.raw += ext; + if(!ext.empty()) { + withExt.raw += "."; + withExt.raw += ext; + } return withExt; } diff --git a/src/platform/platform.h b/src/platform/platform.h index 5664fa2..21c2b2b 100644 --- a/src/platform/platform.h +++ b/src/platform/platform.h @@ -17,6 +17,12 @@ std::string Narrow(const std::wstring &s); std::wstring Widen(const std::string &s); #endif +#if defined(_WIN32) + const std::string embeddedFont = "res://fonts/BitstreamVeraSans-Roman-builtin.ttf"; +#else // Linux and macOS + const std::string embeddedFont = "BitstreamVeraSans-Roman-builtin.ttf"; +#endif + // A filesystem path, respecting the conventions of the current platform. // Transformation functions return an empty path on error. class Path { diff --git a/src/sketch.h b/src/sketch.h index 869e0b6..8377374 100644 --- a/src/sketch.h +++ b/src/sketch.h @@ -790,6 +790,9 @@ public: static hConstraint TryConstrain(Constraint::Type type, hEntity ptA, hEntity ptB, hEntity entityA, hEntity entityB = Entity::NO_ENTITY, bool other = false, bool other2 = false); + static void ConstrainArcLineTangent(Constraint *c, Entity *line, Entity *arc); + static void ConstrainCubicLineTangent(Constraint *c, Entity *line, Entity *cubic); + static void ConstrainCurveCurveTangent(Constraint *c, Entity *eA, Entity *eB); }; class hEquation { diff --git a/src/solvespace.cpp b/src/solvespace.cpp index 7c30a8f..4e458cf 100644 --- a/src/solvespace.cpp +++ b/src/solvespace.cpp @@ -77,7 +77,7 @@ void SolveSpaceUI::Init() { // Use turntable mouse navigation turntableNav = settings->ThawBool("TurntableNav", false); // Immediately edit dimension - immediatelyEditDimension = settings->ThawBool("ImmediatelyEditDimension", false); + immediatelyEditDimension = settings->ThawBool("ImmediatelyEditDimension", true); // Check that contours are closed and not self-intersecting checkClosedContour = settings->ThawBool("CheckClosedContour", true); // Enable automatic constrains for lines @@ -331,7 +331,13 @@ const char *SolveSpaceUI::UnitName() { std::string SolveSpaceUI::MmToString(double v) { v /= MmPerUnit(); - return ssprintf("%.*f", UnitDigitsAfterDecimal(), v); + int digits = UnitDigitsAfterDecimal(); + double minimum = 0.5 * pow(10,-digits); + while ((v < minimum) && (v > LENGTH_EPS)) { + digits++; + minimum *= 0.1; + } + return ssprintf("%.*f", digits, v); } static const char *DimToString(int dim) { switch(dim) { @@ -341,13 +347,39 @@ static const char *DimToString(int dim) { default: ssassert(false, "Unexpected dimension"); } } -static std::pair SelectSIPrefixMm(int deg) { - if(deg >= 3) return { 3, "km" }; - else if(deg >= 0) return { 0, "m" }; - else if(deg >= -2) return { -2, "cm" }; - else if(deg >= -3) return { -3, "mm" }; - else if(deg >= -6) return { -6, "µm" }; - else return { -9, "nm" }; +static std::pair SelectSIPrefixMm(int ord, int dim) { +// decide what units to use depending on the order of magnitude of the +// measure in meters and the dimmension (1,2,3 lenear, area, volume) + switch(dim) { + case 0: + case 1: + if(ord >= 3) return { 3, "km" }; + else if(ord >= 0) return { 0, "m" }; + else if(ord >= -2) return { -2, "cm" }; + else if(ord >= -3) return { -3, "mm" }; + else if(ord >= -6) return { -6, "µm" }; + else return { -9, "nm" }; + break; + case 2: + if(ord >= 5) return { 3, "km" }; + else if(ord >= 0) return { 0, "m" }; + else if(ord >= -2) return { -2, "cm" }; + else if(ord >= -6) return { -3, "mm" }; + else if(ord >= -13) return { -6, "µm" }; + else return { -9, "nm" }; + break; + case 3: + if(ord >= 7) return { 3, "km" }; + else if(ord >= 0) return { 0, "m" }; + else if(ord >= -5) return { -2, "cm" }; + else if(ord >= -11) return { -3, "mm" }; + else return { -6, "µm" }; + break; + default: + dbp ("dimensions over 3 not supported"); + break; + } + return {0, "m"}; } static std::pair SelectSIPrefixInch(int deg) { if(deg >= 0) return { 0, "in" }; @@ -363,14 +395,14 @@ std::string SolveSpaceUI::MmToStringSI(double v, int dim) { } v /= pow((viewUnits == Unit::INCHES) ? 25.4 : 1000, dim); - int vdeg = (int)((log10(fabs(v))) / dim); + int vdeg = (int)(log10(fabs(v))); std::string unit; if(fabs(v) > 0.0) { int sdeg = 0; std::tie(sdeg, unit) = (viewUnits == Unit::INCHES) - ? SelectSIPrefixInch(vdeg) - : SelectSIPrefixMm(vdeg); + ? SelectSIPrefixInch(vdeg/dim) + : SelectSIPrefixMm(vdeg, dim); v /= pow(10.0, sdeg * dim); } int pdeg = (int)ceil(log10(fabs(v) + 1e-10)); @@ -601,6 +633,7 @@ void SolveSpaceUI::MenuFile(Command id) { Platform::FileDialogRef dialog = Platform::CreateSaveFileDialog(SS.GW.window); dialog->AddFilters(Platform::RasterFileFilters); dialog->ThawChoices(settings, "ExportImage"); + dialog->SuggestFilename(SS.saveFile); if(dialog->RunModal()) { dialog->FreezeChoices(settings, "ExportImage"); SS.ExportAsPngTo(dialog->GetFilename()); @@ -612,6 +645,7 @@ void SolveSpaceUI::MenuFile(Command id) { Platform::FileDialogRef dialog = Platform::CreateSaveFileDialog(SS.GW.window); dialog->AddFilters(Platform::VectorFileFilters); dialog->ThawChoices(settings, "ExportView"); + dialog->SuggestFilename(SS.saveFile); if(!dialog->RunModal()) break; dialog->FreezeChoices(settings, "ExportView"); @@ -635,6 +669,7 @@ void SolveSpaceUI::MenuFile(Command id) { Platform::FileDialogRef dialog = Platform::CreateSaveFileDialog(SS.GW.window); dialog->AddFilters(Platform::Vector3dFileFilters); dialog->ThawChoices(settings, "ExportWireframe"); + dialog->SuggestFilename(SS.saveFile); if(!dialog->RunModal()) break; dialog->FreezeChoices(settings, "ExportWireframe"); @@ -646,6 +681,7 @@ void SolveSpaceUI::MenuFile(Command id) { Platform::FileDialogRef dialog = Platform::CreateSaveFileDialog(SS.GW.window); dialog->AddFilters(Platform::VectorFileFilters); dialog->ThawChoices(settings, "ExportSection"); + dialog->SuggestFilename(SS.saveFile); if(!dialog->RunModal()) break; dialog->FreezeChoices(settings, "ExportSection"); @@ -657,6 +693,7 @@ void SolveSpaceUI::MenuFile(Command id) { Platform::FileDialogRef dialog = Platform::CreateSaveFileDialog(SS.GW.window); dialog->AddFilters(Platform::MeshFileFilters); dialog->ThawChoices(settings, "ExportMesh"); + dialog->SuggestFilename(SS.saveFile); if(!dialog->RunModal()) break; dialog->FreezeChoices(settings, "ExportMesh"); @@ -668,6 +705,7 @@ void SolveSpaceUI::MenuFile(Command id) { Platform::FileDialogRef dialog = Platform::CreateSaveFileDialog(SS.GW.window); dialog->AddFilters(Platform::SurfaceFileFilters); dialog->ThawChoices(settings, "ExportSurfaces"); + dialog->SuggestFilename(SS.saveFile); if(!dialog->RunModal()) break; dialog->FreezeChoices(settings, "ExportSurfaces"); @@ -878,9 +916,13 @@ void SolveSpaceUI::MenuAnalyze(Command id) { break; case Command::STOP_TRACING: { + if (SS.traced.point == Entity::NO_ENTITY) { + break; + } Platform::FileDialogRef dialog = Platform::CreateSaveFileDialog(SS.GW.window); dialog->AddFilters(Platform::CsvFileFilters); dialog->ThawChoices(settings, "Trace"); + dialog->SetFilename(SS.saveFile); if(dialog->RunModal()) { dialog->FreezeChoices(settings, "Trace"); @@ -965,7 +1007,7 @@ void SolveSpaceUI::MenuHelp(Command id) { "law. For details, visit http://gnu.org/licenses/\n" "\n" "© 2008-%d Jonathan Westhues and other authors.\n"), -PACKAGE_VERSION, 2020); +PACKAGE_VERSION, 2021); break; default: ssassert(false, "Unexpected menu ID"); @@ -982,6 +1024,7 @@ void SolveSpaceUI::Clear() { GW.openRecentMenu = NULL; GW.linkRecentMenu = NULL; GW.showGridMenuItem = NULL; + GW.dimSolidModelMenuItem = NULL; GW.perspectiveProjMenuItem = NULL; GW.showToolbarMenuItem = NULL; GW.showTextWndMenuItem = NULL; diff --git a/src/solvespace.h b/src/solvespace.h index e8eeddc..e64a1ab 100644 --- a/src/solvespace.h +++ b/src/solvespace.h @@ -686,7 +686,6 @@ public: void ExportAsPngTo(const Platform::Path &filename); void ExportMeshTo(const Platform::Path &filename); void ExportMeshAsStlTo(FILE *f, SMesh *sm); - void ExportMeshAsQ3doTo(FILE *f, SMesh *sm); void ExportMeshAsObjTo(FILE *fObj, FILE *fMtl, SMesh *sm); void ExportMeshAsThreeJsTo(FILE *f, const Platform::Path &filename, SMesh *sm, SOutlineList *sol); diff --git a/src/textscreens.cpp b/src/textscreens.cpp index aac2703..07d5cde 100644 --- a/src/textscreens.cpp +++ b/src/textscreens.cpp @@ -143,7 +143,7 @@ void TextWindow::ShowListOfGroups() { // Link to the errors, if a problem occurred while solving ok ? (warn ? 'm' : (dof > 0 ? 'i' : 's')) : 'x', g->h.v, (&TextWindow::ScreenHowGroupSolved), - ok ? (warn ? "err" : sdof) : "", + ok ? ((warn && SS.checkClosedContour) ? "err" : sdof) : "", ok ? "" : "ERR", // Link to a screen that gives more details on the group g->h.v, (&TextWindow::ScreenSelectGroup), s.c_str()); diff --git a/src/textwin.cpp b/src/textwin.cpp index e243825..3e33922 100644 --- a/src/textwin.cpp +++ b/src/textwin.cpp @@ -252,8 +252,18 @@ void TextWindow::Init() { MouseLeave(); return true; } else if(event.type == MouseEvent::Type::SCROLL_VERT) { - ScrollbarEvent(window->GetScrollbarPosition() - - LINE_HEIGHT / 2 * event.scrollDelta); + if (event.scrollDelta == 0) { + return true; + } + if (abs(event.scrollDelta) < 0.2) { + if (event.scrollDelta > 0) { + event.scrollDelta = 0.2; + } else { + event.scrollDelta = -0.2; + } + } + double offset = LINE_HEIGHT / 2 * event.scrollDelta; + ScrollbarEvent(window->GetScrollbarPosition() - offset); } return false; }; @@ -1148,7 +1158,6 @@ void TextWindow::ScrollbarEvent(double newPos) { int bottom = top[rows-1] + 2; newPos = min((int)newPos, bottom - halfRows); newPos = max((int)newPos, 0); - if(newPos != scrollPos) { scrollPos = (int)newPos; window->SetScrollbarPosition(scrollPos); diff --git a/src/toolbar.cpp b/src/toolbar.cpp index 4d0b883..bf6b59c 100644 --- a/src/toolbar.cpp +++ b/src/toolbar.cpp @@ -68,6 +68,10 @@ static ToolIcon Toolbar[] = { N_("New group extruding active sketch"), {} }, { "lathe", Command::GROUP_LATHE, N_("New group rotating active sketch"), {} }, + { "helix", Command::GROUP_HELIX, + N_("New group helix from active sketch"), {} }, + { "revolve", Command::GROUP_REVOLVE, + N_("New group revolve active sketch"), {} }, { "step-rotate", Command::GROUP_ROT, N_("New group step and repeat rotating"), {} }, { "step-translate", Command::GROUP_TRANS, @@ -153,7 +157,7 @@ bool GraphicsWindow::ToolbarDrawOrHitTest(int mx, int my, UiCanvas *canvas, // When changing these values, also change the asReference drawing code in drawentity.cpp. int fudge = 8; - int h = 34*16 + 3*16 + fudge; + int h = 32*18 + 3*16 + fudge; int aleft = 0, aright = 66, atop = y+16+fudge/2, abot = y+16-h; bool withinToolbar = diff --git a/src/ui.h b/src/ui.h index 8bdd701..026d57d 100644 --- a/src/ui.h +++ b/src/ui.h @@ -80,6 +80,7 @@ enum class Command : uint32_t { ZOOM_OUT, ZOOM_TO_FIT, SHOW_GRID, + DIM_SOLID_MODEL, PERSPECTIVE_PROJ, ONTO_WORKPLANE, NEAREST_ORTHO, @@ -532,6 +533,7 @@ public: Platform::MenuRef linkRecentMenu; Platform::MenuItemRef showGridMenuItem; + Platform::MenuItemRef dimSolidModelMenuItem; Platform::MenuItemRef perspectiveProjMenuItem; Platform::MenuItemRef showToolbarMenuItem; Platform::MenuItemRef showTextWndMenuItem; @@ -803,6 +805,7 @@ public: DrawOccludedAs drawOccludedAs; bool showSnapGrid; + bool dimSolidModel; void DrawSnapGrid(Canvas *canvas); void AddPointToDraggedList(hEntity hp); @@ -825,7 +828,7 @@ public: void MouseLeftDoubleClick(double x, double y); void MouseMiddleOrRightDown(double x, double y); void MouseRightUp(double x, double y); - void MouseScroll(double x, double y, int delta); + void MouseScroll(double x, double y, double delta); void MouseLeave(); bool KeyboardEvent(Platform::KeyboardEvent event); void EditControlDone(const std::string &s); diff --git a/test/analysis/contour_area/normal.png b/test/analysis/contour_area/normal.png index 486fcdc..3b50df9 100644 Binary files a/test/analysis/contour_area/normal.png and b/test/analysis/contour_area/normal.png differ diff --git a/test/constraint/angle/skew.png b/test/constraint/angle/skew.png index 97fb0db..92d7577 100644 Binary files a/test/constraint/angle/skew.png and b/test/constraint/angle/skew.png differ diff --git a/test/core/path/test.cpp b/test/core/path/test.cpp index 9263956..86accf1 100644 --- a/test/core/path/test.cpp +++ b/test/core/path/test.cpp @@ -83,6 +83,7 @@ TEST_CASE(extension) { } TEST_CASE(with_extension) { + CHECK_EQ_STR(Path::From("foo.bar").WithExtension("").raw, "foo"); CHECK_EQ_STR(Path::From("foo.bar").WithExtension("baz").raw, "foo.baz"); CHECK_EQ_STR(Path::From("foo").WithExtension("baz").raw, "foo.baz"); }