diff --git a/.github/workflows/post_merge_profiles.yml b/.github/workflows/post_merge_profiles.yml index 04ffd0429f..fdf01e149f 100644 --- a/.github/workflows/post_merge_profiles.yml +++ b/.github/workflows/post_merge_profiles.yml @@ -303,7 +303,7 @@ jobs: - name: Mint profiles-repo token id: token if: steps.vendors.outputs.vendors != '' - uses: actions/create-github-app-token@v1 + uses: actions/create-github-app-token@v3 with: app-id: ${{ secrets.PROFILES_APP_ID }} private-key: ${{ secrets.PROFILES_APP_PRIVATE_KEY }} diff --git a/.github/workflows/pr-label-bot.yml b/.github/workflows/pr-label-bot.yml index 199b4dd7e7..f323d0e400 100644 --- a/.github/workflows/pr-label-bot.yml +++ b/.github/workflows/pr-label-bot.yml @@ -96,7 +96,7 @@ jobs: issues: write runs-on: ubuntu-latest steps: - - name: Auto-label and remind about the localization glossary + - name: Auto-label localization changes and remind contributors about the glossary uses: actions/github-script@v9 with: script: | @@ -106,37 +106,37 @@ jobs: const pr = context.payload.pull_request; - // List changed files once (mirrors the `localization/**` paths filter in check_locale.yml) + // Mirrors the `localization/**` paths filter in check_locale.yml const files = await github.paginate(github.rest.pulls.listFiles, { owner: context.repo.owner, repo: context.repo.repo, pull_number: pr.number, per_page: 100 }); - const touchesLocalization = files.some((file) => file.filename.startsWith('localization/')); - const onlyPoFiles = files.length > 0 && files.every((file) => file.filename.endsWith('.po')); + if (!files.some((file) => file.filename.startsWith('localization/'))) { + core.info('No localization changes detected; skipping Localization label.'); + return; + } - // If the PR changes only .po files, automatically apply the Localization label - if (onlyPoFiles) { - try { - await github.rest.issues.addLabels({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: pr.number, - labels: ['Localization'] - }); - core.info('Applied Localization label (PR changes only .po files).'); - } catch (error) { - if (isPermissionDenied(error)) { - core.warning('Cannot add Localization label because token cannot write.'); - } else { - throw error; - } + try { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number, + labels: ['Localization'] + }); + core.info('Applied Localization label.'); + } catch (error) { + if (isPermissionDenied(error)) { + core.warning('Cannot add Localization label because token cannot write.'); + } else { + throw error; } } - if (!touchesLocalization) { - core.info('No localization changes detected; skipping glossary reminder.'); + // Collaborators know the glossary; only remind outside contributors + if (['COLLABORATOR', 'OWNER', 'MEMBER'].includes(pr.author_association)) { + core.info('Author is a collaborator; skipping glossary reminder.'); return; } diff --git a/.github/workflows/update-translation.yml b/.github/workflows/update-translation.yml index 674b6bfc50..57a99eda73 100644 --- a/.github/workflows/update-translation.yml +++ b/.github/workflows/update-translation.yml @@ -13,7 +13,7 @@ jobs: uses: actions/checkout@v7 - name: Setup Python - uses: actions/setup-python@v6 + uses: actions/setup-python@v7 with: python-version: '3.12' diff --git a/docs/CAD/design/SKETCHER_TOOL_ARCHITECTURE.md b/docs/CAD/design/SKETCHER_TOOL_ARCHITECTURE.md index a9659ac4b0..b450835daa 100644 --- a/docs/CAD/design/SKETCHER_TOOL_ARCHITECTURE.md +++ b/docs/CAD/design/SKETCHER_TOOL_ARCHITECTURE.md @@ -262,9 +262,9 @@ and a band is not a "gesture" in the `CadLevel::Gesture` sense because nothing h |---|---|---|---|---|---| | `Move` | — | `update_hover` / `update_solid_hover` (**non-consuming**, returns false) | — | passthrough | hover only asks for a repaint, `:10022-10025` | | `LeftDown` | orbit may begin | latch press, **return false** | — | consume-or-orbit is the canvas's call | `:10058-10063`; consuming here killed orbit once already | -| `LeftDrag` > 8 px | — | start + drive band, **consume** | — | no longer orbits in this canvas | middle-drag orbits, right-drag pans (`:10013-10016`) | +| `LeftDrag` > 8 px | — | start + drive band, **consume**, when Shift is held or the left button has no camera action | — | otherwise the left button's drag action (Preferences > Control) | the band is Prepare's Shift+left-drag rectangle selection | | `LeftUp` | — | commit pick **or** resolve band | — | — | `:10035-10041` | -| `MiddleDrag` / `RightDrag` | — | must not see it | — | orbit / pan | camera gestures never reach the FSM | +| `MiddleDrag` / `RightDrag` | — | must not see it | — | the button's drag action (Preferences > Control) | camera gestures never reach the FSM; a right press reaches the tool only once its release shows it was a click | | `RightClick` | — | — | offer menu | — | `snaporca-xmh6` open: a right-click that only clears the sketch selection eats the offer | | `Esc` | — | — | `escape()` ladder | — | one route whatever holds focus (`:4228-4231`) | | `Del` / `Backspace` | — | `delete_selected_or_last_sketch_entity()` | char hook | — | `:4260` | diff --git a/docs/HLSD/design-tab.md b/docs/HLSD/design-tab.md index c4bb9fd297..9b8010ce2c 100644 --- a/docs/HLSD/design-tab.md +++ b/docs/HLSD/design-tab.md @@ -135,7 +135,7 @@ contract between them is stated in code rather than spread across handlers. | --- | --- | --- | | `Transient` | a value field or a popup menu | closes it; the tool stays armed | | `Gesture` | an uncommitted delta — an entity being drawn, a body being dragged | reverts it; committed work is untouched | -| `Tool` | a feature card, an armed sketch tool, a constrain session | exits it; drawn entities survive | +| `Tool` | a feature card, Sketch waiting for its plane, an armed sketch tool, a constrain session | exits it; drawn entities survive | | `Idle` | nothing transient | clears the selection, a Feature tree or Bodies row included; leaves a sketch session only if it is empty | `cad_escape_level()` is a `constexpr` free function over a POD of four booleans rather than a @@ -149,26 +149,66 @@ explicit selection, the sketch ribbon's Cancel, which asks first, or `Ctrl+Z`. A *session* is deliberately not a `Tool` level; it is the environment the `Idle` level lives in, which makes the destructive path unrepresentable rather than merely unlikely. +A body Move is the one `Gesture` that outlives the press: its gizmo stays up between drags until +Confirm keeps the placement or `Esc` or Cancel puts the body back. Until then the selection is +held — a click off the gizmo only steers the camera — and undo is refused, since the placement +is not in the history. Anything that starts another edit (a feature card, a sketch, placing +imported art or text, another body's Move, a rebuild) keeps the placement, as switching gizmos +keeps a move in Prepare. The panel ends the Move in one place (`DesignPanel::end_body_move`), so +the gizmo, the Move / Rotate card and the ✓/✗ cannot outlive one another. + Right-click is read at button-up against one budget, 3 px of drift, applied to the whole press rather than to its end points: a press that wandered past the budget at any moment is navigation, even if it comes back to where it started, which is what stops a slow, careful orbit from ending in a menu. There is no time budget — a gesture that means something different when it is slow is exactly what the interaction charter rules out. The raycast uses the press -position, not the release. An armed sketch tool that already consumed the right -button (to terminate a chain, say) declines to also open a menu, through a read-and-clear flag. -Past either budget the event is navigation, and navigation does not transition the state -machine. +position, not the release. The sketch tool sees a right press only once the release has shown it +was a click: the press itself goes to the camera, which may pan or orbit with that button, and the +canvas replays it to the tool on a stationary release. A tool that uses the click (to terminate a +chain, say) keeps the menu closed. Past either budget the event is navigation, and navigation +does not transition the state machine. Navigation itself is Prepare's: the camera reads the drag actions set in Preferences > Control -for each button. The left button is shared with picking, so a whole body is swept with a -rectangle on plain left-drag only while no camera action is assigned to it, and with -Shift+left-drag otherwise — Prepare's own rectangle selection. +for each button, and in the Touchpad camera style a move with Alt held orbits and one with Shift +held pans, whatever tool is armed. The left button is shared with picking and drawing, so a tool +handle or a press that draws takes it first, as a gizmo does in Prepare; a whole body is swept +with a rectangle on plain left-drag only while no camera action is assigned to the left button, +and with Shift+left-drag otherwise — Prepare's own rectangle selection. -Entering a sketch changes three things at once so the mode is legible: a banner above the +Entering a sketch changes two things at once so the mode is legible: a banner above the canvas (a sibling of the canvas, not a child over it — on GTK a child window over a -`wxGLCanvas` is a native window and does not reliably stack over GL), the printer bed muted so -a plate grid is never read as a sketch grid, and `N` to look normal to the plane. Code that -changes any of the three belongs with a change to this section. +`wxGLCanvas` is a native window and does not reliably stack over GL), and `N` to look normal to +the plane. The printer bed stays: there is no sketch grid, so the plate grid is the only ground +reference a sketch has. Code that changes either belongs with a change to this section. + +Sketch mode is never entered without a plane under it, so the banner, the sketch keys and the +sketch offer always have a session to act on. Sketch on a picked flat face or reference plane opens +the session on it at once. With nothing picked it stays in Feature mode and waits for one — an +armed `Tool`, left with `Esc` or ✗, and ended by anything that starts another edit — and the +reference plane or flat face clicked next opens the session. A picked plane is a selection like a +face: the sketch on it uses it up, and `Esc` or a click on nothing lets go of it, so a plane that +can no longer be seen never decides where the next sketch goes. + +The reference planes — XY, XZ and YZ through the modeling origin, with their half-axes — are +drawn on demand, because three translucent squares over every model are noise once they are not +the thing being picked. Sketch brings them up while it waits for a plane, which is exactly when +they are picked, and the session the pick opens takes them away; a live session draws none. The +Feature tree's Origin row keeps them up outside a sketch. Its state is a view preference in +AppConfig rather than part of the recipe, so it costs the project format nothing. The Plane tool +keeps its own rule: the planes and the datums as Offset bases, and nothing for the other methods, +where a click on a plane would rewrite the datum's references. The `P` and `A` keys are a +separate, unpickable view helper and do not follow the Origin row. + +The Bed row, under the Origin row, is the printer bed's switch in the same way: it draws or hides +the bed and its plate grid in every mode. It is a view preference in AppConfig too, and the bed is +shown until it is turned off. + +The two rows are view switches, not history, and the tree says so: they sit unframed on the Feature +tree's card, above the features' own framed list, and stay put while the features scroll. A click +never selects either row, since a selected Origin or Bed would have nothing to edit, move or +delete; the eye and the right-click menu are the only targets, and a row's label dims while its +thing is hidden, as a hidden body's does. Because the block never takes the focus, `Ctrl+Shift+O` +and `Ctrl+Shift+B` flip the Origin and the Bed from the keyboard. ## Rendering the bodies @@ -189,6 +229,15 @@ degenerate edges are left out (`GeometryEngine::display_edges`), and the polylin once per shape, keyed by its `TShape`, because a recompute that leaves a body unchanged is the common case. +While a feature card is open, its preview ghost is the whole model the candidate would produce, +drawn translucent over the bodies, so every face the feature leaves alone is in both at the same +depth. The ghost is drawn with a depth bias that pushes it back (`GLVolume::depth_bias`), so on a shared face +the body always wins instead of the two copies z-fighting, and the ghost shows only where the +result reaches past the bodies. Material a feature removes lies inside the old solid and would not +show at all, so the tools whose result mostly coincides with the body — Fillet/Chamfer, Draft, +Hole and the Mate hover — hide the bodies once the preview is valid and draw the result alone, +opaque. + ## Showing what is selected A selection is drawn on the faces it names, never as a tint over the body: a translucent @@ -214,7 +263,17 @@ replay costs up to a recompute, so the panel finds the faces once per row and to generation, off the UI thread, and only while no feature card is open. One selection is live at a time: a viewport pick clears the feature row and a feature row clears the viewport pick, as the Feature tree and Bodies list do between themselves. `Esc`, a click on empty space and an -empty rubber band all let go of it, whichever list or pick made it. +empty rubber band all let go of it, whichever list or pick made it — except while a body Move is +open, which holds the selection until it ends (see the interaction contract). + +Zoom to selection, on a Feature tree or Bodies row and in its right-click menu, frames one thing +along the current view direction, as the canvas's Fit button frames the selection. On a body it +frames the body whole, hidden or not, from its display mesh: the viewport never selects a hidden +body, so the selection cannot stand in for it. On a sketch it frames the sketch's own geometry, +drawn, consumed or suppressed; on any other feature, the faces the feature made, found as the row +highlight finds them and from the same cache. From the offer it frames whatever the selection is, +a body again included. A feature that is not a sketch and makes no faces, such as a datum plane +or a suppressed Extrude, has no Zoom to selection. ## Following the app @@ -231,9 +290,21 @@ The tab is a page of Orca's main window and answers to the same settings as Prep - **Sidebar icons.** Every clickable icon in the sidebar shows a hover chip. The card-header and constraint-row buttons are Orca's self-painted `Button`, because a native button cannot take a hover background on macOS. The Feature tree and Bodies lists are a custom-drawn - `DesignRowList` rather than a `wxTreeCtrl`, so each row carries its own actions — Edit, - Show/hide and Delete on a feature, Move, Show/hide and Delete on a body — and the eye shows - whether that row is hidden. + `DesignRowList` rather than a `wxTreeCtrl`, so each row carries its own actions — Zoom to + selection, Edit, Show/hide and Delete on a feature, Zoom to selection, Move, Show/hide and + Delete on a body, and only Show/hide on the Origin and Bed rows, a separate non-selectable list + above the features — and the eye shows whether that row is hidden. A feature with nothing to + frame keeps a blank cell where Zoom to selection would be, so every icon stays in its column. +- **Plates.** This is the one thing the tab does not follow. The canvas has a bed of its own at + the printer bed's home position, whichever plate Prepare has current, and a new document's + modeling origin is that bed's centre. A bed that followed the current plate would slide out + from under a design: the origin is fixed once per document, baked into every sketch plane and + saved in the recipe, while the current plate can change between visits. Commit to Plate does + not need it either, since the committed object is placed on an empty spot of the current + plate. What the canvas does read from the plate is moved onto its bed: the exclude areas, the + plate box the camera orbits about when nothing is picked (`GLCanvas3D::_current_plate_box`), + and the first view, which starts from Prepare's camera turned to the tab's iso view: the CAD + isometric from the front-right corner that Home returns to, not Prepare's front-left one. - **Viewport text.** The status line and the active tool's values are drawn by the canvas in its ImGui pass, so they go with the canvas: a top-level window over GL does not follow its frame and was left floating over other applications. @@ -256,12 +327,12 @@ permanent row index, verbs that do not apply shown disabled **in place with thei rather than removed. The invariant is that a verb's row index is identical in every selection where it appears and that adding a verb never moves an existing one — the hand learns the position, so the menu is never re-sorted, compacted or adaptively ordered. Above the families -sits one *flat* row, holding Rename and Color — what a selection is opened for most: its verbs are -items of their own at the top of the menu rather than a family's submenu. It is appended after -the eight, so it moved no existing index, and it reads the same from the viewport and from a row -of the Bodies list. +sits one *flat* row, holding Rename, Color and Zoom to selection — what a selection is opened for +most: its verbs are items of their own at the top of the menu rather than a family's submenu. It +is appended after the eight, so it moved no existing index, and it reads the same from the +viewport and from a row of the Bodies list. -An invariant across 92 verbs and 20 selection kinds does not survive by review, so the map +An invariant across 93 verbs and 20 selection kinds does not survive by review, so the map exists once, as data: `scripts/CAD/tool_atlas.json` carries every verb with its row, key, icon, accepted selections, preconditions and refusal string, and `scripts/CAD/gen_offer_table.py` emits `src/slic3r/GUI/CAD/DesignOffer.hpp` from it. The header is checked in and never diff --git a/docs/HLSD/prusa-indx-profiles.md b/docs/HLSD/prusa-indx-profiles.md index 272e5bb5aa..77a398b2d5 100644 --- a/docs/HLSD/prusa-indx-profiles.md +++ b/docs/HLSD/prusa-indx-profiles.md @@ -36,8 +36,13 @@ override is not available in these profiles. The source's `EXCLUDE_E_START` and `EXCLUDE_E_END` internal markers become comments rather than printer commands. Pressure-advance restoration and automatic pressure-advance emission use the -selected filament preset's settings. These profiles do not impose machine-owned -filament overrides. Dock-fan control retains the source's material and layer +selected filament preset's settings. The INDX filament presets include +`fdm_filament_template_indx`, whose start G-code sets the filament's pressure +advance with `M572` and then starts the firmware's automatic calibration with +`M573 R`, the commands PrusaSlicer emits after a tool change; the station purge +disables pressure advance before it. The template also carries Prusa's +multi-tool ramming and a 10 mm³ minimal purge. These profiles do not impose +machine-owned filament overrides. Dock-fan control retains the source's material and layer conditions; shutdown parks the tool and turns off the used heaters and dock fan. ## Configuration boundaries diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 35c0e0bfb6..7a4214f16d 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -3168,7 +3168,7 @@ msgstr "" msgid "Remove parameter" msgstr "" -msgid "to" +msgid "Range" msgstr "" msgid "Add height range" @@ -5064,9 +5064,6 @@ msgstr "" msgid "layers" msgstr "" -msgid "Range" -msgstr "" - msgid "Empty string" msgstr "" @@ -9464,14 +9461,6 @@ msgstr "" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "" -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "" - -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" - msgid "Experimental Features" msgstr "" @@ -9483,6 +9472,14 @@ msgid "" "Highly experimental! Slow and may create artifact." msgstr "" +msgid "Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + msgid "Allow Abnormal Storage" msgstr "" @@ -9645,6 +9642,9 @@ msgstr "" msgid "Please input layer value (>= 2)." msgstr "" +msgid "to" +msgstr "" + msgid "Plate name" msgstr "" @@ -14779,6 +14779,12 @@ msgstr "" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "" +msgid "Fill pattern tops" +msgstr "" + +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "" + msgid "Infill combination - Max layer height" msgstr "" @@ -20421,6 +20427,21 @@ msgstr "" msgid "The filament model is unknown. A random filament preset will be used." msgstr "" +msgid "Hide reference planes and axes" +msgstr "" + +msgid "Show reference planes and axes" +msgstr "" + +msgid "Hide the printer bed and its plate grid" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "" + msgid "Construction" msgstr "" @@ -20506,26 +20527,10 @@ msgstr "" msgid "Bed hidden" msgstr "" -msgid "FEATURES" +msgid "Reference planes shown" msgstr "" -msgid "Sketch" -msgstr "" - -#, possible-c-format, possible-boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "" - -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "" - -#, possible-c-format, possible-boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" - -msgid "Click a face or a reference plane, then a sketch tool." +msgid "Reference planes hidden" msgstr "" msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -20793,12 +20798,6 @@ msgstr "" msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "" -msgid "Import STEP (editable B-rep solid)" -msgstr "" - -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "" - msgid "Constrain selected sketch" msgstr "" @@ -21111,10 +21110,16 @@ msgstr "" msgid "New Design — clear the feature tree" msgstr "" +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + msgid "Export STEP…" msgstr "" -msgid "Show the printer bed and its plate grid" +msgid "Create a new sketch" msgstr "" msgid "Place on Face (F) — lay the picked face on the bed" @@ -21147,6 +21152,9 @@ msgstr "" msgid "Height / Y" msgstr "" +msgid "Sketch" +msgstr "" + msgid "Distance X" msgstr "" @@ -21625,6 +21633,9 @@ msgstr "" msgid "Value" msgstr "" +msgid "Pick a tool, or press Menu for the list." +msgstr "" + msgid "Constraints" msgstr "" @@ -21654,6 +21665,9 @@ msgstr "" msgid "Show / hide" msgstr "" +msgid "Zoom to selection" +msgstr "" + msgid "Check interference — find overlapping bodies" msgstr "" @@ -21711,6 +21725,9 @@ msgstr "" msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "" +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "" + #, possible-c-format, possible-boost-format msgid "Body %d: vertex selected — click again for the whole body" msgstr "" @@ -21753,10 +21770,6 @@ msgstr "" msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" msgstr "" -#, possible-c-format, possible-boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "" - #, possible-c-format, possible-boost-format msgid "%s plane selected — right-click to sketch on it, or click an object to select it" msgstr "" @@ -21811,7 +21824,7 @@ msgstr "" msgid "Text unchanged" msgstr "" -msgid "Text cancelled" +msgid "Text canceled" msgstr "" msgid "Import SVG" @@ -22431,7 +22444,7 @@ msgstr "" msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -22463,12 +22476,25 @@ msgstr "" msgid "Finding the feature's faces…" msgstr "" -msgid "Select a body first — click it in the viewport or the Bodies list" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%s has nothing on show to zoom to" msgstr "" msgid "That body has no display mesh yet — recompute first" msgstr "" +msgid "Select something to zoom to" +msgstr "" + +msgid "Finish or cancel what is open first" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "" @@ -22488,9 +22514,6 @@ msgstr "" msgid "Placed on face — body laid flat on the bed" msgstr "" -msgid "Finish or cancel what is open first" -msgstr "" - #, possible-c-format, possible-boost-format msgid "Edit rejected: %s" msgstr "" @@ -22839,6 +22862,16 @@ msgstr "" msgid "Line E%d" msgstr "" +#, possible-c-format, possible-boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + msgid "Plane ready" msgstr "" @@ -23055,7 +23088,10 @@ msgctxt "Design" msgid "Sketch" msgstr "" -msgid "Click a face or a reference plane, then pick a drawing tool" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "" + +msgid "Sketch on the selected flat face or plane, or click one next" msgstr "" msgctxt "Design" @@ -23125,9 +23161,6 @@ msgctxt "Design" msgid "Hole" msgstr "" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - msgctxt "Design" msgid "Thread" msgstr "" @@ -23290,6 +23323,13 @@ msgstr "" msgid "Set the selected body's display color" msgstr "" +msgctxt "Design" +msgid "Zoom to selection" +msgstr "" + +msgid "Frame the selection in the view, keeping the view direction" +msgstr "" + msgctxt "Design" msgid "Delete" msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 7c9c213c8a..b54974f840 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -3476,8 +3476,8 @@ msgstr "Perfil de processament addicional" msgid "Remove parameter" msgstr "Suprimeix el paràmetre" -msgid "to" -msgstr "a" +msgid "Range" +msgstr "Rang" msgid "Add height range" msgstr "Afegir un interval d'alçada" @@ -5544,9 +5544,6 @@ msgstr "nom del paràmetre" msgid "layers" msgstr "capes" -msgid "Range" -msgstr "Rang" - msgid "Empty string" msgstr "Cadena buida" @@ -8903,8 +8900,9 @@ msgstr "La impressora connectada és %s. Ha de coincidir amb el perfil del proje msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Voleu sincronitzar la informació de la impressora i canviar automàticament el perfil?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Aquest projecte conté un model creat a la pestanya Disseny i cap altra geometria. Activeu \"Funció CAD (experimental)\" a Preferències i reinicieu per veure'l i editar-lo; es conserva quan es desa el projecte." msgid "The file does not contain any geometry data." msgstr "El fitxer no conté cap dada de geometria." @@ -9962,8 +9960,9 @@ msgstr "A la pestanya Disseny, dibuixa el connector de relació de posició com msgid "Auto-close sketch loops" msgstr "Tancar automàticament els bucles dels esbossos" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Tracta els extrems d'esbós a menys de 0,001 mm com una sola unió i solda el bucle per tancar-lo. Desactivat: només s'uneixen els extrems exactament coincidents, de manera que un bucle amb una petita obertura es mostra obert en lloc de tancar-se automàticament. Es desa amb cada disseny; s'aplica als dissenys començats després del canvi." # AI Translated msgid "Pan" @@ -10420,18 +10419,6 @@ msgstr "Mostrar els perfils no compatibles" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Mostra els perfils incompatibles o no compatibles a les llistes desplegables d'impressora i de filament. Aquests perfils no es poden seleccionar." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Experimental) Utilitza agents d'impressora en lloc d'amfitrions d'impressió" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Envia els treballs d'impressió de les impressores que no són Bambu a través dels agents de connector d'impressora en lloc del flux clàssic de pujada a l'amfitrió d'impressió.\n" -"Quan està desactivat, OrcaSlicer utilitza el comportament antic de l'amfitrió d'impressió." - # AI Translated msgid "Experimental Features" msgstr "Funcions experimentals" @@ -10448,6 +10435,18 @@ msgstr "" "Intenta conservar les característiques pintades (color/costura/suport/pell difusa, etc.) després de canviar la malla de l'objecte (com ara tallar, recarregar des del disc, simplificar, reparar, etc.).\n" "Molt experimental! És lent i pot generar defectes." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Utilitza agents d'impressora en lloc d'amfitrions d'impressió" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Envia els treballs d'impressió de les impressores que no són Bambu a través dels agents de connector d'impressora en lloc del flux clàssic de pujada a l'amfitrió d'impressió.\n" +"Quan està desactivat, OrcaSlicer utilitza el comportament antic de l'amfitrió d'impressió." + msgid "Allow Abnormal Storage" msgstr "Permet emmagatzematge anormal" @@ -10619,6 +10618,9 @@ msgstr "Seqüència d'impressió de l'altra capa" msgid "Please input layer value (>= 2)." msgstr "Introduïu el valor de capa (>= 2)." +msgid "to" +msgstr "a" + msgid "Plate name" msgstr "Nom de la placa" @@ -16564,6 +16566,14 @@ msgstr "Farciment simètric eix Y" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Si el model té dues parts simètriques respecte a l'eix Y i voleu que aquestes parts tinguin textures simètriques, feu clic en aquesta opció en una de les parts." +# AI Translated +msgid "Fill pattern tops" +msgstr "Omplir les parts superiors del patró" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Trieu aquesta opció si voleu omplir completament les parts superiors del patró de farciment" + msgid "Infill combination - Max layer height" msgstr "Combinació de farciment: alçada màxima de la capa" @@ -22974,6 +22984,26 @@ msgstr "El filament pot no ser compatible amb la configuració actual de la màq msgid "The filament model is unknown. A random filament preset will be used." msgstr "El model de filament és desconegut. S'utilitzarà un perfil de filament aleatori." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Amagar els plans de referència i els eixos" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Mostrar els plans de referència i els eixos" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Amagar el llit de la impressora i la quadrícula de la placa" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Mostrar el llit de la impressora i la quadrícula de la placa" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Feu clic en un pla de referència o en una cara plana per dibuixar-hi un esbós — Esc cancel·la" + # AI Translated msgid "Construction" msgstr "Construcció" @@ -22999,8 +23029,9 @@ msgstr "Cercle — feu clic al centre i després al radi" msgid "Arc — click start, end, then a point" msgstr "Arc — feu clic a l'inici, al final i després a un punt" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Ranura — dos extrems de la línia central i després l'amplada" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -23074,8 +23105,9 @@ msgstr "Eixos globals visibles" msgid "World axes hidden" msgstr "Eixos globals amagats" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Vista axonomètrica, ajustada" # AI Translated msgid "Bed shown" @@ -23086,34 +23118,12 @@ msgid "Bed hidden" msgstr "Llit amagat" # AI Translated -msgid "FEATURES" -msgstr "OPERACIONS" +msgid "Reference planes shown" +msgstr "Plans de referència visibles" # AI Translated -msgid "Sketch" -msgstr "Esbós" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Pla de l'esbós: %s — trieu una eina" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Feu clic a una cara o a un pla de referència a la vista i després a una eina d'esbós" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Pla de l'esbós: %s.\n" -"Trieu una eina o premeu Menú per veure la llista." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Feu clic a una cara o a un pla de referència i després a una eina d'esbós." +msgid "Reference planes hidden" +msgstr "Plans de referència amagats" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -23299,8 +23309,9 @@ msgstr "Eix" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Eix de referència (dos punts, normal d'una cara, eix d'un cilindre, dos plans, al llarg d'una aresta)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Sistema de coordenades" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -23364,8 +23375,9 @@ msgstr "El mirall necessita un cos — primer afegiu-ne o importeu-ne un" msgid "Mate" msgstr "Relació de posició" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Assemblatge: alinear dos sistemes de coordenades (fixa, plana, giratòria, lliscant, cilíndrica)" # AI Translated msgid "Boolean (combine bodies)" @@ -23464,14 +23476,6 @@ msgstr "Roscar una superfície cilíndrica (forat interior / exterior) o una are msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Trieu una superfície cilíndrica (forat / exterior) o una aresta circular per a la rosca" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Importar STEP (sòlid B-rep editable)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Importar una malla (STL/OBJ) com a sòlid B-rep editable" - # AI Translated msgid "Constrain selected sketch" msgstr "Restringir l'esbós seleccionat" @@ -23504,8 +23508,9 @@ msgstr "Feu clic a l'inici i després al final — després establiu la longitud msgid "Polyline" msgstr "Polilínia" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Feu clic als punts; feu clic al primer punt per tancar el bucle, clic dret o Retorn per acabar la cadena" # AI Translated msgid "Corner rectangle" @@ -23595,8 +23600,9 @@ msgstr "Feu clic al centre, després a l'inici i després a un punt per a l'angl msgid "Slot" msgstr "Ranura" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Feu clic als dos extrems de la línia central i després a un punt per a l'amplada" # AI Translated msgid "Arc slot" @@ -23626,8 +23632,9 @@ msgstr "Feu clic al centre, a l'extrem de l'eix major, al punt de l'eix menor i msgid "Spline" msgstr "Spline" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Feu clic als punts de control; doble clic, clic dret o Retorn per acabar" # AI Translated msgid "Click to place a point" @@ -23681,15 +23688,17 @@ msgstr "Trieu una línia d'eix de mirall i després les entitats a reflectir; fe msgid "Trim" msgstr "Retallar" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Feu clic en un segment per retallar-lo fins a la intersecció més propera; Esc surt" # AI Translated msgid "Extend" msgstr "Allargar" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Feu clic en una línia o un arc per allargar-lo fins a l'entitat més propera; Esc surt" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23873,13 +23882,21 @@ msgstr "Distància vertical" msgid "New Design — clear the feature tree" msgstr "Disseny nou — buidar l'arbre d'operacions" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Importar STEP (sòlid B-rep editable)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Importar una malla (STL/OBJ) com a sòlid B-rep editable" + # AI Translated msgid "Export STEP…" msgstr "Exportar STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Mostrar el llit de la impressora i la quadrícula de la placa" +msgid "Create a new sketch" +msgstr "Crear un esbós nou" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23893,20 +23910,25 @@ msgstr "Vista de secció — amagar part del model per veure'n l'interior. RePà msgid "Flip Section — show the opposite half" msgstr "Invertir la secció — mostrar la meitat oposada" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Triar com s'envien els cossos amb Enviar a la placa" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Enviar a la placa" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Tots els cossos es converteixen en un únic objecte amb una peça per cos, conservant-ne les posicions relatives" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Enviar a la placa (com a cossos)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Cada cos es converteix en un objecte propi, col·locat per separat" # AI Translated msgid "Width / X" @@ -23916,6 +23938,10 @@ msgstr "Amplada / X" msgid "Height / Y" msgstr "Alçada / Y" +# AI Translated +msgid "Sketch" +msgstr "Esbós" + # AI Translated msgid "Distance X" msgstr "Distància X" @@ -24119,8 +24145,9 @@ msgstr "Circular" msgid "Direction" msgstr "Direcció" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Angle total (°)" # AI Translated msgid "Boolean" @@ -24504,11 +24531,13 @@ msgstr "Cilíndrica — eixos col·lineals; gir lliure + lliscament axial" msgid "Kind" msgstr "Tipus" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (fix)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (es mou)" # AI Translated msgid "Angle °" @@ -24546,6 +24575,10 @@ msgstr "(cap vinculació)" msgid "Value" msgstr "Valor" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Trieu una eina o premeu Menú per veure la llista." + # AI Translated msgid "Constraints" msgstr "Restriccions" @@ -24584,6 +24617,10 @@ msgstr "Moure avall" msgid "Show / hide" msgstr "Mostrar / amagar" +# AI Translated +msgid "Zoom to selection" +msgstr "Zoom a la selecció" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Comprovar interferències — trobar cossos superposats" @@ -24605,14 +24642,17 @@ msgstr "Cos %d seleccionat — feu clic dret per veure què s'hi pot aplicar" msgid "Variables" msgstr "Variables" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Afegir variable" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Editar la variable" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Suprimir la variable" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24631,9 +24671,10 @@ msgstr "Esbós actualitzat" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Esbós creat (%zu cotes motrius) — seleccioneu-lo i feu clic dret per fer una extrusió" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Longitud %.2f mm, angle %.1f°" # AI Translated msgid "(locked)" @@ -24655,6 +24696,10 @@ msgstr "Regió seleccionada — feu clic dret per fer una extrusió, o doble cli msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Esbós seleccionat — feu clic dret per fer una extrusió, o doble clic per editar" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Aquesta cara no és plana — feu clic en una cara plana o en un pla de referència" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24683,30 +24728,29 @@ msgstr "Cos %d: cara %d seleccionada — feu clic dret per empènyer-la/estirar- msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Cara %d seleccionada — feu clic dret per empènyer-la/estirar-la, o feu clic de nou per seleccionar tot el cos" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Cos %d: %zu aresta seleccionada — Majúscules+clic n'afegeix o en treu una, Arrodoniment/Xamfrà les acaba totes" +msgstr[1] "Cos %d: %zu arestes seleccionades — Majúscules+clic n'afegeix o en treu una, Arrodoniment/Xamfrà les acaba totes" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "%zu aresta seleccionada — Majúscules+clic n'afegeix o en treu una, Arrodoniment/Xamfrà les acaba totes" +msgstr[1] "%zu arestes seleccionades — Majúscules+clic n'afegeix o en treu una, Arrodoniment/Xamfrà les acaba totes" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "Pla %s seleccionat — feu clic dret per a les eines de dibuix" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Cos %d: aresta %d seleccionada — Majúscules+clic per afegir arestes, o feu clic de nou per seleccionar tot el cos" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Aresta %d seleccionada — Majúscules+clic per afegir arestes, o feu clic de nou per seleccionar tot el cos" # AI Translated #, c-format, boost-format @@ -24731,8 +24775,9 @@ msgstr "S'ha sortit de l'eina" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Esbós conservat — Confirmar per aplicar-lo, Cancel·lar per descartar-lo" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Seleccioneu alguna cosa per suprimir-la" # AI Translated msgid "✗ Conflicting constraints" @@ -24764,17 +24809,21 @@ msgstr "Editant: Esbós %d · N = mirar perpendicular al pla · Confirma msgid "OK — %zu triangles" msgstr "D'acord — %zu triangles" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Editeu el text — Retorn aplica, Esc el deixa com estava" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Escriviu el text — apareix a la vista mentre escriviu; Retorn l'insereix, Esc cancel·la" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Text sense canvis" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Text cancel·lat" # AI Translated msgid "Import SVG" @@ -24800,9 +24849,10 @@ msgstr "Llegint STEP…" msgid "No solids found in STEP" msgstr "No s'han trobat sòlids al STEP" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "La importació STEP ha fallat: %s" # AI Translated msgid "Rebuilding model…" @@ -24827,9 +24877,10 @@ msgstr "Fitxers de malla (*.stl;*.obj)|*.stl;*.obj|Tots els fitxers|*.*" msgid "Could not read the STL file" msgstr "No s'ha pogut llegir el fitxer STL" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "No s'ha pogut llegir el fitxer OBJ: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -24854,20 +24905,23 @@ msgstr "" msgid "Large mesh" msgstr "Malla gran" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "La conversió de la malla ha fallat: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "La conversió de la malla no ha produït cap geometria" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Malla" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "La importació de la malla ha fallat: %s" # AI Translated #, c-format, boost-format @@ -24896,17 +24950,19 @@ msgstr " — arrossegueu per col·locar/dimensionar i després confirmeu" msgid "Insert canceled" msgstr "Inserció cancel·lada" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Arrossegueu una cantonada per escalar i el centre per moure — Retorn o ✓ quan acabeu, Esc per descartar" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Esbós afegit (pla: %s) — seleccioneu-lo i feu clic dret per fer una extrusió" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "No s'ha pogut reconstruir el model: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -24978,18 +25034,21 @@ msgstr "Primer trieu un esbós amb una línia oberta" msgid "Add at least one face to delete first" msgstr "Primer afegiu almenys una cara per suprimir" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "La relació de posició necessita dos sistemes de coordenades — primer creeu-los" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Relació de posició: A i B han de ser sistemes de coordenades diferents" # AI Translated msgid "Mate rejected" msgstr "Relació de posició rebutjada" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "La comprovació d'interferències necessita almenys dos cossos" # AI Translated msgid "No interference found" @@ -25000,36 +25059,43 @@ msgstr "No s'ha trobat cap interferència" msgid "Body %d" msgstr "Cos %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu parell superposat: %s" +msgstr[1] "%zu parells superposats: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Seleccioneu un cos per mesurar-lo" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "No s'ha pogut mesurar aquest cos" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: cos de superfície, àrea %.2f mm², sense volum — engruixiu-lo per obtenir-ne" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: volum %.2f mm³, àrea %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "La matriu necessita un cos sòlid — primer afegiu-ne o importeu-ne un" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "L'operació booleana necessita dos cossos — afegiu-ne o importeu-ne un segon" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -25044,35 +25110,45 @@ msgstr "Cara triada (Cos %d)" msgid "Picked face" msgstr "Cara triada" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "no s'ha pogut unir la nova forma al cos" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "no s'ha pogut retallar la nova forma del cos" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "no s'ha pogut fer la intersecció de les formes" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "encara no hi ha res a l'historial que creï un sòlid" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "el perfil de l'esbós no és un bucle tancat net" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "l'eina no toca el cos" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "una expressió utilitza una variable que no existeix" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "una expressió divideix per zero" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "dues variables es defineixen l'una en funció de l'altra" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "ha fallat una operació geomètrica" # AI Translated #, c-format, boost-format @@ -25111,15 +25187,17 @@ msgstr "Cota — feu clic al segon punt" msgid "Line — click the start point" msgstr "Línia — feu clic al punt inicial" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Línia — feu clic al punt final; després se'n poden escriure la longitud i l'angle" # AI Translated msgid "Polyline — click the first point" msgstr "Polilínia — feu clic al primer punt" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Polilínia — feu clic al punt següent · feu clic al punt inicial per tancar-la · clic dret, doble clic o Retorn per acabar la cadena" # AI Translated msgid "Rectangle — click one corner" @@ -25165,8 +25243,9 @@ msgstr "Rectangle arrodonit — feu clic per establir el radi de les cantonades" msgid "Circle — click the center" msgstr "Cercle — feu clic al centre" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Cercle — feu clic per establir el radi; després es pot escriure" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -25292,18 +25371,21 @@ msgstr "Arc el·líptic — feu clic on acaba l'arc" msgid "Spline — click the first control point" msgstr "Spline — feu clic al primer punt de control" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline — feu clic al punt de control següent · clic dret, doble clic o Retorn per acabar la corba" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Punt — feu clic per col·locar-ne un; l'eina continua activa per a més" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Retallar — feu clic en un segment on creua una altra entitat · Esc per sortir" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Allargar — feu clic en una línia o un arc per allargar-lo fins a l'entitat més propera · Esc per sortir" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -25313,8 +25395,9 @@ msgstr "Arrodoniment — feu clic a la primera de dues línies que es troben" msgid "Fillet — click the second line" msgstr "Arrodoniment — feu clic a la segona línia" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Arrodoniment — arrossegueu la fletxa, o feu clic al número per escriure el radi · Retorn aplica · Esc cancel·la" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -25324,63 +25407,74 @@ msgstr "Xamfrà — feu clic a la primera de dues línies que es troben" msgid "Chamfer — click the second line" msgstr "Xamfrà — feu clic a la segona línia" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Xamfrà — arrossegueu la fletxa, o feu clic al número per escriure la distància · Retorn aplica · Esc cancel·la" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Desplaçament — feu clic en una corba; es desplaça tot el seu contorn" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Desplaçament — arrossegueu la fletxa cap a qualsevol costat, o feu clic al número per escriure la distància · Retorn aplica · Esc cancel·la" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Mirall — primer feu clic a la LÍNIA respecte a la qual reflectir (serveix una línia de construcció)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Mirall — eix definit · ara feu clic a les entitats a reflectir · Esc cancel·la" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Mirall — eix definit · %d a reflectir · feu clic en una altra per afegir-la o treure-la · Retorn aplica" # AI Translated msgid "Move — click the entities to move" msgstr "Moure — feu clic a les entitats a moure" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Moure — arrossegueu la nansa, o feu clic al número per escriure la distància · Retorn aplica" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Rotar — feu clic a les entitats a rotar" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Rotar — arrossegueu la nansa, o feu clic al número per escriure l'angle · Retorn aplica" # AI Translated msgid "Scale — click the entities to scale" msgstr "Escalar — feu clic a les entitats a escalar" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Escalar — arrossegueu la nansa, o feu clic al número per escriure el factor · Retorn aplica" # AI Translated msgid "Array — click the entities to repeat" msgstr "Matriu — feu clic a les entitats a repetir" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Matriu — arrossegueu la nansa per establir el pas, feu clic al nombre per escriure'l · Retorn aplica" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Matriu polar — feu clic a les entitats a repetir" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Matriu polar — arrossegueu la nansa per establir l'angle total, feu clic al nombre per escriure'l · Retorn aplica" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Arrossegueu una cantonada per escalar i el centre per moure · Retorn o ✓ quan acabeu, Esc per descartar" # AI Translated msgid " · Esc goes back to Select" @@ -25390,62 +25484,77 @@ msgstr " · Esc torna a Seleccionar" msgid " · click a constraint badge to remove it" msgstr " · feu clic a la insígnia d'una restricció per eliminar-la" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — cos sòlid" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — cos de superfície" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Cara plana %d de %s" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Cara cilíndrica %d de %s" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Cara %d de %s" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu aresta de %s" +msgstr[1] "%zu arestes de %s" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Aresta recta %d de %s" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Aresta circular %d de %s" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Vèrtex de %s" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Perfil d'esbós" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Esbós — res seleccionat" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Línia d'esbós" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Corba d'esbós" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Punt d'esbós" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d entitats d'esbós" # AI Translated msgid "select something first" @@ -25508,8 +25617,9 @@ msgstr "Pla afegit — trieu-lo com a pla d'esbós" msgid "Axis added" msgstr "Eix afegit" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Sistema de coordenades afegit" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -25526,10 +25636,10 @@ msgstr "El desmoldeig necessita una cara triada — primer feu clic en una cara # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Encara no hi ha res — importeu un STEP o una malla des de la barra d'eines,\n" -"o feu clic en un pla de referència i feu-hi clic dret per començar un esbós." +"o premeu Esbós i feu clic en un pla de referència per començar un esbós." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -25539,9 +25649,10 @@ msgstr "Encara no hi ha cap sòlid — seleccioneu un esbós i feu-hi clic dret msgid "Could not restore the CAD model from this project" msgstr "No s'ha pogut restaurar el model CAD d'aquest projecte" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "No s'ha pogut restaurar el model CAD: %s" # AI Translated #, c-format @@ -25564,17 +25675,35 @@ msgstr "Vista de secció — es mostra la meitat superior" msgid "Section view — showing the lower half" msgstr "Vista de secció — es mostra la meitat inferior" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "S'estan cercant les cares de l'operació…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Primer seleccioneu un cos — feu-hi clic a la vista o a la llista de cossos" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "S'està reconstruint el model — torneu a fer zoom quan acabi" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s no té res visible per fer-hi zoom" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Aquest cos encara no té malla de visualització — primer recalculeu" +# AI Translated +msgid "Select something to zoom to" +msgstr "Seleccioneu alguna cosa per fer-hi zoom" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Primer acabeu o cancel·leu el que està obert" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Primer seleccioneu un cos — feu-hi clic a la vista o a la llista de cossos" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Arrossegueu les fletxes per moure i els anells per rotar — després confirmeu (Esc cancel·la)" @@ -25600,12 +25729,10 @@ msgstr "Feu clic en una cara del sòlid i després premeu F" msgid "Placed on face — body laid flat on the bed" msgstr "Recolzat sobre la cara — cos col·locat pla sobre el llit" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Edició rebutjada: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25624,9 +25751,10 @@ msgstr "Aquest cos no té cap operació per suprimir — feu servir Disseny nou msgid "feature %d" msgstr "operació %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "S'ha suprimit %s, l'operació a partir de la qual s'ha creat aquest cos — Ctrl+Z la restaura" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -26018,12 +26146,14 @@ msgstr "Fitxers STEP (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP exportat" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "L'exportació STEP ha fallat: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Enviar a la placa (com a cossos) — enviar cada cos a Preparació com a objecte independent" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -26037,19 +26167,36 @@ msgstr "No hi ha res a enviar — primer afegiu una operació" msgid "All bodies hidden — show one before committing" msgstr "Tots els cossos estan amagats — mostreu-ne un abans d'enviar" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu aresta" +msgstr[1] "%zu arestes" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Línia central E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Línia E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Pla de l'esbós: %s — trieu una eina" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Pla de l'esbós: %s.\n" +"Trieu una eina o premeu Menú per veure la llista." # AI Translated msgid "Plane ready" @@ -26059,8 +26206,9 @@ msgstr "Pla a punt" msgid "Axis ready" msgstr "Eix a punt" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Sistema de coordenades a punt" # AI Translated msgid "Helix ready" @@ -26078,9 +26226,10 @@ msgstr "Esbós a punt" msgid "Mate ready" msgstr "Relació de posició a punt" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "No vàlid: %s" # AI Translated #, c-format @@ -26164,110 +26313,139 @@ msgstr "Editar la variable" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "No s'ha pogut eliminar la variable '%s' (probablement encara la referencia l'expressió d'una operació): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" no és un valor que una expressió pugui controlar" # AI Translated msgid "No binding for that field" msgstr "No hi ha cap vinculació per a aquest camp" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "El valor ha de ser més gran que zero" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "El valor no pot ser negatiu (zero vol dir coincident)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Aquesta cota no es pot satisfer — l'esbós està sobrerestringit" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "%1% restricció(ns) ignorada(es) per no poder actuar sobre aquesta geometria (una el·lipse o una corba spline, o un cercle de mida zero)" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Aquest perfil es creua o es replega sobre si mateix a la marca vermella, de manera que no delimita una única regió" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Costat" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Semieix major" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Semieix menor" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "L'angle ha d'estar entre 0° i 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "El semieix major no pot ser més curt que el semieix menor" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "El radi de cantonada ha de ser inferior a la meitat del costat més curt" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "La ranura és massa ampla per al seu radi — l'amplada ha de ser inferior al doble del radi" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1%: no es pot satisfer — l'esbós està sobrerestringit" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Aquestes dues línies no es troben en una cantonada — trieu dues línies que sí que s'hi trobin" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "La mida ha de ser més gran que zero" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Arrodoniment: el radi sobrepassa un dels costats, o les dues línies no es troben en una cantonada" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Xamfrà: la distància sobrepassa un dels costats, o les dues línies no es troben en una cantonada" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "%1% restricció(ns) eliminada(es) en quedar invalidada(es) per l'arrodoniment/xamfrà" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Desplaçament: una el·lipse o una spline no té cap paral·lela del mateix tipus — trieu línies, arcs o cercles" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "El factor d'escala ha de ser més gran que zero" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Còpies" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "El nombre de còpies ha de ser un nombre enter, 2 o més" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "%1% restricció(ns) alliberada(es) per la transformació" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Les còpies de la matriu queden sense restringir — el solucionador ha rebutjat totes les vinculacions" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "clic dret o doble clic per acabar, clic a l'inici per tancar" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Allargar: feu clic en una línia o un arc que pugui arribar a una altra entitat" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Retallar: feu clic en un segment on creua una altra entitat" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Premeu Retorn o ✓ per aplicar, Esc per descartar" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Encara no hi ha cota per a aquesta entitat — feu clic en una línia, un cercle, un arc o dos punts" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Feu clic en un segon punt, o en una línia per mesurar-hi la distància" # AI Translated msgid "Enter a number" @@ -26303,8 +26481,12 @@ msgid "Sketch" msgstr "Esbós" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Feu clic a una cara o a un pla de referència i després trieu una eina de dibuix" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Seleccioneu una cara plana o un pla de referència per dibuixar-hi un esbós" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Dibuixar un esbós a la cara plana o al pla seleccionats, o fer clic després en una cara o un pla" # AI Translated msgctxt "Design" @@ -26326,9 +26508,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Engruiximent" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Unió" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -26381,17 +26564,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Engruiximent de superfície" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "L'engruiximent de superfície necessita un cos de superfície — primer creeu-ne un amb una eina de superfície" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Forat" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -26406,8 +26587,9 @@ msgctxt "Design" msgid "Split" msgstr "Divisió" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "La divisió necessita un cos sòlid — primer afegiu-ne o importeu-ne un" # AI Translated msgid "Split the body along a picked face into two solids" @@ -26453,8 +26635,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Desplaçament de superfície" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "El desplaçament de superfície necessita un cos de superfície — primer creeu-ne un amb una eina de superfície" # AI Translated msgctxt "Design" @@ -26484,8 +26667,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Matriu sobre corba" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "La matriu sobre corba necessita un cos i una corba" # AI Translated msgid "Repeat the body along a picked curve" @@ -26506,8 +26690,9 @@ msgctxt "Design" msgid "Align to" msgstr "Alinear amb" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "L'alineació necessita un cos — primer afegiu-ne o importeu-ne un" # AI Translated msgid "Align the body to a picked face or plane" @@ -26523,9 +26708,10 @@ msgctxt "Design" msgid "Axis" msgstr "Eix" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Sistema de coordenades" # AI Translated msgctxt "Design" @@ -26541,9 +26727,10 @@ msgstr "Mesurar" msgid "Measure between the picked points, edges or faces" msgstr "Mesurar entre els punts, arestes o cares triats" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Volum i àrea" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -26585,12 +26772,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Suprimir cara" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Color" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Establir el color de visualització del cos seleccionat" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Zoom a la selecció" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Enquadrar la selecció a la vista, mantenint la direcció de la vista" # AI Translated msgctxt "Design" @@ -26629,9 +26827,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Rectangle per cantonades" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Rectangle des del centre" # AI Translated msgctxt "Design" @@ -26643,9 +26842,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Rectangle arrodonit" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Cercle per centre" # AI Translated msgctxt "Design" @@ -26667,9 +26867,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Arc tangent" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Arc per centre" # AI Translated msgctxt "Design" @@ -26701,48 +26902,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Triangle" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Triangle — feu clic al centre i després a un vèrtex" # AI Translated msgctxt "Design" msgid "Square" msgstr "Quadrat" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Quadrat — feu clic al centre i després a un vèrtex" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Pentàgon" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Pentàgon — feu clic al centre i després a un vèrtex" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Hexàgon" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Hexàgon — feu clic al centre i després a un vèrtex" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Octàgon" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Octàgon — feu clic al centre i després a un vèrtex" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Dodecàgon" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Dodecàgon — feu clic al centre i després a un vèrtex" # AI Translated msgctxt "Design" @@ -26772,8 +26979,9 @@ msgctxt "Design" msgid "Text" msgstr "Text" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Escriviu text; es converteix en una operació Text al pla d'aquest esbós, editable més endavant" # AI Translated msgctxt "Design" @@ -26890,27 +27098,34 @@ msgstr "Angle / distància…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Escriviu l'angle entre dues línies o la distància entre els dos elements triats" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Escriviu el text a inserir" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Negreta" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Cursiva" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Aquest tipus de lletra no es pot utilitzar per a text — trieu-ne un altre" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Escriviu el text per veure'n la mida" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Aquest tipus de lletra no té contorn per a aquest text" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Mida: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -27008,8 +27223,9 @@ msgstr "Perfil" msgid "Start new profile (for holes)" msgstr "Començar un perfil nou (per a forats)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segments" # AI Translated msgid "Sides" @@ -27023,20 +27239,23 @@ msgstr "Feu clic al llenç per dibuixar" msgid "Snap to grid" msgstr "Ajustar a la graella" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Pas de la graella" # AI Translated msgid "Outer" msgstr "Exterior" +# AI Translated msgid "closed" -msgstr "" +msgstr "tancat" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% punts %4%" # AI Translated msgid "XY (Top)" @@ -27073,8 +27292,9 @@ msgstr[1] "%zu perfils tancats" msgid "Draw a closed profile to enable" msgstr "Dibuixeu un perfil tancat per activar-ho" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Esborrar-ho tot" # AI Translated msgid "Empty result" @@ -31187,6 +31407,39 @@ msgstr "" "Evitar la deformació( warping )\n" "Sabíeu que quan imprimiu materials propensos a deformar-se, com ara l'ABS, augmentar adequadament la temperatura del llit pot reduir la probabilitat de deformació?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Experimental) Utilitza agents d'impressora en lloc d'amfitrions d'impressió" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "OPERACIONS" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Feu clic a una cara o a un pla de referència a la vista i després a una eina d'esbós" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Feu clic a una cara o a un pla de referència i després a una eina d'esbós." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "Pla %s seleccionat — feu clic dret per a les eines de dibuix" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Encara no hi ha res — importeu un STEP o una malla des de la barra d'eines,\n" +#~ "o feu clic en un pla de referència i feu-hi clic dret per començar un esbós." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Feu clic a una cara o a un pla de referència i després trieu una eina de dibuix" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index e8a087a188..9be7881216 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: \n" "Last-Translator: Jakub Hencl\n" "Language-Team: \n" @@ -3441,8 +3441,8 @@ msgstr "Další procesní předvolba" msgid "Remove parameter" msgstr "Odstranit parametr" -msgid "to" -msgstr "do" +msgid "Range" +msgstr "Rozsah" msgid "Add height range" msgstr "Přidat rozsah výšky" @@ -5509,9 +5509,6 @@ msgstr "název parametru" msgid "layers" msgstr "Vrstvy" -msgid "Range" -msgstr "Rozsah" - msgid "Empty string" msgstr "Prázdný řetězec" @@ -8874,8 +8871,9 @@ msgstr "Připojená tiskárna je %s. Musí odpovídat předvolbě projektu pro t msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Chcete synchronizovat informace o tiskárně a automaticky přepnout předvolbu?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Tento projekt obsahuje model vytvořený na kartě Návrh a žádnou jinou geometrii. Chcete-li jej zobrazit a upravit, zapněte v Předvolbách \"Funkce CAD (experimentální)\" a restartujte aplikaci; při uložení projektu zůstane zachován." msgid "The file does not contain any geometry data." msgstr "Soubor neobsahuje žádná geometrická data." @@ -9928,8 +9926,9 @@ msgstr "Na kartě Návrh kreslit konektor spoje jako malou plochu místo obvykl msgid "Auto-close sketch loops" msgstr "Automaticky uzavírat smyčky náčrtu" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Koncové body náčrtu vzdálené od sebe nejvýše 0,001 mm považovat za jeden bod a smyčku uzavřít. Vypnuto: spojí se pouze přesně totožné koncové body, takže smyčka s drobnou mezerou se zobrazí jako otevřená a nebude automaticky uzavřena. Ukládá se s každým návrhem; platí pro návrhy založené po změně." # AI Translated msgid "Pan" @@ -10382,18 +10381,6 @@ msgstr "Zobrazit nepodporované předvolby" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Zobrazovat nekompatibilní/nepodporované předvolby v rozevíracích seznamech tiskáren a filamentů. Tyto předvolby nelze vybrat." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Experimentální) Používat agenty tiskárny místo tiskových hostů" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Směruje tiskové úlohy pro tiskárny jiné než Bambu přes agenty pluginů tiskárny místo klasického nahrávání na tiskový host.\n" -"Pokud je vypnuto, OrcaSlicer používá původní chování tiskového hosta." - # AI Translated msgid "Experimental Features" msgstr "Experimentální funkce" @@ -10410,6 +10397,18 @@ msgstr "" "Pokusí se zachovat malované prvky (barva/šev/podpory/fuzzy atd.) po změně sítě objektu (například řez / znovunačtení z disku / zjednodušení / oprava atd.)\n" "Vysoce experimentální! Pomalé a může vytvářet artefakty." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Používat agenty tiskárny místo tiskových hostů" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Směruje tiskové úlohy pro tiskárny jiné než Bambu přes agenty pluginů tiskárny místo klasického nahrávání na tiskový host.\n" +"Pokud je vypnuto, OrcaSlicer používá původní chování tiskového hosta." + msgid "Allow Abnormal Storage" msgstr "Povolit neobvyklé úložiště" @@ -10578,6 +10577,9 @@ msgstr "Pořadí filamentů pro jinou vrstvu" msgid "Please input layer value (>= 2)." msgstr "Zadejte hodnotu vrstvy (>= 2)." +msgid "to" +msgstr "do" + msgid "Plate name" msgstr "Název desky" @@ -16534,6 +16536,14 @@ msgstr "Symetrická výplň podle osy Y" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Pokud má model dvě části symetrické podle osy Y a chcete, aby měly symetrické textury, klikněte na tuto možnost u jedné z těchto částí." +# AI Translated +msgid "Fill pattern tops" +msgstr "Vyplnit horní části vzoru" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Zvolte tuto možnost, pokud chcete zcela vyplnit horní části vzoru výplně" + msgid "Infill combination - Max layer height" msgstr "Kombinace výplně – maximální výška vrstvy" @@ -22972,6 +22982,26 @@ msgstr "Filament nemusí být kompatibilní s aktuálním nastavením stroje. Po msgid "The filament model is unknown. A random filament preset will be used." msgstr "Model filamentu je neznámý. Použije se náhodná předvolba filamentu." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Skrýt referenční roviny a osy" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Zobrazit referenční roviny a osy" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Skrýt podložku tiskárny a její mřížku" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Zobrazit podložku tiskárny a její mřížku" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Klikněte na referenční rovinu nebo rovinnou plochu, na které chcete kreslit náčrt — Esc zruší" + # AI Translated msgid "Construction" msgstr "Konstrukční" @@ -22997,8 +23027,9 @@ msgstr "Kružnice — klikněte na střed, pak určete poloměr" msgid "Arc — click start, end, then a point" msgstr "Oblouk — klikněte na začátek, konec a pak na bod" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Drážka — dva konce osy, pak šířka" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -23072,8 +23103,9 @@ msgstr "Globální osy zobrazeny" msgid "World axes hidden" msgstr "Globální osy skryty" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Axonometrický pohled, přizpůsobeno" # AI Translated msgid "Bed shown" @@ -23084,34 +23116,12 @@ msgid "Bed hidden" msgstr "Podložka skryta" # AI Translated -msgid "FEATURES" -msgstr "PRVKY" +msgid "Reference planes shown" +msgstr "Referenční roviny zobrazeny" # AI Translated -msgid "Sketch" -msgstr "Náčrt" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Rovina náčrtu: %s — vyberte nástroj" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "V zobrazovací oblasti klikněte na plochu nebo referenční rovinu, pak na nástroj náčrtu" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Rovina náčrtu: %s.\n" -"Vyberte nástroj nebo stiskněte Menu pro zobrazení seznamu." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Klikněte na plochu nebo referenční rovinu, pak na nástroj náčrtu." +msgid "Reference planes hidden" +msgstr "Referenční roviny skryty" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -23297,8 +23307,9 @@ msgstr "Osa" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Referenční osa (dva body, normála plochy, osa válce, dvě roviny, podél hrany)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Souřadnicový systém" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -23362,8 +23373,9 @@ msgstr "Zrcadlení vyžaduje těleso — nejprve nějaké přidejte nebo importu msgid "Mate" msgstr "Spoj" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Sestava: zarovnat dva souřadnicové systémy (pevný, rovinný, rotační, posuvný, válcový)" # AI Translated msgid "Boolean (combine bodies)" @@ -23462,14 +23474,6 @@ msgstr "Vytvořit závit na válcové ploše (vnitřní otvor / vnější) nebo msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Pro závit vyberte válcovou plochu (otvor / vnější) nebo kruhovou hranu" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Importovat STEP (upravitelné B-rep těleso)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Importovat síť (STL/OBJ) jako upravitelné B-rep těleso" - # AI Translated msgid "Constrain selected sketch" msgstr "Přidat vazby k vybranému náčrtu" @@ -23502,8 +23506,9 @@ msgstr "Klikněte na začátek, pak na konec — pak nastavte přesnou délku" msgid "Polyline" msgstr "Lomená čára" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Klikejte na body; kliknutím na první bod smyčku uzavřete, pravým tlačítkem nebo klávesou Enter řetěz ukončíte" # AI Translated msgid "Corner rectangle" @@ -23593,8 +23598,9 @@ msgstr "Klikněte na střed, pak na začátek a pak na bod určující koncový msgid "Slot" msgstr "Drážka" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Klikněte na dva konce osy, pak na bod určující šířku" # AI Translated msgid "Arc slot" @@ -23624,8 +23630,9 @@ msgstr "Klikněte na střed, konec hlavní osy, bod vedlejší osy a pak na zač msgid "Spline" msgstr "Spline" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Klikejte na řídicí body; dokončete dvojklikem, pravým tlačítkem nebo klávesou Enter" # AI Translated msgid "Click to place a point" @@ -23679,15 +23686,17 @@ msgstr "Vyberte čáru osy zrcadlení, pak entity k zrcadlení; kliknutím do pr msgid "Trim" msgstr "Oříznout" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Klikněte na úsek pro oříznutí k nejbližšímu průsečíku; Esc ukončí" # AI Translated msgid "Extend" msgstr "Prodloužit" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Klikněte na čáru nebo oblouk pro prodloužení k nejbližší entitě; Esc ukončí" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23871,13 +23880,21 @@ msgstr "Svislá vzdálenost" msgid "New Design — clear the feature tree" msgstr "Nový návrh — vymazat strom prvků" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Importovat STEP (upravitelné B-rep těleso)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Importovat síť (STL/OBJ) jako upravitelné B-rep těleso" + # AI Translated msgid "Export STEP…" msgstr "Exportovat STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Zobrazit podložku tiskárny a její mřížku" +msgid "Create a new sketch" +msgstr "Vytvořit nový náčrt" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23891,20 +23908,25 @@ msgstr "Pohled v řezu — skryje část modelu, abyste viděli dovnitř. PageUp msgid "Flip Section — show the opposite half" msgstr "Převrátit řez — zobrazit opačnou polovinu" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Zvolte, jak příkaz Odeslat na desku přenese tělesa" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Odeslat na desku" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Všechna tělesa se stanou jedním objektem s jedním dílem pro každé těleso a zachovají si vzájemnou polohu" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Odeslat na desku (jako tělesa)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Každé těleso se stane samostatným objektem s vlastním umístěním" # AI Translated msgid "Width / X" @@ -23914,6 +23936,10 @@ msgstr "Šířka / X" msgid "Height / Y" msgstr "Výška / Y" +# AI Translated +msgid "Sketch" +msgstr "Náčrt" + # AI Translated msgid "Distance X" msgstr "Vzdálenost X" @@ -24116,8 +24142,9 @@ msgstr "Kruhové" msgid "Direction" msgstr "Směr" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Celkový úhel (°)" # AI Translated msgid "Boolean" @@ -24501,11 +24528,13 @@ msgstr "Válcový — osy kolineární; volné otáčení + axiální posun" msgid "Kind" msgstr "Druh" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (pevný)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (pohyblivý)" # AI Translated msgid "Angle °" @@ -24543,6 +24572,10 @@ msgstr "(žádná propojení)" msgid "Value" msgstr "Hodnota" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Vyberte nástroj nebo stiskněte Menu pro zobrazení seznamu." + # AI Translated msgid "Constraints" msgstr "Vazby" @@ -24581,6 +24614,10 @@ msgstr "Posunout dolů" msgid "Show / hide" msgstr "Zobrazit / skrýt" +# AI Translated +msgid "Zoom to selection" +msgstr "Přiblížit na výběr" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Kontrola kolizí — najít překrývající se tělesa" @@ -24602,14 +24639,17 @@ msgstr "Těleso %d vybráno — pravým tlačítkem zobrazíte dostupné akce" msgid "Variables" msgstr "Proměnné" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Přidat proměnnou" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Upravit proměnnou" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Odstranit proměnnou" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24628,9 +24668,10 @@ msgstr "Náčrt aktualizován" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Náčrt vytvořen (řídicí kóty: %zu) — vyberte ho a pravým tlačítkem zvolte Vysunutí" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Délka %.2f mm, úhel %.1f°" # AI Translated msgid "(locked)" @@ -24652,6 +24693,10 @@ msgstr "Oblast vybrána — pravým tlačítkem zvolte Vysunutí, nebo dvojklike msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Náčrt vybrán — pravým tlačítkem zvolte Vysunutí, nebo dvojklikem upravte" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Tato plocha není rovinná — klikněte na rovinnou plochu nebo referenční rovinu" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24680,32 +24725,31 @@ msgstr "Těleso %d: vybrána plocha %d — pravým tlačítkem ji tlačte/táhn msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Vybrána plocha %d — pravým tlačítkem ji tlačte/táhněte, nebo klikněte znovu pro celé těleso" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Těleso %d: vybrána %zu hrana — Shift+klik jednu přidá nebo odebere, Zaoblení/Zkosení upraví všechny" +msgstr[1] "Těleso %d: vybrány %zu hrany — Shift+klik jednu přidá nebo odebere, Zaoblení/Zkosení upraví všechny" +msgstr[2] "Těleso %d: vybráno %zu hran — Shift+klik jednu přidá nebo odebere, Zaoblení/Zkosení upraví všechny" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "Vybrána %zu hrana — Shift+klik jednu přidá nebo odebere, Zaoblení/Zkosení upraví všechny" +msgstr[1] "Vybrány %zu hrany — Shift+klik jednu přidá nebo odebere, Zaoblení/Zkosení upraví všechny" +msgstr[2] "Vybráno %zu hran — Shift+klik jednu přidá nebo odebere, Zaoblení/Zkosení upraví všechny" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "Vybrána rovina %s — pravým tlačítkem zobrazíte nástroje kreslení" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Těleso %d: vybrána hrana %d — kliknutím se Shiftem přidáte hrany, nebo klikněte znovu pro celé těleso" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Vybrána hrana %d — kliknutím se Shiftem přidáte hrany, nebo klikněte znovu pro celé těleso" # AI Translated #, c-format, boost-format @@ -24730,8 +24774,9 @@ msgstr "Nástroj ukončen" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Náčrt zachován — Potvrdit jej uloží, Zrušit jej zahodí" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Vyberte něco k odstranění" # AI Translated msgid "✗ Conflicting constraints" @@ -24764,17 +24809,21 @@ msgstr "Úpravy: Náčrt %d · N = pohled kolmo k rovině · Potvrdit ne msgid "OK — %zu triangles" msgstr "OK — trojúhelníky: %zu" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Upravte text — Enter použije, Esc ponechá původní" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Napište text — při psaní se zobrazuje v pohledu; Enter vloží, Esc zruší" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Text nezměněn" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Text zrušen" # AI Translated msgid "Import SVG" @@ -24800,9 +24849,10 @@ msgstr "Načítání STEP…" msgid "No solids found in STEP" msgstr "V souboru STEP nebyla nalezena žádná tělesa" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "Import STEP selhal: %s" # AI Translated msgid "Rebuilding model…" @@ -24828,9 +24878,10 @@ msgstr "Soubory sítí (*.stl;*.obj)|*.stl;*.obj|Všechny soubory|*.*" msgid "Could not read the STL file" msgstr "Soubor STL se nepodařilo načíst" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Soubor OBJ se nepodařilo načíst: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -24855,20 +24906,23 @@ msgstr "" msgid "Large mesh" msgstr "Velká síť" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Převod sítě selhal: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "Převod sítě nevytvořil žádnou geometrii" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Síť" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Import sítě selhal: %s" # AI Translated #, c-format, boost-format @@ -24897,17 +24951,19 @@ msgstr " — tažením umístěte/změňte velikost, pak Potvrdit" msgid "Insert canceled" msgstr "Vložení zrušeno" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Tažením rohu změníte měřítko, tažením středu posunete — po dokončení stiskněte Enter nebo ✓, Esc změny zahodí" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Náčrt přidán (rovina: %s) — vyberte ho a pravým tlačítkem zvolte Vysunutí" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Model se nepodařilo přestavět: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -24979,18 +25035,21 @@ msgstr "Nejprve vyberte náčrt s otevřenou čárou" msgid "Add at least one face to delete first" msgstr "Nejprve přidejte alespoň jednu plochu k odstranění" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Spoj vyžaduje dva souřadnicové systémy — nejprve je vytvořte" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Spoj: A a B musí být různé souřadnicové systémy" # AI Translated msgid "Mate rejected" msgstr "Spoj odmítnut" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Kontrola kolizí vyžaduje alespoň dvě tělesa" # AI Translated msgid "No interference found" @@ -25001,37 +25060,44 @@ msgstr "Nebyly nalezeny žádné kolize" msgid "Body %d" msgstr "Těleso %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%zu překrývající se pár: %s" +msgstr[1] "%zu překrývající se páry: %s" +msgstr[2] "%zu překrývajících se párů: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Vyberte těleso, které chcete změřit" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Toto těleso se nepodařilo změřit" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: plošné těleso, plocha povrchu %.2f mm², žádný objem — pro získání objemu jej zesilte" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: objem %.2f mm³, plocha povrchu %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Pole vyžaduje objemové těleso — nejprve nějaké přidejte nebo importujte" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Booleovská operace vyžaduje dvě tělesa — přidejte nebo importujte druhé" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -25046,35 +25112,45 @@ msgstr "Vybraná plocha (Těleso %d)" msgid "Picked face" msgstr "Vybraná plocha" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "nový tvar se nepodařilo sjednotit s tělesem" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "nový tvar se nepodařilo vyříznout z tělesa" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "průnik tvarů se nepodařilo vytvořit" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "nic v historii zatím nevytváří objemové těleso" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "profil náčrtu netvoří čistou uzavřenou smyčku" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "nástroj se nedotýká tělesa" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "výraz používá proměnnou, která neexistuje" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "výraz dělí nulou" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "dvě proměnné jsou definovány jedna pomocí druhé" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "geometrická operace selhala" # AI Translated #, c-format, boost-format @@ -25114,15 +25190,17 @@ msgstr "Kóta — klikněte na druhý bod" msgid "Line — click the start point" msgstr "Čára — klikněte na počáteční bod" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Čára — klikněte na koncový bod; poté lze zadat její délku a úhel" # AI Translated msgid "Polyline — click the first point" msgstr "Lomená čára — klikněte na první bod" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Lomená čára — klikněte na další bod · kliknutím na počáteční bod ji uzavřete · pravým tlačítkem, dvojklikem nebo klávesou Enter řetěz ukončíte" # AI Translated msgid "Rectangle — click one corner" @@ -25168,8 +25246,9 @@ msgstr "Zaoblený obdélník — kliknutím nastavte poloměr rohů" msgid "Circle — click the center" msgstr "Kružnice — klikněte na střed" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Kružnice — kliknutím nastavte poloměr; poté jej lze zadat" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -25295,18 +25374,21 @@ msgstr "Eliptický oblouk — klikněte tam, kde oblouk končí" msgid "Spline — click the first control point" msgstr "Spline — klikněte na první řídicí bod" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline — klikněte na další řídicí bod · pravým tlačítkem, dvojklikem nebo klávesou Enter křivku dokončíte" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Bod — kliknutím jej umístěte; nástroj zůstane aktivní pro další" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Oříznout — klikněte na úsek tam, kde kříží jinou entitu · klávesou Esc ukončíte" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Prodloužit — klikněte na čáru nebo oblouk pro prodloužení k nejbližší entitě · klávesou Esc ukončíte" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -25316,8 +25398,9 @@ msgstr "Zaoblení — klikněte na první ze dvou čar, které se setkávají" msgid "Fillet — click the second line" msgstr "Zaoblení — klikněte na druhou čáru" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Zaoblení — táhněte šipkou nebo klikněte na číslo a zadejte poloměr · Enter použije · Esc zruší" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -25327,63 +25410,74 @@ msgstr "Zkosení — klikněte na první ze dvou čar, které se setkávají" msgid "Chamfer — click the second line" msgstr "Zkosení — klikněte na druhou čáru" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Zkosení — táhněte šipkou nebo klikněte na číslo a zadejte vzdálenost zkosení · Enter použije · Esc zruší" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Odsazení — klikněte na křivku; odsadí se celý její obrys" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Odsazení — táhněte šipkou na kteroukoli stranu nebo klikněte na číslo a zadejte vzdálenost · Enter použije · Esc zruší" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Zrcadlit — nejprve klikněte na ČÁRU, podle které se zrcadlí (lze použít i konstrukční čáru)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Zrcadlit — osa nastavena · nyní klikněte na entity k zrcadlení · Esc zruší" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Zrcadlit — osa nastavena · k zrcadlení: %d · kliknutím na další ji přidáte nebo odeberete · Enter použije" # AI Translated msgid "Move — click the entities to move" msgstr "Posunout — klikněte na entity k posunutí" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Posunout — táhněte úchytem nebo klikněte na číslo a zadejte vzdálenost · Enter použije" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Otočit — klikněte na entity k otočení" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Otočit — táhněte úchytem nebo klikněte na číslo a zadejte úhel · Enter použije" # AI Translated msgid "Scale — click the entities to scale" msgstr "Měřítko — klikněte na entity pro změnu měřítka" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Měřítko — táhněte úchytem nebo klikněte na číslo a zadejte faktor · Enter použije" # AI Translated msgid "Array — click the entities to repeat" msgstr "Pole — klikněte na entity k opakování" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Pole — tažením úchytu nastavte krok, kliknutím na počet jej zadejte · Enter použije" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Kruhové pole — klikněte na entity k opakování" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Kruhové pole — tažením úchytu nastavte úhlový rozsah, kliknutím na počet jej zadejte · Enter použije" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Tažením rohu změníte měřítko, tažením středu posunete · po dokončení stiskněte Enter nebo ✓, Esc změny zahodí" # AI Translated msgid " · Esc goes back to Select" @@ -25393,63 +25487,78 @@ msgstr " · Esc se vrátí k Výběru" msgid " · click a constraint badge to remove it" msgstr " · kliknutím na značku vazby ji odstraníte" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — objemové těleso" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — plošné těleso" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Rovinná plocha %d (%s)" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Válcová plocha %d (%s)" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Plocha %d (%s)" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%zu hrana (%s)" +msgstr[1] "%zu hrany (%s)" +msgstr[2] "%zu hran (%s)" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Přímá hrana %d (%s)" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Kruhová hrana %d (%s)" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Vrchol (%s)" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Profil náčrtu" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Náčrt — nic není vybráno" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Čára náčrtu" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Křivka náčrtu" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Bod náčrtu" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "Entity náčrtu: %d" # AI Translated msgid "select something first" @@ -25512,8 +25621,9 @@ msgstr "Rovina přidána — vyberte ji jako rovinu náčrtu" msgid "Axis added" msgstr "Osa přidána" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Souřadnicový systém přidán" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -25530,10 +25640,10 @@ msgstr "Úkos vyžaduje vybranou plochu — nejprve klikněte na boční plochu" # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Zatím nic — importujte STEP nebo síť z panelu nástrojů,\n" -"nebo klikněte na referenční rovinu a pravým tlačítkem na ní začněte náčrt." +"nebo stiskněte Náčrt a klikněte na referenční rovinu pro zahájení náčrtu." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -25543,9 +25653,10 @@ msgstr "Zatím žádné těleso — vyberte náčrt a pravým tlačítkem zvolte msgid "Could not restore the CAD model from this project" msgstr "Model CAD se z tohoto projektu nepodařilo obnovit" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Model CAD se nepodařilo obnovit: %s" # AI Translated #, c-format @@ -25568,17 +25679,35 @@ msgstr "Pohled v řezu — zobrazena horní polovina" msgid "Section view — showing the lower half" msgstr "Pohled v řezu — zobrazena dolní polovina" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Hledání ploch prvku…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Nejprve vyberte těleso — klikněte na něj v zobrazovací oblasti nebo v seznamu Tělesa" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Probíhá přestavba modelu — po jejím dokončení přibližte znovu" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s: nic není zobrazeno, na co by šlo přiblížit" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Toto těleso zatím nemá zobrazovací síť — nejprve proveďte přepočet" +# AI Translated +msgid "Select something to zoom to" +msgstr "Vyberte něco, na co se má přiblížit" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Nejprve dokončete nebo zrušte to, co je otevřené" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Nejprve vyberte těleso — klikněte na něj v zobrazovací oblasti nebo v seznamu Tělesa" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Tažením šipek posunete, tažením kruhů otočíte — pak potvrďte (Esc zruší)" @@ -25604,12 +25733,10 @@ msgstr "Klikněte na plochu tělesa, pak stiskněte F" msgid "Placed on face — body laid flat on the bed" msgstr "Umístěno na plochu — těleso položeno naplocho na podložku" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Úprava odmítnuta: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25628,9 +25755,10 @@ msgstr "Toto těleso nemá žádný prvek k odstranění — pro začátek od nu msgid "feature %d" msgstr "prvek %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "Odstraněn prvek %s, ze kterého bylo těleso vytvořeno — Ctrl+Z jej obnoví" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -26023,12 +26151,14 @@ msgstr "Soubory STEP (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP exportován" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "Export STEP selhal: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Odeslat na desku (jako tělesa) — přenést každé těleso na kartu Připravit jako samostatný objekt" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -26042,20 +26172,37 @@ msgstr "Není co odeslat — nejprve přidejte prvek" msgid "All bodies hidden — show one before committing" msgstr "Všechna tělesa jsou skrytá — před odesláním nějaké zobrazte" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%zu hrana" +msgstr[1] "%zu hrany" +msgstr[2] "%zu hran" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Osa E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Čára E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Rovina náčrtu: %s — vyberte nástroj" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Rovina náčrtu: %s.\n" +"Vyberte nástroj nebo stiskněte Menu pro zobrazení seznamu." # AI Translated msgid "Plane ready" @@ -26065,8 +26212,9 @@ msgstr "Rovina připravena" msgid "Axis ready" msgstr "Osa připravena" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Souřadnicový systém připraven" # AI Translated msgid "Helix ready" @@ -26084,9 +26232,10 @@ msgstr "Náčrt připraven" msgid "Mate ready" msgstr "Spoj připraven" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Neplatné: %s" # AI Translated #, c-format @@ -26172,110 +26321,139 @@ msgstr "Upravit proměnnou" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "Proměnnou „%s“ se nepodařilo odstranit (pravděpodobně na ni stále odkazuje výraz některého prvku): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" není hodnota, kterou lze řídit výrazem" # AI Translated msgid "No binding for that field" msgstr "Pro tento parametr neexistuje propojení" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "Hodnota musí být větší než nula" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "Hodnota nesmí být záporná (nula znamená totožnost)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Tuto kótu nelze splnit — náčrt je přeurčený" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "Ignorované vazby, které nemohou působit na tuto geometrii (elipsa nebo křivka spline, případně kružnice nulové velikosti): %1%" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Tento profil se u červené značky kříží nebo se vrací sám na sebe, takže neohraničuje jednu oblast" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Strana" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Hlavní poloosa" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Vedlejší poloosa" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "Úhel musí být mezi 0° a 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "Hlavní poloosa nemůže být kratší než vedlejší poloosa" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "Poloměr rohu musí být menší než polovina kratší strany" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "Drážka je pro svůj poloměr příliš široká — šířka musí být menší než dvojnásobek poloměru" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1%: tuto kótu nelze splnit — náčrt je přeurčený" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Tyto dvě čáry se nestýkají v rohu — vyberte dvě čáry, které se v rohu stýkají" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "Velikost musí být větší než nula" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Zaoblení: poloměr přesahuje délku ramene, nebo se obě čáry nestýkají v rohu" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Zkosení: vzdálenost přesahuje délku ramene, nebo se obě čáry nestýkají v rohu" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "Odstraněné vazby, které zaoblení/zkosení zneplatnilo: %1%" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Odsazení: elipsa ani spline nemají rovnoběžnou křivku stejného druhu — vyberte čáry, oblouky nebo kružnice" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Faktor měřítka musí být větší než nula" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Počet kopií" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Počet kopií musí být celé číslo, 2 nebo více" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "Vazby uvolněné transformací: %1%" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Kopie pole nejsou vázané — řešič odmítl všechny vazby" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "dokončete pravým tlačítkem nebo dvojklikem, kliknutím na začátek uzavřete" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Prodloužit: klikněte na čáru nebo oblouk, který může dosáhnout jiné entity" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Oříznout: klikněte na úsek v místě, kde kříží jinou entitu" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Stiskněte Enter nebo ✓ pro použití, Esc pro zahození" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Pro tuto entitu zatím není kóta k dispozici — klikněte na čáru, kružnici, oblouk nebo dva body" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Klikněte na druhý bod nebo na čáru, ke které se má změřit vzdálenost" # AI Translated msgid "Enter a number" @@ -26311,8 +26489,12 @@ msgid "Sketch" msgstr "Náčrt" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Klikněte na plochu nebo referenční rovinu a pak vyberte kreslicí nástroj" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Vyberte rovinnou plochu nebo referenční rovinu, na které chcete kreslit náčrt" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Kreslit náčrt na vybrané rovinné ploše nebo rovině, nebo na ni kliknout v dalším kroku" # AI Translated msgctxt "Design" @@ -26334,9 +26516,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Zesílení" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Sjednocení" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -26389,17 +26572,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Zesílení povrchu" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Zesílení povrchu vyžaduje plošné těleso — nejprve nějaké vytvořte nástrojem Povrch" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Otvor" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -26414,8 +26595,9 @@ msgctxt "Design" msgid "Split" msgstr "Rozdělit" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Rozdělení vyžaduje objemové těleso — nejprve nějaké přidejte nebo importujte" # AI Translated msgid "Split the body along a picked face into two solids" @@ -26461,8 +26643,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Odsazení povrchu" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Odsazení povrchu vyžaduje plošné těleso — nejprve nějaké vytvořte nástrojem Povrch" # AI Translated msgctxt "Design" @@ -26492,8 +26675,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Pole podél křivky" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Pole podél křivky vyžaduje těleso a křivku" # AI Translated msgid "Repeat the body along a picked curve" @@ -26514,8 +26698,9 @@ msgctxt "Design" msgid "Align to" msgstr "Zarovnat k" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Zarovnání vyžaduje těleso — nejprve nějaké přidejte nebo importujte" # AI Translated msgid "Align the body to a picked face or plane" @@ -26531,9 +26716,10 @@ msgctxt "Design" msgid "Axis" msgstr "Osa" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Souřadnicový systém" # AI Translated msgctxt "Design" @@ -26549,9 +26735,10 @@ msgstr "Měření" msgid "Measure between the picked points, edges or faces" msgstr "Měřit mezi vybranými body, hranami nebo plochami" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Objem a plocha povrchu" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -26593,12 +26780,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Odstranit plochu" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Barva" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Nastavit barvu zobrazení vybraného tělesa" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Přiblížit na výběr" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Zarámovat výběr v pohledu se zachováním směru pohledu" # AI Translated msgctxt "Design" @@ -26637,9 +26835,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Obdélník dvěma rohy" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Obdélník ze středu" # AI Translated msgctxt "Design" @@ -26651,9 +26850,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Zaoblený obdélník" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Kružnice středem" # AI Translated msgctxt "Design" @@ -26675,9 +26875,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Tečný oblouk" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Oblouk středem" # AI Translated msgctxt "Design" @@ -26709,48 +26910,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Trojúhelník" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Trojúhelník — klikněte na střed, pak na vrchol" # AI Translated msgctxt "Design" msgid "Square" msgstr "Čtverec" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Čtverec — klikněte na střed, pak na vrchol" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Pětiúhelník" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Pětiúhelník — klikněte na střed, pak na vrchol" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Šestiúhelník" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Šestiúhelník — klikněte na střed, pak na vrchol" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Osmiúhelník" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Osmiúhelník — klikněte na střed, pak na vrchol" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Dvanáctiúhelník" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Dvanáctiúhelník — klikněte na střed, pak na vrchol" # AI Translated msgctxt "Design" @@ -26780,8 +26987,9 @@ msgctxt "Design" msgid "Text" msgstr "Text" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Napište text; stane se prvkem Text v rovině tohoto náčrtu, který lze později upravit" # AI Translated msgctxt "Design" @@ -26898,27 +27106,34 @@ msgstr "Úhel / vzdálenost…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Zadejte úhel mezi dvěma čarami nebo vzdálenost mezi dvěma vybranými prvky" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Napište text k vložení" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Tučné" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Kurzíva" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Toto písmo nelze použít pro text — vyberte jiné" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Napište text a uvidíte jeho velikost" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Toto písmo nemá pro tento text žádný obrys" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Velikost: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -27016,8 +27231,9 @@ msgstr "Profil" msgid "Start new profile (for holes)" msgstr "Začít nový profil (pro otvory)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segmenty" # AI Translated msgid "Sides" @@ -27031,20 +27247,23 @@ msgstr "Kreslete kliknutím na plátno" msgid "Snap to grid" msgstr "Přichytit k mřížce" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Krok mřížky" # AI Translated msgid "Outer" msgstr "Vnější" +# AI Translated msgid "closed" -msgstr "" +msgstr "uzavřený" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% b. %4%" # AI Translated msgid "XY (Top)" @@ -27082,8 +27301,9 @@ msgstr[2] "%zu uzavřených profilů" msgid "Draw a closed profile to enable" msgstr "Pro aktivaci nakreslete uzavřený profil" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Vymazat vše" # AI Translated msgid "Empty result" @@ -31198,6 +31418,39 @@ msgstr "" "Zamezte kroucení\n" "Víte, že při tisku materiálů náchylných ke kroucení, jako je ABS, může vhodné zvýšení teploty vyhřívané desky snížit pravděpodobnost kroucení?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Experimentální) Používat agenty tiskárny místo tiskových hostů" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "PRVKY" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "V zobrazovací oblasti klikněte na plochu nebo referenční rovinu, pak na nástroj náčrtu" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Klikněte na plochu nebo referenční rovinu, pak na nástroj náčrtu." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "Vybrána rovina %s — pravým tlačítkem zobrazíte nástroje kreslení" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Zatím nic — importujte STEP nebo síť z panelu nástrojů,\n" +#~ "nebo klikněte na referenční rovinu a pravým tlačítkem na ní začněte náčrt." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Klikněte na plochu nebo referenční rovinu a pak vyberte kreslicí nástroj" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 08fc62f928..e46e12e171 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -3376,8 +3376,8 @@ msgstr "Zusätzliche Prozesseinstellung" msgid "Remove parameter" msgstr "Parameter entfernen" -msgid "to" -msgstr "bis" +msgid "Range" +msgstr "Reichweite" msgid "Add height range" msgstr "Höhenbereich hinzufügen" @@ -5409,9 +5409,6 @@ msgstr "Parametername" msgid "layers" msgstr "Schichten" -msgid "Range" -msgstr "Reichweite" - msgid "Empty string" msgstr "Leere Zeichenfolge" @@ -8734,8 +8731,9 @@ msgstr "Der verbundene Drucker ist %s. Er muss mit dem Projektprofil zum Drucken msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Möchten Sie die Druckerinformationen synchronisieren und das Profil automatisch wechseln?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Dieses Projekt enthält ein im Tab Konstruktion erstelltes Modell und keine andere Geometrie. Aktivieren Sie \"CAD-Funktion (experimentell)\" in den Einstellungen und starten Sie neu, um es anzuzeigen und zu bearbeiten; es bleibt beim Speichern des Projekts erhalten." msgid "The file does not contain any geometry data." msgstr "Die Datei enthält keine Geometriedaten." @@ -9787,8 +9785,9 @@ msgstr "Im Tab Konstruktion einen Verknüpfungskonnektor als kleine Fläche stat msgid "Auto-close sketch loops" msgstr "Skizzenschleifen automatisch schließen" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Skizzenendpunkte innerhalb von 0,001 mm als einen Verbindungspunkt behandeln und die Schleife zusammenschweißen. Aus: Nur exakt deckungsgleiche Endpunkte werden verbunden, sodass eine Schleife mit einer winzigen Lücke als offen angezeigt wird, statt automatisch geschlossen zu werden. Wird mit jeder Konstruktion gespeichert; gilt für Konstruktionen, die nach der Änderung begonnen werden." msgid "Pan" msgstr "Schwenken" @@ -10211,18 +10210,6 @@ msgstr "Nicht unterstützte Profile anzeigen" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Zeigt inkompatible/nicht unterstützte Profile in den Dropdown-Listen für Drucker und Filament an. Diese Profile können nicht ausgewählt werden." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Experimentell) Drucker-Agenten anstelle von Druck-Hosts verwenden" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Leitet Druckaufträge für Nicht-Bambu-Drucker über Drucker-Plugin-Agenten statt über den klassischen Druck-Host-Upload.\n" -"Wenn deaktiviert, verwendet OrcaSlicer das bisherige Druck-Host-Verhalten." - msgid "Experimental Features" msgstr "Experimentelle Funktionen" @@ -10236,6 +10223,18 @@ msgstr "" "Versuchen Sie, bemalte Funktionen (Farbe/Naht/Stütze/unscharf usw.) nach Änderung des Objekt-Meshs (z. B. schneiden/neu laden von der Festplatte/vereinfachen/reparieren usw.) beizubehalten\n" "Sehr experimentell! Langsam und kann Artefakte erzeugen." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Drucker-Agenten anstelle von Druck-Hosts verwenden" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Leitet Druckaufträge für Nicht-Bambu-Drucker über Drucker-Plugin-Agenten statt über den klassischen Druck-Host-Upload.\n" +"Wenn deaktiviert, verwendet OrcaSlicer das bisherige Druck-Host-Verhalten." + msgid "Allow Abnormal Storage" msgstr "Fehlerhaften Speicher zulassen" @@ -10403,6 +10402,9 @@ msgstr "Andere Filament-Schichtsequenz" msgid "Please input layer value (>= 2)." msgstr "Bitte geben Sie einen Schichtwert (>= 2) ein." +msgid "to" +msgstr "bis" + msgid "Plate name" msgstr "Platten-Name" @@ -16211,6 +16213,14 @@ msgstr "Symmetrische Füllung Y-Achse" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Wenn das Modell zwei Teile hat, die symmetrisch zur Y-Achse sind, und Sie möchten, dass diese Teile symmetrische Texturen haben, klicken Sie bitte auf diese Option auf einem der Teile." +# AI Translated +msgid "Fill pattern tops" +msgstr "Oberseiten des Musters füllen" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Wählen Sie diese Option, wenn Sie die Oberseiten des Füllmusters vollständig ausfüllen möchten" + msgid "Infill combination - Max layer height" msgstr "Kombinieren der Füllung - Maximale Schichthöhe" @@ -22381,6 +22391,26 @@ msgstr "Das Filament ist möglicherweise nicht mit den aktuellen Geräteeinstell msgid "The filament model is unknown. A random filament preset will be used." msgstr "Das Filamentprofil ist unbekannt. Es wird ein zufälliges Filamentprofil verwendet." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Referenzebenen und Achsen ausblenden" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Referenzebenen und Achsen einblenden" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Druckbett und sein Plattenraster ausblenden" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Druckbett und sein Plattenraster anzeigen" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Eine Referenzebene oder ebene Fläche anklicken, um darauf zu skizzieren — Esc bricht ab" + # AI Translated msgid "Construction" msgstr "Hilfsgeometrie" @@ -22406,8 +22436,9 @@ msgstr "Kreis — Mittelpunkt, dann Radius klicken" msgid "Arc — click start, end, then a point" msgstr "Bogen — Start, Ende, dann einen Punkt klicken" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Langloch — zwei Mittellinienenden, dann die Breite" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -22481,8 +22512,9 @@ msgstr "Weltachsen eingeblendet" msgid "World axes hidden" msgstr "Weltachsen ausgeblendet" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Axonometrische Ansicht, eingepasst" # AI Translated msgid "Bed shown" @@ -22493,34 +22525,12 @@ msgid "Bed hidden" msgstr "Druckbett ausgeblendet" # AI Translated -msgid "FEATURES" -msgstr "FEATURES" +msgid "Reference planes shown" +msgstr "Referenzebenen eingeblendet" # AI Translated -msgid "Sketch" -msgstr "Skizze" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Skizzenebene: %s — Werkzeug wählen" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Klicken Sie im Ansichtsfenster auf eine Fläche oder eine Referenzebene, dann auf ein Skizzenwerkzeug" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Skizzenebene: %s.\n" -"Wählen Sie ein Werkzeug oder drücken Sie Menü für die Liste." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Klicken Sie auf eine Fläche oder eine Referenzebene, dann auf ein Skizzenwerkzeug." +msgid "Reference planes hidden" +msgstr "Referenzebenen ausgeblendet" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -22706,8 +22716,9 @@ msgstr "Achse" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Referenzachse (zwei Punkte, Flächennormale, Zylindermittellinie, zwei Ebenen, entlang Kante)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Koordinatensystem" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -22771,8 +22782,9 @@ msgstr "Spiegeln benötigt einen Körper — fügen Sie zuerst einen hinzu oder msgid "Mate" msgstr "Verknüpfung" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Baugruppe: zwei Koordinatensysteme ausrichten (fest, planar, drehbar, verschiebbar, zylindrisch)" # AI Translated msgid "Boolean (combine bodies)" @@ -22871,14 +22883,6 @@ msgstr "Eine zylindrische Fläche (Innenbohrung / außen) oder eine kreisförmig msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Wählen Sie eine zylindrische Fläche (Bohrung / außen) oder eine kreisförmige Kante für ein Gewinde" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "STEP importieren (bearbeitbarer B-rep-Volumenkörper)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Netz (STL/OBJ) als bearbeitbaren B-rep-Volumenkörper importieren" - # AI Translated msgid "Constrain selected sketch" msgstr "Abhängigkeiten zur ausgewählten Skizze hinzufügen" @@ -22911,8 +22915,9 @@ msgstr "Start, dann Ende klicken — dann die genaue Länge festlegen" msgid "Polyline" msgstr "Polylinie" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Punkte klicken; auf den ersten Punkt klicken, um die Schleife zu schließen, Rechtsklick oder Enter beendet die Kette" # AI Translated msgid "Corner rectangle" @@ -23002,8 +23007,9 @@ msgstr "Mittelpunkt, dann Start, dann einen Punkt für den Endwinkel klicken" msgid "Slot" msgstr "Langloch" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Zwei Mittellinienenden, dann einen Punkt für die Breite klicken" # AI Translated msgid "Arc slot" @@ -23033,8 +23039,9 @@ msgstr "Mittelpunkt, Hauptachsenende, Nebenachsenpunkt, dann Bogenstart und -end msgid "Spline" msgstr "Spline" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Kontrollpunkte klicken; Doppelklick, Rechtsklick oder Enter zum Beenden" # AI Translated msgid "Click to place a point" @@ -23088,15 +23095,17 @@ msgstr "Eine Linie als Spiegelachse wählen, dann die zu spiegelnden Elemente; z msgid "Trim" msgstr "Trimmen" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Ein Segment klicken, um es bis zum nächsten Schnittpunkt zurückzutrimmen; Esc beendet" # AI Translated msgid "Extend" msgstr "Verlängern" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Eine Linie oder einen Bogen klicken, um sie bis zum nächsten Element zu verlängern; Esc beendet" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23279,13 +23288,21 @@ msgstr "Vertikaler Abstand" msgid "New Design — clear the feature tree" msgstr "Neue Konstruktion — Feature-Baum leeren" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "STEP importieren (bearbeitbarer B-rep-Volumenkörper)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Netz (STL/OBJ) als bearbeitbaren B-rep-Volumenkörper importieren" + # AI Translated msgid "Export STEP…" msgstr "STEP exportieren…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Druckbett und sein Plattenraster anzeigen" +msgid "Create a new sketch" +msgstr "Eine neue Skizze erstellen" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23299,20 +23316,25 @@ msgstr "Schnittansicht — einen Teil des Modells ausblenden, um hineinzusehen. msgid "Flip Section — show the opposite half" msgstr "Schnitt umkehren — die gegenüberliegende Hälfte anzeigen" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Festlegen, wie „Auf Druckplatte übernehmen“ die Körper sendet" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Auf Druckplatte übernehmen" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Alle Körper werden zu einem Objekt mit einem Teil pro Körper, wobei ihre relative Lage erhalten bleibt" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Auf Druckplatte übernehmen (als Körper)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Jeder Körper wird zu einem eigenen Objekt und einzeln platziert" # AI Translated msgid "Width / X" @@ -23322,6 +23344,10 @@ msgstr "Breite / X" msgid "Height / Y" msgstr "Höhe / Y" +# AI Translated +msgid "Sketch" +msgstr "Skizze" + # AI Translated msgid "Distance X" msgstr "Abstand X" @@ -23524,8 +23550,9 @@ msgstr "Kreisförmig" msgid "Direction" msgstr "Richtung" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Gesamtwinkel (°)" # AI Translated msgid "Boolean" @@ -23909,11 +23936,13 @@ msgstr "Zylindrisch — Achsen kollinear; freie Drehung + axiales Gleiten" msgid "Kind" msgstr "Art" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (fest)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (bewegt sich)" # AI Translated msgid "Angle °" @@ -23951,6 +23980,10 @@ msgstr "(keine Bindungen)" msgid "Value" msgstr "Wert" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Wählen Sie ein Werkzeug oder drücken Sie Menü für die Liste." + # AI Translated msgid "Constraints" msgstr "Abhängigkeiten" @@ -23989,6 +24022,10 @@ msgstr "Nach unten verschieben" msgid "Show / hide" msgstr "Einblenden / Ausblenden" +# AI Translated +msgid "Zoom to selection" +msgstr "Auf Auswahl zoomen" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Überschneidung prüfen — überlappende Körper finden" @@ -24010,14 +24047,17 @@ msgstr "Körper %d ausgewählt — Rechtsklick für die passenden Aktionen" msgid "Variables" msgstr "Variablen" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Variable hinzufügen" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Variable bearbeiten" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Variable löschen" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24036,9 +24076,10 @@ msgstr "Skizze aktualisiert" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Skizze erstellt (%zu steuernde Bemaßungen) — auswählen, dann Rechtsklick zum Extrudieren" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Länge %.2f mm, Winkel %.1f°" # AI Translated msgid "(locked)" @@ -24060,6 +24101,10 @@ msgstr "Bereich ausgewählt — Rechtsklick zum Extrudieren oder Doppelklick zum msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Skizze ausgewählt — Rechtsklick zum Extrudieren oder Doppelklick zum Bearbeiten" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Diese Fläche ist nicht eben — klicken Sie auf eine ebene Fläche oder eine Referenzebene" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24088,30 +24133,29 @@ msgstr "Körper %d: Fläche %d ausgewählt — Rechtsklick zum Drücken/Ziehen o msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Fläche %d ausgewählt — Rechtsklick zum Drücken/Ziehen oder erneut klicken für den ganzen Körper" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Körper %d: %zu Kante ausgewählt — Umschalt+Klick fügt eine Kante hinzu oder entfernt sie, Abrunden/Fasen bearbeitet alle" +msgstr[1] "Körper %d: %zu Kanten ausgewählt — Umschalt+Klick fügt eine Kante hinzu oder entfernt sie, Abrunden/Fasen bearbeitet alle" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "%zu Kante ausgewählt — Umschalt+Klick fügt eine Kante hinzu oder entfernt sie, Abrunden/Fasen bearbeitet alle" +msgstr[1] "%zu Kanten ausgewählt — Umschalt+Klick fügt eine Kante hinzu oder entfernt sie, Abrunden/Fasen bearbeitet alle" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "%s-Ebene ausgewählt — Rechtsklick für die Zeichenwerkzeuge" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Körper %d: Kante %d ausgewählt — Umschalt+Klick zum Hinzufügen von Kanten oder erneut klicken für den ganzen Körper" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Kante %d ausgewählt — Umschalt+Klick zum Hinzufügen von Kanten oder erneut klicken für den ganzen Körper" # AI Translated #, c-format, boost-format @@ -24136,8 +24180,9 @@ msgstr "Werkzeug beendet" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Skizze beibehalten — „Bestätigen“ zum Übernehmen, „Abbrechen“ zum Verwerfen" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Wählen Sie etwas zum Löschen aus" # AI Translated msgid "✗ Conflicting constraints" @@ -24169,17 +24214,21 @@ msgstr "Bearbeiten: Skizze %d · N = senkrecht auf die Ebene blicken · msgid "OK — %zu triangles" msgstr "OK — %zu Dreiecke" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Text bearbeiten — Enter wendet an, Esc behält ihn unverändert bei" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Text eingeben — er erscheint während der Eingabe in der Ansicht; Enter fügt ein, Esc bricht ab" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Text unverändert" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Text abgebrochen" # AI Translated msgid "Import SVG" @@ -24205,9 +24254,10 @@ msgstr "STEP wird gelesen…" msgid "No solids found in STEP" msgstr "Keine Volumenkörper in STEP gefunden" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "STEP-Import fehlgeschlagen: %s" # AI Translated msgid "Rebuilding model…" @@ -24232,9 +24282,10 @@ msgstr "Netzdateien (*.stl;*.obj)|*.stl;*.obj|Alle Dateien|*.*" msgid "Could not read the STL file" msgstr "Die STL-Datei konnte nicht gelesen werden" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Die OBJ-Datei konnte nicht gelesen werden: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -24259,20 +24310,23 @@ msgstr "" msgid "Large mesh" msgstr "Großes Netz" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Netzkonvertierung fehlgeschlagen: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "Netzkonvertierung hat keine Geometrie erzeugt" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Netz" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Netzimport fehlgeschlagen: %s" # AI Translated #, c-format, boost-format @@ -24301,17 +24355,19 @@ msgstr " — zum Platzieren/Skalieren ziehen, dann bestätigen" msgid "Insert canceled" msgstr "Einfügen abgebrochen" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Eine Ecke ziehen zum Skalieren, die Mitte zum Verschieben — Enter oder ✓, wenn fertig, Esc zum Verwerfen" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Skizze hinzugefügt (Ebene: %s) — auswählen, dann Rechtsklick zum Extrudieren" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Das Modell konnte nicht neu aufgebaut werden: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -24383,18 +24439,21 @@ msgstr "Wählen Sie zuerst eine Skizze mit einer offenen Linie" msgid "Add at least one face to delete first" msgstr "Fügen Sie zuerst mindestens eine zu löschende Fläche hinzu" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Verknüpfung benötigt zwei Koordinatensysteme — erstellen Sie diese zuerst" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Verknüpfung: A und B müssen unterschiedliche Koordinatensysteme sein" # AI Translated msgid "Mate rejected" msgstr "Verknüpfung abgelehnt" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Überschneidung benötigt mindestens zwei Körper" # AI Translated msgid "No interference found" @@ -24405,36 +24464,43 @@ msgstr "Keine Überschneidung gefunden" msgid "Body %d" msgstr "Körper %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu überlappendes Paar: %s" +msgstr[1] "%zu überlappende Paare: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Wählen Sie einen Körper aus, um ihn zu messen" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Dieser Körper konnte nicht gemessen werden" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: Flächenkörper, Oberfläche %.2f mm², kein Volumen — dicken Sie ihn auf, um eines zu erhalten" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: Volumen %.2f mm³, Oberfläche %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Muster benötigt einen Volumenkörper — fügen Sie zuerst einen hinzu oder importieren Sie einen" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Boolesch benötigt zwei Körper — fügen Sie einen zweiten hinzu oder importieren Sie einen" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -24449,35 +24515,45 @@ msgstr "Gewählte Fläche (Körper %d)" msgid "Picked face" msgstr "Gewählte Fläche" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "die neue Form konnte nicht mit dem Körper verbunden werden" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "die neue Form konnte nicht aus dem Körper geschnitten werden" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "die Schnittmenge der Formen konnte nicht gebildet werden" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "nichts im Verlauf erzeugt bisher einen Volumenkörper" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "das Skizzenprofil ist keine saubere geschlossene Schleife" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "das Werkzeug berührt den Körper nicht" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "ein Ausdruck verwendet eine Variable, die nicht existiert" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "ein Ausdruck teilt durch null" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "zwei Variablen verweisen in ihrer Definition aufeinander" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "eine Geometrieoperation ist fehlgeschlagen" # AI Translated #, c-format, boost-format @@ -24516,15 +24592,17 @@ msgstr "Bemaßung — den zweiten Punkt anklicken" msgid "Line — click the start point" msgstr "Linie — den Startpunkt anklicken" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Linie — den Endpunkt anklicken; Länge und Winkel können danach eingegeben werden" # AI Translated msgid "Polyline — click the first point" msgstr "Polylinie — den ersten Punkt anklicken" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Polylinie — den nächsten Punkt anklicken · den Startpunkt anklicken, um sie zu schließen · Rechtsklick, Doppelklick oder Enter beendet die Kette" # AI Translated msgid "Rectangle — click one corner" @@ -24570,8 +24648,9 @@ msgstr "Abgerundetes Rechteck — klicken, um den Eckenradius festzulegen" msgid "Circle — click the center" msgstr "Kreis — den Mittelpunkt anklicken" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Kreis — klicken, um den Radius festzulegen; er kann danach eingegeben werden" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -24697,18 +24776,21 @@ msgstr "Ellipsenbogen — anklicken, wo der Bogen endet" msgid "Spline — click the first control point" msgstr "Spline — den ersten Kontrollpunkt anklicken" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline — den nächsten Kontrollpunkt anklicken · Rechtsklick, Doppelklick oder Enter beendet die Kurve" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Punkt — klicken, um einen zu platzieren; das Werkzeug bleibt für weitere aktiv" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Trimmen — ein Segment dort anklicken, wo es ein anderes Element kreuzt · Esc zum Beenden" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Verlängern — eine Linie oder einen Bogen anklicken, um sie bis zum nächsten Element zu verlängern · Esc zum Beenden" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -24718,8 +24800,9 @@ msgstr "Abrunden — die erste von zwei aufeinandertreffenden Linien anklicken" msgid "Fillet — click the second line" msgstr "Abrunden — die zweite Linie anklicken" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Abrunden — den Pfeil ziehen oder auf die Zahl klicken, um den Radius einzugeben · Enter wendet an · Esc bricht ab" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -24729,63 +24812,74 @@ msgstr "Fasen — die erste von zwei aufeinandertreffenden Linien anklicken" msgid "Chamfer — click the second line" msgstr "Fasen — die zweite Linie anklicken" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Fasen — den Pfeil ziehen oder auf die Zahl klicken, um die Fasenlänge einzugeben · Enter wendet an · Esc bricht ab" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Versetzen — eine Kurve anklicken; ihr gesamter Umriss wird versetzt" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Versetzen — den Pfeil zu einer Seite ziehen oder auf die Zahl klicken, um den Abstand einzugeben · Enter wendet an · Esc bricht ab" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Spiegeln — zuerst die LINIE anklicken, an der gespiegelt wird (eine Hilfslinie funktioniert)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Spiegeln — Achse festgelegt · jetzt die zu spiegelnden Elemente anklicken · Esc bricht ab" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Spiegeln — Achse festgelegt · %d zu spiegeln · ein weiteres anklicken, um es hinzuzufügen oder zu entfernen · Enter wendet an" # AI Translated msgid "Move — click the entities to move" msgstr "Verschieben — die zu verschiebenden Elemente anklicken" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Verschieben — den Griff ziehen oder auf die Zahl klicken, um den Abstand einzugeben · Enter wendet an" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Drehen — die zu drehenden Elemente anklicken" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Drehen — den Griff ziehen oder auf die Zahl klicken, um den Winkel einzugeben · Enter wendet an" # AI Translated msgid "Scale — click the entities to scale" msgstr "Skalieren — die zu skalierenden Elemente anklicken" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Skalieren — den Griff ziehen oder auf die Zahl klicken, um den Faktor einzugeben · Enter wendet an" # AI Translated msgid "Array — click the entities to repeat" msgstr "Anordnung — die zu wiederholenden Elemente anklicken" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Anordnung — den Griff ziehen, um den Abstand festzulegen, auf die Anzahl klicken, um sie einzugeben · Enter wendet an" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Polare Anordnung — die zu wiederholenden Elemente anklicken" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Polare Anordnung — den Griff ziehen, um den Winkelbereich festzulegen, auf die Anzahl klicken, um sie einzugeben · Enter wendet an" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Eine Ecke ziehen zum Skalieren, die Mitte zum Verschieben · Enter oder ✓, wenn fertig, Esc zum Verwerfen" # AI Translated msgid " · Esc goes back to Select" @@ -24795,62 +24889,77 @@ msgstr " · Esc kehrt zu Auswählen zurück" msgid " · click a constraint badge to remove it" msgstr " · auf ein Abhängigkeitssymbol klicken, um es zu entfernen" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — Volumenkörper" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — Flächenkörper" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Ebene Fläche %d von %s" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Zylindrische Fläche %d von %s" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Fläche %d von %s" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu Kante von %s" +msgstr[1] "%zu Kanten von %s" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Gerade Kante %d von %s" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Kreisförmige Kante %d von %s" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Eckpunkt von %s" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Skizzenprofil" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Skizze — nichts ausgewählt" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Skizzenlinie" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Skizzenkurve" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Skizzenpunkt" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d Skizzenelemente" # AI Translated msgid "select something first" @@ -24913,8 +25022,9 @@ msgstr "Ebene hinzugefügt — als Skizzenebene auswählen" msgid "Axis added" msgstr "Achse hinzugefügt" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Koordinatensystem hinzugefügt" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -24931,10 +25041,10 @@ msgstr "Formschräge benötigt eine gewählte Fläche — klicken Sie zuerst auf # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Noch nichts vorhanden — importieren Sie über die Werkzeugleiste eine STEP-Datei oder ein Netz,\n" -"oder klicken Sie auf eine Referenzebene und dann mit der rechten Maustaste darauf, um eine Skizze zu beginnen." +"oder klicken Sie auf „Skizze“ und dann auf eine Referenzebene, um eine Skizze zu beginnen." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -24944,9 +25054,10 @@ msgstr "Noch kein Volumenkörper — wählen Sie eine Skizze aus und klicken Sie msgid "Could not restore the CAD model from this project" msgstr "Das CAD-Modell konnte aus diesem Projekt nicht wiederhergestellt werden" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Das CAD-Modell konnte nicht wiederhergestellt werden: %s" # AI Translated #, c-format @@ -24969,17 +25080,35 @@ msgstr "Schnittansicht — die obere Hälfte wird angezeigt" msgid "Section view — showing the lower half" msgstr "Schnittansicht — die untere Hälfte wird angezeigt" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Flächen des Features werden gesucht…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Wählen Sie zuerst einen Körper aus — klicken Sie im Ansichtsfenster oder in der Körperliste darauf" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Das Modell wird neu aufgebaut — zoomen Sie erneut, wenn der Vorgang abgeschlossen ist" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s hat nichts Sichtbares, auf das gezoomt werden kann" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Dieser Körper hat noch kein Anzeigenetz — zuerst neu berechnen" +# AI Translated +msgid "Select something to zoom to" +msgstr "Wählen Sie etwas aus, auf das gezoomt werden soll" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Schließen Sie zuerst ab, was gerade geöffnet ist, oder brechen Sie es ab" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Wählen Sie zuerst einen Körper aus — klicken Sie im Ansichtsfenster oder in der Körperliste darauf" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Pfeile ziehen zum Verschieben, Ringe zum Drehen — dann bestätigen (Esc bricht ab)" @@ -25005,12 +25134,10 @@ msgstr "Klicken Sie auf eine Fläche des Volumenkörpers und drücken Sie dann F msgid "Placed on face — body laid flat on the bed" msgstr "Auf Fläche gelegt — Körper liegt flach auf dem Druckbett" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Bearbeitung abgelehnt: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25029,9 +25156,10 @@ msgstr "Dieser Körper hat kein Feature zum Löschen — verwenden Sie „Neue K msgid "feature %d" msgstr "Feature %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "%s gelöscht, das Feature, aus dem dieser Körper erzeugt wurde — Strg+Z stellt es wieder her" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -25423,12 +25551,14 @@ msgstr "STEP-Dateien (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP exportiert" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "STEP-Export fehlgeschlagen: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Auf Druckplatte übernehmen (als Körper) — jeden Körper als eigenes Objekt an Vorbereiten senden" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -25442,19 +25572,36 @@ msgstr "Nichts zu übernehmen — fügen Sie zuerst ein Feature hinzu" msgid "All bodies hidden — show one before committing" msgstr "Alle Körper ausgeblendet — blenden Sie vor dem Übernehmen einen ein" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu Kante" +msgstr[1] "%zu Kanten" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Mittellinie E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Linie E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Skizzenebene: %s — Werkzeug wählen" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Skizzenebene: %s.\n" +"Wählen Sie ein Werkzeug oder drücken Sie Menü für die Liste." # AI Translated msgid "Plane ready" @@ -25464,8 +25611,9 @@ msgstr "Ebene bereit" msgid "Axis ready" msgstr "Achse bereit" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Koordinatensystem bereit" # AI Translated msgid "Helix ready" @@ -25483,9 +25631,10 @@ msgstr "Skizze bereit" msgid "Mate ready" msgstr "Verknüpfung bereit" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Ungültig: %s" # AI Translated #, c-format @@ -25569,110 +25718,139 @@ msgstr "Variable bearbeiten" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "Variable „%s“ konnte nicht entfernt werden (wahrscheinlich noch von einem Feature-Ausdruck referenziert): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" ist kein Wert, der durch einen Ausdruck gesteuert werden kann" # AI Translated msgid "No binding for that field" msgstr "Keine Bindung für dieses Feld" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "Der Wert muss größer als null sein" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "Der Wert darf nicht negativ sein (null bedeutet koinzident)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Diese Bemaßung kann nicht erfüllt werden — die Skizze ist überbestimmt" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "%1% Abhängigkeit(en) können nicht auf diese Geometrie wirken (eine Ellipse oder Spline-Kurve oder ein Kreis der Größe null) und werden ignoriert" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Dieses Profil kreuzt sich an der roten Markierung selbst oder läuft auf sich zurück und umschließt daher keinen eindeutigen Bereich" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Seite" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Große Halbachse" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Kleine Halbachse" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "Der Winkel muss zwischen 0° und 360° liegen" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "Die große Halbachse darf nicht kürzer als die kleine Halbachse sein" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "Der Eckenradius muss kleiner als die Hälfte der kürzeren Seite sein" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "Das Langloch ist für seinen Radius zu breit — die Breite muss kleiner als der doppelte Radius sein" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1% kann nicht erfüllt werden — die Skizze ist überbestimmt" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Diese beiden Linien treffen sich nicht in einer Ecke — wählen Sie zwei Linien, die sich in einer Ecke treffen" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "Die Größe muss größer als null sein" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Abrunden: Der Radius reicht über einen Schenkel hinaus, oder die beiden Linien treffen sich nicht in einer Ecke" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Fasen: Der Abstand reicht über einen Schenkel hinaus, oder die beiden Linien treffen sich nicht in einer Ecke" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "%1% durch das Abrunden/Fasen ungültig gewordene Abhängigkeit(en) wurden entfernt" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Versetzen: Eine Ellipse oder ein Spline hat keine Parallele derselben Art — wählen Sie Linien, Bögen oder Kreise" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Der Skalierungsfaktor muss größer als null sein" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Kopien" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Die Anzahl der Kopien muss eine ganze Zahl von mindestens 2 sein" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "%1% Abhängigkeit(en) durch die Transformation aufgehoben" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Die Kopien der Anordnung haben keine Abhängigkeiten — der Solver hat jede Bindung abgelehnt" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "Rechtsklick oder Doppelklick zum Beenden, Startpunkt klicken zum Schließen" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Verlängern: eine Linie oder einen Bogen klicken, die/der ein anderes Element erreichen kann" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Trimmen: ein Segment dort klicken, wo es ein anderes Element kreuzt" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Zum Anwenden Enter oder ✓ drücken, zum Verwerfen Esc" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Für dieses Element gibt es noch keine Bemaßung — klicken Sie auf eine Linie, einen Kreis, einen Bogen oder zwei Punkte" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Einen zweiten Punkt oder eine Linie anklicken, um den Abstand dazu zu messen" # AI Translated msgid "Enter a number" @@ -25708,8 +25886,12 @@ msgid "Sketch" msgstr "Skizze" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Auf eine Fläche oder eine Referenzebene klicken, dann ein Zeichenwerkzeug wählen" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Wählen Sie eine ebene Fläche oder eine Referenzebene, um darauf zu skizzieren" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Auf der ausgewählten ebenen Fläche oder Ebene skizzieren oder anschließend eine anklicken" # AI Translated msgctxt "Design" @@ -25731,9 +25913,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Aufdicken" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Verbinden" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -25786,17 +25969,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Oberfläche aufdicken" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Oberfläche aufdicken benötigt einen Flächenkörper — erstellen Sie zuerst einen mit einem Oberflächen-Werkzeug" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Bohrung" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -25811,8 +25992,9 @@ msgctxt "Design" msgid "Split" msgstr "Teilen" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Teilen benötigt einen Volumenkörper — fügen Sie zuerst einen hinzu oder importieren Sie einen" # AI Translated msgid "Split the body along a picked face into two solids" @@ -25858,8 +26040,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Versetzte Oberfläche" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Versetzte Oberfläche benötigt einen Flächenkörper — erstellen Sie zuerst einen mit einem Oberflächen-Werkzeug" # AI Translated msgctxt "Design" @@ -25889,8 +26072,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Muster entlang Kurve" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Muster entlang Kurve benötigt einen Körper und eine Kurve" # AI Translated msgid "Repeat the body along a picked curve" @@ -25911,8 +26095,9 @@ msgctxt "Design" msgid "Align to" msgstr "Ausrichten an" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Ausrichten benötigt einen Körper — fügen Sie zuerst einen hinzu oder importieren Sie einen" # AI Translated msgid "Align the body to a picked face or plane" @@ -25928,9 +26113,10 @@ msgctxt "Design" msgid "Axis" msgstr "Achse" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Koordinatensystem" # AI Translated msgctxt "Design" @@ -25946,9 +26132,10 @@ msgstr "Messen" msgid "Measure between the picked points, edges or faces" msgstr "Zwischen den gewählten Punkten, Kanten oder Flächen messen" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Volumen und Oberfläche" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -25990,12 +26177,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Fläche löschen" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Farbe" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Die Anzeigefarbe des ausgewählten Körpers festlegen" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Auf Auswahl zoomen" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Die Auswahl in der Ansicht einpassen und dabei die Blickrichtung beibehalten" # AI Translated msgctxt "Design" @@ -26034,9 +26232,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Eckrechteck" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Mittelpunktrechteck" # AI Translated msgctxt "Design" @@ -26048,9 +26247,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Abgerundetes Rechteck" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Mittelpunktkreis" # AI Translated msgctxt "Design" @@ -26072,9 +26272,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Tangentialer Bogen" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Mittelpunktbogen" # AI Translated msgctxt "Design" @@ -26106,48 +26307,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Dreieck" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Dreieck — Mittelpunkt, dann einen Eckpunkt klicken" # AI Translated msgctxt "Design" msgid "Square" msgstr "Quadrat" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Quadrat — Mittelpunkt, dann einen Eckpunkt klicken" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Fünfeck" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Fünfeck — Mittelpunkt, dann einen Eckpunkt klicken" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Sechseck" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Sechseck — Mittelpunkt, dann einen Eckpunkt klicken" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Achteck" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Achteck — Mittelpunkt, dann einen Eckpunkt klicken" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Zwölfeck" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Zwölfeck — Mittelpunkt, dann einen Eckpunkt klicken" # AI Translated msgctxt "Design" @@ -26177,8 +26384,9 @@ msgctxt "Design" msgid "Text" msgstr "Text" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Text eingeben; er wird zu einem Text-Feature auf der Ebene dieser Skizze und kann später bearbeitet werden" # AI Translated msgctxt "Design" @@ -26295,27 +26503,34 @@ msgstr "Winkel / Abstand…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Den Winkel zwischen zwei Linien oder den Abstand zwischen den beiden gewählten Elementen eingeben" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Einzufügenden Text eingeben" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Fett" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Kursiv" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Diese Schriftart kann nicht für Text verwendet werden — wählen Sie eine andere" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Text eingeben, um seine Größe zu sehen" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Diese Schriftart hat keinen Umriss für diesen Text" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Größe: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -26413,8 +26628,9 @@ msgstr "Profil" msgid "Start new profile (for holes)" msgstr "Neues Profil beginnen (für Löcher)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segmente" # AI Translated msgid "Sides" @@ -26428,20 +26644,23 @@ msgstr "Zum Zeichnen in die Ansicht klicken" msgid "Snap to grid" msgstr "Am Raster einrasten" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Rasterabstand" # AI Translated msgid "Outer" msgstr "Außen" +# AI Translated msgid "closed" -msgstr "" +msgstr "geschlossen" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% Punkte %4%" # AI Translated msgid "XY (Top)" @@ -26478,8 +26697,9 @@ msgstr[1] "%zu geschlossene Profile" msgid "Draw a closed profile to enable" msgstr "Zum Aktivieren ein geschlossenes Profil zeichnen" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Alle löschen" # AI Translated msgid "Empty result" @@ -30582,6 +30802,39 @@ msgstr "" "Verwerfungen vermeiden\n" "Wussten Sie, dass beim Drucken von Materialien, die zu Verwerfungen neigen, wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die Wahrscheinlichkeit von Verwerfungen verringert werden kann?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Experimentell) Drucker-Agenten anstelle von Druck-Hosts verwenden" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "FEATURES" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Klicken Sie im Ansichtsfenster auf eine Fläche oder eine Referenzebene, dann auf ein Skizzenwerkzeug" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Klicken Sie auf eine Fläche oder eine Referenzebene, dann auf ein Skizzenwerkzeug." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "%s-Ebene ausgewählt — Rechtsklick für die Zeichenwerkzeuge" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Noch nichts vorhanden — importieren Sie über die Werkzeugleiste eine STEP-Datei oder ein Netz,\n" +#~ "oder klicken Sie auf eine Referenzebene und dann mit der rechten Maustaste darauf, um eine Skizze zu beginnen." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Auf eine Fläche oder eine Referenzebene klicken, dann ein Zeichenwerkzeug wählen" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 0b7eb57598..cafb65fa34 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2026-06-17 15:44-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: \n" @@ -3164,7 +3164,7 @@ msgstr "" msgid "Remove parameter" msgstr "" -msgid "to" +msgid "Range" msgstr "" msgid "Add height range" @@ -5060,9 +5060,6 @@ msgstr "" msgid "layers" msgstr "" -msgid "Range" -msgstr "" - msgid "Empty string" msgstr "" @@ -9460,14 +9457,6 @@ msgstr "" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "" -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "" - -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" - msgid "Experimental Features" msgstr "" @@ -9479,6 +9468,14 @@ msgid "" "Highly experimental! Slow and may create artifact." msgstr "" +msgid "Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + msgid "Allow Abnormal Storage" msgstr "" @@ -9641,6 +9638,9 @@ msgstr "" msgid "Please input layer value (>= 2)." msgstr "" +msgid "to" +msgstr "" + msgid "Plate name" msgstr "" @@ -14775,6 +14775,12 @@ msgstr "" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "" +msgid "Fill pattern tops" +msgstr "" + +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "" + msgid "Infill combination - Max layer height" msgstr "" @@ -20417,6 +20423,21 @@ msgstr "" msgid "The filament model is unknown. A random filament preset will be used." msgstr "" +msgid "Hide reference planes and axes" +msgstr "" + +msgid "Show reference planes and axes" +msgstr "" + +msgid "Hide the printer bed and its plate grid" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "" + msgid "Construction" msgstr "" @@ -20502,26 +20523,10 @@ msgstr "" msgid "Bed hidden" msgstr "" -msgid "FEATURES" +msgid "Reference planes shown" msgstr "" -msgid "Sketch" -msgstr "" - -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "" - -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "" - -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" - -msgid "Click a face or a reference plane, then a sketch tool." +msgid "Reference planes hidden" msgstr "" msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -20789,12 +20794,6 @@ msgstr "" msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "" -msgid "Import STEP (editable B-rep solid)" -msgstr "" - -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "" - msgid "Constrain selected sketch" msgstr "" @@ -21107,10 +21106,16 @@ msgstr "" msgid "New Design — clear the feature tree" msgstr "" +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + msgid "Export STEP…" msgstr "" -msgid "Show the printer bed and its plate grid" +msgid "Create a new sketch" msgstr "" msgid "Place on Face (F) — lay the picked face on the bed" @@ -21143,6 +21148,9 @@ msgstr "" msgid "Height / Y" msgstr "" +msgid "Sketch" +msgstr "" + msgid "Distance X" msgstr "" @@ -21621,6 +21629,9 @@ msgstr "" msgid "Value" msgstr "" +msgid "Pick a tool, or press Menu for the list." +msgstr "" + msgid "Constraints" msgstr "" @@ -21650,6 +21661,9 @@ msgstr "" msgid "Show / hide" msgstr "" +msgid "Zoom to selection" +msgstr "" + msgid "Check interference — find overlapping bodies" msgstr "" @@ -21707,6 +21721,9 @@ msgstr "" msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "" +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "" + #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" msgstr "" @@ -21749,10 +21766,6 @@ msgstr "" msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" msgstr "" -#, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "" - #, c-format, boost-format msgid "%s plane selected — right-click to sketch on it, or click an object to select it" msgstr "" @@ -21807,7 +21820,7 @@ msgstr "" msgid "Text unchanged" msgstr "" -msgid "Text cancelled" +msgid "Text canceled" msgstr "" msgid "Import SVG" @@ -22427,7 +22440,7 @@ msgstr "" msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -22459,12 +22472,25 @@ msgstr "" msgid "Finding the feature's faces…" msgstr "" -msgid "Select a body first — click it in the viewport or the Bodies list" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "" + +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" msgstr "" msgid "That body has no display mesh yet — recompute first" msgstr "" +msgid "Select something to zoom to" +msgstr "" + +msgid "Finish or cancel what is open first" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "" @@ -22484,9 +22510,6 @@ msgstr "" msgid "Placed on face — body laid flat on the bed" msgstr "" -msgid "Finish or cancel what is open first" -msgstr "" - #, c-format, boost-format msgid "Edit rejected: %s" msgstr "" @@ -22835,6 +22858,16 @@ msgstr "" msgid "Line E%d" msgstr "" +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + msgid "Plane ready" msgstr "" @@ -23051,7 +23084,10 @@ msgctxt "Design" msgid "Sketch" msgstr "" -msgid "Click a face or a reference plane, then pick a drawing tool" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "" + +msgid "Sketch on the selected flat face or plane, or click one next" msgstr "" msgctxt "Design" @@ -23121,9 +23157,6 @@ msgctxt "Design" msgid "Hole" msgstr "" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - msgctxt "Design" msgid "Thread" msgstr "" @@ -23286,6 +23319,13 @@ msgstr "" msgid "Set the selected body's display color" msgstr "" +msgctxt "Design" +msgid "Zoom to selection" +msgstr "" + +msgid "Frame the selection in the view, keeping the view direction" +msgstr "" + msgctxt "Design" msgid "Delete" msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 7e1ec1405b..4e6a3d8001 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: \n" "Last-Translator: Ian A. Bassi <>\n" "Language-Team: \n" @@ -3267,8 +3267,8 @@ msgstr "Perfil de proceso adicional" msgid "Remove parameter" msgstr "Eliminar parámetro" -msgid "to" -msgstr "a" +msgid "Range" +msgstr "Rango" msgid "Add height range" msgstr "Añadir rango de altura" @@ -5271,9 +5271,6 @@ msgstr "nombre del parámetro" msgid "layers" msgstr "capas" -msgid "Range" -msgstr "Rango" - msgid "Empty string" msgstr "Cadena vacía" @@ -8530,8 +8527,9 @@ msgstr "La impresora conectada es %s. Debe coincidir con el preajuste del proyec msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "¿Desea sincronizar la información de la impresora y cambiar automáticamente el preajuste?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Este proyecto contiene un modelo creado en la pestaña Diseño y ninguna otra geometría. Active \"Función CAD (experimental)\" en Preferencias y reinicie para verlo y editarlo; se conserva al guardar el proyecto." msgid "The file does not contain any geometry data." msgstr "El archivo no contiene ninguna información geométrica." @@ -9553,8 +9551,9 @@ msgstr "En la pestaña Diseño, dibuja un conector de relación de posición com msgid "Auto-close sketch loops" msgstr "Cerrar automáticamente los contornos del croquis" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Trata los extremos del croquis separados menos de 0,001 mm como una sola unión y suelda el contorno para cerrarlo. Desactivado: solo se unen los extremos exactamente coincidentes, por lo que un contorno con un pequeño hueco se muestra abierto en lugar de cerrarse automáticamente. Se guarda con cada diseño; se aplica a los diseños iniciados después del cambio." msgid "Pan" msgstr "Desplazamiento" @@ -9972,18 +9971,6 @@ msgstr "Mostrar ajustes preestablecidos no compatibles" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Mostrar los ajustes preestablecidos incompatibles o no compatibles en los menús desplegables de impresoras y filamentos. Estos ajustes preestablecidos no se pueden seleccionar." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Experimental) Usar agentes de impresora en lugar de hosts de impresión" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Envía los trabajos de impresión de impresoras que no son Bambu a través de los agentes de plugin de impresora en lugar del flujo clásico de subida al host de impresión.\n" -"Cuando está desactivado, OrcaSlicer utiliza el comportamiento heredado del host de impresión." - msgid "Experimental Features" msgstr "Funciones experimentales" @@ -9997,6 +9984,18 @@ msgstr "" "Intenta conservar las característica pintadas (color, costuras, soportes, piel rugosa, etc.) tras modificar la malla del objeto (por ejemplo, al cortar, volver a cargar desde el disco, simplificar, corregir, etc.).\n" "¡Muy experimental! Es lento y puede generar artefactos." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Usar agentes de impresora en lugar de hosts de impresión" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Envía los trabajos de impresión de impresoras que no son Bambu a través de los agentes de plugin de impresora en lugar del flujo clásico de subida al host de impresión.\n" +"Cuando está desactivado, OrcaSlicer utiliza el comportamiento heredado del host de impresión." + msgid "Allow Abnormal Storage" msgstr "Permitir almacenamiento anómalo" @@ -10161,6 +10160,9 @@ msgstr "Secuencia de filamentos de otras capas" msgid "Please input layer value (>= 2)." msgstr "Introduzca el valor de la capa (>= 2)." +msgid "to" +msgstr "a" + msgid "Plate name" msgstr "Nombre de Cama" @@ -15863,6 +15865,14 @@ msgstr "Relleno simétrico respecto al eje Y" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Si el modelo tiene dos piezas simétricas respecto al eje Y y desea que tengan texturas simétricas, active esta opción en una de las piezas." +# AI Translated +msgid "Fill pattern tops" +msgstr "Rellenar las partes superiores del patrón" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Elija esta opción si desea rellenar por completo las partes superiores del patrón de relleno" + msgid "Infill combination - Max layer height" msgstr "Combinación de relleno - Altura máxima de la capa" @@ -21945,6 +21955,26 @@ msgstr "Es posible que el filamento no sea compatible con la configuración de l msgid "The filament model is unknown. A random filament preset will be used." msgstr "Modelo de filamento desconocido. Se utilizará la configuración de filamento genérico. Se utilizará una configuración de filamento aleatorio." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Ocultar los planos de referencia y los ejes" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Mostrar los planos de referencia y los ejes" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Ocultar la cama de la impresora y su cuadrícula" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Mostrar la cama de la impresora y su cuadrícula" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Haga clic en un plano de referencia o en una cara plana para dibujar un croquis — Esc cancela" + # AI Translated msgid "Construction" msgstr "Construcción" @@ -21970,8 +22000,9 @@ msgstr "Círculo — haga clic en el centro y luego en el radio" msgid "Arc — click start, end, then a point" msgstr "Arco — haga clic en el inicio, en el final y luego en un punto" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Ranura — dos extremos de la línea central y luego el ancho" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -22045,8 +22076,9 @@ msgstr "Ejes globales visibles" msgid "World axes hidden" msgstr "Ejes globales ocultos" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Vista axonométrica, ajustada" # AI Translated msgid "Bed shown" @@ -22057,34 +22089,12 @@ msgid "Bed hidden" msgstr "Cama oculta" # AI Translated -msgid "FEATURES" -msgstr "OPERACIONES" +msgid "Reference planes shown" +msgstr "Planos de referencia visibles" # AI Translated -msgid "Sketch" -msgstr "Croquis" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Plano del croquis: %s — elija una herramienta" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Haga clic en una cara o en un plano de referencia en la ventana gráfica y luego en una herramienta de croquis" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Plano del croquis: %s.\n" -"Elija una herramienta o pulse Menú para ver la lista." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Haga clic en una cara o en un plano de referencia y luego en una herramienta de croquis." +msgid "Reference planes hidden" +msgstr "Planos de referencia ocultos" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -22270,8 +22280,9 @@ msgstr "Eje" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Eje de referencia (dos puntos, normal de cara, eje de cilindro, dos planos, a lo largo de arista)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Sistema de coordenadas" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -22335,8 +22346,9 @@ msgstr "Reflejar requiere un cuerpo — añada o importe uno primero" msgid "Mate" msgstr "Relación de posición" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Ensamblaje: alinear dos sistemas de coordenadas (fija, plana, de revolución, deslizante, cilíndrica)" # AI Translated msgid "Boolean (combine bodies)" @@ -22435,14 +22447,6 @@ msgstr "Roscar una superficie cilíndrica (taladro interior / exterior) o una ar msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Elija una superficie cilíndrica (taladro / exterior) o una arista circular para la rosca" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Importar STEP (sólido B-rep editable)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Importar malla (STL/OBJ) como sólido B-rep editable" - # AI Translated msgid "Constrain selected sketch" msgstr "Restringir el croquis seleccionado" @@ -22475,8 +22479,9 @@ msgstr "Haga clic en el inicio y luego en el final — después establezca la lo msgid "Polyline" msgstr "Polilínea" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Haga clic en los puntos; haga clic en el primer punto para cerrar el contorno, clic derecho o Intro para terminar la cadena" # AI Translated msgid "Corner rectangle" @@ -22566,8 +22571,9 @@ msgstr "Haga clic en el centro, luego en el inicio y después en un punto para e msgid "Slot" msgstr "Ranura" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Haga clic en los dos extremos de la línea central y luego en un punto para el ancho" # AI Translated msgid "Arc slot" @@ -22597,8 +22603,9 @@ msgstr "Haga clic en el centro, el extremo del eje mayor, el punto del eje menor msgid "Spline" msgstr "Spline" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Haga clic en los puntos de control; doble clic, clic derecho o Intro para terminar" # AI Translated msgid "Click to place a point" @@ -22652,15 +22659,17 @@ msgstr "Elija una línea como eje de reflexión y luego las entidades que reflej msgid "Trim" msgstr "Recortar" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Haga clic en un segmento para recortarlo hasta su intersección más cercana; Esc para salir" # AI Translated msgid "Extend" msgstr "Extender" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Haga clic en una línea o un arco para extenderlo hasta la entidad más cercana; Esc para salir" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -22843,13 +22852,21 @@ msgstr "Distancia vertical" msgid "New Design — clear the feature tree" msgstr "Nuevo diseño — vaciar el árbol de operaciones" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Importar STEP (sólido B-rep editable)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Importar malla (STL/OBJ) como sólido B-rep editable" + # AI Translated msgid "Export STEP…" msgstr "Exportar STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Mostrar la cama de la impresora y su cuadrícula" +msgid "Create a new sketch" +msgstr "Crear un nuevo croquis" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -22863,20 +22880,25 @@ msgstr "Vista de sección — oculta parte del modelo para ver su interior. ReP msgid "Flip Section — show the opposite half" msgstr "Invertir sección — mostrar la mitad opuesta" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Elegir cómo se envían los cuerpos con Enviar a la cama" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Enviar a la cama" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Todos los cuerpos se convierten en un único objeto con una pieza por cuerpo, conservando sus posiciones relativas" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Enviar a la cama (como cuerpos)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Cada cuerpo se convierte en un objeto propio, colocado por separado" # AI Translated msgid "Width / X" @@ -22886,6 +22908,10 @@ msgstr "Ancho / X" msgid "Height / Y" msgstr "Alto / Y" +# AI Translated +msgid "Sketch" +msgstr "Croquis" + # AI Translated msgid "Distance X" msgstr "Distancia X" @@ -23088,8 +23114,9 @@ msgstr "Circular" msgid "Direction" msgstr "Dirección" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Ángulo total (°)" # AI Translated msgid "Boolean" @@ -23473,11 +23500,13 @@ msgstr "Cilíndrica — ejes colineales; giro libre + deslizamiento axial" msgid "Kind" msgstr "Tipo" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (fijo)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (se mueve)" # AI Translated msgid "Angle °" @@ -23515,6 +23544,10 @@ msgstr "(sin vínculos)" msgid "Value" msgstr "Valor" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Elija una herramienta o pulse Menú para ver la lista." + # AI Translated msgid "Constraints" msgstr "Restricciones" @@ -23553,6 +23586,10 @@ msgstr "Bajar" msgid "Show / hide" msgstr "Mostrar / ocultar" +# AI Translated +msgid "Zoom to selection" +msgstr "Zoom a la selección" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Comprobar interferencias — buscar cuerpos superpuestos" @@ -23574,14 +23611,17 @@ msgstr "Cuerpo %d seleccionado — clic derecho para ver lo que se le puede apli msgid "Variables" msgstr "Variables" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Añadir variable" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Editar variable" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Eliminar variable" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -23600,9 +23640,10 @@ msgstr "Croquis actualizado" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Croquis creado (%zu cotas conductoras) — selecciónelo y luego haga clic derecho para extruir" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Longitud %.2f mm, ángulo %.1f°" # AI Translated msgid "(locked)" @@ -23624,6 +23665,10 @@ msgstr "Región seleccionada — clic derecho para extruir o doble clic para edi msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Croquis seleccionado — clic derecho para extruir o doble clic para editar" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Esa cara no es plana — haga clic en una cara plana o en un plano de referencia" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -23652,30 +23697,29 @@ msgstr "Cuerpo %d: cara %d seleccionada — clic derecho para empujarla/tirar de msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Cara %d seleccionada — clic derecho para empujarla/tirar de ella, o haga clic de nuevo para todo el cuerpo" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Cuerpo %d: %zu arista seleccionada — Shift+clic añade o quita una, Redondeo/Chaflán las acaba todas" +msgstr[1] "Cuerpo %d: %zu aristas seleccionadas — Shift+clic añade o quita una, Redondeo/Chaflán las acaba todas" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "%zu arista seleccionada — Shift+clic añade o quita una, Redondeo/Chaflán las acaba todas" +msgstr[1] "%zu aristas seleccionadas — Shift+clic añade o quita una, Redondeo/Chaflán las acaba todas" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "Plano %s seleccionado — clic derecho para las herramientas de dibujo" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Cuerpo %d: arista %d seleccionada — Shift+clic para añadir aristas, o haga clic de nuevo para todo el cuerpo" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Arista %d seleccionada — Shift+clic para añadir aristas, o haga clic de nuevo para todo el cuerpo" # AI Translated #, c-format, boost-format @@ -23700,8 +23744,9 @@ msgstr "Herramienta cerrada" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Croquis conservado — Confirmar para aplicarlo, Cancelar para descartarlo" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Seleccione algo para eliminarlo" # AI Translated msgid "✗ Conflicting constraints" @@ -23733,17 +23778,21 @@ msgstr "Editando: Croquis %d · N = vista normal al plano · Confirmar o msgid "OK — %zu triangles" msgstr "OK — %zu triángulos" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Edite el texto — Intro aplica, Esc lo deja como estaba" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Escriba el texto — aparece en la vista mientras escribe; Intro lo inserta, Esc cancela" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Texto sin cambios" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Texto cancelado" # AI Translated msgid "Import SVG" @@ -23769,9 +23818,10 @@ msgstr "Leyendo STEP…" msgid "No solids found in STEP" msgstr "No se encontraron sólidos en el STEP" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "Error al importar el STEP: %s" # AI Translated msgid "Rebuilding model…" @@ -23796,9 +23846,10 @@ msgstr "Archivos de malla (*.stl;*.obj)|*.stl;*.obj|Todos los archivos|*.*" msgid "Could not read the STL file" msgstr "No se pudo leer el archivo STL" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "No se pudo leer el archivo OBJ: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -23823,20 +23874,23 @@ msgstr "" msgid "Large mesh" msgstr "Malla grande" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Error en la conversión de la malla: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "La conversión de la malla no produjo geometría" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Malla" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Error al importar la malla: %s" # AI Translated #, c-format, boost-format @@ -23865,17 +23919,19 @@ msgstr " — arrastre para colocar/dimensionar y luego confirme" msgid "Insert canceled" msgstr "Inserción cancelada" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Arrastre una esquina para escalar y el centro para mover — Intro o ✓ al terminar, Esc para descartar" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Croquis añadido (plano: %s) — selecciónelo y luego haga clic derecho para extruir" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "No se pudo reconstruir el modelo: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -23947,18 +24003,21 @@ msgstr "Elija primero un croquis con una línea abierta" msgid "Add at least one face to delete first" msgstr "Añada primero al menos una cara que eliminar" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Relación de posición requiere dos sistemas de coordenadas — créelos primero" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Relación de posición: A y B deben ser sistemas de coordenadas distintos" # AI Translated msgid "Mate rejected" msgstr "Relación de posición rechazada" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Interferencia requiere al menos dos cuerpos" # AI Translated msgid "No interference found" @@ -23969,36 +24028,43 @@ msgstr "No se encontraron interferencias" msgid "Body %d" msgstr "Cuerpo %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu par superpuesto: %s" +msgstr[1] "%zu pares superpuestos: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Seleccione un cuerpo para medirlo" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "No se pudo medir este cuerpo" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: cuerpo de superficie, área %.2f mm², sin volumen — engróselo para obtenerlo" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: volumen %.2f mm³, área %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Matriz requiere un cuerpo sólido — añada o importe uno primero" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Booleana requiere dos cuerpos — añada o importe un segundo" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -24013,35 +24079,45 @@ msgstr "Cara elegida (Cuerpo %d)" msgid "Picked face" msgstr "Cara elegida" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "no se pudo unir la nueva forma al cuerpo" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "no se pudo restar la nueva forma del cuerpo" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "no se pudo calcular la intersección de las formas" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "nada en el historial crea todavía un sólido" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "el perfil del croquis no es un contorno cerrado limpio" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "la herramienta no toca el cuerpo" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "una expresión usa una variable que no existe" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "una expresión divide entre cero" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "dos variables se definen la una en función de la otra" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "falló una operación geométrica" # AI Translated #, c-format, boost-format @@ -24080,15 +24156,17 @@ msgstr "Cota — haga clic en el segundo punto" msgid "Line — click the start point" msgstr "Línea — haga clic en el punto inicial" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Línea — haga clic en el punto final; después se pueden escribir su longitud y su ángulo" # AI Translated msgid "Polyline — click the first point" msgstr "Polilínea — haga clic en el primer punto" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Polilínea — haga clic en el siguiente punto · haga clic en el punto inicial para cerrarla · clic derecho, doble clic o Intro para terminar la cadena" # AI Translated msgid "Rectangle — click one corner" @@ -24134,8 +24212,9 @@ msgstr "Rectángulo redondeado — haga clic para definir el radio de esquina" msgid "Circle — click the center" msgstr "Círculo — haga clic en el centro" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Círculo — haga clic para definir el radio; después se puede escribir" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -24261,18 +24340,21 @@ msgstr "Arco elíptico — haga clic donde termina el arco" msgid "Spline — click the first control point" msgstr "Spline — haga clic en el primer punto de control" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline — haga clic en el siguiente punto de control · clic derecho, doble clic o Intro para terminar la curva" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Punto — haga clic para colocar uno; la herramienta sigue activa para colocar más" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Recortar — haga clic en un segmento donde cruza otra entidad · Esc para salir" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Extender — haga clic en una línea o un arco para prolongarlo hasta la entidad más cercana · Esc para salir" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -24282,8 +24364,9 @@ msgstr "Redondeo — haga clic en la primera de dos líneas que se unen" msgid "Fillet — click the second line" msgstr "Redondeo — haga clic en la segunda línea" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Redondeo — arrastre la flecha o haga clic en el número para escribir el radio · Intro aplica · Esc cancela" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -24293,63 +24376,74 @@ msgstr "Chaflán — haga clic en la primera de dos líneas que se unen" msgid "Chamfer — click the second line" msgstr "Chaflán — haga clic en la segunda línea" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Chaflán — arrastre la flecha o haga clic en el número para escribir la distancia · Intro aplica · Esc cancela" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Desfase — haga clic en una curva; se desfasa todo su contorno" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Desfase — arrastre la flecha a cualquier lado o haga clic en el número para escribir la distancia · Intro aplica · Esc cancela" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Reflejar — haga clic primero en la LÍNEA respecto a la que reflejar (sirve una línea de construcción)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Reflejar — eje definido · ahora haga clic en las entidades que reflejar · Esc cancela" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Reflejar — eje definido · %d para reflejar · haga clic en otra para añadirla o quitarla · Intro aplica" # AI Translated msgid "Move — click the entities to move" msgstr "Mover — haga clic en las entidades que mover" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Mover — arrastre el tirador o haga clic en el número para escribir la distancia · Intro aplica" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Rotar — haga clic en las entidades que rotar" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Rotar — arrastre el tirador o haga clic en el número para escribir el ángulo · Intro aplica" # AI Translated msgid "Scale — click the entities to scale" msgstr "Escalar — haga clic en las entidades que escalar" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Escalar — arrastre el tirador o haga clic en el número para escribir el factor · Intro aplica" # AI Translated msgid "Array — click the entities to repeat" msgstr "Matriz — haga clic en las entidades que repetir" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Matriz — arrastre el tirador para definir el paso, haga clic en el número para escribirlo · Intro aplica" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Matriz polar — haga clic en las entidades que repetir" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Matriz polar — arrastre el tirador para definir el ángulo, haga clic en el número para escribirlo · Intro aplica" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Arrastre una esquina para escalar y el centro para mover · Intro o ✓ al terminar, Esc para descartar" # AI Translated msgid " · Esc goes back to Select" @@ -24359,62 +24453,77 @@ msgstr " · Esc vuelve a Seleccionar" msgid " · click a constraint badge to remove it" msgstr " · haga clic en el distintivo de una restricción para eliminarla" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — cuerpo sólido" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — cuerpo de superficie" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Cara plana %d de %s" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Cara cilíndrica %d de %s" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Cara %d de %s" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu arista de %s" +msgstr[1] "%zu aristas de %s" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Arista recta %d de %s" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Arista circular %d de %s" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Vértice de %s" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Perfil de croquis" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Croquis — nada seleccionado" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Línea de croquis" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Curva de croquis" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Punto de croquis" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d entidades de croquis" # AI Translated msgid "select something first" @@ -24477,8 +24586,9 @@ msgstr "Plano añadido — elíjalo como plano de croquis" msgid "Axis added" msgstr "Eje añadido" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Sistema de coordenadas añadido" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -24495,10 +24605,10 @@ msgstr "Desmoldeo requiere una cara elegida — haga clic primero en una cara la # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Aún no hay nada — importe un STEP o una malla desde la barra de herramientas,\n" -"o haga clic en un plano de referencia y luego clic derecho sobre él para empezar un croquis." +"o pulse Croquis y haga clic en un plano de referencia para empezar un croquis." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -24508,9 +24618,10 @@ msgstr "Aún no hay ningún sólido — seleccione un croquis y haga clic derech msgid "Could not restore the CAD model from this project" msgstr "No se pudo restaurar el modelo CAD de este proyecto" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "No se pudo restaurar el modelo CAD: %s" # AI Translated #, c-format @@ -24533,17 +24644,35 @@ msgstr "Vista de sección — mostrando la mitad superior" msgid "Section view — showing the lower half" msgstr "Vista de sección — mostrando la mitad inferior" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Buscando las caras de la operación…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Seleccione primero un cuerpo — haga clic en él en la ventana gráfica o en la lista Cuerpos" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "El modelo se está reconstruyendo — vuelva a hacer zoom cuando termine" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s no tiene nada visible para hacer zoom" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Ese cuerpo aún no tiene malla de visualización — recalcule primero" +# AI Translated +msgid "Select something to zoom to" +msgstr "Seleccione algo para hacer zoom" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Termine o cancele primero lo que está abierto" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Seleccione primero un cuerpo — haga clic en él en la ventana gráfica o en la lista Cuerpos" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Arrastre las flechas para mover y los anillos para rotar — luego confirme (Esc cancela)" @@ -24569,12 +24698,10 @@ msgstr "Haga clic en una cara del sólido y luego pulse F" msgid "Placed on face — body laid flat on the bed" msgstr "Colocado sobre cara — cuerpo apoyado sobre la cama" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Edición rechazada: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -24593,9 +24720,10 @@ msgstr "Este cuerpo no tiene ninguna operación que eliminar — use Nuevo dise msgid "feature %d" msgstr "operación %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "Se ha eliminado %s, la operación a partir de la cual se creó este cuerpo — Ctrl+Z la restaura" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -24987,12 +25115,14 @@ msgstr "Archivos STEP (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP exportado" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "Error al exportar el STEP: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Enviar a la cama (como cuerpos) — enviar cada cuerpo a Preparar como un objeto independiente" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -25006,19 +25136,36 @@ msgstr "Nada que enviar — añada primero una operación" msgid "All bodies hidden — show one before committing" msgstr "Todos los cuerpos están ocultos — muestre uno antes de enviar" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu arista" +msgstr[1] "%zu aristas" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Línea central E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Línea E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Plano del croquis: %s — elija una herramienta" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Plano del croquis: %s.\n" +"Elija una herramienta o pulse Menú para ver la lista." # AI Translated msgid "Plane ready" @@ -25028,8 +25175,9 @@ msgstr "Plano listo" msgid "Axis ready" msgstr "Eje listo" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Sistema de coordenadas listo" # AI Translated msgid "Helix ready" @@ -25047,9 +25195,10 @@ msgstr "Croquis listo" msgid "Mate ready" msgstr "Relación de posición lista" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "No válido: %s" # AI Translated #, c-format @@ -25133,110 +25282,139 @@ msgstr "Editar variable" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "No se pudo eliminar la variable '%s' (probablemente aún la usa la expresión de una operación): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" no es un valor que una expresión pueda controlar" # AI Translated msgid "No binding for that field" msgstr "No hay vínculo para ese campo" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "El valor debe ser mayor que cero" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "El valor no puede ser negativo (cero significa coincidente)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Esa cota no se puede satisfacer — el croquis tiene exceso de restricciones" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "%1% restricción(es) ignorada(s) por no poder actuar sobre esta geometría (una elipse o una curva spline, o un círculo de tamaño cero)" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Este perfil se cruza o se repliega sobre sí mismo en la marca roja, por lo que no delimita una única región" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Lado" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Semieje mayor" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Semieje menor" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "El ángulo debe estar entre 0° y 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "El semieje mayor no puede ser más corto que el semieje menor" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "El radio de esquina debe ser menor que la mitad del lado más corto" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "La ranura es demasiado ancha para su radio — el ancho debe ser menor que el doble del radio" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1%: no se puede satisfacer — el croquis tiene exceso de restricciones" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Esas dos líneas no se encuentran en una esquina — elija dos líneas que sí lo hagan" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "El tamaño debe ser mayor que cero" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Redondeo: el radio sobrepasa uno de los lados, o las dos líneas no se encuentran en una esquina" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Chaflán: la distancia sobrepasa uno de los lados, o las dos líneas no se encuentran en una esquina" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "%1% restricción(es) eliminada(s) al quedar invalidada(s) por el redondeo/chaflán" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Desfase: una elipse o una spline no tiene una paralela de su mismo tipo — elija líneas, arcos o círculos" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "El factor de escala debe ser mayor que cero" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Copias" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "El número de copias debe ser un número entero, 2 o más" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "%1% restricción(es) liberada(s) por la transformación" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Las copias de la matriz quedan sin restringir — el solucionador rechazó todos los vínculos" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "clic derecho o doble clic para terminar; clic en el inicio para cerrar" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Extender: haga clic en una línea o un arco que pueda alcanzar otra entidad" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Recortar: haga clic en un segmento donde cruce otra entidad" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Pulse Intro o ✓ para aplicar, Esc para descartar" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Aún no hay cota para esa entidad — haga clic en una línea, un círculo, un arco o dos puntos" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Haga clic en un segundo punto o en una línea para medir la distancia hasta ella" # AI Translated msgid "Enter a number" @@ -25271,8 +25449,12 @@ msgid "Sketch" msgstr "Croquis" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Haga clic en una cara o en un plano de referencia y luego elija una herramienta de dibujo" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Seleccione una cara plana o un plano de referencia para dibujar un croquis" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Dibujar un croquis en la cara plana o el plano seleccionados, o hacer clic después en una cara o un plano" # AI Translated msgctxt "Design" @@ -25294,9 +25476,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Engrosar" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Unir" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -25349,17 +25532,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Engrosar superficie" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Engrosar superficie requiere un cuerpo de superficie — cree uno primero con una herramienta de superficie" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Agujero" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -25374,8 +25555,9 @@ msgctxt "Design" msgid "Split" msgstr "Dividir" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Dividir requiere un cuerpo sólido — añada o importe uno primero" # AI Translated msgid "Split the body along a picked face into two solids" @@ -25421,8 +25603,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Desfase de superficie" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Desfase de superficie requiere un cuerpo de superficie — cree uno primero con una herramienta de superficie" # AI Translated msgctxt "Design" @@ -25452,8 +25635,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Matriz sobre curva" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Matriz sobre curva requiere un cuerpo y una curva" # AI Translated msgid "Repeat the body along a picked curve" @@ -25474,8 +25658,9 @@ msgctxt "Design" msgid "Align to" msgstr "Alinear con" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Alinear requiere un cuerpo — añada o importe uno primero" # AI Translated msgid "Align the body to a picked face or plane" @@ -25491,9 +25676,10 @@ msgctxt "Design" msgid "Axis" msgstr "Eje" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Sistema de coordenadas" # AI Translated msgctxt "Design" @@ -25509,9 +25695,10 @@ msgstr "Medir" msgid "Measure between the picked points, edges or faces" msgstr "Medir entre los puntos, aristas o caras elegidos" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Volumen y área" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -25553,12 +25740,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Eliminar cara" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Color" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Establecer el color de visualización del cuerpo seleccionado" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Zoom a la selección" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Encuadrar la selección en la vista, manteniendo la dirección de la vista" # AI Translated msgctxt "Design" @@ -25597,9 +25795,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Rectángulo por esquinas" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Rectángulo desde el centro" # AI Translated msgctxt "Design" @@ -25611,9 +25810,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Rectángulo redondeado" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Círculo desde el centro" # AI Translated msgctxt "Design" @@ -25635,9 +25835,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Arco tangente" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Arco desde el centro" # AI Translated msgctxt "Design" @@ -25669,48 +25870,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Triángulo" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Triángulo — haga clic en el centro y luego en un vértice" # AI Translated msgctxt "Design" msgid "Square" msgstr "Cuadrado" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Cuadrado — haga clic en el centro y luego en un vértice" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Pentágono" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Pentágono — haga clic en el centro y luego en un vértice" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Hexágono" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Hexágono — haga clic en el centro y luego en un vértice" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Octógono" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Octógono — haga clic en el centro y luego en un vértice" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Dodecágono" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Dodecágono — haga clic en el centro y luego en un vértice" # AI Translated msgctxt "Design" @@ -25740,8 +25947,9 @@ msgctxt "Design" msgid "Text" msgstr "Texto" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Escriba un texto; se convierte en una operación Texto en el plano de este croquis, editable más adelante" # AI Translated msgctxt "Design" @@ -25858,27 +26066,34 @@ msgstr "Ángulo / distancia…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Escriba el ángulo entre dos líneas o la distancia entre los dos elementos elegidos" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Escriba el texto que insertar" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Negrita" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Cursiva" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Esta fuente no se puede usar para texto — elija otra" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Escriba el texto para ver su tamaño" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Esta fuente no tiene contorno para este texto" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Tamaño: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -25976,8 +26191,9 @@ msgstr "Perfil" msgid "Start new profile (for holes)" msgstr "Iniciar un nuevo perfil (para agujeros)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segmentos" # AI Translated msgid "Sides" @@ -25991,20 +26207,23 @@ msgstr "Haga clic en el lienzo para dibujar" msgid "Snap to grid" msgstr "Ajustar a la cuadrícula" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Paso de cuadrícula" # AI Translated msgid "Outer" msgstr "Exterior" +# AI Translated msgid "closed" -msgstr "" +msgstr "cerrado" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% puntos %4%" # AI Translated msgid "XY (Top)" @@ -30138,6 +30357,39 @@ msgstr "" "Evita la deformación\n" "¿Sabías que al imprimir materiales propensos a la deformación como el ABS, aumentar adecuadamente la temperatura de la cama térmica puede reducir la probabilidad de deformaciones?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Experimental) Usar agentes de impresora en lugar de hosts de impresión" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "OPERACIONES" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Haga clic en una cara o en un plano de referencia en la ventana gráfica y luego en una herramienta de croquis" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Haga clic en una cara o en un plano de referencia y luego en una herramienta de croquis." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "Plano %s seleccionado — clic derecho para las herramientas de dibujo" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Aún no hay nada — importe un STEP o una malla desde la barra de herramientas,\n" +#~ "o haga clic en un plano de referencia y luego clic derecho sobre él para empezar un croquis." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Haga clic en una cara o en un plano de referencia y luego elija una herramienta de dibujo" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index 0d544f5a9f..ef5b78dacc 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2026-07-20 13:33+0200\n" "Last-Translator: Manu Goiogana \n" "Language-Team: \n" @@ -3307,8 +3307,8 @@ msgstr "Prozesuaren aurrezarpen gehigarriak" msgid "Remove parameter" msgstr "Ezabatu parametroa" -msgid "to" -msgstr "nora" +msgid "Range" +msgstr "Barrutia" msgid "Add height range" msgstr "Gehitu altuera-tartea" @@ -5324,9 +5324,6 @@ msgstr "parametroaren izena" msgid "layers" msgstr "geruzak" -msgid "Range" -msgstr "Barrutia" - msgid "Empty string" msgstr "Kate hutsa" @@ -8614,8 +8611,9 @@ msgstr "Konektatutako inprimagailua %s da. Inprimatzeko, proiektuaren aurrezarpe msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Inprimagailuaren informazioa sinkronizatu eta aurrezarpena automatikoki aldatu nahi duzu?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Proiektu honek Diseinua fitxan sortutako modelo bat dauka, eta ez du beste geometriarik. Gaitu \"CAD eginbidea (esperimentala)\" Hobespenetan eta berrabiarazi hura ikusi eta editatzeko; proiektua gordetzean mantendu egiten da." msgid "The file does not contain any geometry data." msgstr "Fitxategiak ez du geometria-daturik." @@ -9639,8 +9637,9 @@ msgstr "Diseinua fitxan, akoplamendu-konektorea aurpegi txiki gisa marrazten du, msgid "Auto-close sketch loops" msgstr "Itxi automatikoki krokisen begiztak" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Elkarrengandik 0,001 mm-ra dauden krokis-muturrak lotune bakartzat hartzen ditu eta begizta soldatuz ixten du. Desaktibatuta: zehazki bat datozen muturrak soilik lotzen dira; beraz, tarte txiki bat duen begizta irekita erakusten da, automatikoki itxi beharrean. Diseinu bakoitzarekin gordetzen da; aldaketaren ondoren hasitako diseinuei aplikatzen zaie." msgid "Pan" msgstr "Desplazatu" @@ -10061,18 +10060,6 @@ msgstr "Erakutsi onartzen ez diren aurrezarpenak" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Erakutsi bateraezinak edo onartu gabeak diren aurrezarpenak inprimagailuaren eta filamentuaren goitibeherako zerrendetan. Aurrezarpen hauek ezin dira hautatu." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Esperimentala) Erabili inprimagailu-agenteak inprimatze-hostenen ordez" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Bideratu Bambu ez diren inprimagailuen inprimatze-lanak inprimagailuaren plugin-agenteen bidez, inprimatze-hostera igotzeko fluxu klasikoaren ordez.\n" -"Desgaituta dagoenean, OrcaSlicer-ek inprimatze-hostaren aurreko portaera erabiltzen du." - msgid "Experimental Features" msgstr "Ezaugarri esperimentalak" @@ -10086,6 +10073,18 @@ msgstr "" "Saiatu pintatutako eginbideak (kolorea/jostura/euskarria/gainazal zimurra eta abar) mantentzen objektuaren sarea aldatu ondoren (adibidez, ebaki/diskotik birkargatu/sinplifikatu/konpondu eta abar).\n" "Oso esperimentala! Motela da eta artefaktuak sor ditzake." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Erabili inprimagailu-agenteak inprimatze-ostalarien ordez" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Bideratu Bambu ez diren inprimagailuen inprimatze-lanak inprimagailuaren plugin-agenteen bidez, inprimatze-hostera igotzeko fluxu klasikoaren ordez.\n" +"Desgaituta dagoenean, OrcaSlicer-ek inprimatze-hostaren aurreko portaera erabiltzen du." + msgid "Allow Abnormal Storage" msgstr "Baimendu biltegiratze anormala" @@ -10251,6 +10250,9 @@ msgstr "Beste geruzen filamentuen sekuentzia" msgid "Please input layer value (>= 2)." msgstr "Sartu geruzaren balioa (>= 2)." +msgid "to" +msgstr "nora" + msgid "Plate name" msgstr "Plakaren izena" @@ -16022,6 +16024,14 @@ msgstr "Betegarri simetrikoaren Y ardatza" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Modeloak Y ardatzarekiko simetrikoak diren bi zati baditu eta zati horiek testura simetrikoak izatea nahi baduzu, aktibatu aukera hau zatietako batean." +# AI Translated +msgid "Fill pattern tops" +msgstr "Bete patroiaren goialdeak" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Aukeratu aukera hau betegarri-patroiaren goialdeak guztiz bete nahi badituzu" + msgid "Infill combination - Max layer height" msgstr "Betegarri-konbinazioa - Gehieneko geruza-altuera" @@ -22118,6 +22128,26 @@ msgstr "Baliteke filamentua uneko makinaren ezarpenekin bateragarria ez izatea. msgid "The filament model is unknown. A random filament preset will be used." msgstr "Filamentu-modeloa ezezaguna da. Ausazko filamentuen aurrezarpen bat erabiliko da." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Ezkutatu erreferentzia-planoak eta ardatzak" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Erakutsi erreferentzia-planoak eta ardatzak" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Ezkutatu inprimagailuaren ohea eta haren plakako sareta" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Erakutsi inprimagailuaren ohea eta haren plakako sareta" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Egin klik erreferentzia-plano batean edo aurpegi lau batean bertan krokisa egiteko — Esc-ek bertan behera uzten du" + # AI Translated msgid "Construction" msgstr "Eraikuntza" @@ -22143,8 +22173,9 @@ msgstr "Zirkulua — egin klik zentroan, gero erradioan" msgid "Arc — click start, end, then a point" msgstr "Arkua — egin klik hasieran, amaieran, gero puntu batean" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Arteka — erdiko lerroaren bi muturrak, gero zabalera" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -22218,8 +22249,9 @@ msgstr "Munduko ardatzak erakutsita" msgid "World axes hidden" msgstr "Munduko ardatzak ezkutatuta" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Ikuspegi axonometrikoa, doituta" # AI Translated msgid "Bed shown" @@ -22230,34 +22262,12 @@ msgid "Bed hidden" msgstr "Ohea ezkutatuta" # AI Translated -msgid "FEATURES" -msgstr "ERAGIKETAK" +msgid "Reference planes shown" +msgstr "Erreferentzia-planoak erakutsita" # AI Translated -msgid "Sketch" -msgstr "Krokisa" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Krokis-planoa: %s — hautatu tresna bat" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Egin klik aurpegi batean edo erreferentzia-plano batean ikuspegi-eremuan, gero krokis-tresna batean" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Krokis-planoa: %s.\n" -"Hautatu tresna bat, edo sakatu Menua zerrenda ikusteko." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Egin klik aurpegi batean edo erreferentzia-plano batean, gero krokis-tresna batean." +msgid "Reference planes hidden" +msgstr "Erreferentzia-planoak ezkutatuta" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -22443,8 +22453,9 @@ msgstr "Ardatza" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Erreferentzia-ardatza (bi puntu, aurpegiaren normala, zilindroaren erdiko lerroa, bi plano, ertzean zehar)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Koordenatu-sistema" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -22508,8 +22519,9 @@ msgstr "Islatu eragiketak gorputz bat behar du — gehitu edo inportatu bat lehe msgid "Mate" msgstr "Akoplamendua" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Muntaketa: lerrokatu bi koordenatu-sistema (finkoa, planarra, birakaria, lerragarria, zilindrikoa)" # AI Translated msgid "Boolean (combine bodies)" @@ -22608,14 +22620,6 @@ msgstr "Hariztatu gainazal zilindriko bat (barruko zuloa / kanpokoa) edo ertz zi msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Hautatu gainazal zilindriko bat (zuloa / kanpokoa) edo ertz zirkular bat haria egiteko" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Inportatu STEP (B-rep solido editagarria)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Inportatu sarea (STL/OBJ) B-rep solido editagarri gisa" - # AI Translated msgid "Constrain selected sketch" msgstr "Murriztu hautatutako krokisa" @@ -22648,8 +22652,9 @@ msgstr "Egin klik hasieran, gero amaieran — gero ezarri luzera zehatza" msgid "Polyline" msgstr "Polilerroa" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Egin klik puntuetan; egin klik lehen puntuan begizta ixteko, eskuineko klik edo Enter katea amaitzeko" # AI Translated msgid "Corner rectangle" @@ -22739,8 +22744,9 @@ msgstr "Egin klik zentroan, gero hasieran, gero puntu batean amaierako angelurak msgid "Slot" msgstr "Arteka" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Egin klik erdiko lerroaren bi muturretan, gero puntu batean zabalerarako" # AI Translated msgid "Arc slot" @@ -22770,8 +22776,9 @@ msgstr "Egin klik zentroan, ardatz nagusiaren muturrean, ardatz txikiko puntuan, msgid "Spline" msgstr "Spline-a" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Egin klik kontrol-puntuetan; klik bikoitza, eskuineko klik edo Enter amaitzeko" # AI Translated msgid "Click to place a point" @@ -22825,15 +22832,17 @@ msgstr "Hautatu islatze-ardatzaren lerroa, gero islatu beharreko entitateak; egi msgid "Trim" msgstr "Moztu" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Egin klik segmentu batean hurbilen duen ebakiduraraino mozteko; Esc-ek irteten du" # AI Translated msgid "Extend" msgstr "Luzatu" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Egin klik lerro edo arku batean hurbilen dagoen entitateraino luzatzeko; Esc-ek irteten du" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23016,13 +23025,21 @@ msgstr "Distantzia bertikala" msgid "New Design — clear the feature tree" msgstr "Diseinu berria — garbitu eragiketa-zuhaitza" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Inportatu STEP (B-rep solido editagarria)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Inportatu sarea (STL/OBJ) B-rep solido editagarri gisa" + # AI Translated msgid "Export STEP…" msgstr "Esportatu STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Erakutsi inprimagailuaren ohea eta haren plakako sareta" +msgid "Create a new sketch" +msgstr "Sortu krokis berri bat" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23036,20 +23053,25 @@ msgstr "Sekzioaren ikuspegia — ezkutatu modeloaren zati bat barrualdea ikustek msgid "Flip Section — show the opposite half" msgstr "Irauli sekzioa — erakutsi aurkako erdia" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Aukeratu Bidali plakara aukerak gorputzak nola bidaltzen dituen" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Bidali plakara" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Gorputz guztiak objektu bakar bihurtzen dira, gorputz bakoitzeko pieza batekin, eta beren posizio erlatiboak mantentzen dituzte" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Bidali plakara (gorputz gisa)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Gorputz bakoitza objektu bereizi bihurtzen da, eta bakoitza bere aldetik kokatzen da" # AI Translated msgid "Width / X" @@ -23059,6 +23081,10 @@ msgstr "Zabalera / X" msgid "Height / Y" msgstr "Altuera / Y" +# AI Translated +msgid "Sketch" +msgstr "Krokisa" + # AI Translated msgid "Distance X" msgstr "X distantzia" @@ -23261,8 +23287,9 @@ msgstr "Zirkularra" msgid "Direction" msgstr "Norabidea" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Angelu osoa (°)" # AI Translated msgid "Boolean" @@ -23646,11 +23673,13 @@ msgstr "Zilindrikoa — ardatzak kolinealak; biraketa librea + irristatze axiala msgid "Kind" msgstr "Mota" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (finkoa)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (mugitzen da)" # AI Translated msgid "Angle °" @@ -23688,6 +23717,10 @@ msgstr "(loturarik ez)" msgid "Value" msgstr "Balioa" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Hautatu tresna bat, edo sakatu Menua zerrenda ikusteko." + # AI Translated msgid "Constraints" msgstr "Murrizketak" @@ -23726,6 +23759,10 @@ msgstr "Mugitu behera" msgid "Show / hide" msgstr "Erakutsi / ezkutatu" +# AI Translated +msgid "Zoom to selection" +msgstr "Zooma hautapenera" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Egiaztatu interferentzia — bilatu gainjarritako gorputzak" @@ -23747,14 +23784,17 @@ msgstr "Gorputza %d hautatuta — eskuineko klik hari aplika dakiokeena ikusteko msgid "Variables" msgstr "Aldagaiak" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Gehitu aldagaia" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Editatu aldagaia" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Ezabatu aldagaia" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -23773,9 +23813,10 @@ msgstr "Krokisa eguneratu da" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Krokisa sortu da (%zu kota gidari) — hautatu, gero eskuineko klik Estruitu aukeratzeko" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Luzera %.2f mm, angelua %.1f°" # AI Translated msgid "(locked)" @@ -23797,6 +23838,10 @@ msgstr "Eskualdea hautatuta — eskuineko klik Estruitu aukeratzeko, edo klik bi msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Krokisa hautatuta — eskuineko klik Estruitu aukeratzeko, edo klik bikoitza editatzeko" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Aurpegi hori ez da laua — egin klik aurpegi lau batean edo erreferentzia-plano batean" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -23825,30 +23870,29 @@ msgstr "Gorputza %d: aurpegia %d hautatuta — eskuineko klik bultzatzeko/tiratz msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Aurpegia %d hautatuta — eskuineko klik bultzatzeko/tiratzeko, edo egin klik berriro gorputz osorako" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Gorputza %d: %zu ertz hautatuta — Shift+klik bat gehitzeko edo kentzeko, Biribildu/Alakatu guztiei akabera emateko" +msgstr[1] "Gorputza %d: %zu ertz hautatuta — Shift+klik bat gehitzeko edo kentzeko, Biribildu/Alakatu guztiei akabera emateko" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "%zu ertz hautatuta — Shift+klik bat gehitzeko edo kentzeko, Biribildu/Alakatu guztiei akabera emateko" +msgstr[1] "%zu ertz hautatuta — Shift+klik bat gehitzeko edo kentzeko, Biribildu/Alakatu guztiei akabera emateko" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "%s planoa hautatuta — eskuineko klik marrazte-tresnetarako" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Gorputza %d: ertza %d hautatuta — Shift+klik ertzak gehitzeko, edo egin klik berriro gorputz osorako" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Ertza %d hautatuta — Shift+klik ertzak gehitzeko, edo egin klik berriro gorputz osorako" # AI Translated #, c-format, boost-format @@ -23873,8 +23917,9 @@ msgstr "Tresnatik irten da" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Krokisa mantendu da — Berretsi onartzeko, Utzi baztertzeko" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Hautatu zerbait ezabatzeko" # AI Translated msgid "✗ Conflicting constraints" @@ -23906,17 +23951,21 @@ msgstr "Editatzen: Krokisa %d · N = begiratu planoarekiko normalean · msgid "OK — %zu triangles" msgstr "Ados — %zu triangelu" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Editatu testua — Enter-ek aplikatzen du, Esc-ek lehen zegoen bezala uzten du" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Idatzi testua — idatzi ahala agertzen da ikuspegian; Enter-ek txertatzen du, Esc-ek bertan behera uzten du" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Testua ez da aldatu" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Testua bertan behera utzi da" # AI Translated msgid "Import SVG" @@ -23942,9 +23991,10 @@ msgstr "STEP irakurtzen…" msgid "No solids found in STEP" msgstr "Ez da solidorik aurkitu STEP fitxategian" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "STEP inportazioak huts egin du: %s" # AI Translated msgid "Rebuilding model…" @@ -23969,9 +24019,10 @@ msgstr "Sare-fitxategiak (*.stl;*.obj)|*.stl;*.obj|Fitxategi guztiak|*.*" msgid "Could not read the STL file" msgstr "Ezin izan da STL fitxategia irakurri" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Ezin izan da OBJ fitxategia irakurri: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -23996,20 +24047,23 @@ msgstr "" msgid "Large mesh" msgstr "Sare handia" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Sare-bihurketak huts egin du: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "Sare-bihurketak ez du geometriarik sortu" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Sarea" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Sare-inportazioak huts egin du: %s" # AI Translated #, c-format, boost-format @@ -24038,17 +24092,19 @@ msgstr " — arrastatu kokatzeko/tamaina aldatzeko, gero Berretsi" msgid "Insert canceled" msgstr "Txertatzea bertan behera utzi da" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Arrastatu izkina bat eskalatzeko, zentroa mugitzeko — Enter edo ✓ amaitzean, Esc baztertzeko" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Krokisa gehitu da (planoa: %s) — hautatu, gero eskuineko klik Estruitu aukeratzeko" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Ezin izan da modeloa berreraiki: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -24120,18 +24176,21 @@ msgstr "Hautatu lehenik lerro irekia duen krokis bat" msgid "Add at least one face to delete first" msgstr "Gehitu lehenik ezabatzeko aurpegi bat gutxienez" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Akoplamenduak bi koordenatu-sistema behar ditu — sortu lehenik" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Akoplamendua: A eta B koordenatu-sistema desberdinak izan behar dira" # AI Translated msgid "Mate rejected" msgstr "Akoplamendua baztertu da" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Interferentzia egiaztatzeko gutxienez bi gorputz behar dira" # AI Translated msgid "No interference found" @@ -24142,36 +24201,43 @@ msgstr "Ez da interferentziarik aurkitu" msgid "Body %d" msgstr "Gorputza %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu bikote gainjarri: %s" +msgstr[1] "%zu bikote gainjarri: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Hautatu gorputz bat neurtzeko" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Ezin izan da gorputz hau neurtu" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: xafla-gorputza, azalera %.2f mm², bolumenik gabe — loditu bolumena izan dezan" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: bolumena %.2f mm³, azalera %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Errepikapenak gorputz solido bat behar du — gehitu edo inportatu bat lehenik" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Eragiketa boolearrak bi gorputz behar ditu — gehitu edo inportatu bigarren bat" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -24186,35 +24252,45 @@ msgstr "Hautatutako aurpegia (Gorputza %d)" msgid "Picked face" msgstr "Hautatutako aurpegia" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "ezin izan da forma berria gorputzarekin elkartu" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "ezin izan da forma berria gorputzetik kendu" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "ezin izan da formen arteko ebakidura kalkulatu" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "historian ez dago oraindik solidorik sortzen duen ezer" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "krokis-profila ez da begizta itxi garbia" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "tresnak ez du gorputza ukitzen" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "adierazpen batek existitzen ez den aldagai bat erabiltzen du" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "adierazpen batek zeroz zatitzen du" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "bi aldagai elkarren arabera definituta daude" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "eragiketa geometriko batek huts egin du" # AI Translated #, c-format, boost-format @@ -24253,15 +24329,17 @@ msgstr "Kota — egin klik bigarren puntuan" msgid "Line — click the start point" msgstr "Lerroa — egin klik hasierako puntuan" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Lerroa — egin klik amaierako puntuan; gero haren luzera eta angelua idatz daitezke" # AI Translated msgid "Polyline — click the first point" msgstr "Polilerroa — egin klik lehen puntuan" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Polilerroa — egin klik hurrengo puntuan · egin klik hasierako puntuan ixteko · eskuineko klik, klik bikoitza edo Enter katea amaitzeko" # AI Translated msgid "Rectangle — click one corner" @@ -24307,8 +24385,9 @@ msgstr "Laukizuzen biribildua — egin klik izkinen erradioa ezartzeko" msgid "Circle — click the center" msgstr "Zirkulua — egin klik zentroan" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Zirkulua — egin klik erradioa ezartzeko; gero idatz daiteke" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -24434,18 +24513,21 @@ msgstr "Elipse-arkua — egin klik arkua amaitzen den tokian" msgid "Spline — click the first control point" msgstr "Spline-a — egin klik lehen kontrol-puntuan" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline-a — egin klik hurrengo kontrol-puntuan · eskuineko klik, klik bikoitza edo Enter kurba amaitzeko" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Puntua — egin klik bat kokatzeko; tresna aktibo geratzen da gehiagorako" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Moztu — egin klik segmentu batean beste entitate bat gurutzatzen duen tokian · Esc irteteko" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Luzatu — egin klik lerro edo arku batean hurbilen dagoen entitateraino luzatzeko · Esc irteteko" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -24455,8 +24537,9 @@ msgstr "Biribildu — egin klik elkartzen diren bi lerroetako lehenengoan" msgid "Fillet — click the second line" msgstr "Biribildu — egin klik bigarren lerroan" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Biribildu — arrastatu gezia, edo egin klik zenbakian erradioa idazteko · Enter-ek aplikatzen du · Esc-ek bertan behera uzten du" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -24466,63 +24549,74 @@ msgstr "Alakatu — egin klik elkartzen diren bi lerroetako lehenengoan" msgid "Chamfer — click the second line" msgstr "Alakatu — egin klik bigarren lerroan" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Alakatu — arrastatu gezia, edo egin klik zenbakian izkinarainoko distantzia idazteko · Enter-ek aplikatzen du · Esc-ek bertan behera uzten du" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Desplazatu — egin klik kurba batean; haren ingerada osoa desplazatzen da" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Desplazatu — arrastatu gezia edozein aldetara, edo egin klik zenbakian distantzia idazteko · Enter-ek aplikatzen du · Esc-ek bertan behera uzten du" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Islatu — egin klik lehenik islatze-ardatz gisa erabiliko den LERROAN (eraikuntza-lerro batek ere balio du)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Islatu — ardatza ezarrita · orain egin klik islatu beharreko entitateetan · Esc-ek bertan behera uzten du" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Islatu — ardatza ezarrita · %d islatzeko · egin klik beste batean gehitzeko edo kentzeko · Enter-ek aplikatzen du" # AI Translated msgid "Move — click the entities to move" msgstr "Mugitu — egin klik mugitu beharreko entitateetan" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Mugitu — arrastatu heldulekua, edo egin klik zenbakian distantzia idazteko · Enter-ek aplikatzen du" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Biratu — egin klik biratu beharreko entitateetan" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Biratu — arrastatu heldulekua, edo egin klik zenbakian angelua idazteko · Enter-ek aplikatzen du" # AI Translated msgid "Scale — click the entities to scale" msgstr "Eskalatu — egin klik eskalatu beharreko entitateetan" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Eskalatu — arrastatu heldulekua, edo egin klik zenbakian faktorea idazteko · Enter-ek aplikatzen du" # AI Translated msgid "Array — click the entities to repeat" msgstr "Matrizea — egin klik errepikatu beharreko entitateetan" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Matrizea — arrastatu heldulekua urratsa ezartzeko, egin klik kopuruan hura idazteko · Enter-ek aplikatzen du" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Matrize polarra — egin klik errepikatu beharreko entitateetan" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Matrize polarra — arrastatu heldulekua angelu-tartea ezartzeko, egin klik kopuruan hura idazteko · Enter-ek aplikatzen du" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Arrastatu izkina bat eskalatzeko, zentroa mugitzeko · Enter edo ✓ amaitzean, Esc baztertzeko" # AI Translated msgid " · Esc goes back to Select" @@ -24532,62 +24626,77 @@ msgstr " · Esc teklak Hautatu tresnara itzultzen du" msgid " · click a constraint badge to remove it" msgstr " · egin klik murrizketa-ikur batean hura kentzeko" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — gorputz solidoa" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — xafla-gorputza" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Aurpegi laua %d (%s)" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Aurpegi zilindrikoa %d (%s)" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Aurpegia %d (%s)" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu ertz (%s)" +msgstr[1] "%zu ertz (%s)" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Ertz zuzena %d (%s)" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Ertz zirkularra %d (%s)" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Erpina (%s)" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Krokis-profila" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Krokisa — ez da ezer hautatu" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Krokis-lerroa" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Krokis-kurba" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Krokis-puntua" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d krokis-entitate" # AI Translated msgid "select something first" @@ -24650,8 +24759,9 @@ msgstr "Planoa gehitu da — hautatu krokis-plano gisa" msgid "Axis added" msgstr "Ardatza gehitu da" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Koordenatu-sistema gehitu da" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -24668,10 +24778,10 @@ msgstr "Desmoldatze-angeluak hautatutako aurpegi bat behar du — egin klik lehe # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Ez dago ezer oraindik — inportatu STEP bat edo sare bat tresna-barratik,\n" -"edo egin klik erreferentzia-plano batean eta eskuineko klik krokis bat hasteko." +"edo sakatu Krokisa eta egin klik erreferentzia-plano batean krokis bat hasteko." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -24681,9 +24791,10 @@ msgstr "Oraindik ez dago solidorik — hautatu krokis bat eta egin eskuineko kli msgid "Could not restore the CAD model from this project" msgstr "Ezin izan da proiektu honetako CAD modeloa leheneratu" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Ezin izan da CAD modeloa leheneratu: %s" # AI Translated #, c-format @@ -24706,17 +24817,35 @@ msgstr "Sekzioaren ikuspegia — goiko erdia erakusten" msgid "Section view — showing the lower half" msgstr "Sekzioaren ikuspegia — beheko erdia erakusten" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Eragiketaren aurpegiak bilatzen…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Hautatu lehenik gorputz bat — egin klik gainean ikuspegi-eremuan edo Gorputzak zerrendan" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Modeloa berreraikitzen ari da — egin zooma berriro amaitzen denean" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s: ez dago zooma egiteko ezer ikusgai" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Gorputz horrek ez du bistaratze-sarerik oraindik — birkalkulatu lehenik" +# AI Translated +msgid "Select something to zoom to" +msgstr "Hautatu zerbait zooma egiteko" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Amaitu edo utzi bertan behera lehenik irekita dagoena" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Hautatu lehenik gorputz bat — egin klik gainean ikuspegi-eremuan edo Gorputzak zerrendan" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Arrastatu geziak mugitzeko, eraztunak biratzeko — gero Berretsi (Esc-ek bertan behera uzten du)" @@ -24742,12 +24871,10 @@ msgstr "Egin klik solidoaren aurpegi batean, gero sakatu F" msgid "Placed on face — body laid flat on the bed" msgstr "Aurpegian jarrita — gorputza ohearen gainean etzanda" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Edizioa baztertu da: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -24766,9 +24893,10 @@ msgstr "Gorputz honek ez du ezabatzeko eragiketarik — erabili Diseinu berria b msgid "feature %d" msgstr "eragiketa %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "%s ezabatu da, gorputz hau sortu zuen eragiketa — Ctrl+Z-k leheneratzen du" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -25160,12 +25288,14 @@ msgstr "STEP fitxategiak (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP esportatu da" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "STEP esportazioak huts egin du: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Bidali plakara (gorputz gisa) — bidali gorputz bakoitza Prestatu fitxara objektu bereizi gisa" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -25179,19 +25309,36 @@ msgstr "Ez dago plakara bidaltzeko ezer — gehitu lehenik eragiketa bat" msgid "All bodies hidden — show one before committing" msgstr "Gorputz guztiak ezkutatuta daude — erakutsi bat plakara bidali aurretik" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu ertz" +msgstr[1] "%zu ertz" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Erdiko lerroa E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Lerroa E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Krokis-planoa: %s — hautatu tresna bat" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Krokis-planoa: %s.\n" +"Hautatu tresna bat, edo sakatu Menua zerrenda ikusteko." # AI Translated msgid "Plane ready" @@ -25201,8 +25348,9 @@ msgstr "Planoa prest" msgid "Axis ready" msgstr "Ardatza prest" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Koordenatu-sistema prest" # AI Translated msgid "Helix ready" @@ -25220,9 +25368,10 @@ msgstr "Krokisa prest" msgid "Mate ready" msgstr "Akoplamendua prest" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Baliogabea: %s" # AI Translated #, c-format @@ -25306,110 +25455,139 @@ msgstr "Editatu aldagaia" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "Ezin izan da '%s' aldagaia kendu (ziurrenik eragiketa-adierazpen batek erreferentziatzen du oraindik): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" ez da adierazpen batek kontrola dezakeen balioa" # AI Translated msgid "No binding for that field" msgstr "Ez dago loturarik eremu horretarako" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "Balioak zero baino handiagoa izan behar du" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "Balioa ezin da negatiboa izan (zeroak bat datozela esan nahi du)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Kota hori ezin da bete — krokisa gehiegi murriztuta dago" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "Geometria honetan eragin ezin duten murrizketak ez dira kontuan hartzen (elipse edo spline kurba bat, edo zero tamainako zirkulu bat): %1%" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Profil hau bere buruarekin gurutzatzen edo tolesten da marka gorrian; beraz, ez du eskualde bakar bat mugatzen" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Aldea" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Ardatzerdi nagusia" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Ardatzerdi txikia" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "Angeluak 0° eta 360° artean egon behar du" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "Ardatzerdi nagusia ezin da ardatzerdi txikia baino laburragoa izan" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "Izkinaren erradioak alde laburrenaren erdia baino txikiagoa izan behar du" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "Arteka zabalegia da bere erradiorako — zabalerak erradioaren bikoitza baino txikiagoa izan behar du" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1%: ezin da bete — krokisa gehiegi murriztuta dago" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Bi lerro horiek ez dira izkina batean elkartzen — hautatu elkartzen diren bi lerro" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "Tamainak zero baino handiagoa izan behar du" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Biribildu: erradioak alde bateko luzera gainditzen du, edo bi lerroak ez dira izkina batean elkartzen" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Alakatu: distantziak alde bateko luzera gainditzen du, edo bi lerroak ez dira izkina batean elkartzen" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "Biribiltzeak/alakatzeak baliogabetu eta kendutako murrizketak: %1%" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Desplazatu: elipse batek edo spline batek ez du mota bereko paralelorik — hautatu lerroak, arkuak edo zirkuluak" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Eskala-faktoreak zero baino handiagoa izan behar du" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Kopiak" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Kopia kopuruak zenbaki osoa izan behar du, 2 edo gehiago" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "Transformazioak askatutako murrizketak: %1%" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Matrizearen kopiak murriztu gabe geratu dira — ebazleak lotura guztiak baztertu ditu" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "eskuineko klik edo klik bikoitza amaitzeko, klik hasieran ixteko" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Luzatu: egin klik beste entitate batera irits daitekeen lerro edo arku batean" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Moztu: egin klik beste entitate bat gurutzatzen duen segmentu batean" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Sakatu Enter edo ✓ aplikatzeko, Esc baztertzeko" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Oraindik ez dago kotarik entitate horretarako — egin klik lerro, zirkulu edo arku batean, edo bi puntutan" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Egin klik bigarren puntu batean, edo lerro batean harainoko distantzia neurtzeko" # AI Translated msgid "Enter a number" @@ -25445,8 +25623,12 @@ msgid "Sketch" msgstr "Krokisa" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Egin klik aurpegi batean edo erreferentzia-plano batean, gero hautatu marrazketa-tresna bat" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Hautatu aurpegi lau bat edo erreferentzia-plano bat bertan krokisa egiteko" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Egin krokis bat hautatutako aurpegi lauan edo planoan, edo egin klik gero aurpegi edo plano batean" # AI Translated msgctxt "Design" @@ -25468,9 +25650,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Loditu" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Elkartu" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -25523,17 +25706,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Loditu gainazala" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Loditu gainazala eragiketak xafla-gorputz bat behar du — sortu bat lehenik gainazal-tresna batekin" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Zuloa" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -25548,8 +25729,9 @@ msgctxt "Design" msgid "Split" msgstr "Zatitu" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Zatitu eragiketak gorputz solido bat behar du — gehitu edo inportatu bat lehenik" # AI Translated msgid "Split the body along a picked face into two solids" @@ -25595,8 +25777,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Gainazal-desplazamendua" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Gainazal-desplazamendua eragiketak xafla-gorputz bat behar du — sortu bat lehenik gainazal-tresna batekin" # AI Translated msgctxt "Design" @@ -25626,8 +25809,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Errepikapena kurban" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Kurbako errepikapenak gorputz bat eta kurba bat behar ditu" # AI Translated msgid "Repeat the body along a picked curve" @@ -25648,8 +25832,9 @@ msgctxt "Design" msgid "Align to" msgstr "Lerrokatu honekin" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Lerrokatu eragiketak gorputz bat behar du — gehitu edo inportatu bat lehenik" # AI Translated msgid "Align the body to a picked face or plane" @@ -25665,9 +25850,10 @@ msgctxt "Design" msgid "Axis" msgstr "Ardatza" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Koordenatu-sistema" # AI Translated msgctxt "Design" @@ -25683,9 +25869,10 @@ msgstr "Neurtu" msgid "Measure between the picked points, edges or faces" msgstr "Neurtu hautatutako puntu, ertz edo aurpegien artean" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Bolumena eta azalera" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -25727,12 +25914,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Ezabatu aurpegia" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Kolorea" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Ezarri hautatutako gorputzaren bistaratze-kolorea" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Zooma hautapenera" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Enkoadratu hautapena ikuspegian, ikuspegiaren norabidea mantenduz" # AI Translated msgctxt "Design" @@ -25771,9 +25969,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Izkinetako laukizuzena" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Zentroko laukizuzena" # AI Translated msgctxt "Design" @@ -25785,9 +25984,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Laukizuzen biribildua" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Zentroko zirkulua" # AI Translated msgctxt "Design" @@ -25809,9 +26009,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Arku tangentea" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Zentro-puntuko arkua" # AI Translated msgctxt "Design" @@ -25843,48 +26044,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Triangelua" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Triangelua — egin klik zentroan, gero erpin batean" # AI Translated msgctxt "Design" msgid "Square" msgstr "Karratua" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Karratua — egin klik zentroan, gero erpin batean" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Pentagonoa" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Pentagonoa — egin klik zentroan, gero erpin batean" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Hexagonoa" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Hexagonoa — egin klik zentroan, gero erpin batean" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Oktogonoa" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Oktogonoa — egin klik zentroan, gero erpin batean" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Dodekagonoa" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Dodekagonoa — egin klik zentroan, gero erpin batean" # AI Translated msgctxt "Design" @@ -25914,8 +26121,9 @@ msgctxt "Design" msgid "Text" msgstr "Testua" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Idatzi testua; Testua eragiketa bihurtzen da krokis honen planoan, eta gero edita daiteke" # AI Translated msgctxt "Design" @@ -26032,27 +26240,34 @@ msgstr "Angelua / distantzia…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Idatzi bi lerroren arteko angelua edo bi hautapenen arteko distantzia" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Idatzi txertatu beharreko testua" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Lodia" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Etzana" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Letra-tipo hau ezin da testurako erabili — hautatu beste bat" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Idatzi testua haren tamaina ikusteko" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Letra-tipo honek ez du ingeradarik testu honetarako" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Tamaina: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -26150,8 +26365,9 @@ msgstr "Profila" msgid "Start new profile (for holes)" msgstr "Hasi profil berri bat (zuloetarako)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segmentuak" # AI Translated msgid "Sides" @@ -26165,20 +26381,23 @@ msgstr "Egin klik mihisean marrazteko" msgid "Snap to grid" msgstr "Atxiki saretara" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Sareta-urratsa" # AI Translated msgid "Outer" msgstr "Kanpokoa" +# AI Translated msgid "closed" -msgstr "" +msgstr "itxita" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% puntu %4%" # AI Translated msgid "XY (Top)" @@ -26215,8 +26434,9 @@ msgstr[1] "%zu profil itxi" msgid "Draw a closed profile to enable" msgstr "Marraztu profil itxi bat gaitzeko" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Garbitu dena" # AI Translated msgid "Empty result" @@ -30329,6 +30549,39 @@ msgstr "" "Saihestu okertzea\n" "Ba al zenekien ABS bezalako okertzeko joera duten materialak inprimatzean ohe beroaren tenperatura egoki igotzeak okertzeko probabilitatea murriztu dezakeela?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Esperimentala) Erabili inprimagailu-agenteak inprimatze-hostenen ordez" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "ERAGIKETAK" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Egin klik aurpegi batean edo erreferentzia-plano batean ikuspegi-eremuan, gero krokis-tresna batean" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Egin klik aurpegi batean edo erreferentzia-plano batean, gero krokis-tresna batean." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "%s planoa hautatuta — eskuineko klik marrazte-tresnetarako" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Ez dago ezer oraindik — inportatu STEP bat edo sare bat tresna-barratik,\n" +#~ "edo egin klik erreferentzia-plano batean eta eskuineko klik krokis bat hasteko." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Egin klik aurpegi batean edo erreferentzia-plano batean, gero hautatu marrazketa-tresna bat" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 36b9ad3250..19c0fa9673 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -3333,8 +3333,8 @@ msgstr "Préréglage de traitement supplémentaire" msgid "Remove parameter" msgstr "Supprimer le paramètre" -msgid "to" -msgstr "à" +msgid "Range" +msgstr "Zone" msgid "Add height range" msgstr "Ajouter une plage de hauteur" @@ -5353,9 +5353,6 @@ msgstr "nom du paramètre" msgid "layers" msgstr "couches" -msgid "Range" -msgstr "Zone" - msgid "Empty string" msgstr "Chaîne vide" @@ -8631,8 +8628,9 @@ msgstr "L'imprimante connectée est %s. Elle doit correspondre au préréglage d msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Voulez-vous synchroniser les informations de l'imprimante et changer automatiquement le préréglage ?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Ce projet contient un modèle créé dans l’onglet Conception et aucune autre géométrie. Activez « Fonctionnalité CAO (expérimentale) » dans les Préférences et redémarrez pour le voir et le modifier ; il est conservé lors de l’enregistrement du projet." msgid "The file does not contain any geometry data." msgstr "Le fichier ne contient pas de données géométriques." @@ -9661,8 +9659,9 @@ msgstr "Dans l’onglet Conception, dessine un connecteur de liaison comme une p msgid "Auto-close sketch loops" msgstr "Fermer automatiquement les boucles d'esquisse" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Considère les extrémités d’esquisse distantes de moins de 0,001 mm comme un seul point de jonction et referme la boucle. Désactivé : seules les extrémités exactement coïncidentes sont jointes ; une boucle avec un minuscule espace est alors affichée comme ouverte au lieu d’être fermée automatiquement. Enregistré avec chaque conception ; s’applique aux conceptions commencées après la modification." msgid "Pan" msgstr "Panoramique" @@ -10081,18 +10080,6 @@ msgstr "Afficher les préréglages non pris en charge" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Affiche les préréglages incompatibles ou non pris en charge dans les listes déroulantes d’imprimantes et de filaments. Ces préréglages ne peuvent pas être sélectionnés." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Expérimental) Utiliser les agents d’imprimante au lieu des hôtes d’impression" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Achemine les tâches d’impression des imprimantes non Bambu via les agents de plugin d’imprimante au lieu du flux classique d’envoi vers l’hôte d’impression.\n" -"Lorsque cette option est désactivée, OrcaSlicer utilise l’ancien comportement de l’hôte d’impression." - msgid "Experimental Features" msgstr "Fonctionnalités expérimentales" @@ -10106,6 +10093,18 @@ msgstr "" "Tente de conserver les éléments peints (couleur/couture/support/surface irrégulière, etc.) après une modification du maillage de l’objet (découpe/rechargement depuis le disque/simplification/réparation, etc.)\n" "Hautement expérimental ! Lent et susceptible de créer des artefacts." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Utiliser les agents d’imprimante au lieu des hôtes d’impression" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Achemine les tâches d’impression des imprimantes non Bambu via les agents de plugin d’imprimante au lieu du flux classique d’envoi vers l’hôte d’impression.\n" +"Lorsque cette option est désactivée, OrcaSlicer utilise l’ancien comportement de l’hôte d’impression." + msgid "Allow Abnormal Storage" msgstr "Autoriser le stockage anormal" @@ -10272,6 +10271,9 @@ msgstr "Séquence du filament de l’autre couche" msgid "Please input layer value (>= 2)." msgstr "Veuillez saisir la valeur de la couche (>= 2)." +msgid "to" +msgstr "à" + msgid "Plate name" msgstr "Nom de la plaque" @@ -16045,6 +16047,14 @@ msgstr "Axe Y de remplissage symétrique" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Si le modèle a deux parties symétriques par rapport à l'axe Y et que vous souhaitez que ces parties aient des textures symétriques, veuillez cliquer sur cette option sur l'une des parties." +# AI Translated +msgid "Fill pattern tops" +msgstr "Remplir les dessus du motif" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Choisissez cette option si vous souhaitez remplir complètement les dessus du motif de remplissage" + msgid "Infill combination - Max layer height" msgstr "Combinaison de remplissage - Hauteur maximale de la couche" @@ -22197,6 +22207,25 @@ msgstr "Le filament peut ne pas être compatible avec les paramètres actuels de msgid "The filament model is unknown. A random filament preset will be used." msgstr "Le modèle de filament est inconnu. Un préréglage de filament aléatoire sera utilisé." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Masquer les plans et axes de référence" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Afficher les plans et axes de référence" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Masquer le plateau d’impression et sa grille de plaque" + +msgid "Show the printer bed and its plate grid" +msgstr "Afficher le plateau d'impression et sa grille de plaque" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Cliquez sur un plan de référence ou une face plane pour y esquisser — Échap pour annuler" + # AI Translated msgid "Construction" msgstr "Construction" @@ -22221,8 +22250,9 @@ msgstr "Cercle — cliquez sur le centre, puis sur le rayon" msgid "Arc — click start, end, then a point" msgstr "Arc — cliquez sur le début, la fin, puis sur un point" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Rainure — deux extrémités de l’axe, puis la largeur" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -22285,8 +22315,9 @@ msgstr "Axes du monde affichés" msgid "World axes hidden" msgstr "Axes du monde masqués" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Vue axonométrique, ajustée" # AI Translated msgid "Bed shown" @@ -22296,32 +22327,13 @@ msgstr "Plateau affiché" msgid "Bed hidden" msgstr "Plateau masqué" -msgid "FEATURES" -msgstr "FONCTIONS" +# AI Translated +msgid "Reference planes shown" +msgstr "Plans de référence affichés" # AI Translated -msgid "Sketch" -msgstr "Esquisse" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Plan d’esquisse : %s — choisissez un outil" - -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Cliquez sur une face ou un plan de référence dans la vue, puis sur un outil d'esquisse" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Plan d’esquisse : %s.\n" -"Choisissez un outil, ou appuyez sur Menu pour afficher la liste." - -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Cliquez sur une face ou un plan de référence, puis sur un outil d'esquisse." +msgid "Reference planes hidden" +msgstr "Plans de référence masqués" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -22476,8 +22488,9 @@ msgstr "Axe" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Axe de référence (deux points, normale de face, axe de cylindre, deux plans, le long d'une arête)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Repère" msgid "Datum coordinate system (world point, or face + direction edge)" msgstr "Repère de référence (point du monde, ou face + arête directrice)" @@ -22532,8 +22545,9 @@ msgstr "Symétrie nécessite un corps — ajoutez-en ou importez-en un d'abord" msgid "Mate" msgstr "Liaison" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Assemblage : aligner deux repères (fixe, planaire, pivot, glissière, cylindrique)" # AI Translated msgid "Boolean (combine bodies)" @@ -22621,13 +22635,6 @@ msgstr "Fileter une surface cylindrique (alésage / extérieur) ou une arête ci msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Choisissez une surface cylindrique (alésage / extérieur) ou une arête circulaire pour un filetage" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Importer un STEP (solide B-rep modifiable)" - -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Importer un maillage (STL/OBJ) en solide B-rep modifiable" - msgid "Constrain selected sketch" msgstr "Contraindre l'esquisse sélectionnée" @@ -22658,8 +22665,9 @@ msgstr "Cliquez sur le début, puis sur la fin — puis définissez la longueur msgid "Polyline" msgstr "Polyligne" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Cliquez sur des points ; cliquez sur le premier point pour fermer la boucle, clic droit ou Entrée pour terminer la chaîne" # AI Translated msgid "Corner rectangle" @@ -22744,8 +22752,9 @@ msgstr "Cliquez sur le centre, puis sur le début, puis sur un point pour l'angl msgid "Slot" msgstr "Rainure" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Cliquez sur les deux extrémités de l’axe, puis sur un point pour la largeur" # AI Translated msgid "Arc slot" @@ -22773,8 +22782,9 @@ msgstr "Cliquez sur le centre, l'extrémité du grand axe, le point du petit axe msgid "Spline" msgstr "Spline" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Cliquez sur des points de contrôle ; double-clic, clic droit ou Entrée pour terminer" # AI Translated msgid "Click to place a point" @@ -22825,15 +22835,17 @@ msgstr "Choisissez une ligne d'axe de symétrie, puis les entités à refléter msgid "Trim" msgstr "Ajuster" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Cliquez sur un segment pour l’ajuster jusqu’à son intersection la plus proche ; Échap pour quitter" # AI Translated msgid "Extend" msgstr "Prolonger" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Cliquez sur une ligne ou un arc pour le prolonger jusqu’à l’entité la plus proche ; Échap pour quitter" msgid "Constrain — add geometric/dimensional relations" msgstr "Contraindre — ajouter des relations géométriques/dimensionnelles" @@ -22997,12 +23009,20 @@ msgstr "Distance verticale" msgid "New Design — clear the feature tree" msgstr "Nouvelle conception — vider l'arbre des fonctions" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Importer un STEP (solide B-rep modifiable)" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Importer un maillage (STL/OBJ) en solide B-rep modifiable" + # AI Translated msgid "Export STEP…" msgstr "Exporter en STEP…" -msgid "Show the printer bed and its plate grid" -msgstr "Afficher le plateau d'impression et sa grille de plaque" +# AI Translated +msgid "Create a new sketch" +msgstr "Créer une nouvelle esquisse" msgid "Place on Face (F) — lay the picked face on the bed" msgstr "Poser sur la face (F) — poser la face choisie sur le plateau" @@ -23013,20 +23033,25 @@ msgstr "Vue en coupe — masquer une partie du modèle pour voir l'intérieur. P msgid "Flip Section — show the opposite half" msgstr "Inverser la coupe — afficher l'autre moitié" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Choisir comment les corps sont envoyés sur la plaque" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Valider sur la plaque" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Tous les corps deviennent un seul objet, avec une pièce par corps, en conservant leurs positions relatives" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Valider sur la plaque (en corps séparés)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Chaque corps devient un objet distinct, placé indépendamment" # AI Translated msgid "Width / X" @@ -23036,6 +23061,10 @@ msgstr "Largeur / X" msgid "Height / Y" msgstr "Hauteur / Y" +# AI Translated +msgid "Sketch" +msgstr "Esquisse" + # AI Translated msgid "Distance X" msgstr "Distance X" @@ -23230,8 +23259,9 @@ msgstr "Circulaire" msgid "Direction" msgstr "Direction" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Angle total (°)" # AI Translated msgid "Boolean" @@ -23578,11 +23608,13 @@ msgstr "Cylindrique — axes colinéaires ; rotation libre + glissement axial" msgid "Kind" msgstr "Type" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (fixe)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (mobile)" # AI Translated msgid "Angle °" @@ -23617,6 +23649,10 @@ msgstr "(aucune association)" msgid "Value" msgstr "Valeur" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Choisissez un outil, ou appuyez sur Menu pour afficher la liste." + # AI Translated msgid "Constraints" msgstr "Contraintes" @@ -23653,6 +23689,10 @@ msgstr "Descendre" msgid "Show / hide" msgstr "Afficher / masquer" +# AI Translated +msgid "Zoom to selection" +msgstr "Zoom sur la sélection" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Vérifier les interférences — trouver les corps qui se chevauchent" @@ -23673,14 +23713,17 @@ msgstr "Corps %d sélectionné — clic droit pour ce qui s'y applique" msgid "Variables" msgstr "Variables" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Ajouter une variable" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Modifier la variable" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Supprimer la variable" msgid "Sketch created — select it, then right-click to Extrude" msgstr "Esquisse créée — sélectionnez-la, puis clic droit pour Extruder" @@ -23696,9 +23739,10 @@ msgstr "Esquisse mise à jour" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Esquisse créée (%zu cotes pilotantes) — sélectionnez-la, puis clic droit pour Extruder" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Longueur %.2f mm, angle %.1f°" # AI Translated msgid "(locked)" @@ -23717,6 +23761,10 @@ msgstr "Région sélectionnée — clic droit pour Extruder, ou double-clic pour msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Esquisse sélectionnée — clic droit pour Extruder, ou double-clic pour modifier" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Cette face n’est pas plane — cliquez sur une face plane ou un plan de référence" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -23745,30 +23793,29 @@ msgstr "Corps %d : face %d sélectionnée — clic droit pour la pousser/tirer, msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Face %d sélectionnée — clic droit pour la pousser/tirer, ou cliquez à nouveau pour tout le corps" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Corps %d : %zu arête sélectionnée — Maj+clic en ajoute ou en retire une, Congé/Chanfrein les traite toutes" +msgstr[1] "Corps %d : %zu arêtes sélectionnées — Maj+clic en ajoute ou en retire une, Congé/Chanfrein les traite toutes" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "%zu arête sélectionnée — Maj+clic en ajoute ou en retire une, Congé/Chanfrein les traite toutes" +msgstr[1] "%zu arêtes sélectionnées — Maj+clic en ajoute ou en retire une, Congé/Chanfrein les traite toutes" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "Plan %s sélectionné — clic droit pour les outils de dessin" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Corps %d : arête %d sélectionnée — Maj+clic pour ajouter des arêtes, ou cliquez à nouveau pour tout le corps" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Arête %d sélectionnée — Maj+clic pour ajouter des arêtes, ou cliquez à nouveau pour tout le corps" #, c-format, boost-format msgid "%s plane selected — right-click to sketch on it, or click an object to select it" @@ -23792,8 +23839,9 @@ msgstr "Outil quitté" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Esquisse conservée — Confirmer pour la valider, Annuler pour l’abandonner" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Sélectionnez un élément à supprimer" # AI Translated msgid "✗ Conflicting constraints" @@ -23825,17 +23873,21 @@ msgstr "Modification : Esquisse %d · N = vue normale au plan · Confirm msgid "OK — %zu triangles" msgstr "OK — %zu triangles" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Modifiez le texte — Entrée pour appliquer, Échap pour le laisser tel quel" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Saisissez le texte — il apparaît dans la vue au fur et à mesure de la saisie ; Entrée pour insérer, Échap pour annuler" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Texte inchangé" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Texte annulé" # AI Translated msgid "Import SVG" @@ -23861,9 +23913,10 @@ msgstr "Lecture du STEP…" msgid "No solids found in STEP" msgstr "Aucun solide trouvé dans le STEP" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "Échec de l’importation STEP : %s" # AI Translated msgid "Rebuilding model…" @@ -23888,9 +23941,10 @@ msgstr "Fichiers de maillage (*.stl;*.obj)|*.stl;*.obj|Tous les fichiers|*.*" msgid "Could not read the STL file" msgstr "Impossible de lire le fichier STL" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Impossible de lire le fichier OBJ : %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -23914,19 +23968,22 @@ msgstr "" msgid "Large mesh" msgstr "Maillage volumineux" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Échec de la conversion du maillage : %s" msgid "Mesh conversion produced no geometry" msgstr "La conversion du maillage n'a produit aucune géométrie" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Maillage" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Échec de l’importation du maillage : %s" #, c-format, boost-format msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" @@ -23951,17 +24008,19 @@ msgstr " — faites glisser pour placer/dimensionner, puis Confirmer" msgid "Insert canceled" msgstr "Insertion annulée" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Faites glisser un coin pour mettre à l’échelle, le centre pour déplacer — Entrée ou ✓ une fois terminé, Échap pour abandonner" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Esquisse ajoutée (plan : %s) — sélectionnez-la, puis faites un clic droit pour l’extruder" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Impossible de reconstruire le modèle : %s" msgid "Add a solid (sketch + extrude) first" msgstr "Ajoutez d'abord un solide (esquisse + extrusion)" @@ -24018,17 +24077,20 @@ msgstr "Choisissez d'abord une esquisse avec une ligne ouverte" msgid "Add at least one face to delete first" msgstr "Ajoutez d'abord au moins une face à supprimer" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "La liaison nécessite deux repères — créez-les d’abord" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Liaison : A et B doivent être des repères différents" msgid "Mate rejected" msgstr "Liaison rejetée" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "La vérification des interférences nécessite au moins deux corps" # AI Translated msgid "No interference found" @@ -24039,35 +24101,42 @@ msgstr "Aucune interférence trouvée" msgid "Body %d" msgstr "Corps %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu paire de corps qui se chevauchent : %s" +msgstr[1] "%zu paires de corps qui se chevauchent : %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Sélectionnez un corps pour le mesurer" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Impossible de mesurer ce corps" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s : corps surfacique, aire %.2f mm², aucun volume — épaississez-le pour en obtenir un" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s : volume %.2f mm³, aire %.2f mm²" msgid "Pattern needs a solid body — add or import one first" msgstr "Répétition nécessite un corps solide — ajoutez-en ou importez-en un d'abord" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "L’opération booléenne nécessite deux corps — ajoutez-en ou importez-en un second" msgid "Cut needs a solid body — add or import one first" msgstr "Coupe nécessite un corps solide — ajoutez-en ou importez-en un d'abord" @@ -24081,35 +24150,45 @@ msgstr "Face choisie (corps %d)" msgid "Picked face" msgstr "Face choisie" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "la nouvelle forme n’a pas pu être jointe au corps" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "la nouvelle forme n’a pas pu être soustraite du corps" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "l’intersection des formes n’a pas pu être calculée" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "rien dans l’historique ne produit encore de solide" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "le profil d’esquisse ne forme pas une boucle fermée correcte" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "l’outil ne touche pas le corps" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "une expression utilise une variable qui n’existe pas" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "une expression divise par zéro" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "deux variables sont définies l’une en fonction de l’autre" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "une opération géométrique a échoué" # AI Translated #, c-format, boost-format @@ -24146,15 +24225,17 @@ msgstr "Cote — cliquez sur le second point" msgid "Line — click the start point" msgstr "Ligne — cliquez sur le point de départ" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Ligne — cliquez sur le point d’arrivée ; sa longueur et son angle peuvent ensuite être saisis" # AI Translated msgid "Polyline — click the first point" msgstr "Polyligne — cliquez sur le premier point" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Polyligne — cliquez sur le point suivant · cliquez sur le point de départ pour la fermer · clic droit, double-clic ou Entrée pour terminer la chaîne" # AI Translated msgid "Rectangle — click one corner" @@ -24194,8 +24275,9 @@ msgstr "Rectangle arrondi — cliquez pour définir le rayon d'angle" msgid "Circle — click the center" msgstr "Cercle — cliquez sur le centre" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Cercle — cliquez pour définir le rayon ; il peut ensuite être saisi" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -24300,17 +24382,20 @@ msgstr "Arc elliptique — cliquez là où l'arc se termine" msgid "Spline — click the first control point" msgstr "Spline — cliquez sur le premier point de contrôle" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline — cliquez sur le point de contrôle suivant · clic droit, double-clic ou Entrée pour terminer la courbe" msgid "Point — click to place one; the tool stays armed for more" msgstr "Point — cliquez pour en placer un ; l'outil reste actif pour en ajouter d'autres" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Ajuster — cliquez sur un segment là où il croise une autre entité · Échap pour quitter" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Prolonger — cliquez sur une ligne ou un arc pour le prolonger jusqu’à l’entité la plus proche · Échap pour quitter" msgid "Fillet — click the first of two lines that meet" msgstr "Congé — cliquez sur la première de deux lignes sécantes" @@ -24318,8 +24403,9 @@ msgstr "Congé — cliquez sur la première de deux lignes sécantes" msgid "Fillet — click the second line" msgstr "Congé — cliquez sur la deuxième ligne" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Congé — faites glisser la flèche, ou cliquez sur le nombre pour saisir le rayon · Entrée pour appliquer · Échap pour annuler" msgid "Chamfer — click the first of two lines that meet" msgstr "Chanfrein — cliquez sur la première de deux lignes sécantes" @@ -24327,59 +24413,70 @@ msgstr "Chanfrein — cliquez sur la première de deux lignes sécantes" msgid "Chamfer — click the second line" msgstr "Chanfrein — cliquez sur la deuxième ligne" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Chanfrein — faites glisser la flèche, ou cliquez sur le nombre pour saisir la distance · Entrée pour appliquer · Échap pour annuler" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Décaler — cliquez sur une courbe ; tout son contour est décalé" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Décaler — faites glisser la flèche d’un côté ou de l’autre, ou cliquez sur le nombre pour saisir la distance · Entrée pour appliquer · Échap pour annuler" msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Symétrie — cliquez d'abord sur la LIGNE servant d'axe (une ligne de construction convient)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Symétrie — axe défini · cliquez maintenant sur les entités à symétriser · Échap pour annuler" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Symétrie — axe défini · %d à symétriser · cliquez sur une autre entité pour l’ajouter ou la retirer · Entrée pour appliquer" # AI Translated msgid "Move — click the entities to move" msgstr "Déplacer — cliquez sur les entités à déplacer" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Déplacer — faites glisser la poignée, ou cliquez sur le nombre pour saisir la distance · Entrée pour appliquer" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Pivoter — cliquez sur les entités à faire pivoter" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Pivoter — faites glisser la poignée, ou cliquez sur le nombre pour saisir l’angle · Entrée pour appliquer" msgid "Scale — click the entities to scale" msgstr "Mise à l'échelle — cliquez sur les entités à mettre à l'échelle" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Mettre à l’échelle — faites glisser la poignée, ou cliquez sur le nombre pour saisir le facteur · Entrée pour appliquer" msgid "Array — click the entities to repeat" msgstr "Répétition — cliquez sur les entités à répéter" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Répétition — faites glisser la poignée pour définir le pas, cliquez sur le nombre d’occurrences pour le saisir · Entrée pour appliquer" msgid "Polar array — click the entities to repeat" msgstr "Répétition circulaire — cliquez sur les entités à répéter" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Répétition circulaire — faites glisser la poignée pour définir l’angle, cliquez sur le nombre d’occurrences pour le saisir · Entrée pour appliquer" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Faites glisser un coin pour mettre à l’échelle, le centre pour déplacer · Entrée ou ✓ une fois terminé, Échap pour abandonner" msgid " · Esc goes back to Select" msgstr " · Échap revient à Sélection" @@ -24387,62 +24484,77 @@ msgstr " · Échap revient à Sélection" msgid " · click a constraint badge to remove it" msgstr " · cliquez sur un badge de contrainte pour la retirer" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — corps solide" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — corps surfacique" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Face plane %d de %s" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Face cylindrique %d de %s" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Face %d de %s" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu arête de %s" +msgstr[1] "%zu arêtes de %s" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Arête rectiligne %d de %s" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Arête circulaire %d de %s" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Sommet de %s" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Profil d’esquisse" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Esquisse — rien de sélectionné" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Ligne d’esquisse" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Courbe d’esquisse" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Point d’esquisse" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d entités d’esquisse" msgid "select something first" msgstr "sélectionnez d'abord quelque chose" @@ -24498,8 +24610,9 @@ msgstr "Plan ajouté — choisissez-le comme plan d'esquisse" msgid "Axis added" msgstr "Axe ajouté" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Repère ajouté" msgid "Shell needs a solid body — add or import one first" msgstr "Coque nécessite un corps solide — ajoutez-en ou importez-en un d'abord" @@ -24510,12 +24623,13 @@ msgstr "Dépouille nécessite un corps solide — ajoutez-en ou importez-en un d msgid "Draft needs a picked face — click a side face first" msgstr "Dépouille nécessite une face choisie — cliquez d'abord sur une face latérale" +# AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" -"Rien pour l'instant — importez un STEP ou un maillage depuis la barre d'outils,\n" -"ou cliquez sur un plan de référence puis clic droit pour démarrer une esquisse." +"Rien pour l’instant — importez un STEP ou un maillage depuis la barre d’outils,\n" +"ou appuyez sur Esquisse et cliquez sur un plan de référence pour démarrer une esquisse." msgid "No solid yet — select a sketch and right-click it to Extrude." msgstr "Aucun solide pour l'instant — sélectionnez une esquisse puis clic droit pour Extruder." @@ -24524,9 +24638,10 @@ msgstr "Aucun solide pour l'instant — sélectionnez une esquisse puis clic dro msgid "Could not restore the CAD model from this project" msgstr "Impossible de restaurer le modèle CAO de ce projet" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Impossible de restaurer le modèle CAO : %s" # AI Translated #, c-format @@ -24548,15 +24663,33 @@ msgstr "Vue en coupe — affichage de la moitié supérieure" msgid "Section view — showing the lower half" msgstr "Vue en coupe — affichage de la moitié inférieure" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Recherche des faces de la fonction…" -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Sélectionnez d'abord un corps — cliquez dessus dans la vue ou dans la liste des corps" +# AI Translated +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Le modèle est en cours de reconstruction — zoomez à nouveau une fois terminé" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s n’a rien de visible sur quoi zoomer" msgid "That body has no display mesh yet — recompute first" msgstr "Ce corps n'a pas encore de maillage d'affichage — recalculez d'abord" +# AI Translated +msgid "Select something to zoom to" +msgstr "Sélectionnez un élément sur lequel zoomer" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Terminez ou annulez d’abord ce qui est ouvert" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Sélectionnez d'abord un corps — cliquez dessus dans la vue ou dans la liste des corps" + msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Faites glisser les flèches pour déplacer, les anneaux pour pivoter — puis Confirmer (Échap annule)" @@ -24577,12 +24710,10 @@ msgstr "Cliquez sur une face du solide, puis appuyez sur F" msgid "Placed on face — body laid flat on the bed" msgstr "Posé sur la face — corps posé à plat sur le plateau" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Modification rejetée : %s" msgid "Erase all features and bodies and start a new design? This cannot be undone." msgstr "Effacer toutes les fonctions et tous les corps et démarrer une nouvelle conception ? Cette action est irréversible." @@ -24598,9 +24729,10 @@ msgstr "Ce corps n'a aucune fonction à supprimer — utilisez Nouvelle concepti msgid "feature %d" msgstr "fonction %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "Fonction supprimée : %s, celle à partir de laquelle ce corps a été créé — Ctrl+Z la restaure" msgid "Select the FEATURE that created this body (or use New Design)" msgstr "Sélectionnez la FONCTION qui a créé ce corps (ou utilisez Nouvelle conception)" @@ -24935,12 +25067,14 @@ msgstr "Fichiers STEP (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP exporté" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "Échec de l’exportation STEP : %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Valider sur la plaque (en corps séparés) — envoyer chaque corps vers Préparer comme un objet distinct" msgid "Commit to Plate — send the solid to Prepare" msgstr "Valider sur la plaque — envoyer le solide vers Préparer" @@ -24952,19 +25086,36 @@ msgstr "Rien à valider — ajoutez d'abord une fonction" msgid "All bodies hidden — show one before committing" msgstr "Tous les corps sont masqués — affichez-en un avant de valider" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu arête" +msgstr[1] "%zu arêtes" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Ligne d’axe E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Ligne E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Plan d’esquisse : %s — choisissez un outil" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Plan d’esquisse : %s.\n" +"Choisissez un outil, ou appuyez sur Menu pour afficher la liste." # AI Translated msgid "Plane ready" @@ -24974,8 +25125,9 @@ msgstr "Plan prêt" msgid "Axis ready" msgstr "Axe prêt" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Repère prêt" # AI Translated msgid "Helix ready" @@ -24992,9 +25144,10 @@ msgstr "Esquisse prête" msgid "Mate ready" msgstr "Liaison prête" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Non valide : %s" # AI Translated #, c-format @@ -25071,109 +25224,138 @@ msgstr "Modifier la variable" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "La variable '%s' n'a pas pu être supprimée (probablement encore référencée par une expression de fonction) : %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "« %s » n’est pas une valeur qu’une expression peut piloter" msgid "No binding for that field" msgstr "Aucune association pour ce champ" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "La valeur doit être supérieure à zéro" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "La valeur ne doit pas être négative (zéro signifie coïncident)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Cette cote ne peut pas être respectée — l’esquisse est sur-contrainte" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "Contraintes ignorées, car elles ne peuvent pas agir sur cette géométrie (une ellipse ou une courbe spline, ou un cercle de taille nulle) : %1%" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Ce profil se croise ou se replie sur lui-même au niveau de la marque rouge, il ne délimite donc pas une seule région" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Côté" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Demi-grand axe" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Demi-petit axe" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "L’angle doit être compris entre 0° et 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "Le demi-grand axe ne peut pas être plus court que le demi-petit axe" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "Le rayon d’angle doit être inférieur à la moitié du côté le plus court" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "La rainure est trop large pour son rayon — la largeur doit être inférieure au double du rayon" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1% : impossible à respecter — l’esquisse est sur-contrainte" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Ces deux lignes ne se rejoignent pas en un coin — choisissez deux lignes qui se rejoignent" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "La taille doit être supérieure à zéro" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Congé : le rayon dépasse la longueur d’un côté, ou les deux lignes ne se rejoignent pas en un coin" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Chanfrein : la distance dépasse la longueur d’un côté, ou les deux lignes ne se rejoignent pas en un coin" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "Contraintes invalidées par le congé/chanfrein et supprimées : %1%" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Décaler : une ellipse ou une spline n’a pas de parallèle de même nature — choisissez des lignes, des arcs ou des cercles" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Le facteur d’échelle doit être supérieur à zéro" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Copies" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Le nombre de copies doit être un nombre entier, égal ou supérieur à 2" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "Contraintes libérées par la transformation : %1%" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Les copies de la répétition ne sont pas contraintes — le solveur a rejeté tous les rattachements" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "clic droit ou double-clic pour terminer, cliquez sur le début pour fermer" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Prolonger : cliquez sur une ligne ou un arc pouvant atteindre une autre entité" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Ajuster : cliquez sur un segment là où il croise une autre entité" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Appuyez sur Entrée ou ✓ pour appliquer, Échap pour abandonner" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Pas encore de cote pour cette entité — cliquez sur une ligne, un cercle, un arc ou deux points" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Cliquez sur un second point, ou sur une ligne jusqu’à laquelle mesurer la distance" # AI Translated msgid "Enter a number" @@ -25208,8 +25390,12 @@ msgid "Sketch" msgstr "Esquisse" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Cliquez sur une face ou un plan de référence, puis choisissez un outil de dessin" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Sélectionnez une face plane ou un plan de référence sur lequel esquisser" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Esquisser sur la face plane ou le plan sélectionné, ou cliquer ensuite sur l’un d’eux" # AI Translated msgctxt "Design" @@ -25231,9 +25417,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Épaissir" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Joindre" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -25286,17 +25473,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Épaissir la surface" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "L’épaississement de surface nécessite un corps surfacique — créez-en un d’abord avec un outil de surface" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Trou" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -25311,8 +25496,9 @@ msgctxt "Design" msgid "Split" msgstr "Scinder" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "La scission nécessite un corps solide — ajoutez-en ou importez-en un d’abord" # AI Translated msgid "Split the body along a picked face into two solids" @@ -25358,8 +25544,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Décalage de surface" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Le décalage de surface nécessite un corps surfacique — créez-en un d’abord avec un outil de surface" # AI Translated msgctxt "Design" @@ -25389,8 +25576,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Répétition sur courbe" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "La répétition sur courbe nécessite un corps et une courbe" # AI Translated msgid "Repeat the body along a picked curve" @@ -25411,8 +25599,9 @@ msgctxt "Design" msgid "Align to" msgstr "Aligner sur" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "L’alignement nécessite un corps — ajoutez-en ou importez-en un d’abord" # AI Translated msgid "Align the body to a picked face or plane" @@ -25428,9 +25617,10 @@ msgctxt "Design" msgid "Axis" msgstr "Axe" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Repère" # AI Translated msgctxt "Design" @@ -25446,9 +25636,10 @@ msgstr "Mesurer" msgid "Measure between the picked points, edges or faces" msgstr "Mesurer entre les points, arêtes ou faces choisis" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Volume et aire" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -25489,12 +25680,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Supprimer la face" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Couleur" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Définir la couleur d’affichage du corps sélectionné" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Zoom sur la sélection" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Cadrer la sélection dans la vue, en conservant la direction de vue" # AI Translated msgctxt "Design" @@ -25533,9 +25735,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Rectangle par coins" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Rectangle par le centre" # AI Translated msgctxt "Design" @@ -25547,9 +25750,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Rectangle arrondi" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Cercle par le centre" # AI Translated msgctxt "Design" @@ -25571,9 +25775,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Arc tangent" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Arc par le centre" # AI Translated msgctxt "Design" @@ -25605,48 +25810,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Triangle" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Triangle — cliquez sur le centre, puis sur un sommet" # AI Translated msgctxt "Design" msgid "Square" msgstr "Carré" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Carré — cliquez sur le centre, puis sur un sommet" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Pentagone" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Pentagone — cliquez sur le centre, puis sur un sommet" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Hexagone" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Hexagone — cliquez sur le centre, puis sur un sommet" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Octogone" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Octogone — cliquez sur le centre, puis sur un sommet" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Dodécagone" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Dodécagone — cliquez sur le centre, puis sur un sommet" # AI Translated msgctxt "Design" @@ -25676,8 +25887,9 @@ msgctxt "Design" msgid "Text" msgstr "Texte" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Saisissez du texte ; il devient une fonction Texte sur le plan de cette esquisse, modifiable par la suite" # AI Translated msgctxt "Design" @@ -25794,27 +26006,34 @@ msgstr "Angle / distance…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Saisissez l’angle entre deux lignes ou la distance entre les deux éléments choisis" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Saisissez le texte à insérer" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Gras" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Italique" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Cette police ne peut pas être utilisée pour du texte — choisissez-en une autre" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Saisissez le texte pour voir sa taille" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Cette police n’a pas de contour pour ce texte" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Taille : %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -25912,8 +26131,9 @@ msgstr "Profil" msgid "Start new profile (for holes)" msgstr "Commencer un nouveau profil (pour les trous)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segments" # AI Translated msgid "Sides" @@ -25927,20 +26147,23 @@ msgstr "Cliquez dans la vue pour dessiner" msgid "Snap to grid" msgstr "Aimanter à la grille" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Pas de la grille" # AI Translated msgid "Outer" msgstr "Extérieur" +# AI Translated msgid "closed" -msgstr "" +msgstr "fermé" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2% : %3% points %4%" # AI Translated msgid "XY (Top)" @@ -25977,8 +26200,9 @@ msgstr[1] "%zu profils fermés" msgid "Draw a closed profile to enable" msgstr "Dessinez un profil fermé pour activer" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Tout effacer" # AI Translated msgid "Empty result" @@ -30071,6 +30295,35 @@ msgstr "" "Éviter la déformation\n" "Saviez-vous que lors de l’impression de matériaux susceptibles de se déformer, tels que l’ABS, une augmentation appropriée de la température du plateau chauffant peut réduire la probabilité de déformation?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Expérimental) Utiliser les agents d’imprimante au lieu des hôtes d’impression" + +#~ msgid "FEATURES" +#~ msgstr "FONCTIONS" + +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Cliquez sur une face ou un plan de référence dans la vue, puis sur un outil d'esquisse" + +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Cliquez sur une face ou un plan de référence, puis sur un outil d'esquisse." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "Plan %s sélectionné — clic droit pour les outils de dessin" + +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Rien pour l'instant — importez un STEP ou un maillage depuis la barre d'outils,\n" +#~ "ou cliquez sur un plan de référence puis clic droit pour démarrer une esquisse." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Cliquez sur une face ou un plan de référence, puis choisissez un outil de dessin" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 788e0cd0e3..951fa2edd1 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -3411,8 +3411,8 @@ msgstr "További folyamatbeállítások" msgid "Remove parameter" msgstr "Paraméter eltávolítása" -msgid "to" -msgstr "eddig" +msgid "Range" +msgstr "Tartomány" msgid "Add height range" msgstr "Magasságtartomány hozzáadása" @@ -5485,9 +5485,6 @@ msgstr "paraméter neve" msgid "layers" msgstr "réteg" -msgid "Range" -msgstr "Tartomány" - msgid "Empty string" msgstr "Üres karakterlánc" @@ -8835,8 +8832,9 @@ msgstr "A csatlakoztatott nyomtató: %s. Ennek egyeznie kell a projekt nyomtatá msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Szeretnéd szinkronizálni a nyomtató adatait és automatikusan átváltani a beállítást?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Ez a projekt a Tervezés fülön készült modellt tartalmaz, más geometriát nem. A megtekintéséhez és szerkesztéséhez engedélyezd a \"CAD funkció (kísérleti)\" opciót a Beállításokban, majd indítsd újra a programot; a modell a projekt mentésekor megmarad." msgid "The file does not contain any geometry data." msgstr "A fájl nem tartalmaz geometriai adatokat." @@ -9894,8 +9892,9 @@ msgstr "A Tervezés fülön az illesztési csatlakozót kis lapként rajzolja me msgid "Auto-close sketch loops" msgstr "Vázlathurkok automatikus zárása" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "A 0,001 mm-en belüli vázlatvégpontokat egyetlen csatlakozásként kezeli, és összeforrasztja a hurkot. Kikapcsolva: csak a pontosan egybeeső végpontok kapcsolódnak, így az apró réssel rendelkező hurok nyitottként jelenik meg, ahelyett hogy automatikusan bezárulna. Minden tervvel együtt mentésre kerül; a módosítás után indított tervekre érvényes." msgid "Pan" msgstr "Pásztázás" @@ -10332,18 +10331,6 @@ msgstr "Nem támogatott beállítások megjelenítése" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Megjeleníti a nem kompatibilis vagy nem támogatott beállításokat a nyomtató- és filamentlegördülő listákban. Ezek a beállítások nem választhatók ki." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Kísérleti) Nyomtatóügynökök használata nyomtatókiszolgálók helyett" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"A nem Bambu nyomtatók nyomtatási feladatait a nyomtató bővítményügynökein keresztül továbbítja a klasszikus nyomtatókiszolgálóra való feltöltés helyett.\n" -"Ha ki van kapcsolva, az OrcaSlicer a régi nyomtatókiszolgáló-viselkedést használja." - # AI Translated msgid "Experimental Features" msgstr "Kísérleti funkciók" @@ -10359,6 +10346,18 @@ msgstr "" "Megpróbálja tartani a festett jellemzőket (szín/varrat/támasz/fuzzy stb.) az objektumháló megváltoztatása után (például kivágás/újratöltés lemezről/egyszerűsítés/javítás stb.)\n" "Kísérletei szint! Lassú és hibákat hozhat létre." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Nyomtatóügynökök használata nyomtatókiszolgálók helyett" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"A nem Bambu nyomtatók nyomtatási feladatait a nyomtató bővítményügynökein keresztül továbbítja a klasszikus nyomtatókiszolgálóra való feltöltés helyett.\n" +"Ha ki van kapcsolva, az OrcaSlicer a régi nyomtatókiszolgáló-viselkedést használja." + msgid "Allow Abnormal Storage" msgstr "Rendellenes tároló engedélyezése" @@ -10528,6 +10527,9 @@ msgstr "Más rétegek filament sorrendje" msgid "Please input layer value (>= 2)." msgstr "Adj meg egy rétegértéket (>= 2)." +msgid "to" +msgstr "eddig" + msgid "Plate name" msgstr "Tálca neve" @@ -16465,6 +16467,14 @@ msgstr "Szimmetrikus kitöltés Y tengely" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Ha a modell két, az Y tengelyre szimmetrikus részből áll, és azt szeretnéd, hogy ezek a részek szimmetrikus textúrát kapjanak, kattints erre az opcióra az egyik részen." +# AI Translated +msgid "Fill pattern tops" +msgstr "Mintázat tetejének kitöltése" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Válaszd ezt az opciót, ha a kitöltési mintázat tetejét teljesen ki szeretnéd tölteni" + msgid "Infill combination - Max layer height" msgstr "Kitöltés összevonása - maximális rétegmagasság" @@ -22849,6 +22859,26 @@ msgstr "Előfordulhat, hogy a filament nem kompatibilis a jelenlegi gépbeállí msgid "The filament model is unknown. A random filament preset will be used." msgstr "A filament modellje ismeretlen. Egy véletlenszerű filamentbeállítást használ." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Referenciasíkok és -tengelyek elrejtése" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Referenciasíkok és -tengelyek megjelenítése" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "A nyomtatóasztal és a tálcarács elrejtése" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "A nyomtatóasztal és a tálcarács megjelenítése" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Kattints egy referenciasíkra vagy sík lapra, hogy vázlatot készíts rajta — Esc: mégse" + # AI Translated msgid "Construction" msgstr "Segédgeometria" @@ -22874,8 +22904,9 @@ msgstr "Kör — kattints a középpontra, majd a sugárra" msgid "Arc — click start, end, then a point" msgstr "Ív — kattints a kezdőpontra, a végpontra, majd egy pontra" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Hosszlyuk — a középvonal két vége, majd a szélesség" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -22949,8 +22980,9 @@ msgstr "Globális tengelyek megjelenítve" msgid "World axes hidden" msgstr "Globális tengelyek elrejtve" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Axonometrikus nézet, illesztve" # AI Translated msgid "Bed shown" @@ -22961,34 +22993,12 @@ msgid "Bed hidden" msgstr "Asztal elrejtve" # AI Translated -msgid "FEATURES" -msgstr "JELLEMZŐK" +msgid "Reference planes shown" +msgstr "Referenciasíkok megjelenítve" # AI Translated -msgid "Sketch" -msgstr "Vázlat" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Vázlatsík: %s — válassz eszközt" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Kattints egy lapra vagy referenciasíkra a nézetablakban, majd egy vázlateszközre" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Vázlatsík: %s.\n" -"Válassz eszközt, vagy nyomd meg a Menü billentyűt a listához." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Kattints egy lapra vagy referenciasíkra, majd egy vázlateszközre." +msgid "Reference planes hidden" +msgstr "Referenciasíkok elrejtve" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -23174,8 +23184,9 @@ msgstr "Tengely" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Referenciatengely (két pont, lapnormális, hengertengely, két sík, él mentén)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Koordináta-rendszer" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -23239,8 +23250,9 @@ msgstr "A tükrözéshez test szükséges — előbb adj hozzá vagy importálj msgid "Mate" msgstr "Illesztés" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Összeállítás: két koordináta-rendszer igazítása (rögzített, síkbeli, forgó, csúszó, hengeres)" # AI Translated msgid "Boolean (combine bodies)" @@ -23339,14 +23351,6 @@ msgstr "Menet készítése hengeres felületen (belső furat / külső) vagy kö msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Válassz egy hengeres felületet (furat / külső) vagy egy kör alakú élt a menethez" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "STEP importálása (szerkeszthető B-rep szilárd test)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Háló (STL/OBJ) importálása szerkeszthető B-rep szilárd testként" - # AI Translated msgid "Constrain selected sketch" msgstr "Kényszerek hozzáadása a kijelölt vázlathoz" @@ -23379,8 +23383,9 @@ msgstr "Kattints a kezdőpontra, majd a végpontra — utána állítsd be a pon msgid "Polyline" msgstr "Vonallánc" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Kattints a pontokra; a hurok bezárásához kattints az első pontra, a lánc befejezéséhez kattints jobb gombbal, vagy nyomd meg az Entert" # AI Translated msgid "Corner rectangle" @@ -23470,8 +23475,9 @@ msgstr "Kattints a középpontra, majd a kezdőpontra, végül egy pontra a vég msgid "Slot" msgstr "Hosszlyuk" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Kattints a középvonal két végpontjára, majd egy pontra a szélességhez" # AI Translated msgid "Arc slot" @@ -23501,8 +23507,9 @@ msgstr "Kattints a középpontra, a nagytengely végére, a kistengely pontjára msgid "Spline" msgstr "Spline" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Kattints a vezérlőpontokra; befejezés dupla kattintással, jobb kattintással vagy Enterrel" # AI Translated msgid "Click to place a point" @@ -23556,15 +23563,17 @@ msgstr "Válaszd ki a tükörtengely vonalát, majd a tükrözendő elemeket; az msgid "Trim" msgstr "Levágás" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Kattints egy szakaszra a legközelebbi metszéspontig történő levágáshoz; Esc: kilépés" # AI Translated msgid "Extend" msgstr "Meghosszabbítás" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Kattints egy vonalra vagy ívre a legközelebbi elemig történő meghosszabbításhoz; Esc: kilépés" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23747,13 +23756,21 @@ msgstr "Függőleges távolság" msgid "New Design — clear the feature tree" msgstr "Új terv — a jellemzőfa törlése" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "STEP importálása (szerkeszthető B-rep szilárd test)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Háló (STL/OBJ) importálása szerkeszthető B-rep szilárd testként" + # AI Translated msgid "Export STEP…" msgstr "STEP exportálása…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "A nyomtatóasztal és a tálcarács megjelenítése" +msgid "Create a new sketch" +msgstr "Új vázlat létrehozása" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23767,20 +23784,25 @@ msgstr "Keresztmetszet nézet — a modell egy részének elrejtése, hogy belel msgid "Flip Section — show the opposite half" msgstr "Metszet megfordítása — a másik fél megjelenítése" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Válaszd ki, hogyan küldje át a testeket a Tálcára küldés funkció" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Tálcára küldés" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Az összes test egyetlen objektum lesz, testenként egy tárggyal, megtartva egymáshoz viszonyított helyzetüket" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Tálcára küldés (testekként)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Minden test önálló objektum lesz, külön elhelyezve" # AI Translated msgid "Width / X" @@ -23790,6 +23812,10 @@ msgstr "Szélesség / X" msgid "Height / Y" msgstr "Magasság / Y" +# AI Translated +msgid "Sketch" +msgstr "Vázlat" + # AI Translated msgid "Distance X" msgstr "Távolság X" @@ -23992,8 +24018,9 @@ msgstr "Körkörös" msgid "Direction" msgstr "Irány" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Teljes szög (°)" # AI Translated msgid "Boolean" @@ -24377,11 +24404,13 @@ msgstr "Hengeres — tengelyek egy egyenesbe esnek; szabad forgás + tengelyirá msgid "Kind" msgstr "Fajta" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (rögzített)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (mozog)" # AI Translated msgid "Angle °" @@ -24419,6 +24448,10 @@ msgstr "(nincs kötés)" msgid "Value" msgstr "Érték" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Válassz eszközt, vagy nyomd meg a Menü billentyűt a listához." + # AI Translated msgid "Constraints" msgstr "Kényszerek" @@ -24457,6 +24490,10 @@ msgstr "Mozgatás lefelé" msgid "Show / hide" msgstr "Megjelenítés / elrejtés" +# AI Translated +msgid "Zoom to selection" +msgstr "Nagyítás a kijelölésre" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Ütközésvizsgálat — egymásba érő testek keresése" @@ -24478,14 +24515,17 @@ msgstr "Test %d kijelölve — jobb kattintással láthatod, mi alkalmazható r msgid "Variables" msgstr "Változók" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Változó hozzáadása" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Változó szerkesztése" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Változó törlése" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24504,9 +24544,10 @@ msgstr "Vázlat frissítve" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Vázlat létrehozva (%zu vezérlő méret) — jelöld ki, majd jobb kattintással extrudáld" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Hossz: %.2f mm, szög: %.1f°" # AI Translated msgid "(locked)" @@ -24528,6 +24569,10 @@ msgstr "Terület kijelölve — jobb kattintás: extrudálás, dupla kattintás: msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Vázlat kijelölve — jobb kattintás: extrudálás, dupla kattintás: szerkesztés" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Ez a lap nem sík — kattints egy sík lapra vagy referenciasíkra" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24556,30 +24601,29 @@ msgstr "Test %d: lap %d kijelölve — jobb kattintás: tolás/húzás, vagy kat msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Lap %d kijelölve — jobb kattintás: tolás/húzás, vagy kattints újra a teljes testhez" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Test %d: %zu él kijelölve — Shift+kattintás: egy él hozzáadása vagy eltávolítása, a Lekerekítés/Letörés mindet megmunkálja" +msgstr[1] "Test %d: %zu él kijelölve — Shift+kattintás: egy él hozzáadása vagy eltávolítása, a Lekerekítés/Letörés mindet megmunkálja" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "%zu él kijelölve — Shift+kattintás: egy él hozzáadása vagy eltávolítása, a Lekerekítés/Letörés mindet megmunkálja" +msgstr[1] "%zu él kijelölve — Shift+kattintás: egy él hozzáadása vagy eltávolítása, a Lekerekítés/Letörés mindet megmunkálja" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "%s sík kijelölve — jobb kattintás: rajzeszközök" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Test %d: él %d kijelölve — Shift+kattintás: további élek hozzáadása, vagy kattints újra a teljes testhez" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Él %d kijelölve — Shift+kattintás: további élek hozzáadása, vagy kattints újra a teljes testhez" # AI Translated #, c-format, boost-format @@ -24604,8 +24648,9 @@ msgstr "Kilépve az eszközből" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Vázlat megtartva — Megerősítés: véglegesítés, Mégse: elvetés" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "A törléshez jelölj ki valamit" # AI Translated msgid "✗ Conflicting constraints" @@ -24637,17 +24682,21 @@ msgstr "Szerkesztés: Vázlat %d · N = merőleges nézet a síkra · Me msgid "OK — %zu triangles" msgstr "OK — %zu háromszög" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Szerkeszd a szöveget — Enter: alkalmazás, Esc: az eredeti megtartása" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Írd be a szöveget — gépelés közben megjelenik a nézetben; Enter: beszúrás, Esc: mégse" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Szöveg változatlan" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Szöveg elvetve" # AI Translated msgid "Import SVG" @@ -24673,9 +24722,10 @@ msgstr "STEP beolvasása…" msgid "No solids found in STEP" msgstr "A STEP fájlban nem található szilárd test" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "A STEP importálása sikertelen: %s" # AI Translated msgid "Rebuilding model…" @@ -24700,9 +24750,10 @@ msgstr "Hálófájlok (*.stl;*.obj)|*.stl;*.obj|Minden fájl|*.*" msgid "Could not read the STL file" msgstr "Nem sikerült beolvasni az STL fájlt" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Nem sikerült beolvasni az OBJ fájlt: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -24727,20 +24778,23 @@ msgstr "" msgid "Large mesh" msgstr "Nagy háló" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "A háló átalakítása sikertelen: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "A háló átalakítása nem hozott létre geometriát" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Háló" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "A háló importálása sikertelen: %s" # AI Translated #, c-format, boost-format @@ -24769,17 +24823,19 @@ msgstr " — húzással helyezd el/méretezd, majd Megerősítés" msgid "Insert canceled" msgstr "Beszúrás megszakítva" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Húzz egy sarkot az átméretezéshez, a közepét a mozgatáshoz — ha kész: Enter vagy ✓, elvetés: Esc" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Vázlat hozzáadva (sík: %s) — jelöld ki, majd jobb kattintással extrudáld" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "A modellt nem sikerült újraépíteni: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -24851,18 +24907,21 @@ msgstr "Előbb válassz ki egy nyitott vonalat tartalmazó vázlatot" msgid "Add at least one face to delete first" msgstr "Előbb adj hozzá legalább egy törlendő lapot" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Az illesztéshez két koordináta-rendszer szükséges — előbb hozd létre őket" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Illesztés: az A és a B nem lehet ugyanaz a koordináta-rendszer" # AI Translated msgid "Mate rejected" msgstr "Illesztés elutasítva" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Az ütközésvizsgálathoz legalább két test szükséges" # AI Translated msgid "No interference found" @@ -24873,36 +24932,43 @@ msgstr "Nem található ütközés" msgid "Body %d" msgstr "Test %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu átfedő pár: %s" +msgstr[1] "%zu átfedő pár: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "A méréshez jelölj ki egy testet" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Ezt a testet nem sikerült megmérni" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: felülettest, felület %.2f mm², térfogat nélkül — vastagítsd, hogy legyen térfogata" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: térfogat %.2f mm³, felület %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "A sokszorozáshoz szilárd test szükséges — előbb adj hozzá vagy importálj egyet" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "A logikai művelethez két test szükséges — adj hozzá vagy importálj egy másodikat" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -24917,35 +24983,45 @@ msgstr "Kijelölt lap (Test %d)" msgid "Picked face" msgstr "Kijelölt lap" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "az új alakzatot nem sikerült egyesíteni a testtel" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "az új alakzatot nem sikerült kivágni a testből" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "az alakzatok metszetét nem sikerült képezni" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "az előzményekben még semmi sem hoz létre szilárd testet" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "a vázlatprofil nem tiszta zárt hurok" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "a szerszámtest nem érinti a céltestet" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "egy kifejezés nem létező változót használ" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "egy kifejezés nullával oszt" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "két változó kölcsönösen egymásra hivatkozik" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "egy geometriai művelet sikertelen" # AI Translated #, c-format, boost-format @@ -24984,15 +25060,17 @@ msgstr "Méretezés — kattints a második pontra" msgid "Line — click the start point" msgstr "Vonal — kattints a kezdőpontra" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Vonal — kattints a végpontra; utána a hossza és a szöge is beírható" # AI Translated msgid "Polyline — click the first point" msgstr "Vonallánc — kattints az első pontra" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Vonallánc — kattints a következő pontra · a bezáráshoz kattints a kezdőpontra · a lánc befejezése: jobb kattintás, dupla kattintás vagy Enter" # AI Translated msgid "Rectangle — click one corner" @@ -25038,8 +25116,9 @@ msgstr "Lekerekített téglalap — kattints a saroksugár megadásához" msgid "Circle — click the center" msgstr "Kör — kattints a középpontra" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Kör — kattints a sugár megadásához; utána be is írhatod" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -25165,18 +25244,21 @@ msgstr "Ellipszisív — kattints oda, ahol az ív végződik" msgid "Spline — click the first control point" msgstr "Spline — kattints az első vezérlőpontra" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline — kattints a következő vezérlőpontra · a görbe befejezése: jobb kattintás, dupla kattintás vagy Enter" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Pont — kattints egy pont elhelyezéséhez; az eszköz aktív marad a továbbiakhoz" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Levágás — kattints egy szakaszra ott, ahol egy másik elemet keresztez · Esc: kilépés" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Meghosszabbítás — kattints egy vonalra vagy ívre, hogy a legközelebbi elemig meghosszabbítsd · Esc: kilépés" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -25186,8 +25268,9 @@ msgstr "Lekerekítés — kattints két találkozó vonal közül az elsőre" msgid "Fillet — click the second line" msgstr "Lekerekítés — kattints a második vonalra" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Lekerekítés — húzd a nyilat, vagy kattints a számra a sugár beírásához · Enter: alkalmazás · Esc: mégse" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -25197,63 +25280,74 @@ msgstr "Letörés — kattints két találkozó vonal közül az elsőre" msgid "Chamfer — click the second line" msgstr "Letörés — kattints a második vonalra" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Letörés — húzd a nyilat, vagy kattints a számra a letörési távolság beírásához · Enter: alkalmazás · Esc: mégse" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Eltolás — kattints egy görbére; a teljes körvonala eltolódik" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Eltolás — húzd a nyilat bármelyik oldalra, vagy kattints a számra a távolság beírásához · Enter: alkalmazás · Esc: mégse" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Tükrözés — először kattints a tükörtengelyként szolgáló VONALRA (segédvonal is lehet)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Tükrözés — tengely beállítva · most kattints a tükrözendő elemekre · Esc: mégse" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Tükrözés — tengely beállítva · %d tükrözendő elem · kattints egy másikra a hozzáadásához vagy eltávolításához · Enter: alkalmazás" # AI Translated msgid "Move — click the entities to move" msgstr "Mozgatás — kattints a mozgatandó elemekre" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Mozgatás — húzd a fogantyút, vagy kattints a számra a távolság beírásához · Enter: alkalmazás" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Forgatás — kattints a forgatandó elemekre" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Forgatás — húzd a fogantyút, vagy kattints a számra a szög beírásához · Enter: alkalmazás" # AI Translated msgid "Scale — click the entities to scale" msgstr "Átméretezés — kattints az átméretezendő elemekre" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Átméretezés — húzd a fogantyút, vagy kattints a számra a tényező beírásához · Enter: alkalmazás" # AI Translated msgid "Array — click the entities to repeat" msgstr "Sokszorozás — kattints az ismétlendő elemekre" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Sokszorozás — húzd a fogantyút a lépésköz beállításához, kattints a darabszámra a beírásához · Enter: alkalmazás" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Poláris sokszorozás — kattints az ismétlendő elemekre" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Poláris sokszorozás — húzd a fogantyút a szögtartomány beállításához, kattints a darabszámra a beírásához · Enter: alkalmazás" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Húzz egy sarkot az átméretezéshez, a közepét a mozgatáshoz · ha kész: Enter vagy ✓, elvetés: Esc" # AI Translated msgid " · Esc goes back to Select" @@ -25263,62 +25357,77 @@ msgstr " · Esc: vissza a Kijelöléshez" msgid " · click a constraint badge to remove it" msgstr " · kattints egy kényszerjelvényre az eltávolításához" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — szilárd test" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — felülettest" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Sík lap %d (%s)" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Hengeres lap %d (%s)" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Lap %d (%s)" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu él (%s)" +msgstr[1] "%zu él (%s)" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Egyenes él %d (%s)" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Kör alakú él %d (%s)" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Csúcs (%s)" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Vázlatprofil" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Vázlat — nincs kijelölés" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Vázlatvonal" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Vázlatgörbe" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Vázlatpont" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d vázlatelem" # AI Translated msgid "select something first" @@ -25381,8 +25490,9 @@ msgstr "Sík hozzáadva — válaszd ki vázlatsíkként" msgid "Axis added" msgstr "Tengely hozzáadva" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Koordináta-rendszer hozzáadva" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -25399,10 +25509,10 @@ msgstr "A ferdeséghez egy kijelölt lap szükséges — előbb kattints egy old # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Még nincs semmi — importálj egy STEP fájlt vagy hálót az eszköztárról,\n" -"vagy kattints egy referenciasíkra, majd jobb kattintással kezdj rajta vázlatot." +"vagy nyomd meg a Vázlat gombot, és kattints egy referenciasíkra a vázlat indításához." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -25412,9 +25522,10 @@ msgstr "Még nincs szilárd test — jelölj ki egy vázlatot, és jobb kattint msgid "Could not restore the CAD model from this project" msgstr "Nem sikerült visszaállítani a CAD-modellt ebből a projektből" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Nem sikerült visszaállítani a CAD-modellt: %s" # AI Translated #, c-format @@ -25437,17 +25548,35 @@ msgstr "Keresztmetszet nézet — a felső fél látható" msgid "Section view — showing the lower half" msgstr "Keresztmetszet nézet — az alsó fél látható" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "A jellemző lapjainak keresése…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Előbb jelölj ki egy testet — kattints rá a nézetablakban vagy a Testek listában" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "A modell újraépítése folyamatban — ha elkészült, nagyíts újra" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "A(z) %s egyetlen része sem látható, így nincs mire nagyítani" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Ennek a testnek még nincs megjelenítési hálója — előbb számold újra" +# AI Translated +msgid "Select something to zoom to" +msgstr "A nagyításhoz jelölj ki valamit" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Előbb fejezd be vagy szakítsd meg, ami nyitva van" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Előbb jelölj ki egy testet — kattints rá a nézetablakban vagy a Testek listában" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Húzd a nyilakat a mozgatáshoz, a gyűrűket a forgatáshoz — majd Megerősítés (Esc: mégse)" @@ -25473,12 +25602,10 @@ msgstr "Kattints a test egyik lapjára, majd nyomd meg az F billentyűt" msgid "Placed on face — body laid flat on the bed" msgstr "Lapra fektetve — a test simán fekszik az asztalon" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Szerkesztés elutasítva: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25497,9 +25624,10 @@ msgstr "Ennek a testnek nincs törölhető jellemzője — az újrakezdéshez ha msgid "feature %d" msgstr "jellemző %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "Törölve: %s, a jellemző, amelyből ez a test készült — a Ctrl+Z visszaállítja" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -25891,12 +26019,14 @@ msgstr "STEP fájlok (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP exportálva" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "A STEP exportálása sikertelen: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Tálcára küldés (testekként) — minden test átküldése az Előkészítésbe, önálló objektumként" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -25910,19 +26040,36 @@ msgstr "Nincs mit a tálcára küldeni — előbb adj hozzá egy jellemzőt" msgid "All bodies hidden — show one before committing" msgstr "Minden test rejtett — a tálcára küldés előtt jeleníts meg legalább egyet" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu él" +msgstr[1] "%zu él" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Középvonal E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Vonal E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Vázlatsík: %s — válassz eszközt" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Vázlatsík: %s.\n" +"Válassz eszközt, vagy nyomd meg a Menü billentyűt a listához." # AI Translated msgid "Plane ready" @@ -25932,8 +26079,9 @@ msgstr "Sík kész" msgid "Axis ready" msgstr "Tengely kész" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Koordináta-rendszer kész" # AI Translated msgid "Helix ready" @@ -25951,9 +26099,10 @@ msgstr "Vázlat kész" msgid "Mate ready" msgstr "Illesztés kész" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Érvénytelen: %s" # AI Translated #, c-format @@ -26037,110 +26186,139 @@ msgstr "Változó szerkesztése" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "A(z) '%s' változót nem sikerült eltávolítani (valószínűleg még hivatkozik rá egy jellemzőkifejezés): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "A(z) \"%s\" nem olyan érték, amelyet kifejezés határozhat meg" # AI Translated msgid "No binding for that field" msgstr "Ehhez a mezőhöz nincs kötés" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "Az értéknek nagyobbnak kell lennie nullánál" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "Az érték nem lehet negatív (a nulla egybeesést jelent)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Ez a méret nem teljesíthető — a vázlat túlhatározott" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "%1% kényszer nem alkalmazható erre a geometriára (ellipszis- vagy spline-görbe, illetve nulla méretű kör), ezért figyelmen kívül marad" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Ez a profil a piros jelnél keresztezi önmagát vagy visszahajlik önmagára, ezért nem egyetlen tartományt határol" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Oldal" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Fél nagytengely" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Fél kistengely" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "A szögnek 0° és 360° között kell lennie" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "A fél nagytengely nem lehet rövidebb a fél kistengelynél" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "A saroksugárnak kisebbnek kell lennie a rövidebb oldal felénél" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "A hosszlyuk túl széles a sugarához képest — a szélességnek kisebbnek kell lennie a sugár kétszeresénél" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1%: nem teljesíthető — a vázlat túlhatározott" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Ez a két vonal nem találkozik egy sarokban — válassz két olyan vonalat, amelyek találkoznak" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "A méretnek nagyobbnak kell lennie nullánál" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Lekerekítés: a sugár túlnyúlik az egyik szár végén, vagy a két vonal nem találkozik egy sarokban" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Letörés: a távolság túlnyúlik az egyik szár végén, vagy a két vonal nem találkozik egy sarokban" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "A lekerekítés/letörés által érvénytelenített %1% kényszer eltávolítva" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Eltolás: ellipszis vagy spline nem tolható el azonos típusú görbévé — válassz vonalakat, íveket vagy köröket" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Az átméretezési tényezőnek nagyobbnak kell lennie nullánál" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Másolatok" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "A másolatok száma csak 2 vagy annál nagyobb egész szám lehet" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "A transzformálás %1% kényszert feloldott" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "A sokszorozás másolatai nincsenek kényszerezve — a megoldó minden kötést elutasított" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "befejezés: jobb kattintás vagy dupla kattintás; bezárás: kattintás a kezdőpontra" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Meghosszabbítás: kattints egy olyan vonalra vagy ívre, amely elérhet egy másik elemet" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Levágás: kattints egy szakaszra ott, ahol egy másik elemet keresztez" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Enter vagy ✓: alkalmazás, Esc: elvetés" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Ehhez az elemhez még nincs méret — kattints egy vonalra, körre, ívre vagy két pontra" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Kattints egy második pontra, vagy egy vonalra, amelytől a távolságot mérni szeretnéd" # AI Translated msgid "Enter a number" @@ -26176,8 +26354,12 @@ msgid "Sketch" msgstr "Vázlat" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Kattints egy lapra vagy egy referenciasíkra, majd válassz egy rajzeszközt" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Jelölj ki egy sík lapot vagy referenciasíkot, amelyen vázlatot készíthetsz" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Vázlat készítése a kijelölt sík lapon vagy síkon, vagy kattints utána egyre" # AI Translated msgctxt "Design" @@ -26199,9 +26381,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Vastagítás" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Egyesítés" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -26254,17 +26437,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Felület vastagítása" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "A felület vastagításához felülettest szükséges — előbb hozz létre egyet egy Felület eszközzel" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Furat" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -26279,8 +26460,9 @@ msgctxt "Design" msgid "Split" msgstr "Szétválasztás" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "A szétválasztáshoz szilárd test szükséges — előbb adj hozzá vagy importálj egyet" # AI Translated msgid "Split the body along a picked face into two solids" @@ -26326,8 +26508,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Felületeltolás" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "A felületeltoláshoz felülettest szükséges — előbb hozz létre egyet egy Felület eszközzel" # AI Translated msgctxt "Design" @@ -26357,8 +26540,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Sokszorozás görbe mentén" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "A görbe menti sokszorozáshoz egy test és egy görbe szükséges" # AI Translated msgid "Repeat the body along a picked curve" @@ -26379,8 +26563,9 @@ msgctxt "Design" msgid "Align to" msgstr "Igazítás ehhez" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Az igazításhoz test szükséges — előbb adj hozzá vagy importálj egyet" # AI Translated msgid "Align the body to a picked face or plane" @@ -26396,9 +26581,10 @@ msgctxt "Design" msgid "Axis" msgstr "Tengely" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Koordináta-rendszer" # AI Translated msgctxt "Design" @@ -26414,9 +26600,10 @@ msgstr "Mérés" msgid "Measure between the picked points, edges or faces" msgstr "Mérés a kijelölt pontok, élek vagy lapok között" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Térfogat és felület" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -26458,12 +26645,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Lap törlése" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Szín" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "A kijelölt test megjelenítési színének beállítása" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Nagyítás a kijelölésre" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "A kijelölés nézetbe illesztése, a nézési irány megtartásával" # AI Translated msgctxt "Design" @@ -26502,9 +26700,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Sarokpontos téglalap" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Középpontos téglalap" # AI Translated msgctxt "Design" @@ -26516,9 +26715,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Lekerekített téglalap" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Középpontos kör" # AI Translated msgctxt "Design" @@ -26540,9 +26740,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Érintőív" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Középpontos ív" # AI Translated msgctxt "Design" @@ -26574,48 +26775,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Háromszög" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Háromszög — kattints a középpontra, majd egy csúcsra" # AI Translated msgctxt "Design" msgid "Square" msgstr "Négyzet" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Négyzet — kattints a középpontra, majd egy csúcsra" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Ötszög" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Ötszög — kattints a középpontra, majd egy csúcsra" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Hatszög" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Hatszög — kattints a középpontra, majd egy csúcsra" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Nyolcszög" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Nyolcszög — kattints a középpontra, majd egy csúcsra" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Tizenkétszög" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Tizenkétszög — kattints a középpontra, majd egy csúcsra" # AI Translated msgctxt "Design" @@ -26645,8 +26852,9 @@ msgctxt "Design" msgid "Text" msgstr "Szöveg" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Írj be szöveget; a vázlat síkján Szöveg jellemző lesz belőle, amely később is szerkeszthető" # AI Translated msgctxt "Design" @@ -26763,27 +26971,34 @@ msgstr "Szög / távolság…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Írd be a két vonal közötti szöget vagy a két kijelölés közötti távolságot" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Írd be a beszúrandó szöveget" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Félkövér" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Dőlt" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Ez a betűtípus nem használható szöveghez — válassz másikat" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Írd be a szöveget a méretének megtekintéséhez" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Ennek a betűtípusnak nincs körvonala ehhez a szöveghez" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Méret: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -26881,8 +27096,9 @@ msgstr "Profil" msgid "Start new profile (for holes)" msgstr "Új profil kezdése (lyukakhoz)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Szakaszok" # AI Translated msgid "Sides" @@ -26896,20 +27112,23 @@ msgstr "Kattints a vászonra a rajzoláshoz" msgid "Snap to grid" msgstr "Rácshoz illesztés" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Rács lépésköze" # AI Translated msgid "Outer" msgstr "Külső" +# AI Translated msgid "closed" -msgstr "" +msgstr "zárt" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% pont %4%" # AI Translated msgid "XY (Top)" @@ -26946,8 +27165,9 @@ msgstr[1] "%zu zárt profil" msgid "Draw a closed profile to enable" msgstr "Az engedélyezéshez rajzolj egy zárt profilt" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Összes törlése" # AI Translated msgid "Empty result" @@ -31061,6 +31281,39 @@ msgstr "" "Kunkorodás elkerülése\n" "Tudtad, hogy a kunkorodásra hajlamos anyagok (például ABS) nyomtatásakor az asztal hőmérsékletének növelése csökkentheti a kunkorodás valószínűségét?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Kísérleti) Nyomtatóügynökök használata nyomtatókiszolgálók helyett" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "JELLEMZŐK" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Kattints egy lapra vagy referenciasíkra a nézetablakban, majd egy vázlateszközre" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Kattints egy lapra vagy referenciasíkra, majd egy vázlateszközre." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "%s sík kijelölve — jobb kattintás: rajzeszközök" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Még nincs semmi — importálj egy STEP fájlt vagy hálót az eszköztárról,\n" +#~ "vagy kattints egy referenciasíkra, majd jobb kattintással kezdj rajta vázlatot." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Kattints egy lapra vagy egy referenciasíkra, majd válassz egy rajzeszközt" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index ff0d3f9551..9c9f915319 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -3417,8 +3417,8 @@ msgstr "Profilo processo aggiuntivo" msgid "Remove parameter" msgstr "Rimuovi parametro" -msgid "to" -msgstr "a" +msgid "Range" +msgstr "Intervallo" msgid "Add height range" msgstr "Aggiungi intervallo di altezza" @@ -5459,9 +5459,6 @@ msgstr "nome parametro" msgid "layers" msgstr "strati" -msgid "Range" -msgstr "Intervallo" - msgid "Empty string" msgstr "Stringa vuota" @@ -8788,8 +8785,9 @@ msgstr "La stampante connessa è %s. Deve corrispondere al profilo del progetto msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Vuoi sincronizzare le informazioni della stampante e cambiare automaticamente il profilo?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Questo progetto contiene un modello creato nella scheda Progettazione e nessun'altra geometria. Abilita \"Funzionalità CAD (sperimentale)\" nelle Preferenze e riavvia per vederlo e modificarlo; viene conservato al salvataggio del progetto." msgid "The file does not contain any geometry data." msgstr "Il file non contiene dati geometrici." @@ -9841,8 +9839,9 @@ msgstr "Nella scheda Progettazione, disegna un connettore di accoppiamento come msgid "Auto-close sketch loops" msgstr "Chiudi automaticamente i contorni dello schizzo" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Considera i punti finali dello schizzo entro 0,001 mm come un unico giunto e salda il contorno chiudendolo. Disattivato: si uniscono solo i punti finali esattamente coincidenti, quindi un contorno con una minima interruzione viene mostrato come aperto invece di essere chiuso automaticamente. Salvato con ogni progettazione; si applica alle progettazioni iniziate dopo la modifica." # AI Translated msgid "Pan" @@ -10295,18 +10294,6 @@ msgstr "Mostra i profili non supportati" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Mostra i profili incompatibili/non supportati negli elenchi a discesa di stampante e filamento. Questi profili non possono essere selezionati." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Sperimentale) Usa gli agenti stampante invece degli host di stampa" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Instrada i lavori di stampa delle stampanti non Bambu attraverso gli agenti plugin della stampante invece del classico flusso di caricamento sull'host di stampa.\n" -"Quando è disattivato, OrcaSlicer usa il comportamento legacy dell'host di stampa." - # AI Translated msgid "Experimental Features" msgstr "Funzionalità sperimentali" @@ -10323,6 +10310,18 @@ msgstr "" "Tenta di mantenere le zone dipinte (colore/cucitura/supporto/ruvida ecc.) dopo la modifica della mesh dell'oggetto (come taglio/ricarica dal disco/semplifica/correggi ecc.)\n" "Altamente sperimentale! Lento e può creare artefatti." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Usa gli agenti stampante invece degli host di stampa" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Instrada i lavori di stampa delle stampanti non Bambu attraverso gli agenti plugin della stampante invece del classico flusso di caricamento sull'host di stampa.\n" +"Quando è disattivato, OrcaSlicer usa il comportamento legacy dell'host di stampa." + msgid "Allow Abnormal Storage" msgstr "Consenti memoria anomala" @@ -10493,6 +10492,9 @@ msgstr "Sequenza filamenti di altri strati" msgid "Please input layer value (>= 2)." msgstr "Inserisci il valore dello strato (>= 2)." +msgid "to" +msgstr "a" + msgid "Plate name" msgstr "Nome Piatto" @@ -16374,6 +16376,14 @@ msgstr "Riempimento simmetrico asse Y" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Se il modello ha due parti simmetriche rispetto all'asse Y e si desidera che queste parti abbiano texture simmetriche, fare clic su questa opzione su una delle parti." +# AI Translated +msgid "Fill pattern tops" +msgstr "Riempi le sommità del motivo" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Scegli questa opzione se vuoi riempire completamente le sommità del motivo di riempimento" + msgid "Infill combination - Max layer height" msgstr "Combinazione riempimento - Altezza massima strato" @@ -22723,6 +22733,26 @@ msgstr "Il filamento potrebbe non essere compatibile con le impostazioni corrent msgid "The filament model is unknown. A random filament preset will be used." msgstr "Il modello di filamento è sconosciuto. Verrà utilizzato un profilo filamento casuale." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Nascondi piani e assi di riferimento" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Mostra piani e assi di riferimento" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Nascondi il piatto della stampante e la sua griglia" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Mostra il piatto della stampante e la sua griglia" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Clicca un piano di riferimento o una faccia piana per crearvi uno schizzo — Esc annulla" + # AI Translated msgid "Construction" msgstr "Costruzione" @@ -22748,8 +22778,9 @@ msgstr "Cerchio — clicca il centro, poi il raggio" msgid "Arc — click start, end, then a point" msgstr "Arco — clicca inizio, fine, poi un punto" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Asola — due estremi della linea centrale, poi la larghezza" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -22823,8 +22854,9 @@ msgstr "Assi globali mostrati" msgid "World axes hidden" msgstr "Assi globali nascosti" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Vista assonometrica, adattata" # AI Translated msgid "Bed shown" @@ -22835,34 +22867,12 @@ msgid "Bed hidden" msgstr "Piatto nascosto" # AI Translated -msgid "FEATURES" -msgstr "FUNZIONI" +msgid "Reference planes shown" +msgstr "Piani di riferimento mostrati" # AI Translated -msgid "Sketch" -msgstr "Schizzo" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Piano dello schizzo: %s — scegli uno strumento" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Clicca una faccia o un piano di riferimento nella vista, poi uno strumento di schizzo" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Piano dello schizzo: %s.\n" -"Scegli uno strumento o premi Menu per l'elenco." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Clicca una faccia o un piano di riferimento, poi uno strumento di schizzo." +msgid "Reference planes hidden" +msgstr "Piani di riferimento nascosti" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -23048,8 +23058,9 @@ msgstr "Asse" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Asse di riferimento (due punti, normale alla faccia, asse del cilindro, due piani, lungo uno spigolo)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Sistema di coordinate" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -23113,8 +23124,9 @@ msgstr "Specchia richiede un corpo — aggiungine o importane uno prima" msgid "Mate" msgstr "Accoppiamento" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Assieme: allinea due sistemi di coordinate (fisso, planare, rotoidale, prismatico, cilindrico)" # AI Translated msgid "Boolean (combine bodies)" @@ -23213,14 +23225,6 @@ msgstr "Filetta una superficie cilindrica (foro interno / esterna) o uno spigolo msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Seleziona una superficie cilindrica (foro / esterna) o uno spigolo circolare per una filettatura" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Importa STEP (solido B-rep modificabile)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Importa mesh (STL/OBJ) come solido B-rep modificabile" - # AI Translated msgid "Constrain selected sketch" msgstr "Vincola lo schizzo selezionato" @@ -23253,8 +23257,9 @@ msgstr "Clicca l'inizio, poi la fine — quindi imposta la lunghezza esatta" msgid "Polyline" msgstr "Polilinea" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Clicca i punti; clicca il primo punto per chiudere il contorno, clic destro o Invio per terminare la catena" # AI Translated msgid "Corner rectangle" @@ -23344,8 +23349,9 @@ msgstr "Clicca il centro, poi l'inizio, poi un punto per l'angolo finale" msgid "Slot" msgstr "Asola" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Clicca i due estremi della linea centrale, poi un punto per la larghezza" # AI Translated msgid "Arc slot" @@ -23375,8 +23381,9 @@ msgstr "Clicca centro, estremo dell'asse maggiore, punto minore, poi inizio e fi msgid "Spline" msgstr "Spline" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Clicca i punti di controllo; doppio clic, clic destro o Invio per terminare" # AI Translated msgid "Click to place a point" @@ -23430,15 +23437,17 @@ msgstr "Scegli una linea come asse di specchiatura, poi le entità da specchiare msgid "Trim" msgstr "Taglia" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Clicca un segmento per tagliarlo fino all'intersezione più vicina; Esc per uscire" # AI Translated msgid "Extend" msgstr "Estendi" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Clicca una linea o un arco per estenderlo fino all'entità più vicina; Esc per uscire" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23621,13 +23630,21 @@ msgstr "Distanza verticale" msgid "New Design — clear the feature tree" msgstr "Nuova progettazione — svuota l'albero delle funzioni" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Importa STEP (solido B-rep modificabile)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Importa mesh (STL/OBJ) come solido B-rep modificabile" + # AI Translated msgid "Export STEP…" msgstr "Esporta STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Mostra il piatto della stampante e la sua griglia" +msgid "Create a new sketch" +msgstr "Crea un nuovo schizzo" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23641,20 +23658,25 @@ msgstr "Vista in sezione — nascondi parte del modello per vedere all'interno. msgid "Flip Section — show the opposite half" msgstr "Inverti sezione — mostra la metà opposta" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Scegli come inviare i corpi al piatto" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Invia al piatto" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Tutti i corpi diventano un unico oggetto con una parte per corpo, mantenendo le loro posizioni relative" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Invia al piatto (come corpi separati)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Ogni corpo diventa un oggetto a sé, posizionato separatamente" # AI Translated msgid "Width / X" @@ -23664,6 +23686,10 @@ msgstr "Larghezza / X" msgid "Height / Y" msgstr "Altezza / Y" +# AI Translated +msgid "Sketch" +msgstr "Schizzo" + # AI Translated msgid "Distance X" msgstr "Distanza X" @@ -23866,8 +23892,9 @@ msgstr "Circolare" msgid "Direction" msgstr "Direzione" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Angolo totale (°)" # AI Translated msgid "Boolean" @@ -24251,11 +24278,13 @@ msgstr "Cilindrico — assi collineari; rotazione libera + scorrimento assiale" msgid "Kind" msgstr "Tipo" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (fisso)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (mobile)" # AI Translated msgid "Angle °" @@ -24293,6 +24322,10 @@ msgstr "(nessuna associazione)" msgid "Value" msgstr "Valore" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Scegli uno strumento o premi Menu per l'elenco." + # AI Translated msgid "Constraints" msgstr "Vincoli" @@ -24331,6 +24364,10 @@ msgstr "Sposta giù" msgid "Show / hide" msgstr "Mostra / nascondi" +# AI Translated +msgid "Zoom to selection" +msgstr "Zoom sulla selezione" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Verifica interferenze — trova i corpi sovrapposti" @@ -24352,14 +24389,17 @@ msgstr "Corpo %d selezionato — clic destro per le azioni applicabili" msgid "Variables" msgstr "Variabili" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Aggiungi variabile" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Modifica variabile" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Elimina variabile" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24378,9 +24418,10 @@ msgstr "Schizzo aggiornato" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Schizzo creato (%zu quote guida) — selezionalo, poi clic destro per estruderlo" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Lunghezza %.2f mm, angolo %.1f°" # AI Translated msgid "(locked)" @@ -24402,6 +24443,10 @@ msgstr "Regione selezionata — clic destro per estruderla, o doppio clic per mo msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Schizzo selezionato — clic destro per estruderlo, o doppio clic per modificarlo" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Quella faccia non è piana — clicca una faccia piana o un piano di riferimento" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24430,30 +24475,29 @@ msgstr "Corpo %d: faccia %d selezionata — clic destro per spingerla/tirarla, o msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Faccia %d selezionata — clic destro per spingerla/tirarla, o clicca di nuovo per l'intero corpo" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Corpo %d: %zu spigolo selezionato — Maiusc+clic ne aggiunge o ne rimuove uno, Raccordo/Smusso li rifinisce tutti" +msgstr[1] "Corpo %d: %zu spigoli selezionati — Maiusc+clic ne aggiunge o ne rimuove uno, Raccordo/Smusso li rifinisce tutti" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "%zu spigolo selezionato — Maiusc+clic ne aggiunge o ne rimuove uno, Raccordo/Smusso li rifinisce tutti" +msgstr[1] "%zu spigoli selezionati — Maiusc+clic ne aggiunge o ne rimuove uno, Raccordo/Smusso li rifinisce tutti" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "Piano %s selezionato — clic destro per gli strumenti di disegno" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Corpo %d: spigolo %d selezionato — Maiusc+clic per aggiungere spigoli, o clicca di nuovo per l'intero corpo" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Spigolo %d selezionato — Maiusc+clic per aggiungere spigoli, o clicca di nuovo per l'intero corpo" # AI Translated #, c-format, boost-format @@ -24478,8 +24522,9 @@ msgstr "Strumento chiuso" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Schizzo mantenuto — Conferma per applicarlo, Annulla per scartarlo" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Seleziona qualcosa da eliminare" # AI Translated msgid "✗ Conflicting constraints" @@ -24511,17 +24556,21 @@ msgstr "Modifica: Schizzo %d · N = vista normale al piano · Conferma o msgid "OK — %zu triangles" msgstr "OK — %zu triangoli" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Modifica il testo — Invio applica, Esc lo lascia com'era" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Digita il testo — appare nella vista mentre scrivi; Invio inserisce, Esc annulla" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Testo invariato" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Testo annullato" # AI Translated msgid "Import SVG" @@ -24547,9 +24596,10 @@ msgstr "Lettura STEP…" msgid "No solids found in STEP" msgstr "Nessun solido trovato nel file STEP" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "Importazione STEP non riuscita: %s" # AI Translated msgid "Rebuilding model…" @@ -24574,9 +24624,10 @@ msgstr "File mesh (*.stl;*.obj)|*.stl;*.obj|Tutti i file|*.*" msgid "Could not read the STL file" msgstr "Impossibile leggere il file STL" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Impossibile leggere il file OBJ: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -24601,20 +24652,23 @@ msgstr "" msgid "Large mesh" msgstr "Mesh di grandi dimensioni" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Conversione della mesh non riuscita: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "La conversione della mesh non ha prodotto alcuna geometria" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Mesh" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Importazione mesh non riuscita: %s" # AI Translated #, c-format, boost-format @@ -24643,17 +24697,19 @@ msgstr " — trascina per posizionare/ridimensionare, poi Conferma" msgid "Insert canceled" msgstr "Inserimento annullato" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Trascina un angolo per ridimensionare, il centro per spostare — Invio o ✓ quando hai finito, Esc per scartare" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Schizzo aggiunto (piano: %s) — selezionalo, poi clic destro per estruderlo" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Impossibile ricostruire il modello: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -24725,18 +24781,21 @@ msgstr "Scegli prima uno schizzo con una linea aperta" msgid "Add at least one face to delete first" msgstr "Aggiungi prima almeno una faccia da eliminare" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Accoppiamento richiede due sistemi di coordinate — creali prima" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Accoppiamento: A e B devono essere sistemi di coordinate diversi" # AI Translated msgid "Mate rejected" msgstr "Accoppiamento rifiutato" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Interferenza richiede almeno due corpi" # AI Translated msgid "No interference found" @@ -24747,36 +24806,43 @@ msgstr "Nessuna interferenza trovata" msgid "Body %d" msgstr "Corpo %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu coppia di corpi sovrapposti: %s" +msgstr[1] "%zu coppie di corpi sovrapposti: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Seleziona un corpo per misurarlo" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Impossibile misurare questo corpo" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: corpo superficie, area %.2f mm², nessun volume — ispessiscilo per ottenerne uno" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: volume %.2f mm³, area %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Ripetizione richiede un corpo solido — aggiungine o importane uno prima" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Booleana richiede due corpi — aggiungine o importane un secondo" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -24791,35 +24857,45 @@ msgstr "Faccia selezionata (Corpo %d)" msgid "Picked face" msgstr "Faccia selezionata" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "non è stato possibile unire la nuova forma al corpo" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "non è stato possibile sottrarre la nuova forma dal corpo" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "non è stato possibile intersecare le forme" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "nessun elemento della cronologia produce ancora un solido" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "il profilo dello schizzo non è un contorno chiuso regolare" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "l'utensile non tocca il corpo" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "un'espressione usa una variabile che non esiste" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "un'espressione divide per zero" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "due variabili sono definite l'una in funzione dell'altra" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "un'operazione geometrica non è riuscita" # AI Translated #, c-format, boost-format @@ -24858,15 +24934,17 @@ msgstr "Quota — clicca il secondo punto" msgid "Line — click the start point" msgstr "Linea — clicca il punto iniziale" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Linea — clicca il punto finale; potrai poi digitarne lunghezza e angolo" # AI Translated msgid "Polyline — click the first point" msgstr "Polilinea — clicca il primo punto" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Polilinea — clicca il punto successivo · clicca il punto iniziale per chiuderla · clic destro, doppio clic o Invio per terminare la catena" # AI Translated msgid "Rectangle — click one corner" @@ -24912,8 +24990,9 @@ msgstr "Rettangolo arrotondato — clicca per impostare il raggio degli angoli" msgid "Circle — click the center" msgstr "Cerchio — clicca il centro" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Cerchio — clicca per impostare il raggio; potrai poi digitarlo" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -25039,18 +25118,21 @@ msgstr "Arco ellittico — clicca dove finisce l'arco" msgid "Spline — click the first control point" msgstr "Spline — clicca il primo punto di controllo" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline — clicca il punto di controllo successivo · clic destro, doppio clic o Invio per terminare la curva" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Punto — clicca per posizionarne uno; lo strumento resta attivo per altri" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Taglia — clicca un segmento dove incrocia un'altra entità · Esc per uscire" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Estendi — clicca una linea o un arco per allungarlo fino all'entità più vicina · Esc per uscire" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -25060,8 +25142,9 @@ msgstr "Raccordo — clicca la prima di due linee che si incontrano" msgid "Fillet — click the second line" msgstr "Raccordo — clicca la seconda linea" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Raccordo — trascina la freccia o clicca il numero per digitare il raggio · Invio applica · Esc annulla" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -25071,63 +25154,74 @@ msgstr "Smusso — clicca la prima di due linee che si incontrano" msgid "Chamfer — click the second line" msgstr "Smusso — clicca la seconda linea" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Smusso — trascina la freccia o clicca il numero per digitare la distanza · Invio applica · Esc annulla" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Offset — clicca una curva; viene eseguito l'offset dell'intero contorno" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Offset — trascina la freccia da un lato o dall'altro, o clicca il numero per digitare la distanza · Invio applica · Esc annulla" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Specchia — clicca prima la LINEA rispetto a cui specchiare (va bene anche una linea di costruzione)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Specchia — asse impostato · ora clicca le entità da specchiare · Esc annulla" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Specchia — asse impostato · %d da specchiare · clicca un'altra entità per aggiungerla o rimuoverla · Invio applica" # AI Translated msgid "Move — click the entities to move" msgstr "Sposta — clicca le entità da spostare" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Sposta — trascina la maniglia o clicca il numero per digitare la distanza · Invio applica" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Ruota — clicca le entità da ruotare" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Ruota — trascina la maniglia o clicca il numero per digitare l'angolo · Invio applica" # AI Translated msgid "Scale — click the entities to scale" msgstr "Ridimensiona — clicca le entità da ridimensionare" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Ridimensiona — trascina la maniglia o clicca il numero per digitare il fattore · Invio applica" # AI Translated msgid "Array — click the entities to repeat" msgstr "Serie — clicca le entità da ripetere" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Serie — trascina la maniglia per impostare il passo, clicca il numero per digitarlo · Invio applica" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Serie polare — clicca le entità da ripetere" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Serie polare — trascina la maniglia per impostare l'ampiezza, clicca il numero per digitarlo · Invio applica" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Trascina un angolo per ridimensionare, il centro per spostare · Invio o ✓ quando hai finito, Esc per scartare" # AI Translated msgid " · Esc goes back to Select" @@ -25137,62 +25231,77 @@ msgstr " · Esc torna a Seleziona" msgid " · click a constraint badge to remove it" msgstr " · clicca il simbolo di un vincolo per rimuoverlo" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — corpo solido" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — corpo superficie" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Faccia piana %d di %s" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Faccia cilindrica %d di %s" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Faccia %d di %s" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu spigolo di %s" +msgstr[1] "%zu spigoli di %s" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Spigolo rettilineo %d di %s" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Spigolo circolare %d di %s" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Vertice di %s" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Profilo di schizzo" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Schizzo — nessuna selezione" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Linea di schizzo" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Curva di schizzo" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Punto di schizzo" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d entità di schizzo" # AI Translated msgid "select something first" @@ -25255,8 +25364,9 @@ msgstr "Piano aggiunto — sceglilo come piano di schizzo" msgid "Axis added" msgstr "Asse aggiunto" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Sistema di coordinate aggiunto" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -25273,10 +25383,10 @@ msgstr "Sformo richiede una faccia selezionata — clicca prima una faccia later # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Ancora niente — importa uno STEP o una mesh dalla barra degli strumenti,\n" -"o clicca un piano di riferimento e fai clic destro su di esso per iniziare uno schizzo." +"o premi Schizzo e clicca un piano di riferimento per iniziare uno schizzo." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -25286,9 +25396,10 @@ msgstr "Ancora nessun solido — seleziona uno schizzo e fai clic destro per est msgid "Could not restore the CAD model from this project" msgstr "Impossibile ripristinare il modello CAD da questo progetto" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Impossibile ripristinare il modello CAD: %s" # AI Translated #, c-format @@ -25311,17 +25422,35 @@ msgstr "Vista in sezione — visualizzazione della metà superiore" msgid "Section view — showing the lower half" msgstr "Vista in sezione — visualizzazione della metà inferiore" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Ricerca delle facce della funzione…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Seleziona prima un corpo — cliccalo nella vista o nell'elenco Corpi" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Il modello è in fase di ricostruzione — fai di nuovo lo zoom al termine" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s non ha nulla di visibile su cui fare lo zoom" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Quel corpo non ha ancora una mesh di visualizzazione — esegui prima il ricalcolo" +# AI Translated +msgid "Select something to zoom to" +msgstr "Seleziona qualcosa su cui fare lo zoom" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Termina o annulla prima ciò che è aperto" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Seleziona prima un corpo — cliccalo nella vista o nell'elenco Corpi" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Trascina le frecce per spostare, gli anelli per ruotare — poi Conferma (Esc annulla)" @@ -25347,12 +25476,10 @@ msgstr "Clicca una faccia del solido, poi premi F" msgid "Placed on face — body laid flat on the bed" msgstr "Posizionato su faccia — corpo appoggiato sul piatto" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Modifica rifiutata: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25371,9 +25498,10 @@ msgstr "Questo corpo non ha alcuna funzione da eliminare — usa Nuova progettaz msgid "feature %d" msgstr "funzione %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "Funzione eliminata: %s, quella da cui è stato creato questo corpo — Ctrl+Z la ripristina" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -25765,12 +25893,14 @@ msgstr "File STEP (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP esportato" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "Esportazione STEP non riuscita: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Invia al piatto (come corpi separati) — invia ogni corpo a Prepara come oggetto a sé" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -25784,19 +25914,36 @@ msgstr "Niente da inviare — aggiungi prima una funzione" msgid "All bodies hidden — show one before committing" msgstr "Tutti i corpi sono nascosti — mostrane uno prima di inviare" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu spigolo" +msgstr[1] "%zu spigoli" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Linea centrale E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Linea E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Piano dello schizzo: %s — scegli uno strumento" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Piano dello schizzo: %s.\n" +"Scegli uno strumento o premi Menu per l'elenco." # AI Translated msgid "Plane ready" @@ -25806,8 +25953,9 @@ msgstr "Piano pronto" msgid "Axis ready" msgstr "Asse pronto" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Sistema di coordinate pronto" # AI Translated msgid "Helix ready" @@ -25825,9 +25973,10 @@ msgstr "Schizzo pronto" msgid "Mate ready" msgstr "Accoppiamento pronto" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Non valido: %s" # AI Translated #, c-format @@ -25911,110 +26060,139 @@ msgstr "Modifica variabile" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "Impossibile rimuovere la variabile '%s' (probabilmente è ancora usata in un'espressione di una funzione): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" non è un valore che un'espressione può guidare" # AI Translated msgid "No binding for that field" msgstr "Nessuna associazione per quel campo" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "Il valore deve essere maggiore di zero" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "Il valore non deve essere negativo (zero significa coincidente)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Quella quota non può essere soddisfatta — lo schizzo è sovravincolato" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "Vincoli ignorati perché non possono agire su questa geometria (un'ellisse o una curva spline, o un cerchio di dimensione nulla): %1%" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Questo profilo si interseca o si ripiega su se stesso in corrispondenza del segno rosso, quindi non delimita un'unica regione" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Lato" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Semiasse maggiore" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Semiasse minore" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "L'angolo deve essere compreso tra 0° e 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "Il semiasse maggiore non può essere più corto del semiasse minore" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "Il raggio degli angoli deve essere inferiore alla metà del lato più corto" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "L'asola è troppo larga per il suo raggio — la larghezza deve essere inferiore al doppio del raggio" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1%: impossibile da soddisfare — lo schizzo è sovravincolato" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Queste due linee non si incontrano in un angolo — scegli due linee che si incontrano" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "La dimensione deve essere maggiore di zero" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Raccordo: il raggio supera la lunghezza di un lato, oppure le due linee non si incontrano in un angolo" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Smusso: la distanza supera la lunghezza di un lato, oppure le due linee non si incontrano in un angolo" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "Vincoli invalidati dal raccordo/smusso e rimossi: %1%" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Offset: un'ellisse o una spline non ha una parallela dello stesso tipo — scegli linee, archi o cerchi" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Il fattore di scala deve essere maggiore di zero" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Copie" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Il numero di copie deve essere un numero intero, pari o superiore a 2" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "Vincoli sciolti dalla trasformazione: %1%" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Le copie della serie non sono vincolate — il risolutore ha rifiutato ogni collegamento" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "clic destro o doppio clic per terminare, clicca l'inizio per chiudere" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Estendi: clicca una linea o un arco che può raggiungere un'altra entità" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Taglia: clicca un segmento dove incrocia un'altra entità" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Premi Invio o ✓ per applicare, Esc per scartare" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Ancora nessuna quota per questa entità — clicca una linea, un cerchio, un arco o due punti" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Clicca un secondo punto, o una linea fino a cui misurare la distanza" # AI Translated msgid "Enter a number" @@ -26050,8 +26228,12 @@ msgid "Sketch" msgstr "Schizzo" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Clicca una faccia o un piano di riferimento, poi scegli uno strumento di disegno" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Seleziona una faccia piana o un piano di riferimento su cui creare lo schizzo" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Crea uno schizzo sulla faccia piana o sul piano selezionato, o cliccane uno in seguito" # AI Translated msgctxt "Design" @@ -26073,9 +26255,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Ispessisci" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Unisci" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -26128,17 +26311,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Ispessisci superficie" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Ispessisci superficie richiede un corpo superficie — creane prima uno con uno strumento di superficie" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Foro" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -26153,8 +26334,9 @@ msgctxt "Design" msgid "Split" msgstr "Dividi" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Dividi richiede un corpo solido — aggiungine o importane uno prima" # AI Translated msgid "Split the body along a picked face into two solids" @@ -26200,8 +26382,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Superficie offset" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Superficie offset richiede un corpo superficie — creane prima uno con uno strumento di superficie" # AI Translated msgctxt "Design" @@ -26231,8 +26414,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Ripetizione su curva" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Ripetizione su curva richiede un corpo e una curva" # AI Translated msgid "Repeat the body along a picked curve" @@ -26253,8 +26437,9 @@ msgctxt "Design" msgid "Align to" msgstr "Allinea a" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Allinea richiede un corpo — aggiungine o importane uno prima" # AI Translated msgid "Align the body to a picked face or plane" @@ -26270,9 +26455,10 @@ msgctxt "Design" msgid "Axis" msgstr "Asse" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Sistema di coordinate" # AI Translated msgctxt "Design" @@ -26288,9 +26474,10 @@ msgstr "Misura" msgid "Measure between the picked points, edges or faces" msgstr "Misura tra i punti, gli spigoli o le facce selezionati" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Volume e area" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -26332,12 +26519,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Elimina faccia" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Colore" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Imposta il colore di visualizzazione del corpo selezionato" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Zoom sulla selezione" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Inquadra la selezione nella vista, mantenendo la direzione di vista" # AI Translated msgctxt "Design" @@ -26376,9 +26574,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Rettangolo per angoli" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Rettangolo dal centro" # AI Translated msgctxt "Design" @@ -26390,9 +26589,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Rettangolo arrotondato" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Cerchio dal centro" # AI Translated msgctxt "Design" @@ -26414,9 +26614,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Arco tangente" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Arco dal centro" # AI Translated msgctxt "Design" @@ -26448,48 +26649,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Triangolo" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Triangolo — clicca il centro, poi un vertice" # AI Translated msgctxt "Design" msgid "Square" msgstr "Quadrato" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Quadrato — clicca il centro, poi un vertice" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Pentagono" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Pentagono — clicca il centro, poi un vertice" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Esagono" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Esagono — clicca il centro, poi un vertice" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Ottagono" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Ottagono — clicca il centro, poi un vertice" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Dodecagono" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Dodecagono — clicca il centro, poi un vertice" # AI Translated msgctxt "Design" @@ -26519,8 +26726,9 @@ msgctxt "Design" msgid "Text" msgstr "Testo" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Digita il testo; diventa una funzione Testo sul piano di questo schizzo, modificabile in seguito" # AI Translated msgctxt "Design" @@ -26637,27 +26845,34 @@ msgstr "Angolo / distanza…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Digita l'angolo tra due linee o la distanza tra i due elementi selezionati" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Digita il testo da inserire" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Grassetto" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Corsivo" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Questo carattere non può essere usato per il testo — scegline un altro" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Digita il testo per vederne le dimensioni" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Questo carattere non ha un contorno per questo testo" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Dimensioni: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -26755,8 +26970,9 @@ msgstr "Profilo" msgid "Start new profile (for holes)" msgstr "Inizia un nuovo profilo (per i fori)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segmenti" # AI Translated msgid "Sides" @@ -26770,20 +26986,23 @@ msgstr "Clicca nell'area di disegno per disegnare" msgid "Snap to grid" msgstr "Aggancia alla griglia" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Passo griglia" # AI Translated msgid "Outer" msgstr "Esterno" +# AI Translated msgid "closed" -msgstr "" +msgstr "chiuso" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% punti %4%" # AI Translated msgid "XY (Top)" @@ -26820,8 +27039,9 @@ msgstr[1] "%zu profili chiusi" msgid "Draw a closed profile to enable" msgstr "Disegna un profilo chiuso per abilitare" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Cancella tutto" # AI Translated msgid "Empty result" @@ -30924,6 +31144,39 @@ msgstr "" "Evita le deformazioni\n" "Sapevi che quando si stampano materiali soggetti a deformazioni come l'ABS, aumentare in modo appropriato la temperatura del piano riscaldato può ridurre la probabilità di deformazione?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Sperimentale) Usa gli agenti stampante invece degli host di stampa" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "FUNZIONI" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Clicca una faccia o un piano di riferimento nella vista, poi uno strumento di schizzo" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Clicca una faccia o un piano di riferimento, poi uno strumento di schizzo." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "Piano %s selezionato — clic destro per gli strumenti di disegno" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Ancora niente — importa uno STEP o una mesh dalla barra degli strumenti,\n" +#~ "o clicca un piano di riferimento e fai clic destro su di esso per iniziare uno schizzo." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Clicca una faccia o un piano di riferimento, poi scegli uno strumento di disegno" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 92fd4d6542..923b7122f4 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -3424,8 +3424,8 @@ msgstr "他のプリセット" msgid "Remove parameter" msgstr "パラメータを削除" -msgid "to" -msgstr "→" +msgid "Range" +msgstr "範囲" msgid "Add height range" msgstr "高さ範囲を追加" @@ -5480,9 +5480,6 @@ msgstr "パラメータ名" msgid "layers" msgstr "積層" -msgid "Range" -msgstr "範囲" - msgid "Empty string" msgstr "空の文字列" @@ -8814,8 +8811,9 @@ msgstr "接続されたプリンターは%sです。印刷にはプロジェク msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "プリンター情報を同期してプリセットを自動的に切り替えますか?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "このプロジェクトには、デザインタブで作成されたモデルのみが含まれ、他のジオメトリはありません。表示して編集するには、設定で「CAD機能 (実験的)」を有効にして再起動してください。このモデルはプロジェクトの保存時に保持されます。" msgid "The file does not contain any geometry data." msgstr "このファイルにはジオメトリデータが含まれていません。" @@ -9872,8 +9870,9 @@ msgstr "デザインタブで、合致コネクターを従来のロール象限 msgid "Auto-close sketch loops" msgstr "スケッチのループを自動で閉じる" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "0.001 mm以内にあるスケッチの端点を1つの接続点として扱い、ループを結合して閉じます。オフ: 完全に一致する端点のみが接続されるため、わずかな隙間のあるループは自動で閉じられず、開いたまま表示されます。この設定はデザインごとに保存され、変更後に開始したデザインに適用されます。" # AI Translated msgid "Pan" @@ -10329,18 +10328,6 @@ msgstr "非対応のプリセットを表示" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "プリンターとフィラメントのドロップダウンリストに、互換性のない/非対応のプリセットを表示します。これらのプリセットは選択できません。" -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(実験的) プリントホストの代わりにプリンターエージェントを使用" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Bambu 以外のプリンターの印刷ジョブを、従来のプリントホストへのアップロードではなく、プリンターのプラグインエージェント経由で送信します。\n" -"無効の場合、OrcaSlicer は従来のプリントホストの動作を使用します。" - # AI Translated msgid "Experimental Features" msgstr "実験的機能" @@ -10357,6 +10344,18 @@ msgstr "" "オブジェクトのメッシュを変更した後 (カット/ディスクから再読み込み/簡略化/修正など) も、ペイントした情報 (カラー/継ぎ目/サポート/ファジーなど) の保持を試みます。\n" "非常に実験的な機能です。処理が遅く、アーティファクトが発生する場合があります。" +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "プリントホストの代わりにプリンターエージェントを使用" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Bambu 以外のプリンターの印刷ジョブを、従来のプリントホストへのアップロードではなく、プリンターのプラグインエージェント経由で送信します。\n" +"無効の場合、OrcaSlicer は従来のプリントホストの動作を使用します。" + msgid "Allow Abnormal Storage" msgstr "異常なストレージを許可" @@ -10526,6 +10525,9 @@ msgstr "他のレイヤーのフィラメント順序" msgid "Please input layer value (>= 2)." msgstr "レイヤー値を入力してください(>= 2)。" +msgid "to" +msgstr "→" + msgid "Plate name" msgstr "プレート名" @@ -16580,6 +16582,14 @@ msgstr "Y軸対称インフィル" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "モデルにY軸に対して対称な2つのパーツがあり、それらのテクスチャを対称にしたい場合は、一方のパーツでこのオプションをクリックしてください。" +# AI Translated +msgid "Fill pattern tops" +msgstr "パターン上部を埋める" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "インフィルパターンの上部を完全に埋めたい場合は、このオプションを選択します" + # AI Translated msgid "Infill combination - Max layer height" msgstr "インフィル結合 - 最大積層ピッチ" @@ -23256,6 +23266,26 @@ msgstr "フィラメントが現在のマシン設定と互換性がない可能 msgid "The filament model is unknown. A random filament preset will be used." msgstr "フィラメントモデルが不明です。ランダムなフィラメントプリセットが使用されます。" +# AI Translated +msgid "Hide reference planes and axes" +msgstr "参照平面と軸を非表示" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "参照平面と軸を表示" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "プリンターのベッドとプレートグリッドを非表示" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "プリンターのベッドとプレートグリッドを表示" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "スケッチする参照平面または平面をクリック — Escで取消し" + # AI Translated msgid "Construction" msgstr "補助ジオメトリ" @@ -23281,8 +23311,9 @@ msgstr "円 — 中心、半径の順にクリック" msgid "Arc — click start, end, then a point" msgstr "円弧 — 始点、終点、通過点の順にクリック" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "スロット — 中心線の両端、次に幅" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -23356,8 +23387,9 @@ msgstr "ワールド座標軸を表示" msgid "World axes hidden" msgstr "ワールド座標軸を非表示" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "軸測投影ビュー (全体表示)" # AI Translated msgid "Bed shown" @@ -23368,34 +23400,12 @@ msgid "Bed hidden" msgstr "ベッドを非表示" # AI Translated -msgid "FEATURES" -msgstr "フィーチャー" +msgid "Reference planes shown" +msgstr "参照平面を表示" # AI Translated -msgid "Sketch" -msgstr "スケッチ" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "スケッチ平面: %s — ツールを選択" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "ビューポートで面または参照平面をクリックしてから、スケッチツールを選択" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"スケッチ平面: %s\n" -"ツールを選択するか、メニューを押して一覧を表示します。" - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "面または参照平面をクリックしてから、スケッチツールを選択します。" +msgid "Reference planes hidden" +msgstr "参照平面を非表示" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -23581,8 +23591,9 @@ msgstr "軸" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "データム軸 (2点、面の法線、円柱の中心線、2平面、エッジに沿う)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "座標系" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -23646,8 +23657,9 @@ msgstr "反転にはボディが必要です — 先に追加またはインポ msgid "Mate" msgstr "合致" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "アセンブリ: 2つの座標系を揃えます (締結、平面、回転、スライダー、円筒)" # AI Translated msgid "Boolean (combine bodies)" @@ -23746,14 +23758,6 @@ msgstr "円筒面 (内径 / 外径) または円形エッジにねじを作成" msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "ねじを作成する円筒面 (内径 / 外径) または円形エッジを選択してください" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "STEPをインポート (編集可能なB-repソリッド)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "メッシュ (STL/OBJ) を編集可能なB-repソリッドとしてインポート" - # AI Translated msgid "Constrain selected sketch" msgstr "選択したスケッチを拘束" @@ -23786,8 +23790,9 @@ msgstr "始点、終点の順にクリック — その後、正確な長さを msgid "Polyline" msgstr "ポリライン" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "点を順にクリック。最初の点をクリックするとループを閉じ、右クリックまたはEnterでチェーンを終了します" # AI Translated msgid "Corner rectangle" @@ -23877,8 +23882,9 @@ msgstr "中心、始点、次に終了角度を決める点をクリック" msgid "Slot" msgstr "スロット" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "中心線の両端をクリックし、次に幅を決める点をクリック" # AI Translated msgid "Arc slot" @@ -23908,8 +23914,9 @@ msgstr "中心、長軸の端、短軸上の点、次に円弧の始点と終点 msgid "Spline" msgstr "スプライン" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "制御点をクリック。ダブルクリック、右クリック、またはEnterで終了" # AI Translated msgid "Click to place a point" @@ -23963,15 +23970,17 @@ msgstr "反転軸となる線分を選択し、次に反転するエンティテ msgid "Trim" msgstr "トリム" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "セグメントをクリックすると最も近い交点までトリムします。Escで終了" # AI Translated msgid "Extend" msgstr "延長" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "線分または円弧をクリックすると最も近いエンティティまで延長します。Escで終了" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -24153,13 +24162,21 @@ msgstr "垂直距離" msgid "New Design — clear the feature tree" msgstr "新規デザイン — フィーチャーツリーをクリア" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "STEPをインポート (編集可能なB-repソリッド)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "メッシュ (STL/OBJ) を編集可能なB-repソリッドとしてインポート" + # AI Translated msgid "Export STEP…" msgstr "STEPをエクスポート…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "プリンターのベッドとプレートグリッドを表示" +msgid "Create a new sketch" +msgstr "新しいスケッチを作成" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -24173,20 +24190,25 @@ msgstr "断面ビュー — モデルの一部を非表示にして内部を表 msgid "Flip Section — show the opposite half" msgstr "断面を反転 — 反対側の半分を表示" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "「プレートに確定」でのボディの送り方を選択" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "プレートに確定" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "すべてのボディを、ボディごとに1つのパーツとして1つのオブジェクトにまとめ、相対位置を保持します" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "プレートに確定 (ボディごと)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "各ボディを個別のオブジェクトにし、それぞれ単独で配置します" # AI Translated msgid "Width / X" @@ -24196,6 +24218,10 @@ msgstr "幅 / X" msgid "Height / Y" msgstr "高さ / Y" +# AI Translated +msgid "Sketch" +msgstr "スケッチ" + # AI Translated msgid "Distance X" msgstr "距離 X" @@ -24398,8 +24424,9 @@ msgstr "円形状" msgid "Direction" msgstr "方向" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "合計角度 (°)" # AI Translated msgid "Boolean" @@ -24783,11 +24810,13 @@ msgstr "円筒 — 軸が同一直線上。自由な回転 + 軸方向のスラ msgid "Kind" msgstr "種類" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (固定)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (移動)" # AI Translated msgid "Angle °" @@ -24825,6 +24854,10 @@ msgstr "(バインドなし)" msgid "Value" msgstr "値" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "ツールを選択するか、メニューキーを押して一覧を表示します。" + # AI Translated msgid "Constraints" msgstr "拘束" @@ -24863,6 +24896,10 @@ msgstr "下へ移動" msgid "Show / hide" msgstr "表示 / 非表示" +# AI Translated +msgid "Zoom to selection" +msgstr "選択項目にズーム" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "干渉チェック — 重なっているボディを検出" @@ -24884,14 +24921,17 @@ msgstr "ボディ%dを選択中 — 右クリックで適用可能な操作を msgid "Variables" msgstr "変数" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "変数を追加" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "変数を編集" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "変数を削除" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24910,9 +24950,10 @@ msgstr "スケッチを更新しました" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "スケッチを作成しました (駆動寸法 %zu 個) — 選択して右クリックで押し出し" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "長さ %.2f mm、角度 %.1f°" # AI Translated msgid "(locked)" @@ -24934,6 +24975,10 @@ msgstr "領域を選択しました — 右クリックで押し出し、ダブ msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "スケッチを選択しました — 右クリックで押し出し、ダブルクリックで編集" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "その面は平面ではありません — 平面または参照平面をクリックしてください" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24962,28 +25007,27 @@ msgstr "ボディ%d: 面%dを選択しました — 右クリックでプッシ msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "面%dを選択しました — 右クリックでプッシュ/プル、もう一度クリックでボディ全体を選択" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" +msgstr[0] "ボディ%d: %zu 本のエッジを選択中 — Shift+クリックで1本ずつ追加/削除、フィレット/面取りですべてを加工" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "%zu 本のエッジを選択中 — Shift+クリックで1本ずつ追加/削除、フィレット/面取りですべてを加工" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "%s平面を選択しました — 右クリックで描画ツールを表示" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "ボディ%d: エッジ%dを選択しました — Shift+クリックでエッジを追加、もう一度クリックでボディ全体を選択" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "エッジ%dを選択しました — Shift+クリックでエッジを追加、もう一度クリックでボディ全体を選択" # AI Translated #, c-format, boost-format @@ -25008,8 +25052,9 @@ msgstr "ツールを終了しました" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "スケッチを保持しました — 「確定」で確定、「取消し」で破棄" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "削除するものを選択してください" # AI Translated msgid "✗ Conflicting constraints" @@ -25040,17 +25085,21 @@ msgstr "編集中: スケッチ%d · N = 平面に垂直に表示 · ツ msgid "OK — %zu triangles" msgstr "OK — 三角形 %zu 個" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "テキストを編集 — Enterで適用、Escで元のまま" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "テキストを入力 — 入力中にビューに表示されます。Enterで挿入、Escで取消し" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "テキストは変更されていません" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "テキストの入力を取り消しました" # AI Translated msgid "Import SVG" @@ -25076,9 +25125,10 @@ msgstr "STEPを読み込み中…" msgid "No solids found in STEP" msgstr "STEPにソリッドが見つかりません" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "STEPのインポートに失敗しました: %s" # AI Translated msgid "Rebuilding model…" @@ -25102,9 +25152,10 @@ msgstr "メッシュファイル (*.stl;*.obj)|*.stl;*.obj|すべてのファイ msgid "Could not read the STL file" msgstr "STLファイルを読み込めませんでした" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "OBJファイルを読み込めませんでした: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -25129,20 +25180,23 @@ msgstr "" msgid "Large mesh" msgstr "大きなメッシュ" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "メッシュの変換に失敗しました: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "メッシュの変換でジオメトリが生成されませんでした" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "メッシュ" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "メッシュのインポートに失敗しました: %s" # AI Translated #, c-format, boost-format @@ -25171,17 +25225,19 @@ msgstr " — ドラッグで配置/サイズ調整し、確定してください msgid "Insert canceled" msgstr "挿入を取り消しました" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "角をドラッグしてスケール、中心をドラッグして移動 — 完了したらEnterまたは✓、Escで破棄" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "スケッチを追加しました (平面: %s) — 選択して右クリックで押し出し" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "モデルを再構築できませんでした: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -25253,18 +25309,21 @@ msgstr "先に開いた線を含むスケッチを選択してください" msgid "Add at least one face to delete first" msgstr "先に削除する面を少なくとも1つ追加してください" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "合致には2つの座標系が必要です — 先に作成してください" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "合致: AとBは異なる座標系である必要があります" # AI Translated msgid "Mate rejected" msgstr "合致が拒否されました" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "干渉チェックには少なくとも2つのボディが必要です" # AI Translated msgid "No interference found" @@ -25275,35 +25334,42 @@ msgstr "干渉は見つかりませんでした" msgid "Body %d" msgstr "ボディ%d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s (%.2f mm³)" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" +msgstr[0] "%zu 組のボディが重なっています: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "計測するボディを選択してください" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "このボディを計測できませんでした" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: シートボディ、表面積 %.2f mm²、体積なし — 厚み付けすると体積が得られます" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: 体積 %.2f mm³、表面積 %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "パターンにはソリッドボディが必要です — 先に追加またはインポートしてください" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "ブーリアンには2つのボディが必要です — 2つ目を追加またはインポートしてください" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -25318,35 +25384,45 @@ msgstr "選択した面 (ボディ%d)" msgid "Picked face" msgstr "選択した面" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "新しい形状をボディに結合できませんでした" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "新しい形状をボディから切り取れませんでした" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "形状の交差に失敗しました" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "履歴にソリッドを生成するフィーチャーがまだありません" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "スケッチプロファイルが正しく閉じたループになっていません" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "ツールがボディに接していません" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "式で存在しない変数が使用されています" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "式でゼロ除算が発生しています" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "2つの変数が互いを参照して定義されています" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "ジオメトリ演算に失敗しました" # AI Translated #, c-format, boost-format @@ -25384,15 +25460,17 @@ msgstr "寸法 — 2点目をクリック" msgid "Line — click the start point" msgstr "線分 — 始点をクリック" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "線分 — 終点をクリック。その後、長さと角度を入力できます" # AI Translated msgid "Polyline — click the first point" msgstr "ポリライン — 最初の点をクリック" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "ポリライン — 次の点をクリック · 始点をクリックで閉じる · 右クリック、ダブルクリック、またはEnterでチェーンを終了" # AI Translated msgid "Rectangle — click one corner" @@ -25438,8 +25516,9 @@ msgstr "角丸長方形 — クリックして角の半径を設定" msgid "Circle — click the center" msgstr "円 — 中心をクリック" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "円 — クリックして半径を設定。その後、半径を入力できます" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -25565,18 +25644,21 @@ msgstr "楕円弧 — 円弧の終了位置をクリック" msgid "Spline — click the first control point" msgstr "スプライン — 最初の制御点をクリック" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "スプライン — 次の制御点をクリック · 右クリック、ダブルクリック、またはEnterで曲線を終了" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "点 — クリックして配置。ツールは続けて使用できます" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "トリム — 他のエンティティと交差するセグメントをクリック · Escで終了" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "延長 — 線分または円弧をクリックして最も近いエンティティまで延長 · Escで終了" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -25586,8 +25668,9 @@ msgstr "フィレット — 交わる2本の線分のうち1本目をクリッ msgid "Fillet — click the second line" msgstr "フィレット — 2本目の線分をクリック" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "フィレット — 矢印をドラッグ、または数値をクリックして半径を入力 · Enterで適用 · Escで取消し" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -25597,63 +25680,74 @@ msgstr "面取り — 交わる2本の線分のうち1本目をクリック" msgid "Chamfer — click the second line" msgstr "面取り — 2本目の線分をクリック" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "面取り — 矢印をドラッグ、または数値をクリックして面取り距離を入力 · Enterで適用 · Escで取消し" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "オフセット — 曲線をクリック。その輪郭全体がオフセットされます" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "オフセット — 矢印をどちらかの側にドラッグ、または数値をクリックして距離を入力 · Enterで適用 · Escで取消し" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "反転 — 最初に反転の基準となる線分をクリック (補助線も使用可)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "反転 — 軸を設定済み · 反転するエンティティをクリック · Escで取消し" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "反転 — 軸を設定済み · 反転対象 %d 個 · 別のエンティティをクリックして追加/削除 · Enterで適用" # AI Translated msgid "Move — click the entities to move" msgstr "移動 — 移動するエンティティをクリック" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "移動 — ハンドルをドラッグ、または数値をクリックして距離を入力 · Enterで適用" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "回転 — 回転するエンティティをクリック" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "回転 — ハンドルをドラッグ、または数値をクリックして角度を入力 · Enterで適用" # AI Translated msgid "Scale — click the entities to scale" msgstr "スケール — スケールするエンティティをクリック" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "スケール — ハンドルをドラッグ、または数値をクリックして倍率を入力 · Enterで適用" # AI Translated msgid "Array — click the entities to repeat" msgstr "配列 — 繰り返すエンティティをクリック" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "配列 — ハンドルをドラッグして間隔を設定、個数をクリックして入力 · Enterで適用" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "円形配列 — 繰り返すエンティティをクリック" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "円形配列 — ハンドルをドラッグして角度範囲を設定、個数をクリックして入力 · Enterで適用" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "角をドラッグしてスケール、中心をドラッグして移動 · 完了したらEnterまたは✓、Escで破棄" # AI Translated msgid " · Esc goes back to Select" @@ -25663,61 +25757,76 @@ msgstr " · Escで選択ツールに戻る" msgid " · click a constraint badge to remove it" msgstr " · 拘束バッジをクリックして削除" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — ソリッドボディ" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — シートボディ" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "平面%d (%s)" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "円筒面%d (%s)" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "面%d (%s)" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" +msgstr[0] "%zu 本のエッジ (%s)" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "直線エッジ%d (%s)" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "円形エッジ%d (%s)" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "%sの頂点" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "スケッチプロファイル" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "スケッチ — 選択なし" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "スケッチ線分" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "スケッチ曲線" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "スケッチ点" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d 個のスケッチエンティティ" # AI Translated msgid "select something first" @@ -25780,8 +25889,9 @@ msgstr "平面を追加しました — スケッチ平面として選択でき msgid "Axis added" msgstr "軸を追加しました" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "座標系を追加しました" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -25798,10 +25908,10 @@ msgstr "抜き勾配には面の選択が必要です — 先に側面をクリ # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "まだ何もありません — ツールバーからSTEPまたはメッシュをインポートするか、\n" -"参照平面をクリックして右クリックし、スケッチを開始してください。" +"「スケッチ」を押して参照平面をクリックし、スケッチを開始してください。" # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -25811,9 +25921,10 @@ msgstr "まだソリッドがありません — スケッチを選択して右 msgid "Could not restore the CAD model from this project" msgstr "このプロジェクトからCADモデルを復元できませんでした" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "CADモデルを復元できませんでした: %s" # AI Translated #, c-format @@ -25836,17 +25947,35 @@ msgstr "断面ビュー — 上半分を表示中" msgid "Section view — showing the lower half" msgstr "断面ビュー — 下半分を表示中" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "フィーチャーの面を検索中…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "先にボディを選択してください — ビューポートまたはボディリストでクリックします" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "モデルを再構築中です — 完了後にもう一度ズームしてください" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%sには表示中のズーム対象がありません" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "そのボディにはまだ表示用メッシュがありません — 先に再計算してください" +# AI Translated +msgid "Select something to zoom to" +msgstr "ズームする対象を選択してください" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "先に開いている操作を完了または取り消してください" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "先にボディを選択してください — ビューポートまたはボディリストでクリックします" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "矢印をドラッグして移動、リングをドラッグして回転 — その後確定 (Escで取消し)" @@ -25872,12 +26001,10 @@ msgstr "ソリッドの面をクリックしてから、Fを押してくださ msgid "Placed on face — body laid flat on the bed" msgstr "面に配置しました — ボディをベッドに平らに置きました" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "編集が拒否されました: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25896,9 +26023,10 @@ msgstr "このボディには削除できるフィーチャーがありません msgid "feature %d" msgstr "フィーチャー%d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "%s (このボディの作成元のフィーチャー) を削除しました — Ctrl+Zで元に戻せます" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -26289,12 +26417,14 @@ msgstr "STEPファイル (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEPをエクスポートしました" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "STEPのエクスポートに失敗しました: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "プレートに確定 (ボディごと) — 各ボディを個別のオブジェクトとして準備タブに送る" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -26308,18 +26438,35 @@ msgstr "確定するものがありません — 先にフィーチャーを追 msgid "All bodies hidden — show one before committing" msgstr "すべてのボディが非表示です — 確定する前にいずれかを表示してください" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" +msgstr[0] "%zu 本のエッジ" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "中心線 E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "線分 E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "スケッチ平面: %s — ツールを選択" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"スケッチ平面: %s\n" +"ツールを選択するか、メニューキーを押して一覧を表示します。" # AI Translated msgid "Plane ready" @@ -26329,8 +26476,9 @@ msgstr "平面の準備完了" msgid "Axis ready" msgstr "軸の準備完了" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "座標系の準備完了" # AI Translated msgid "Helix ready" @@ -26348,9 +26496,10 @@ msgstr "スケッチの準備完了" msgid "Mate ready" msgstr "合致の準備完了" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "無効: %s" # AI Translated #, c-format @@ -26432,110 +26581,139 @@ msgstr "変数を編集" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "変数「%s」を削除できませんでした (フィーチャーの式からまだ参照されている可能性があります): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "「%s」は式で駆動できる値ではありません" # AI Translated msgid "No binding for that field" msgstr "そのフィールドにはバインドがありません" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "値は0より大きくする必要があります" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "値を負にすることはできません (0は一致を意味します)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "その寸法を満たせません — スケッチが過拘束です" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "%1% 個の拘束はこのジオメトリ (楕円やスプライン曲線、またはサイズ0の円) に作用できないため無視されます" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "このプロファイルは赤いマークの位置で自己交差または折り返しているため、1つの領域を囲んでいません" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "辺" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "長半径" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "短半径" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "角度は0°から360°の間にする必要があります" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "長半径は短半径より短くできません" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "角の半径は短い辺の半分より小さくする必要があります" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "スロットの幅が半径に対して広すぎます — 幅は半径の2倍未満にする必要があります" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1%を満たせません — スケッチが過拘束です" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "その2本の線分は角で交わっていません — 角で交わる2本の線分を選択してください" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "サイズは0より大きくする必要があります" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "フィレット: 半径が一方の辺の長さを超えているか、2本の線分が角で交わっていません" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "面取り: 距離が一方の辺の長さを超えているか、2本の線分が角で交わっていません" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "フィレット/面取りで無効になった %1% 個の拘束を削除しました" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "オフセット: 楕円やスプラインには同じ種類の平行曲線がありません — 線分、円弧、または円を選択してください" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "倍率は0より大きくする必要があります" +# AI Translated msgid "Copies" -msgstr "" +msgstr "コピー数" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "コピー数は2以上の整数にする必要があります" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "変換により %1% 個の拘束が解除されました" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "配列のコピーは拘束されていません — ソルバーがすべての関連付けを拒否しました" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "右クリックまたはダブルクリックで終了、始点をクリックで閉じる" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "延長: 別のエンティティまで届く線分または円弧をクリック" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "トリム: 別のエンティティと交差するセグメントをクリック" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Enterまたは✓で適用、Escで破棄" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "そのエンティティにはまだ寸法を付けられません — 線分、円、円弧、または2点をクリックしてください" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "2点目、または距離を測る線分をクリックしてください" # AI Translated msgid "Enter a number" @@ -26571,8 +26749,12 @@ msgid "Sketch" msgstr "スケッチ" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "面または参照平面をクリックしてから、描画ツールを選択" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "スケッチする平面または参照平面を選択してください" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "選択した平面または参照平面にスケッチします。後からクリックして選ぶこともできます" # AI Translated msgctxt "Design" @@ -26594,9 +26776,10 @@ msgctxt "Design" msgid "Thicken" msgstr "厚み付け" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "結合" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -26649,17 +26832,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "サーフェスの厚み付け" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "サーフェスの厚み付けにはシートボディが必要です — 先にサーフェスツールで作成してください" # AI Translated msgctxt "Design" msgid "Hole" msgstr "穴" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -26674,8 +26855,9 @@ msgctxt "Design" msgid "Split" msgstr "分割" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "分割にはソリッドボディが必要です — 先に追加またはインポートしてください" # AI Translated msgid "Split the body along a picked face into two solids" @@ -26721,8 +26903,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "サーフェスオフセット" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "サーフェスオフセットにはシートボディが必要です — 先にサーフェスツールで作成してください" # AI Translated msgctxt "Design" @@ -26752,8 +26935,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "曲線に沿ったパターン" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "曲線に沿ったパターンにはボディと曲線が必要です" # AI Translated msgid "Repeat the body along a picked curve" @@ -26774,8 +26958,9 @@ msgctxt "Design" msgid "Align to" msgstr "位置合わせ" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "位置合わせにはボディが必要です — 先に追加またはインポートしてください" # AI Translated msgid "Align the body to a picked face or plane" @@ -26791,9 +26976,10 @@ msgctxt "Design" msgid "Axis" msgstr "軸" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "座標系" # AI Translated msgctxt "Design" @@ -26809,9 +26995,10 @@ msgstr "計測" msgid "Measure between the picked points, edges or faces" msgstr "選択した点、エッジ、または面の間を計測" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "体積と表面積" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -26853,12 +27040,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "面を削除" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "色" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "選択したボディの表示色を設定" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "選択項目にズーム" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "表示方向を保ったまま、選択項目をビューに合わせて表示" # AI Translated msgctxt "Design" @@ -26897,9 +27095,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "コーナー指定の長方形" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "中心指定の長方形" # AI Translated msgctxt "Design" @@ -26911,9 +27110,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "角丸長方形" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "中心指定の円" # AI Translated msgctxt "Design" @@ -26935,9 +27135,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "接線円弧" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "中心点円弧" # AI Translated msgctxt "Design" @@ -26969,48 +27170,54 @@ msgctxt "Design" msgid "Triangle" msgstr "三角形" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "三角形 — 中心、次に頂点をクリック" # AI Translated msgctxt "Design" msgid "Square" msgstr "正方形" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "正方形 — 中心、次に頂点をクリック" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "五角形" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "五角形 — 中心、次に頂点をクリック" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "六角形" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "六角形 — 中心、次に頂点をクリック" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "八角形" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "八角形 — 中心、次に頂点をクリック" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "十二角形" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "十二角形 — 中心、次に頂点をクリック" # AI Translated msgctxt "Design" @@ -27040,8 +27247,9 @@ msgctxt "Design" msgid "Text" msgstr "テキスト" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "テキストを入力すると、このスケッチ平面上のテキストフィーチャーになり、後で編集できます" # AI Translated msgctxt "Design" @@ -27158,27 +27366,34 @@ msgstr "角度 / 距離…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "2本の線分間の角度、または選択した2つの間の距離を入力" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "挿入するテキストを入力" +# AI Translated msgid "Bold" -msgstr "" +msgstr "ボールド" +# AI Translated msgid "Italic" -msgstr "" +msgstr "イタリック" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "このフォントはテキストに使用できません — 別のフォントを選択してください" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "テキストを入力するとサイズが表示されます" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "このフォントにはこのテキストのアウトラインがありません" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "サイズ: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -27276,8 +27491,9 @@ msgstr "プロファイル" msgid "Start new profile (for holes)" msgstr "新しいプロファイルを開始 (穴用)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "セグメント数" # AI Translated msgid "Sides" @@ -27291,20 +27507,23 @@ msgstr "キャンバスをクリックして描画" msgid "Snap to grid" msgstr "グリッドにスナップ" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "グリッド間隔" # AI Translated msgid "Outer" msgstr "外側" +# AI Translated msgid "closed" -msgstr "" +msgstr "閉じています" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% 点 %4%" # AI Translated msgid "XY (Top)" @@ -27340,8 +27559,9 @@ msgstr[0] "%zu個の閉じたプロファイル" msgid "Draw a closed profile to enable" msgstr "有効にするには閉じたプロファイルを描画してください" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "すべてクリア" # AI Translated msgid "Empty result" @@ -31457,6 +31677,39 @@ msgstr "" "反りを避ける\n" "ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(実験的) プリントホストの代わりにプリンターエージェントを使用" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "フィーチャー" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "ビューポートで面または参照平面をクリックしてから、スケッチツールを選択" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "面または参照平面をクリックしてから、スケッチツールを選択します。" + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "%s平面を選択しました — 右クリックで描画ツールを表示" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "まだ何もありません — ツールバーからSTEPまたはメッシュをインポートするか、\n" +#~ "参照平面をクリックして右クリックし、スケッチを開始してください。" + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "面または参照平面をクリックしてから、描画ツールを選択" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 51082bf5be..c6515d4bc4 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n" "Last-Translator: crwusiz \n" "Language-Team: \n" @@ -3432,8 +3432,8 @@ msgstr "추가 프로세스 사전 설정" msgid "Remove parameter" msgstr "매개 변수 제거" -msgid "to" -msgstr "으로" +msgid "Range" +msgstr "범위" msgid "Add height range" msgstr "높이 범위 추가" @@ -4444,9 +4444,10 @@ msgstr "교정이 완료되었습니다. 당신의 고온 베드에서 아래 msgid "Save" msgstr "저장" +# AI Translated msgctxt "Navigation" msgid "Back" -msgstr "뒷면" +msgstr "뒤로" msgid "Example" msgstr "예시" @@ -5512,9 +5513,6 @@ msgstr "매개변수 이름" msgid "layers" msgstr "레이어" -msgid "Range" -msgstr "범위" - msgid "Empty string" msgstr "빈 문자열" @@ -8871,8 +8869,9 @@ msgstr "연결된 프린터는 %s입니다. 출력하려면 프로젝트 사전 msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "프린터 정보를 동기화하고 사전 설정을 자동으로 전환하시겠습니까?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "이 프로젝트에는 디자인 탭에서 만든 모델만 있고 다른 형상은 없습니다. 보고 편집하려면 기본 설정에서 \"CAD 기능(실험적)\"을 활성화하고 다시 시작하십시오. 이 모델은 프로젝트를 저장할 때 그대로 유지됩니다." msgid "The file does not contain any geometry data." msgstr "파일에 형상 데이터가 포함되어 있지 않습니다." @@ -9989,8 +9988,9 @@ msgstr "디자인 탭에서 메이트 커넥터를 롤 사분면이 있는 일 msgid "Auto-close sketch loops" msgstr "스케치 루프 자동 닫기" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "0.001 mm 이내의 스케치 끝점을 하나의 연결점으로 취급하여 루프를 닫습니다. 끄면 정확히 일치하는 끝점만 연결되므로, 아주 작은 틈이 있는 루프는 자동으로 닫히지 않고 열린 상태로 표시됩니다. 각 디자인과 함께 저장되며, 변경 이후에 시작한 디자인에 적용됩니다." # AI Translated msgid "Pan" @@ -10462,18 +10462,6 @@ msgstr "지원되지 않는 사전 설정 표시" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "프린터 및 필라멘트 드롭다운 목록에 호환되지 않거나 지원되지 않는 사전 설정을 표시합니다. 이러한 사전 설정은 선택할 수 없습니다." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(실험적) 출력 호스트 대신 프린터 에이전트 사용" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Bambu 이외의 프린터 출력 작업을 기존 출력 호스트 업로드 방식 대신 프린터 플러그인 에이전트를 통해 전달합니다.\n" -"비활성화하면 OrcaSlicer는 기존 출력 호스트 동작을 사용합니다." - # AI Translated msgid "Experimental Features" msgstr "실험적 기능" @@ -10490,6 +10478,18 @@ msgstr "" "객체 메시를 변경한 후(자르기/디스크에서 다시 불러오기/단순화/수정 등)에도 칠한 기능(색상/재봉선/서포트/퍼지 등)을 유지하려고 시도합니다.\n" "매우 실험적인 기능입니다! 속도가 느리고 아티팩트가 생길 수 있습니다." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "출력 호스트 대신 프린터 에이전트 사용" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Bambu 이외의 프린터 출력 작업을 기존 출력 호스트 업로드 방식 대신 프린터 플러그인 에이전트를 통해 전달합니다.\n" +"비활성화하면 OrcaSlicer는 기존 출력 호스트 동작을 사용합니다." + # AI Translated msgid "Allow Abnormal Storage" msgstr "비정상 저장 장치 허용" @@ -10662,6 +10662,9 @@ msgstr "다른 층 필라멘트 순서" msgid "Please input layer value (>= 2)." msgstr "레이어 값(>= 2)을 입력하세요." +msgid "to" +msgstr "으로" + msgid "Plate name" msgstr "플레이트 이름" @@ -16738,6 +16741,14 @@ msgstr "Y축 대칭 채우기" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "모델에 Y축을 기준으로 대칭인 두 부품이 있고 이 부품들이 대칭 질감을 갖게 하려면, 두 부품 중 하나에서 이 옵션을 선택하십시오." +# AI Translated +msgid "Fill pattern tops" +msgstr "패턴 상단 채우기" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "채우기 패턴의 상단을 완전히 채우려면 이 옵션을 선택하십시오" + msgid "Infill combination - Max layer height" msgstr "채우기 조합 - 최대 레이어 높이" @@ -23272,6 +23283,26 @@ msgstr "필라멘트가 현재 기기 설정과 호환되지 않을 수 있습 msgid "The filament model is unknown. A random filament preset will be used." msgstr "미지의 필라멘트 모델. 무작위 필라멘트 사전 설정이 사용됩니다." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "기준 평면과 축 숨기기" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "기준 평면과 축 표시" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "프린터 베드와 플레이트 격자 숨기기" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "프린터 베드와 플레이트 격자 표시" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "스케치할 기준 평면이나 평평한 면을 클릭하십시오 — Esc로 취소" + # AI Translated msgid "Construction" msgstr "보조" @@ -23297,8 +23328,9 @@ msgstr "원 — 중심을 클릭한 다음 반지름 클릭" msgid "Arc — click start, end, then a point" msgstr "호 — 시작점, 끝점, 그다음 한 점 클릭" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "슬롯 — 중심선 양 끝, 그다음 너비" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -23372,8 +23404,9 @@ msgstr "월드 축 표시됨" msgid "World axes hidden" msgstr "월드 축 숨겨짐" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "축측 투영 보기, 화면 맞춤" # AI Translated msgid "Bed shown" @@ -23384,34 +23417,12 @@ msgid "Bed hidden" msgstr "베드 숨겨짐" # AI Translated -msgid "FEATURES" -msgstr "피처" +msgid "Reference planes shown" +msgstr "기준 평면 표시됨" # AI Translated -msgid "Sketch" -msgstr "스케치" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "스케치 평면: %s — 도구를 선택하십시오" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "뷰포트에서 면 또는 기준 평면을 클릭한 다음 스케치 도구를 선택하십시오" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"스케치 평면: %s.\n" -"도구를 선택하거나 메뉴를 눌러 목록을 보십시오." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "면 또는 기준 평면을 클릭한 다음 스케치 도구를 선택하십시오." +msgid "Reference planes hidden" +msgstr "기준 평면 숨겨짐" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -23597,8 +23608,9 @@ msgstr "축" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "기준 축(두 점, 면 법선, 원통 중심선, 두 평면, 모서리 따라)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "좌표계" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -23662,8 +23674,9 @@ msgstr "대칭에는 바디가 필요합니다 — 먼저 추가하거나 가져 msgid "Mate" msgstr "메이트" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "어셈블리: 두 좌표계 정렬(고정, 평면, 회전, 슬라이더, 원통)" # AI Translated msgid "Boolean (combine bodies)" @@ -23762,14 +23775,6 @@ msgstr "원통형 곡면(내부 구멍 / 외부) 또는 원형 모서리에 나 msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "나사산을 만들 원통형 곡면(구멍 / 외부) 또는 원형 모서리를 선택하십시오" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "STEP 가져오기(편집 가능한 B-rep 솔리드)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "메시(STL/OBJ)를 편집 가능한 B-rep 솔리드로 가져오기" - # AI Translated msgid "Constrain selected sketch" msgstr "선택한 스케치 구속" @@ -23802,8 +23807,9 @@ msgstr "시작점을 클릭한 다음 끝점 클릭 — 그다음 정확한 길 msgid "Polyline" msgstr "폴리선" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "점을 클릭하고, 첫 점을 클릭하여 루프 닫기, 마우스 오른쪽 클릭 또는 Enter로 체인 종료" # AI Translated msgid "Corner rectangle" @@ -23893,8 +23899,9 @@ msgstr "중심, 시작점을 클릭한 다음 끝 각도를 정할 점 클릭" msgid "Slot" msgstr "슬롯" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "중심선 양 끝을 클릭한 다음 너비를 정할 점 클릭" # AI Translated msgid "Arc slot" @@ -23924,8 +23931,9 @@ msgstr "중심, 장축 끝, 단축 점을 클릭한 다음 호의 시작과 끝 msgid "Spline" msgstr "스플라인" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "조정점 클릭, 더블 클릭하거나 마우스 오른쪽 버튼을 클릭하거나 Enter를 눌러 완료" # AI Translated msgid "Click to place a point" @@ -23979,15 +23987,17 @@ msgstr "대칭 축 선을 선택한 다음 대칭할 요소 선택, 빈 곳을 msgid "Trim" msgstr "트림" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "세그먼트를 클릭하여 가장 가까운 교차점까지 트림, Esc로 종료" # AI Translated msgid "Extend" msgstr "연장" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "선 또는 호를 클릭하여 가장 가까운 요소까지 연장, Esc로 종료" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -24169,13 +24179,21 @@ msgstr "수직 거리" msgid "New Design — clear the feature tree" msgstr "새 디자인 — 피처 트리 지우기" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "STEP 가져오기(편집 가능한 B-rep 솔리드)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "메시(STL/OBJ)를 편집 가능한 B-rep 솔리드로 가져오기" + # AI Translated msgid "Export STEP…" msgstr "STEP 내보내기…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "프린터 베드와 플레이트 격자 표시" +msgid "Create a new sketch" +msgstr "새 스케치 만들기" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -24189,20 +24207,25 @@ msgstr "단면도 — 모델 일부를 숨겨 내부를 봅니다. PageUp/PageDo msgid "Flip Section — show the opposite half" msgstr "단면 뒤집기 — 반대쪽 절반 표시" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "플레이트로 보내기에서 바디를 보내는 방식 선택" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "플레이트로 보내기" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "모든 바디가 바디별 부품을 가진 하나의 객체가 되며, 상대 위치가 유지됩니다" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "플레이트로 보내기(바디별)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "각 바디가 별도의 객체가 되어 개별적으로 배치됩니다" # AI Translated msgid "Width / X" @@ -24212,6 +24235,10 @@ msgstr "너비 / X" msgid "Height / Y" msgstr "높이 / Y" +# AI Translated +msgid "Sketch" +msgstr "스케치" + # AI Translated msgid "Distance X" msgstr "거리 X" @@ -24414,8 +24441,9 @@ msgstr "원형" msgid "Direction" msgstr "방향" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "전체 각도(°)" # AI Translated msgid "Boolean" @@ -24799,11 +24827,13 @@ msgstr "원통 — 축 동일 선상; 자유 회전 + 축 방향 슬라이드" msgid "Kind" msgstr "종류" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A(고정)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B(이동)" # AI Translated msgid "Angle °" @@ -24841,6 +24871,10 @@ msgstr "(바인딩 없음)" msgid "Value" msgstr "값" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "도구를 선택하거나 Menu 키를 눌러 목록을 보십시오." + # AI Translated msgid "Constraints" msgstr "구속조건" @@ -24879,6 +24913,10 @@ msgstr "아래로 이동" msgid "Show / hide" msgstr "표시 / 숨기기" +# AI Translated +msgid "Zoom to selection" +msgstr "선택 항목으로 확대" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "간섭 검사 — 겹치는 바디 찾기" @@ -24900,14 +24938,17 @@ msgstr "바디 %d 선택됨 — 적용할 수 있는 작업은 마우스 오른 msgid "Variables" msgstr "변수" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "변수 추가" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "변수 편집" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "변수 삭제" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24926,9 +24967,10 @@ msgstr "스케치 업데이트됨" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "스케치 생성됨(구동 치수 %zu개) — 스케치를 선택한 다음 마우스 오른쪽 클릭으로 돌출" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "길이 %.2f mm, 각도 %.1f°" # AI Translated msgid "(locked)" @@ -24950,6 +24992,10 @@ msgstr "영역 선택됨 — 마우스 오른쪽 클릭으로 돌출하거나 msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "스케치 선택됨 — 마우스 오른쪽 클릭으로 돌출하거나 더블 클릭하여 편집" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "그 면은 평평하지 않습니다 — 평평한 면이나 기준 평면을 클릭하십시오" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24978,28 +25024,27 @@ msgstr "바디 %d: 면 %d 선택됨 — 마우스 오른쪽 클릭으로 밀기/ msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "면 %d 선택됨 — 마우스 오른쪽 클릭으로 밀기/당기기, 다시 클릭하면 전체 바디 선택" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" +msgstr[0] "바디 %d: 모서리 %zu개 선택됨 — Shift+클릭으로 하나씩 추가 또는 제거, 필렛/모따기로 모두 다듬기" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "모서리 %zu개 선택됨 — Shift+클릭으로 하나씩 추가 또는 제거, 필렛/모따기로 모두 다듬기" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "%s 평면 선택됨 — 그리기 도구는 마우스 오른쪽 클릭" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "바디 %d: 모서리 %d 선택됨 — Shift+클릭으로 모서리 추가, 다시 클릭하면 전체 바디 선택" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "모서리 %d 선택됨 — Shift+클릭으로 모서리 추가, 다시 클릭하면 전체 바디 선택" # AI Translated #, c-format, boost-format @@ -25024,8 +25069,9 @@ msgstr "도구 종료됨" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "스케치 유지됨 — 확인을 눌러 확정하거나 취소를 눌러 버리기" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "삭제할 항목을 선택하십시오" # AI Translated msgid "✗ Conflicting constraints" @@ -25056,17 +25102,21 @@ msgstr "편집 중: 스케치 %d · N = 평면에 수직으로 보기 · msgid "OK — %zu triangles" msgstr "완료 — 삼각형 %zu개" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "텍스트를 편집하십시오 — Enter로 적용, Esc로 원래대로 유지" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "텍스트를 입력하십시오 — 입력하는 대로 화면에 표시됩니다. Enter로 삽입, Esc로 취소" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "텍스트 변경 없음" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "텍스트 취소됨" # AI Translated msgid "Import SVG" @@ -25092,9 +25142,10 @@ msgstr "STEP 읽는 중…" msgid "No solids found in STEP" msgstr "STEP에서 솔리드를 찾을 수 없습니다" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "STEP 가져오기 실패: %s" # AI Translated msgid "Rebuilding model…" @@ -25118,9 +25169,10 @@ msgstr "메시 파일 (*.stl;*.obj)|*.stl;*.obj|모든 파일|*.*" msgid "Could not read the STL file" msgstr "STL 파일을 읽을 수 없습니다" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "OBJ 파일을 읽을 수 없습니다: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -25145,20 +25197,23 @@ msgstr "" msgid "Large mesh" msgstr "큰 메시" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "메시 변환 실패: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "메시 변환 결과 형상이 없습니다" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "메시" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "메시 가져오기 실패: %s" # AI Translated #, c-format, boost-format @@ -25187,17 +25242,19 @@ msgstr " — 드래그하여 위치/크기를 정한 다음 확인" msgid "Insert canceled" msgstr "삽입 취소됨" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "코너를 드래그하여 크기 조정, 중앙을 드래그하여 이동 — 완료되면 Enter 또는 ✓, 버리려면 Esc" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "스케치 추가됨(평면: %s) — 스케치를 선택한 다음 마우스 오른쪽 클릭으로 돌출" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "모델을 재구성할 수 없습니다: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -25269,18 +25326,21 @@ msgstr "먼저 열린 선이 있는 스케치를 선택하십시오" msgid "Add at least one face to delete first" msgstr "먼저 삭제할 면을 하나 이상 추가하십시오" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "메이트에는 좌표계가 두 개 필요합니다 — 먼저 만드십시오" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "메이트: A와 B는 서로 다른 좌표계여야 합니다" # AI Translated msgid "Mate rejected" msgstr "메이트가 거부되었습니다" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "간섭 검사에는 바디가 두 개 이상 필요합니다" # AI Translated msgid "No interference found" @@ -25291,35 +25351,42 @@ msgstr "간섭이 없습니다" msgid "Body %d" msgstr "바디 %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" +msgstr[0] "겹치는 쌍 %zu개: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "측정할 바디를 선택하십시오" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "이 바디를 측정할 수 없습니다" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: 시트 바디, 표면적 %.2f mm², 부피 없음 — 두껍게 하면 부피가 생깁니다" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: 부피 %.2f mm³, 표면적 %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "패턴에는 솔리드 바디가 필요합니다 — 먼저 추가하거나 가져오십시오" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "불리언에는 바디가 두 개 필요합니다 — 두 번째 바디를 추가하거나 가져오십시오" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -25334,35 +25401,45 @@ msgstr "선택한 면(바디 %d)" msgid "Picked face" msgstr "선택한 면" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "새 형상을 바디에 결합할 수 없습니다" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "새 형상을 바디에서 잘라낼 수 없습니다" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "형상의 교차 부분을 구할 수 없습니다" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "아직 히스토리에 솔리드를 만드는 피처가 없습니다" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "스케치 프로파일이 깨끗한 닫힌 루프가 아닙니다" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "도구가 바디에 닿지 않습니다" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "수식에서 존재하지 않는 변수를 사용합니다" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "수식에서 0으로 나누고 있습니다" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "두 변수가 서로를 참조하여 정의되어 있습니다" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "형상 연산에 실패했습니다" # AI Translated #, c-format, boost-format @@ -25400,15 +25477,17 @@ msgstr "치수 — 두 번째 점 클릭" msgid "Line — click the start point" msgstr "선 — 시작점 클릭" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "선 — 끝점 클릭, 그다음 길이와 각도를 입력할 수 있음" # AI Translated msgid "Polyline — click the first point" msgstr "폴리선 — 첫 번째 점 클릭" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "폴리선 — 다음 점 클릭 · 시작점을 클릭하면 닫기 · 마우스 오른쪽 클릭, 더블 클릭 또는 Enter로 체인 종료" # AI Translated msgid "Rectangle — click one corner" @@ -25454,8 +25533,9 @@ msgstr "둥근 직사각형 — 클릭하여 코너 반지름 설정" msgid "Circle — click the center" msgstr "원 — 중심 클릭" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "원 — 클릭하여 반지름 설정, 그다음 값을 입력할 수 있음" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -25581,18 +25661,21 @@ msgstr "타원 호 — 호가 끝나는 위치 클릭" msgid "Spline — click the first control point" msgstr "스플라인 — 첫 번째 조정점 클릭" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "스플라인 — 다음 조정점 클릭 · 마우스 오른쪽 클릭, 더블 클릭 또는 Enter로 곡선 완료" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "점 — 클릭하여 배치, 도구가 계속 활성 상태로 유지됨" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "트림 — 다른 요소와 교차하는 세그먼트 클릭 · Esc로 종료" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "연장 — 선이나 호를 클릭하여 가장 가까운 요소까지 연장 · Esc로 종료" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -25602,8 +25685,9 @@ msgstr "필렛 — 만나는 두 선 중 첫 번째 선 클릭" msgid "Fillet — click the second line" msgstr "필렛 — 두 번째 선 클릭" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "필렛 — 화살표를 드래그하거나 숫자를 클릭하여 반지름 입력 · Enter로 적용 · Esc로 취소" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -25613,63 +25697,74 @@ msgstr "모따기 — 만나는 두 선 중 첫 번째 선 클릭" msgid "Chamfer — click the second line" msgstr "모따기 — 두 번째 선 클릭" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "모따기 — 화살표를 드래그하거나 숫자를 클릭하여 모따기 거리 입력 · Enter로 적용 · Esc로 취소" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "간격띄우기 — 곡선을 클릭하면 그 곡선이 속한 외곽선 전체가 간격띄우기됩니다" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "간격띄우기 — 화살표를 어느 한쪽으로 드래그하거나 숫자를 클릭하여 거리 입력 · Enter로 적용 · Esc로 취소" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "대칭 — 먼저 대칭 기준이 될 선을 클릭(보조선도 가능)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "대칭 — 축 설정됨 · 이제 대칭할 요소 클릭 · Esc로 취소" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "대칭 — 축 설정됨 · 대칭할 요소 %d개 · 다른 요소를 클릭하여 추가 또는 제거 · Enter로 적용" # AI Translated msgid "Move — click the entities to move" msgstr "이동 — 이동할 요소 클릭" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "이동 — 핸들을 드래그하거나 숫자를 클릭하여 거리 입력 · Enter로 적용" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "회전 — 회전할 요소 클릭" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "회전 — 핸들을 드래그하거나 숫자를 클릭하여 각도 입력 · Enter로 적용" # AI Translated msgid "Scale — click the entities to scale" msgstr "배율 — 배율을 조정할 요소 클릭" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "배율 — 핸들을 드래그하거나 숫자를 클릭하여 배율 입력 · Enter로 적용" # AI Translated msgid "Array — click the entities to repeat" msgstr "배열 — 반복할 요소 클릭" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "배열 — 핸들을 드래그하여 간격 설정, 개수를 클릭하여 입력 · Enter로 적용" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "원형 배열 — 반복할 요소 클릭" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "원형 배열 — 핸들을 드래그하여 회전 범위 설정, 개수를 클릭하여 입력 · Enter로 적용" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "코너를 드래그하여 크기 조정, 중앙을 드래그하여 이동 · 완료되면 Enter 또는 ✓, 버리려면 Esc" # AI Translated msgid " · Esc goes back to Select" @@ -25679,61 +25774,76 @@ msgstr " · Esc로 선택 도구로 돌아가기" msgid " · click a constraint badge to remove it" msgstr " · 구속조건 배지를 클릭하여 제거" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — 솔리드 바디" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — 곡면 바디" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "평평한 면 %d(%s)" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "원통형 면 %d(%s)" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "면 %d(%s)" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" +msgstr[0] "모서리 %zu개(%s)" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "직선 모서리 %d(%s)" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "원형 모서리 %d(%s)" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "%s의 꼭지점" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "스케치 프로파일" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "스케치 — 선택된 항목 없음" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "스케치 선" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "스케치 곡선" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "스케치 점" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "스케치 요소 %d개" # AI Translated msgid "select something first" @@ -25796,8 +25906,9 @@ msgstr "평면 추가됨 — 스케치 평면으로 선택하십시오" msgid "Axis added" msgstr "축 추가됨" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "좌표계 추가됨" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -25814,10 +25925,10 @@ msgstr "구배에는 선택한 면이 필요합니다 — 먼저 측면을 클 # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "아직 아무것도 없습니다 — 도구 모음에서 STEP 또는 메시를 가져오거나,\n" -"기준 평면을 클릭하고 마우스 오른쪽 클릭하여 스케치를 시작하십시오." +"스케치를 누른 다음 기준 평면을 클릭하여 스케치를 시작하십시오." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -25827,9 +25938,10 @@ msgstr "아직 솔리드가 없습니다 — 스케치를 선택하고 마우스 msgid "Could not restore the CAD model from this project" msgstr "이 프로젝트에서 CAD 모델을 복원할 수 없습니다" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "CAD 모델을 복원할 수 없습니다: %s" # AI Translated #, c-format @@ -25852,17 +25964,35 @@ msgstr "단면도 — 위쪽 절반 표시 중" msgid "Section view — showing the lower half" msgstr "단면도 — 아래쪽 절반 표시 중" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "피처의 면을 찾는 중…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "먼저 바디를 선택하십시오 — 뷰포트나 바디 목록에서 클릭하십시오" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "모델을 재구성하는 중입니다 — 완료되면 다시 확대하십시오" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s에 화면에 표시된 부분이 없어 확대할 수 없습니다" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "해당 바디에는 아직 표시용 메시가 없습니다 — 먼저 재계산하십시오" +# AI Translated +msgid "Select something to zoom to" +msgstr "확대할 항목을 선택하십시오" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "먼저 열려 있는 작업을 완료하거나 취소하십시오" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "먼저 바디를 선택하십시오 — 뷰포트나 바디 목록에서 클릭하십시오" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "화살표를 드래그하여 이동, 링을 드래그하여 회전한 다음 확인(Esc로 취소)" @@ -25888,12 +26018,10 @@ msgstr "솔리드의 면을 클릭한 다음 F를 누르십시오" msgid "Placed on face — body laid flat on the bed" msgstr "면에 배치됨 — 바디를 베드에 평평하게 놓았습니다" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "편집 거부됨: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25912,9 +26040,10 @@ msgstr "이 바디에는 삭제할 피처가 없습니다 — 새 디자인으 msgid "feature %d" msgstr "피처 %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "이 바디를 만든 피처인 %s을(를) 삭제했습니다 — Ctrl+Z로 복원" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -26305,12 +26434,14 @@ msgstr "STEP 파일 (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP을 내보냈습니다" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "STEP 내보내기 실패: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "플레이트로 보내기(바디별) — 각 바디를 별도의 객체로 준비 하기 탭에 보내기" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -26324,18 +26455,35 @@ msgstr "보낼 항목이 없습니다 — 먼저 피처를 추가하십시오" msgid "All bodies hidden — show one before committing" msgstr "모든 바디가 숨겨져 있습니다 — 보내기 전에 하나 이상 표시하십시오" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" +msgstr[0] "모서리 %zu개" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "중심선 E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "선 E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "스케치 평면: %s — 도구를 선택하십시오" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"스케치 평면: %s.\n" +"도구를 선택하거나 Menu 키를 눌러 목록을 보십시오." # AI Translated msgid "Plane ready" @@ -26345,8 +26493,9 @@ msgstr "평면 준비됨" msgid "Axis ready" msgstr "축 준비됨" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "좌표계 준비됨" # AI Translated msgid "Helix ready" @@ -26364,9 +26513,10 @@ msgstr "스케치 준비됨" msgid "Mate ready" msgstr "메이트 준비됨" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "유효하지 않음: %s" # AI Translated #, c-format @@ -26448,110 +26598,139 @@ msgstr "변수 편집" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "변수 '%s'을(를) 제거할 수 없습니다(피처 수식에서 아직 참조하고 있을 수 있음): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\"은(는) 수식으로 제어할 수 있는 값이 아닙니다" # AI Translated msgid "No binding for that field" msgstr "해당 필드에 대한 바인딩이 없습니다" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "값은 0보다 커야 합니다" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "값은 음수일 수 없습니다(0은 일치를 의미함)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "해당 치수를 만족할 수 없습니다 — 스케치가 과잉 구속되었습니다" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "구속조건 %1%개는 이 형상(타원 또는 스플라인 곡선, 크기가 0인 원)에 적용할 수 없으므로 무시됩니다" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "이 프로파일은 빨간 표시 위치에서 자기 자신과 교차하거나 되접혀 있어 하나의 영역을 둘러싸지 않습니다" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "변" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "장축 반경" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "단축 반경" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "각도는 0°에서 360° 사이여야 합니다" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "장축 반경은 단축 반경보다 짧을 수 없습니다" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "코너 반지름은 짧은 변의 절반보다 작아야 합니다" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "슬롯이 반지름에 비해 너무 넓습니다 — 너비는 반지름의 두 배보다 작아야 합니다" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1%을(를) 만족할 수 없습니다 — 스케치가 과잉 구속되었습니다" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "두 선이 코너에서 만나지 않습니다 — 코너에서 만나는 두 선을 선택하십시오" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "크기는 0보다 커야 합니다" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "필렛: 반지름이 한쪽 변을 벗어나거나 두 선이 코너에서 만나지 않습니다" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "모따기: 거리가 한쪽 변을 벗어나거나 두 선이 코너에서 만나지 않습니다" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "필렛/모따기로 인해 무효가 된 구속조건 %1%개를 제거했습니다" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "간격띄우기: 타원이나 스플라인은 같은 종류의 평행 곡선을 만들 수 없습니다 — 선, 호 또는 원을 선택하십시오" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "배율은 0보다 커야 합니다" +# AI Translated msgid "Copies" -msgstr "" +msgstr "복사본 수" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "복사본 수는 2 이상의 정수여야 합니다" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "변환으로 인해 구속조건 %1%개가 해제되었습니다" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "배열 복사본이 구속되지 않았습니다 — 솔버가 모든 연결 구속조건을 거부했습니다" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "마우스 오른쪽 버튼 클릭 또는 더블 클릭으로 끝내기, 시작점을 클릭하면 닫기" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "연장: 다른 요소에 닿을 수 있는 선이나 호를 클릭하십시오" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "트림: 다른 요소와 교차하는 세그먼트를 클릭하십시오" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "적용하려면 Enter 또는 ✓를 누르고, 버리려면 Esc를 누르십시오" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "해당 요소에는 아직 치수를 지정할 수 없습니다 — 선, 원, 호 또는 두 점을 클릭하십시오" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "두 번째 점을 클릭하거나, 거리를 측정할 선을 클릭하십시오" # AI Translated msgid "Enter a number" @@ -26587,8 +26766,12 @@ msgid "Sketch" msgstr "스케치" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "면이나 기준 평면을 클릭한 다음 그리기 도구를 선택하십시오" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "스케치할 평평한 면이나 기준 평면을 선택하십시오" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "선택한 평평한 면이나 평면에 스케치하거나, 이어서 하나를 클릭하십시오" # AI Translated msgctxt "Design" @@ -26610,9 +26793,10 @@ msgctxt "Design" msgid "Thicken" msgstr "두껍게 하기" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "결합" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -26665,17 +26849,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "곡면 두껍게 하기" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "곡면 두껍게 하기에는 곡면 바디가 필요합니다 — 먼저 곡면 도구로 만드십시오" # AI Translated msgctxt "Design" msgid "Hole" msgstr "구멍" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -26690,8 +26872,9 @@ msgctxt "Design" msgid "Split" msgstr "분할" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "분할에는 솔리드 바디가 필요합니다 — 먼저 추가하거나 가져오십시오" # AI Translated msgid "Split the body along a picked face into two solids" @@ -26737,8 +26920,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "곡면 간격띄우기" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "곡면 간격띄우기에는 곡면 바디가 필요합니다 — 먼저 곡면 도구로 만드십시오" # AI Translated msgctxt "Design" @@ -26768,8 +26952,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "곡선 패턴" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "곡선 패턴에는 바디와 곡선이 필요합니다" # AI Translated msgid "Repeat the body along a picked curve" @@ -26790,8 +26975,9 @@ msgctxt "Design" msgid "Align to" msgstr "정렬" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "정렬에는 바디가 필요합니다 — 먼저 추가하거나 가져오십시오" # AI Translated msgid "Align the body to a picked face or plane" @@ -26807,9 +26993,10 @@ msgctxt "Design" msgid "Axis" msgstr "축" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "좌표계" # AI Translated msgctxt "Design" @@ -26825,9 +27012,10 @@ msgstr "측정" msgid "Measure between the picked points, edges or faces" msgstr "선택한 점, 모서리 또는 면 사이를 측정" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "부피 및 표면적" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -26869,12 +27057,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "면 삭제" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "색상" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "선택한 바디의 표시 색상 설정" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "선택 항목으로 확대" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "보기 방향을 유지한 채 선택 항목을 화면에 맞춤" # AI Translated msgctxt "Design" @@ -26913,9 +27112,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "코너 직사각형" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "중심 직사각형" # AI Translated msgctxt "Design" @@ -26927,9 +27127,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "둥근 직사각형" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "중심 원" # AI Translated msgctxt "Design" @@ -26951,9 +27152,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "접선 호" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "중심점 호" # AI Translated msgctxt "Design" @@ -26985,48 +27187,54 @@ msgctxt "Design" msgid "Triangle" msgstr "삼각형" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "삼각형 — 중심을 클릭한 다음 꼭지점 클릭" # AI Translated msgctxt "Design" msgid "Square" msgstr "정사각형" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "정사각형 — 중심을 클릭한 다음 꼭지점 클릭" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "오각형" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "오각형 — 중심을 클릭한 다음 꼭지점 클릭" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "육각형" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "육각형 — 중심을 클릭한 다음 꼭지점 클릭" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "팔각형" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "팔각형 — 중심을 클릭한 다음 꼭지점 클릭" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "십이각형" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "십이각형 — 중심을 클릭한 다음 꼭지점 클릭" # AI Translated msgctxt "Design" @@ -27056,8 +27264,9 @@ msgctxt "Design" msgid "Text" msgstr "텍스트" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "텍스트를 입력하면 이 스케치 평면에 텍스트 피처로 만들어지며, 나중에 편집할 수 있습니다" # AI Translated msgctxt "Design" @@ -27174,27 +27383,34 @@ msgstr "각도 / 거리…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "두 선 사이의 각도 또는 선택한 두 항목 사이의 거리 입력" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "삽입할 텍스트 입력" +# AI Translated msgid "Bold" -msgstr "" +msgstr "굵게" +# AI Translated msgid "Italic" -msgstr "" +msgstr "기울임꼴" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "이 글꼴은 텍스트에 사용할 수 없습니다 — 다른 글꼴을 선택하십시오" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "텍스트를 입력하면 크기가 표시됩니다" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "이 글꼴에는 이 텍스트의 외곽선이 없습니다" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "크기: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -27292,8 +27508,9 @@ msgstr "프로파일" msgid "Start new profile (for holes)" msgstr "새 프로파일 시작(구멍용)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "세그먼트 수" # AI Translated msgid "Sides" @@ -27307,20 +27524,23 @@ msgstr "캔버스를 클릭하여 그리기" msgid "Snap to grid" msgstr "격자에 스냅" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "격자 간격" # AI Translated msgid "Outer" msgstr "외곽" +# AI Translated msgid "closed" -msgstr "" +msgstr "닫힘" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: 점 %3%개 %4%" # AI Translated msgid "XY (Top)" @@ -27356,8 +27576,9 @@ msgstr[0] "%zu개의 닫힌 프로파일" msgid "Draw a closed profile to enable" msgstr "활성화하려면 닫힌 프로파일을 그리십시오" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "모두 지우기" # AI Translated msgid "Empty result" @@ -31465,6 +31686,39 @@ msgstr "" "뒤틀림 방지\n" "ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(실험적) 출력 호스트 대신 프린터 에이전트 사용" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "피처" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "뷰포트에서 면 또는 기준 평면을 클릭한 다음 스케치 도구를 선택하십시오" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "면 또는 기준 평면을 클릭한 다음 스케치 도구를 선택하십시오." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "%s 평면 선택됨 — 그리기 도구는 마우스 오른쪽 클릭" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "아직 아무것도 없습니다 — 도구 모음에서 STEP 또는 메시를 가져오거나,\n" +#~ "기준 평면을 클릭하고 마우스 오른쪽 클릭하여 스케치를 시작하십시오." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "면이나 기준 평면을 클릭한 다음 그리기 도구를 선택하십시오" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 301e117662..2531cae672 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2026-07-02 14:13+0300\n" "Last-Translator: Gintaras Kučinskas \n" "Language-Team: \n" @@ -3402,8 +3402,8 @@ msgstr "Papildomas proceso profilis" msgid "Remove parameter" msgstr "Pašalinti parametrą" -msgid "to" -msgstr "į" +msgid "Range" +msgstr "Diapazonas" msgid "Add height range" msgstr "Pridėti aukščio ribas" @@ -5470,9 +5470,6 @@ msgstr "parametro pavadinimas" msgid "layers" msgstr "sluoksniai" -msgid "Range" -msgstr "Diapazonas" - msgid "Empty string" msgstr "Tuščia eilutė" @@ -8825,8 +8822,9 @@ msgstr "" msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Ar norite sinchronizuoti spausdintuvo informaciją ir automatiškai perjungti profilį?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Šiame projekte yra skirtuke „Projektavimas“ sukurtas modelis ir jokios kitos geometrijos. Įjunkite \"CAD funkcija (eksperimentinė)\" skiltyje „Parinktys“ ir paleiskite programą iš naujo, kad galėtumėte jį matyti ir redaguoti; išsaugant projektą jis išlaikomas." msgid "The file does not contain any geometry data." msgstr "Faile nėra jokių geometrinių duomenų." @@ -9876,8 +9874,9 @@ msgstr "Skirtuke „Projektavimas“ rodyti sąryšio jungtį kaip mažą pavir msgid "Auto-close sketch loops" msgstr "Automatiškai uždaryti eskizo kontūrus" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Eskizo galinius taškus, esančius ne didesniu kaip 0,001 mm atstumu, laikyti viena jungtimi ir kontūrą sujungti. Išjungta: sujungiami tik tiksliai sutampantys galiniai taškai, todėl kontūras su mažyčiu tarpu rodomas kaip atviras, užuot jį uždarius automatiškai. Išsaugoma kartu su kiekvienu modeliu; taikoma modeliams, pradėtiems po pakeitimo." msgid "Pan" msgstr "Slinkimas" @@ -10297,18 +10296,6 @@ msgstr "Rodyti nepalaikomus profilius" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Rodyti nesuderinamus / nepalaikomus profilius spausdintuvų ir gijų išskleidžiamuosiuose sąrašuose. Šių profilių pasirinkti negalima." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Eksperimentinė) Naudoti spausdintuvo agentus vietoj spausdinimo serverių" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Nukreipia ne Bambu spausdintuvų spausdinimo užduotis per spausdintuvo papildinių agentus, o ne per klasikinį įkėlimo į spausdinimo serverį srautą.\n" -"Kai išjungta, OrcaSlicer naudoja senąjį spausdinimo serverio veikimą." - msgid "Experimental Features" msgstr "Eksperimentinis" @@ -10322,6 +10309,18 @@ msgstr "" "Bando išsaugoti nudažytas ypatybes (spalvą, siūlę, atramas, šiauštą paviršių ir kt.) pakeitus objekto tinklelio modelį (pvz., po pjovimo, įkėlimo iš naujo, supaprastinimo, taisymo ir kt.)\n" "Labai eksperimentinė funkcija! Veikia lėtai ir gali sukurti artefaktų." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Naudoti spausdintuvo agentus vietoj spausdinimo serverių" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Nukreipia ne Bambu spausdintuvų spausdinimo užduotis per spausdintuvo papildinių agentus, o ne per klasikinį įkėlimo į spausdinimo serverį srautą.\n" +"Kai išjungta, OrcaSlicer naudoja senąjį spausdinimo serverio veikimą." + msgid "Allow Abnormal Storage" msgstr "Leisti sutrikusią (neįprastą) laikmeną" @@ -10488,6 +10487,9 @@ msgstr "Kita sluoksnio gijos seka" msgid "Please input layer value (>= 2)." msgstr "Prašome įvesti sluoksnių skaičių (>=2)." +msgid "to" +msgstr "į" + msgid "Plate name" msgstr "Spausdinimo pagrindo pavadinimas" @@ -16362,6 +16364,14 @@ msgstr "Simetriškas užpildas pagal Y ašį" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Jei modelis turi dvi dalis, kurios yra simetriškos Y ašies atžvilgiu, ir norite, kad šios dalys turėtų simetriškas tekstūras, spustelėkite šią parinktį vienoje iš dalių." +# AI Translated +msgid "Fill pattern tops" +msgstr "Užpildyti rašto viršutines dalis" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Pasirinkite šią parinktį, jei norite visiškai užpildyti užpildo rašto viršutines dalis" + msgid "Infill combination - Max layer height" msgstr "Užpildo derinimas – maksimalus sluoksnio aukštis" @@ -22570,6 +22580,26 @@ msgstr "Gija gali būti nesuderinama su dabartiniais įrenginio nustatymais. Bus msgid "The filament model is unknown. A random filament preset will be used." msgstr "Gijos modelis nežinomas. Bus naudojamas atsitiktinis gijos profilis." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Slėpti atskaitos plokštumas ir ašis" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Rodyti atskaitos plokštumas ir ašis" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Slėpti spausdintuvo pagrindą ir jo plokštės tinklelį" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Rodyti spausdintuvo pagrindą ir jo plokštės tinklelį" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Spustelėkite atskaitos plokštumą arba plokščią paviršių, kad jame braižytumėte eskizą — Esc – atšaukti" + # AI Translated msgid "Construction" msgstr "Pagalbinė" @@ -22595,8 +22625,9 @@ msgstr "Apskritimas — spustelėkite centrą, tada spindulį" msgid "Arc — click start, end, then a point" msgstr "Lankas — spustelėkite pradžią, pabaigą, tada tašką" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Išpjova — du vidurio linijos galai, tada plotis" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -22670,8 +22701,9 @@ msgstr "Pasaulio ašys rodomos" msgid "World axes hidden" msgstr "Pasaulio ašys paslėptos" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Aksonometrinis vaizdas, pritaikytas" # AI Translated msgid "Bed shown" @@ -22682,34 +22714,12 @@ msgid "Bed hidden" msgstr "Pagrindas paslėptas" # AI Translated -msgid "FEATURES" -msgstr "ELEMENTAI" +msgid "Reference planes shown" +msgstr "Atskaitos plokštumos rodomos" # AI Translated -msgid "Sketch" -msgstr "Eskizas" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Eskizo plokštuma: %s — pasirinkite įrankį" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Vaizdo srityje spustelėkite paviršių arba atskaitos plokštumą, tada eskizo įrankį" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Eskizo plokštuma: %s.\n" -"Pasirinkite įrankį arba paspauskite „Menu“, kad pamatytumėte sąrašą." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Spustelėkite paviršių arba atskaitos plokštumą, tada eskizo įrankį." +msgid "Reference planes hidden" +msgstr "Atskaitos plokštumos paslėptos" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -22895,8 +22905,9 @@ msgstr "Ašis" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Atskaitos ašis (du taškai, paviršiaus normalė, cilindro ašis, dvi plokštumos, išilgai briaunos)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Koordinačių sistema" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -22960,8 +22971,9 @@ msgstr "Atspindėjimui reikia kūno — pirmiausia jį pridėkite arba importuok msgid "Mate" msgstr "Sąryšis" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Surinkimas: sulygiuoti dvi koordinačių sistemas (fiksuotas, plokštuminis, sukamasis, slankusis, cilindrinis)" # AI Translated msgid "Boolean (combine bodies)" @@ -23060,14 +23072,6 @@ msgstr "Sukurti sriegį cilindriniame paviršiuje (vidinėje angoje / išorėje) msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Sriegiui pasirinkite cilindrinį paviršių (angą / išorę) arba apskritą briauną" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Importuoti STEP (redaguojamas B-rep kietasis kūnas)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Importuoti poligoninį tinklą (STL/OBJ) kaip redaguojamą B-rep kietąjį kūną" - # AI Translated msgid "Constrain selected sketch" msgstr "Apriboti pasirinktą eskizą" @@ -23100,8 +23104,9 @@ msgstr "Spustelėkite pradžią, tada pabaigą — tada nustatykite tikslų ilg msgid "Polyline" msgstr "Laužtė" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Spustelėkite taškus; spustelėkite pirmąjį tašką, kad uždarytumėte kontūrą, arba spustelėkite dešiniuoju pelės mygtuku ar paspauskite Enter, kad užbaigtumėte grandinę" # AI Translated msgid "Corner rectangle" @@ -23191,8 +23196,9 @@ msgstr "Spustelėkite centrą, tada pradžią, tada tašką pabaigos kampui" msgid "Slot" msgstr "Išpjova" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Spustelėkite du vidurio linijos galus, tada tašką pločiui nustatyti" # AI Translated msgid "Arc slot" @@ -23222,8 +23228,9 @@ msgstr "Spustelėkite centrą, didžiosios ašies galą, mažosios ašies tašk msgid "Spline" msgstr "Splainas" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Spustelėkite valdymo taškus; dukart spustelėkite, spustelėkite dešiniuoju pelės mygtuku arba paspauskite Enter, kad baigtumėte" # AI Translated msgid "Click to place a point" @@ -23277,15 +23284,17 @@ msgstr "Pasirinkite atspindžio ašies liniją, tada atspindimus objektus; spust msgid "Trim" msgstr "Apkirpti" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Spustelėkite atkarpą, kad ją apkirptumėte iki artimiausio susikirtimo; Esc – išeiti" # AI Translated msgid "Extend" msgstr "Pratęsti" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Spustelėkite liniją arba lanką, kad jį pratęstumėte iki artimiausio objekto; Esc – išeiti" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23469,13 +23478,21 @@ msgstr "Vertikalus atstumas" msgid "New Design — clear the feature tree" msgstr "Naujas modelis — išvalyti elementų medį" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Importuoti STEP (redaguojamas B-rep kietasis kūnas)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Importuoti poligoninį tinklą (STL/OBJ) kaip redaguojamą B-rep kietąjį kūną" + # AI Translated msgid "Export STEP…" msgstr "Eksportuoti STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Rodyti spausdintuvo pagrindą ir jo plokštės tinklelį" +msgid "Create a new sketch" +msgstr "Sukurti naują eskizą" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23489,20 +23506,25 @@ msgstr "Pjūvio peržiūra — paslėpti dalį modelio, kad matytųsi vidus. Pag msgid "Flip Section — show the opposite half" msgstr "Apversti pjūvį — rodyti priešingą pusę" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Pasirinkite, kaip „Perduoti į plokštę“ nusiunčia kūnus" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Perduoti į plokštę" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Visi kūnai tampa vienu objektu, kuriame kiekvienas kūnas yra atskira dalis, išlaikant jų tarpusavio padėtį" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Perduoti į plokštę (kaip kūnus)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Kiekvienas kūnas tampa atskiru objektu, išdėstomu savarankiškai" # AI Translated msgid "Width / X" @@ -23512,6 +23534,10 @@ msgstr "Plotis / X" msgid "Height / Y" msgstr "Aukštis / Y" +# AI Translated +msgid "Sketch" +msgstr "Eskizas" + # AI Translated msgid "Distance X" msgstr "Atstumas X" @@ -23714,8 +23740,9 @@ msgstr "Apskritiminis" msgid "Direction" msgstr "Kryptis" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Bendras kampas (°)" # AI Translated msgid "Boolean" @@ -24099,11 +24126,13 @@ msgstr "Cilindrinis — ašys kolinearios; laisvas sukimasis + ašinis slydimas" msgid "Kind" msgstr "Rūšis" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (fiksuota)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (judama)" # AI Translated msgid "Angle °" @@ -24141,6 +24170,10 @@ msgstr "(nėra susiejimų)" msgid "Value" msgstr "Reikšmė" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Pasirinkite įrankį arba paspauskite „Menu“, kad pamatytumėte sąrašą." + # AI Translated msgid "Constraints" msgstr "Apribojimai" @@ -24179,6 +24212,10 @@ msgstr "Perkelti žemyn" msgid "Show / hide" msgstr "Rodyti / slėpti" +# AI Translated +msgid "Zoom to selection" +msgstr "Priartinti prie pasirinkimo" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Tikrinti persidengimą — rasti persidengiančius kūnus" @@ -24200,14 +24237,17 @@ msgstr "Pasirinktas kūnas %d — spustelėkite dešiniuoju pelės mygtuku, kad msgid "Variables" msgstr "Kintamieji" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Pridėti kintamąjį" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Redaguoti kintamąjį" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Ištrinti kintamąjį" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24226,9 +24266,10 @@ msgstr "Eskizas atnaujintas" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Eskizas sukurtas (valdančiųjų matmenų: %zu) — pasirinkite jį, tada spustelėkite dešiniuoju pelės mygtuku, kad išspaustumėte" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Ilgis %.2f mm, kampas %.1f°" # AI Translated msgid "(locked)" @@ -24250,6 +24291,10 @@ msgstr "Sritis pasirinkta — spustelėkite dešiniuoju pelės mygtuku, kad išs msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Eskizas pasirinktas — spustelėkite dešiniuoju pelės mygtuku, kad išspaustumėte, arba dukart spustelėkite, kad redaguotumėte" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Šis paviršius nėra plokščias — spustelėkite plokščią paviršių arba atskaitos plokštumą" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24278,32 +24323,31 @@ msgstr "Kūnas %d: pasirinktas paviršius %d — spustelėkite dešiniuoju pelė msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Pasirinktas paviršius %d — spustelėkite dešiniuoju pelės mygtuku, kad jį stumtumėte / trauktumėte, arba spustelėkite dar kartą, kad pasirinktumėte visą kūną" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Kūnas %d: pasirinkta %zu briauna — Shift+spustelėjimas prideda arba pašalina vieną, suapvalinimas / nuožula apdoros visas pasirinktas" +msgstr[1] "Kūnas %d: pasirinktos %zu briaunos — Shift+spustelėjimas prideda arba pašalina vieną, suapvalinimas / nuožula apdoros visas pasirinktas" +msgstr[2] "Kūnas %d: pasirinkta %zu briaunų — Shift+spustelėjimas prideda arba pašalina vieną, suapvalinimas / nuožula apdoros visas pasirinktas" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "Pasirinkta %zu briauna — Shift+spustelėjimas prideda arba pašalina vieną, suapvalinimas / nuožula apdoros visas pasirinktas" +msgstr[1] "Pasirinktos %zu briaunos — Shift+spustelėjimas prideda arba pašalina vieną, suapvalinimas / nuožula apdoros visas pasirinktas" +msgstr[2] "Pasirinkta %zu briaunų — Shift+spustelėjimas prideda arba pašalina vieną, suapvalinimas / nuožula apdoros visas pasirinktas" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "Pasirinkta %s plokštuma — spustelėkite dešiniuoju pelės mygtuku, kad atvertumėte piešimo įrankius" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Kūnas %d: pasirinkta briauna %d — spustelėkite su Shift, kad pridėtumėte briaunų, arba spustelėkite dar kartą, kad pasirinktumėte visą kūną" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Pasirinkta briauna %d — spustelėkite su Shift, kad pridėtumėte briaunų, arba spustelėkite dar kartą, kad pasirinktumėte visą kūną" # AI Translated #, c-format, boost-format @@ -24328,8 +24372,9 @@ msgstr "Išeita iš įrankio" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Eskizas išlaikytas — „Patvirtinti“, kad jį išsaugotumėte, „Atšaukti“, kad jo atsisakytumėte" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Pasirinkite, ką ištrinti" # AI Translated msgid "✗ Conflicting constraints" @@ -24362,17 +24407,21 @@ msgstr "Redaguojama: Eskizas %d · N = žiūrėti statmenai plokštumai · msgid "OK — %zu triangles" msgstr "Gerai — trikampių: %zu" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Redaguokite tekstą — Enter – pritaikyti, Esc – palikti nepakeistą" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Įveskite tekstą — jis rodomas vaizde jums rašant; Enter – įterpti, Esc – atšaukti" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Tekstas nepakeistas" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Tekstas atšauktas" # AI Translated msgid "Import SVG" @@ -24398,9 +24447,10 @@ msgstr "Nuskaitomas STEP…" msgid "No solids found in STEP" msgstr "STEP faile nerasta kietųjų kūnų" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "STEP importuoti nepavyko: %s" # AI Translated msgid "Rebuilding model…" @@ -24426,9 +24476,10 @@ msgstr "Poligoninio tinklo failai (*.stl;*.obj)|*.stl;*.obj|Visi failai|*.*" msgid "Could not read the STL file" msgstr "Nepavyko nuskaityti STL failo" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Nepavyko nuskaityti OBJ failo: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -24453,20 +24504,23 @@ msgstr "" msgid "Large mesh" msgstr "Didelis poligoninis tinklas" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Poligoninio tinklo konvertuoti nepavyko: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "Konvertuojant poligoninį tinklą negauta jokios geometrijos" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Poligoninis tinklas" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Poligoninio tinklo importuoti nepavyko: %s" # AI Translated #, c-format, boost-format @@ -24495,17 +24549,19 @@ msgstr " — vilkite, kad nustatytumėte vietą / dydį, tada patvirtinkite" msgid "Insert canceled" msgstr "Įterpimas atšauktas" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Vilkite kampą, kad pakeistumėte mastelį, centrą – kad perkeltumėte — baigę paspauskite Enter arba ✓, Esc – atmesti" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Eskizas pridėtas (plokštuma: %s) — pasirinkite jį, tada spustelėkite dešiniuoju pelės mygtuku, kad išspaustumėte" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Nepavyko perkurti modelio: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -24577,18 +24633,21 @@ msgstr "Pirmiausia pasirinkite eskizą su atvira linija" msgid "Add at least one face to delete first" msgstr "Pirmiausia pridėkite bent vieną šalinamą paviršių" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Sąryšiui reikia dviejų koordinačių sistemų — pirmiausia jas sukurkite" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Sąryšis: A ir B turi būti skirtingos koordinačių sistemos" # AI Translated msgid "Mate rejected" msgstr "Sąryšis atmestas" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Persidengimo patikrai reikia bent dviejų kūnų" # AI Translated msgid "No interference found" @@ -24599,37 +24658,44 @@ msgstr "Persidengimų nerasta" msgid "Body %d" msgstr "Kūnas %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%zu persidengianti pora: %s" +msgstr[1] "%zu persidengiančios poros: %s" +msgstr[2] "%zu persidengiančių porų: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Pasirinkite kūną, kad jį išmatuotumėte" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Šio kūno išmatuoti nepavyko" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: paviršinis kūnas, plotas %.2f mm², tūrio nėra — sustorinkite jį, kad gautumėte tūrį" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: tūris %.2f mm³, plotas %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Masyvui reikia kietojo kūno — pirmiausia jį pridėkite arba importuokite" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Loginei operacijai reikia dviejų kūnų — pridėkite arba importuokite antrąjį" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -24644,35 +24710,45 @@ msgstr "Pasirinktas paviršius (Kūnas %d)" msgid "Picked face" msgstr "Pasirinktas paviršius" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "naujos formos nepavyko sujungti su kūnu" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "naujos formos nepavyko išpjauti iš kūno" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "nepavyko rasti formų sankirtos" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "istorijoje dar nėra nieko, kas sukurtų kietąjį kūną" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "eskizo profilis nėra taisyklingas uždaras kontūras" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "įrankis neliečia kūno" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "išraiškoje naudojamas neegzistuojantis kintamasis" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "išraiškoje dalijama iš nulio" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "du kintamieji apibrėžti vienas per kitą" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "geometrinė operacija nepavyko" # AI Translated #, c-format, boost-format @@ -24712,15 +24788,17 @@ msgstr "Matmuo — spustelėkite antrąjį tašką" msgid "Line — click the start point" msgstr "Linija — spustelėkite pradžios tašką" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Linija — spustelėkite pabaigos tašką; po to galima įvesti jos ilgį ir kampą" # AI Translated msgid "Polyline — click the first point" msgstr "Laužtė — spustelėkite pirmąjį tašką" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Laužtė — spustelėkite kitą tašką · spustelėkite pradžios tašką, kad ją uždarytumėte · dešinysis spustelėjimas, dvigubas spustelėjimas arba Enter užbaigia grandinę" # AI Translated msgid "Rectangle — click one corner" @@ -24766,8 +24844,9 @@ msgstr "Suapvalintas stačiakampis — spustelėkite, kad nustatytumėte kampo s msgid "Circle — click the center" msgstr "Apskritimas — spustelėkite centrą" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Apskritimas — spustelėkite, kad nustatytumėte spindulį; po to jį galima įvesti" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -24893,18 +24972,21 @@ msgstr "Elipsės lankas — spustelėkite, kur lankas baigiasi" msgid "Spline — click the first control point" msgstr "Splainas — spustelėkite pirmąjį valdymo tašką" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Splainas — spustelėkite kitą valdymo tašką · dešinysis spustelėjimas, dvigubas spustelėjimas arba Enter užbaigia kreivę" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Taškas — spustelėkite, kad padėtumėte tašką; įrankis lieka aktyvus kitiems taškams" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Apkirpti — spustelėkite atkarpą ten, kur ji kertasi su kitu objektu · paspauskite Esc, kad išeitumėte" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Pratęsti — spustelėkite liniją arba lanką, kad jį pratęstumėte iki artimiausio objekto · paspauskite Esc, kad išeitumėte" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -24914,8 +24996,9 @@ msgstr "Suapvalinimas — spustelėkite pirmąją iš dviejų susikertančių li msgid "Fillet — click the second line" msgstr "Suapvalinimas — spustelėkite antrąją liniją" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Suapvalinimas — vilkite rodyklę arba spustelėkite skaičių, kad įvestumėte spindulį · Enter – pritaikyti · Esc – atšaukti" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -24925,63 +25008,74 @@ msgstr "Nuožula — spustelėkite pirmąją iš dviejų susikertančių linijų msgid "Chamfer — click the second line" msgstr "Nuožula — spustelėkite antrąją liniją" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Nuožula — vilkite rodyklę arba spustelėkite skaičių, kad įvestumėte atstumą nuo kampo · Enter – pritaikyti · Esc – atšaukti" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Poslinkis — spustelėkite kreivę; paslenkamas visas jos kontūras" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Poslinkis — vilkite rodyklę į bet kurią pusę arba spustelėkite skaičių, kad įvestumėte atstumą · Enter – pritaikyti · Esc – atšaukti" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Atspindėti — pirmiausia spustelėkite LINIJĄ, kurios atžvilgiu atspindėti (tinka ir pagalbinė linija)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Atspindėti — ašis nustatyta · dabar spustelėkite atspindimus objektus · Esc – atšaukti" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Atspindėti — ašis nustatyta · atspindima: %d · spustelėkite kitą objektą, kad jį pridėtumėte ar pašalintumėte · Enter – pritaikyti" # AI Translated msgid "Move — click the entities to move" msgstr "Perkelti — spustelėkite perkeliamus objektus" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Perkelti — vilkite rankenėlę arba spustelėkite skaičių, kad įvestumėte atstumą · Enter – pritaikyti" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Pasukti — spustelėkite sukamus objektus" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Pasukti — vilkite rankenėlę arba spustelėkite skaičių, kad įvestumėte kampą · Enter – pritaikyti" # AI Translated msgid "Scale — click the entities to scale" msgstr "Mastelis — spustelėkite objektus, kurių mastelį norite keisti" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Mastelis — vilkite rankenėlę arba spustelėkite skaičių, kad įvestumėte koeficientą · Enter – pritaikyti" # AI Translated msgid "Array — click the entities to repeat" msgstr "Masyvas — spustelėkite kartojamus objektus" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Masyvas — vilkite rankenėlę, kad nustatytumėte žingsnį, spustelėkite kiekį, kad jį įvestumėte · Enter – pritaikyti" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Polinis masyvas — spustelėkite kartojamus objektus" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Polinis masyvas — vilkite rankenėlę, kad nustatytumėte aprėpties kampą, spustelėkite kiekį, kad jį įvestumėte · Enter – pritaikyti" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Vilkite kampą, kad pakeistumėte mastelį, centrą – kad perkeltumėte · baigę paspauskite Enter arba ✓, Esc – atmesti" # AI Translated msgid " · Esc goes back to Select" @@ -24991,63 +25085,78 @@ msgstr " · Esc – grįžti į įrankį „Pasirinkti“" msgid " · click a constraint badge to remove it" msgstr " · spustelėkite apribojimo ženklelį, kad jį pašalintumėte" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — kietasis kūnas" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — paviršinis kūnas" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Plokščias paviršius %d (%s)" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Cilindrinis paviršius %d (%s)" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Paviršius %d (%s)" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%zu briauna (%s)" +msgstr[1] "%zu briaunos (%s)" +msgstr[2] "%zu briaunų (%s)" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Tiesi briauna %d (%s)" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Apskrita briauna %d (%s)" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Viršūnė (%s)" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Eskizo profilis" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Eskizas — nieko nepasirinkta" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Eskizo linija" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Eskizo kreivė" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Eskizo taškas" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "Eskizo objektai: %d" # AI Translated msgid "select something first" @@ -25110,8 +25219,9 @@ msgstr "Plokštuma pridėta — pasirinkite ją kaip eskizo plokštumą" msgid "Axis added" msgstr "Ašis pridėta" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Koordinačių sistema pridėta" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -25128,10 +25238,10 @@ msgstr "Nuolydžiui reikia pasirinkto paviršiaus — pirmiausia spustelėkite # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Kol kas nieko nėra — importuokite STEP failą arba poligoninį tinklą iš įrankių juostos,\n" -"arba spustelėkite atskaitos plokštumą ir spustelėkite ją dešiniuoju pelės mygtuku, kad pradėtumėte eskizą." +"arba paspauskite „Eskizas“ ir spustelėkite atskaitos plokštumą, kad pradėtumėte eskizą." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -25141,9 +25251,10 @@ msgstr "Kietojo kūno dar nėra — pasirinkite eskizą ir spustelėkite jį de msgid "Could not restore the CAD model from this project" msgstr "Nepavyko atkurti CAD modelio iš šio projekto" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Nepavyko atkurti CAD modelio: %s" # AI Translated #, c-format @@ -25166,17 +25277,35 @@ msgstr "Pjūvio peržiūra — rodoma viršutinė pusė" msgid "Section view — showing the lower half" msgstr "Pjūvio peržiūra — rodoma apatinė pusė" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Ieškoma elemento paviršių…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Pirmiausia pasirinkite kūną — spustelėkite jį vaizdo srityje arba sąraše „Kūnai“" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Modelis perkuriamas — priartinkite dar kartą, kai tai bus baigta" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s: nėra nieko matomo, ką būtų galima priartinti" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Šis kūnas dar neturi rodomo poligoninio tinklo — pirmiausia perskaičiuokite" +# AI Translated +msgid "Select something to zoom to" +msgstr "Pasirinkite, ką priartinti" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Pirmiausia užbaikite arba atšaukite tai, kas atidaryta" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Pirmiausia pasirinkite kūną — spustelėkite jį vaizdo srityje arba sąraše „Kūnai“" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Vilkite rodykles, kad perkeltumėte, žiedus – kad pasuktumėte — tada patvirtinkite (Esc – atšaukti)" @@ -25202,12 +25331,10 @@ msgstr "Spustelėkite kietojo kūno paviršių, tada paspauskite F" msgid "Placed on face — body laid flat on the bed" msgstr "Paguldyta ant paviršiaus — kūnas paguldytas ant pagrindo" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Pakeitimas atmestas: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25226,9 +25353,10 @@ msgstr "Šis kūnas neturi elemento, kurį būtų galima ištrinti — naudokite msgid "feature %d" msgstr "elementas %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "Ištrintas elementas %s, iš kurio sukurtas šis kūnas — Ctrl+Z jį atkuria" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -25621,12 +25749,14 @@ msgstr "STEP failai (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP eksportuotas" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "STEP eksportuoti nepavyko: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Perduoti į plokštę (kaip kūnus) — nusiųsti kiekvieną kūną į skirtuką „Paruošimas“ kaip atskirą objektą" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -25640,20 +25770,37 @@ msgstr "Nėra ką perduoti — pirmiausia pridėkite elementą" msgid "All bodies hidden — show one before committing" msgstr "Visi kūnai paslėpti — prieš perduodami parodykite bent vieną" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%zu briauna" +msgstr[1] "%zu briaunos" +msgstr[2] "%zu briaunų" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Vidurio linija E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Linija E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Eskizo plokštuma: %s — pasirinkite įrankį" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Eskizo plokštuma: %s.\n" +"Pasirinkite įrankį arba paspauskite „Menu“, kad pamatytumėte sąrašą." # AI Translated msgid "Plane ready" @@ -25663,8 +25810,9 @@ msgstr "Plokštuma paruošta" msgid "Axis ready" msgstr "Ašis paruošta" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Koordinačių sistema paruošta" # AI Translated msgid "Helix ready" @@ -25682,9 +25830,10 @@ msgstr "Eskizas paruoštas" msgid "Mate ready" msgstr "Sąryšis paruoštas" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Netinkama: %s" # AI Translated #, c-format @@ -25770,110 +25919,139 @@ msgstr "Redaguoti kintamąjį" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "Nepavyko pašalinti kintamojo „%s“ (tikriausiai jis vis dar naudojamas elemento išraiškoje): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" nėra reikšmė, kurią galima valdyti išraiška" # AI Translated msgid "No binding for that field" msgstr "Šiam laukui nėra susiejimo" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "Reikšmė turi būti didesnė už nulį" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "Reikšmė negali būti neigiama (nulis reiškia sutapimą)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Šio matmens neįmanoma patenkinti — eskizas per daug apribotas" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "Ignoruojami apribojimai, kurių negalima taikyti šiai geometrijai (elipsei ar splaino kreivei arba nulinio dydžio apskritimui): %1%" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Šis profilis ties raudona žyme kertasi arba užsilenkia pats ant savęs, todėl neapriboja vienos srities" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Kraštinė" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Didžioji pusašė" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Mažoji pusašė" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "Kampas turi būti nuo 0° iki 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "Didžioji pusašė negali būti trumpesnė už mažąją pusašę" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "Kampo spindulys turi būti mažesnis nei pusė trumpesnės kraštinės" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "Išpjova per plati savo spinduliui — plotis turi būti mažesnis nei dvigubas spindulys" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1%: šio matmens neįmanoma patenkinti — eskizas per daug apribotas" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Šios dvi linijos nesusitinka kampe — pasirinkite dvi, kurios susitinka" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "Dydis turi būti didesnis už nulį" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Suapvalinimas: spindulys viršija kraštinės ilgį arba šios dvi linijos nesusitinka kampe" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Nuožula: atstumas viršija kraštinės ilgį arba šios dvi linijos nesusitinka kampe" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "Pašalinti apribojimai, kuriuos suapvalinimas / nuožula padarė negaliojančiais: %1%" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Poslinkis: elipsė ar splainas neturi tos pačios rūšies lygiagrečios kreivės — pasirinkite linijas, lankus arba apskritimus" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Mastelio koeficientas turi būti didesnis už nulį" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Kopijų skaičius" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Kopijų skaičius turi būti sveikasis skaičius, 2 arba daugiau" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "Transformacijos panaikinti apribojimai: %1%" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Masyvo kopijos neapribotos — sprendiklis atmetė visus susiejimus" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "dešinysis arba dvigubas spustelėjimas – užbaigti, spustelėjimas ant pradžios – uždaryti" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Pratęsti: spustelėkite liniją arba lanką, galintį pasiekti kitą objektą" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Apkirpti: spustelėkite atkarpą ten, kur ji kerta kitą objektą" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Paspauskite Enter arba ✓, kad pritaikytumėte, Esc – atmesti" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Šiam objektui matmuo dar negalimas — spustelėkite liniją, apskritimą, lanką arba du taškus" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Spustelėkite antrą tašką arba liniją, iki kurios matuoti atstumą" # AI Translated msgid "Enter a number" @@ -25909,8 +26087,12 @@ msgid "Sketch" msgstr "Eskizas" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Spustelėkite paviršių arba atskaitos plokštumą, tada pasirinkite piešimo įrankį" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Pasirinkite plokščią paviršių arba atskaitos plokštumą, kurioje braižysite eskizą" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Braižyti eskizą pasirinktame plokščiame paviršiuje ar plokštumoje arba spustelėti paviršių ar plokštumą vėliau" # AI Translated msgctxt "Design" @@ -25932,9 +26114,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Sustorinimas" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Sujungimas" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -25987,17 +26170,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Paviršiaus sustorinimas" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Paviršiaus sustorinimui reikia paviršinio kūno — pirmiausia jį sukurkite paviršiaus įrankiu" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Skylė" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -26012,8 +26193,9 @@ msgctxt "Design" msgid "Split" msgstr "Padalijimas" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Padalijimui reikia kietojo kūno — pirmiausia jį pridėkite arba importuokite" # AI Translated msgid "Split the body along a picked face into two solids" @@ -26059,8 +26241,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Paviršiaus poslinkis" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Paviršiaus poslinkiui reikia paviršinio kūno — pirmiausia jį sukurkite paviršiaus įrankiu" # AI Translated msgctxt "Design" @@ -26090,8 +26273,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Masyvas išilgai kreivės" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Masyvui išilgai kreivės reikia kūno ir kreivės" # AI Translated msgid "Repeat the body along a picked curve" @@ -26112,8 +26296,9 @@ msgctxt "Design" msgid "Align to" msgstr "Sulygiuoti su" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Sulygiavimui reikia kūno — pirmiausia jį pridėkite arba importuokite" # AI Translated msgid "Align the body to a picked face or plane" @@ -26129,9 +26314,10 @@ msgctxt "Design" msgid "Axis" msgstr "Ašis" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Koordinačių sistema" # AI Translated msgctxt "Design" @@ -26147,9 +26333,10 @@ msgstr "Matavimas" msgid "Measure between the picked points, edges or faces" msgstr "Matuoti atstumą tarp pasirinktų taškų, briaunų ar paviršių" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Tūris ir paviršiaus plotas" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -26191,12 +26378,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Pašalinti paviršių" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Spalva" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Nustatyti pasirinkto kūno rodymo spalvą" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Priartinti prie pasirinkimo" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Sutalpinti pasirinkimą vaizde, išlaikant žiūrėjimo kryptį" # AI Translated msgctxt "Design" @@ -26235,9 +26433,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Stačiakampis pagal kampus" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Stačiakampis nuo centro" # AI Translated msgctxt "Design" @@ -26249,9 +26448,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Suapvalintas stačiakampis" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Apskritimas nuo centro" # AI Translated msgctxt "Design" @@ -26273,9 +26473,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Liestinis lankas" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Lankas nuo centro" # AI Translated msgctxt "Design" @@ -26307,48 +26508,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Trikampis" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Trikampis — spustelėkite centrą, tada viršūnę" # AI Translated msgctxt "Design" msgid "Square" msgstr "Kvadratas" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Kvadratas — spustelėkite centrą, tada viršūnę" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Penkiakampis" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Penkiakampis — spustelėkite centrą, tada viršūnę" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Šešiakampis" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Šešiakampis — spustelėkite centrą, tada viršūnę" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Aštuonkampis" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Aštuonkampis — spustelėkite centrą, tada viršūnę" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Dvylikakampis" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Dvylikakampis — spustelėkite centrą, tada viršūnę" # AI Translated msgctxt "Design" @@ -26378,8 +26585,9 @@ msgctxt "Design" msgid "Text" msgstr "Tekstas" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Įveskite tekstą; jis taps elementu „Tekstas“ šio eskizo plokštumoje, kurį vėliau galėsite redaguoti" # AI Translated msgctxt "Design" @@ -26496,27 +26704,34 @@ msgstr "Kampas / atstumas…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Įveskite kampą tarp dviejų linijų arba atstumą tarp dviejų pasirinktų objektų" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Įveskite įterpiamą tekstą" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Paryškintas" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Kursyvas" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Šio šrifto negalima naudoti tekstui — pasirinkite kitą" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Įveskite tekstą, kad pamatytumėte jo dydį" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Šis šriftas neturi šio teksto kontūro" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Dydis: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -26614,8 +26829,9 @@ msgstr "Profilis" msgid "Start new profile (for holes)" msgstr "Pradėti naują profilį (skylėms)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segmentai" # AI Translated msgid "Sides" @@ -26629,20 +26845,23 @@ msgstr "Spustelėkite drobėje, kad pieštumėte" msgid "Snap to grid" msgstr "Pritraukti prie tinklelio" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Tinklelio žingsnis" # AI Translated msgid "Outer" msgstr "Išorinis" +# AI Translated msgid "closed" -msgstr "" +msgstr "uždaras" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% tšk. %4%" # AI Translated msgid "XY (Top)" @@ -26680,8 +26899,9 @@ msgstr[2] "%zu uždarų profilių" msgid "Draw a closed profile to enable" msgstr "Nubrėžkite uždarą profilį, kad įjungtumėte" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Išvalyti viską" # AI Translated msgid "Empty result" @@ -30796,6 +31016,39 @@ msgstr "" "Venkite deformacijų (warping)\n" "Ar žinojote, kad spausdinant medžiagas, kurios yra linkusios trauktis ir riestis (pvz., ABS), tinkamas kaitinamojo pagrindo temperatūros padidinimas gali sumažinti deformacijų (warping) tikimybę?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Eksperimentinė) Naudoti spausdintuvo agentus vietoj spausdinimo serverių" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "ELEMENTAI" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Vaizdo srityje spustelėkite paviršių arba atskaitos plokštumą, tada eskizo įrankį" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Spustelėkite paviršių arba atskaitos plokštumą, tada eskizo įrankį." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "Pasirinkta %s plokštuma — spustelėkite dešiniuoju pelės mygtuku, kad atvertumėte piešimo įrankius" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Kol kas nieko nėra — importuokite STEP failą arba poligoninį tinklą iš įrankių juostos,\n" +#~ "arba spustelėkite atskaitos plokštumą ir spustelėkite ją dešiniuoju pelės mygtuku, kad pradėtumėte eskizą." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Spustelėkite paviršių arba atskaitos plokštumą, tada pasirinkite piešimo įrankį" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 97b0e96f41..205c67235b 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -3686,8 +3686,8 @@ msgstr "Extra procesvoorinstelling" msgid "Remove parameter" msgstr "Verwijder parameter" -msgid "to" -msgstr "naar" +msgid "Range" +msgstr "Bereik" # AI Translated msgid "Add height range" @@ -5948,9 +5948,6 @@ msgstr "parameternaam" msgid "layers" msgstr "Lagen" -msgid "Range" -msgstr "Bereik" - msgid "Empty string" msgstr "Lege tekenreeks" @@ -9528,8 +9525,9 @@ msgstr "De aangesloten printer is %s. Deze moet overeenkomen met de projectvoori msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Wilt u de printerinformatie synchroniseren en automatisch van voorinstelling wisselen?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Dit project bevat een model dat in het tabblad Ontwerp is gemaakt en geen andere geometrie. Schakel \"CAD-functie (experimenteel)\" in bij Voorkeuren en start opnieuw om het te bekijken en te bewerken; het blijft behouden wanneer het project wordt opgeslagen." msgid "The file does not contain any geometry data." msgstr "Het bestand bevat geen geometriegegevens." @@ -10680,8 +10678,9 @@ msgstr "Teken in het tabblad Ontwerp een koppelingsconnector als een klein vlak msgid "Auto-close sketch loops" msgstr "Schetslussen automatisch sluiten" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Schetseindpunten binnen 0,001 mm als één verbinding behandelen en de lus dichtlassen. Uit: alleen exact samenvallende eindpunten worden verbonden, zodat een lus met een minieme opening als open wordt getoond in plaats van voor u te worden gesloten. Wordt bij elk ontwerp opgeslagen; geldt voor ontwerpen die na de wijziging zijn gestart." # AI Translated msgid "Pan" @@ -11154,18 +11153,6 @@ msgstr "Niet-ondersteunde voorinstellingen tonen" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Toon incompatibele/niet-ondersteunde voorinstellingen in de keuzelijsten voor printer en filament. Deze voorinstellingen kunnen niet worden geselecteerd." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Experimenteel) Printeragents gebruiken in plaats van printhosts" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Stuurt printtaken voor niet-Bambu-printers via printer-plug-inagents in plaats van via de klassieke uploadstroom naar de printhost.\n" -"Wanneer dit is uitgeschakeld, gebruikt OrcaSlicer het oude printhostgedrag." - # AI Translated msgid "Experimental Features" msgstr "Experimentele functies" @@ -11182,6 +11169,18 @@ msgstr "" "Probeer geschilderde kenmerken (kleur/naad/ondersteuning/vaag enz.) te behouden na het wijzigen van de mesh van het object (zoals snijden/opnieuw laden vanaf schijf/vereenvoudigen/repareren enz.)\n" "Zeer experimenteel! Traag en kan artefacten veroorzaken." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Printeragents gebruiken in plaats van printhosts" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Stuurt printtaken voor niet-Bambu-printers via printer-plug-inagents in plaats van via de klassieke uploadstroom naar de printhost.\n" +"Wanneer dit is uitgeschakeld, gebruikt OrcaSlicer het oude printhostgedrag." + # AI Translated msgid "Allow Abnormal Storage" msgstr "Afwijkend opslagmedium toestaan" @@ -11361,6 +11360,9 @@ msgstr "Filamentvolgorde van andere lagen" msgid "Please input layer value (>= 2)." msgstr "Voer de laagwaarde in (>= 2)." +msgid "to" +msgstr "naar" + msgid "Plate name" msgstr "Plaat naam" @@ -17772,6 +17774,14 @@ msgstr "Symmetrische vulling om de Y-as" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Als het model twee delen heeft die symmetrisch zijn ten opzichte van de Y-as en u wilt dat deze delen symmetrische texturen hebben, klik dan op deze optie bij een van de delen." +# AI Translated +msgid "Fill pattern tops" +msgstr "Bovenkanten van het patroon vullen" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Kies deze optie als u de bovenkanten van het vulpatroon volledig wilt opvullen" + # AI Translated msgid "Infill combination - Max layer height" msgstr "Vullingcombinatie - Maximale laaghoogte" @@ -24776,6 +24786,26 @@ msgstr "Het filament is mogelijk niet compatibel met de huidige machine-instelli msgid "The filament model is unknown. A random filament preset will be used." msgstr "Het filamentmodel is onbekend. Er wordt een willekeurige filamentvoorinstelling gebruikt." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Referentievlakken en assen verbergen" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Referentievlakken en assen tonen" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Het printbed en het raster ervan verbergen" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Het printbed en het raster ervan tonen" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Klik op een referentievlak of een plat vlak om erop te schetsen — Esc annuleert" + # AI Translated msgid "Construction" msgstr "Constructie" @@ -24801,8 +24831,9 @@ msgstr "Cirkel — klik op het middelpunt, daarna op de straal" msgid "Arc — click start, end, then a point" msgstr "Boog — klik op het begin, het eind en daarna een punt" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Sleuf — twee uiteinden van de middellijn, daarna de breedte" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -24876,8 +24907,9 @@ msgstr "Wereldassen getoond" msgid "World axes hidden" msgstr "Wereldassen verborgen" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Axonometrische weergave, passend gemaakt" # AI Translated msgid "Bed shown" @@ -24888,34 +24920,12 @@ msgid "Bed hidden" msgstr "Printbed verborgen" # AI Translated -msgid "FEATURES" -msgstr "FEATURES" +msgid "Reference planes shown" +msgstr "Referentievlakken getoond" # AI Translated -msgid "Sketch" -msgstr "Schets" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Schetsvlak: %s — kies een gereedschap" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Klik op een vlak of een referentievlak in de viewport en daarna op een schetsgereedschap" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Schetsvlak: %s.\n" -"Kies een gereedschap of druk op Menu voor de lijst." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Klik op een vlak of een referentievlak en daarna op een schetsgereedschap." +msgid "Reference planes hidden" +msgstr "Referentievlakken verborgen" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -25101,8 +25111,9 @@ msgstr "As" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Referentieas (twee punten, vlaknormaal, middellijn van cilinder, twee vlakken, langs rand)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Coördinatensysteem" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -25166,8 +25177,9 @@ msgstr "Spiegelen vereist een lichaam — voeg er eerst een toe of importeer er msgid "Mate" msgstr "Koppeling" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Samenstelling: twee coördinatensystemen uitlijnen (vast, planair, roterend, schuivend, cilindrisch)" # AI Translated msgid "Boolean (combine bodies)" @@ -25266,14 +25278,6 @@ msgstr "Schroefdraad maken op een cilindrisch oppervlak (binnenboring / buitenka msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Kies een cilindrisch oppervlak (boring / buitenkant) of een cirkelvormige rand voor de schroefdraad" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "STEP importeren (bewerkbaar B-rep-volumelichaam)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Mesh (STL/OBJ) importeren als bewerkbaar B-rep-volumelichaam" - # AI Translated msgid "Constrain selected sketch" msgstr "Geselecteerde schets beperken" @@ -25306,8 +25310,9 @@ msgstr "Klik op het begin, daarna op het eind — stel daarna de exacte lengte i msgid "Polyline" msgstr "Polylijn" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Klik op punten; klik op het eerste punt om de lus te sluiten, rechtsklik of Enter om de keten te beëindigen" # AI Translated msgid "Corner rectangle" @@ -25397,8 +25402,9 @@ msgstr "Klik op het middelpunt, daarna op het begin en vervolgens op een punt vo msgid "Slot" msgstr "Sleuf" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Klik op de twee uiteinden van de middellijn, daarna op een punt voor de breedte" # AI Translated msgid "Arc slot" @@ -25428,8 +25434,9 @@ msgstr "Klik op het middelpunt, het eind van de hoofdas, een punt op de nevenas msgid "Spline" msgstr "Spline" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Klik op controlepunten; dubbelklik, rechtsklik of Enter om te voltooien" # AI Translated msgid "Click to place a point" @@ -25483,15 +25490,17 @@ msgstr "Kies een lijn als spiegelas, daarna de te spiegelen entiteiten; klik op msgid "Trim" msgstr "Inkorten" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Klik op een segment om het in te korten tot het dichtstbijzijnde snijpunt; Esc sluit af" # AI Translated msgid "Extend" msgstr "Verlengen" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Klik op een lijn of boog om deze te verlengen tot de dichtstbijzijnde entiteit; Esc sluit af" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -25675,13 +25684,21 @@ msgstr "Verticale afstand" msgid "New Design — clear the feature tree" msgstr "Nieuw ontwerp — de featureboom wissen" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "STEP importeren (bewerkbaar B-rep-volumelichaam)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Mesh (STL/OBJ) importeren als bewerkbaar B-rep-volumelichaam" + # AI Translated msgid "Export STEP…" msgstr "STEP exporteren…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Het printbed en het raster ervan tonen" +msgid "Create a new sketch" +msgstr "Een nieuwe schets maken" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -25695,20 +25712,25 @@ msgstr "Doorsnede — een deel van het model verbergen om naar binnen te kijken. msgid "Flip Section — show the opposite half" msgstr "Doorsnede omkeren — de andere helft tonen" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Kies hoe \"Naar printbed\" de lichamen verstuurt" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Naar printbed" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Alle lichamen worden één object met een onderdeel per lichaam, met behoud van hun onderlinge posities" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Naar printbed (als lichamen)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Elk lichaam wordt een eigen object en wordt afzonderlijk geplaatst" # AI Translated msgid "Width / X" @@ -25718,6 +25740,10 @@ msgstr "Breedte / X" msgid "Height / Y" msgstr "Hoogte / Y" +# AI Translated +msgid "Sketch" +msgstr "Schets" + # AI Translated msgid "Distance X" msgstr "Afstand X" @@ -25920,8 +25946,9 @@ msgstr "Circulair" msgid "Direction" msgstr "Richting" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Totale hoek (°)" # AI Translated msgid "Boolean" @@ -26305,11 +26332,13 @@ msgstr "Cilindrisch — assen collineair; vrij draaien + axiaal schuiven" msgid "Kind" msgstr "Soort" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (vast)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (beweegt)" # AI Translated msgid "Angle °" @@ -26347,6 +26376,10 @@ msgstr "(geen bindingen)" msgid "Value" msgstr "Waarde" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Kies een gereedschap of druk op Menu voor de lijst." + # AI Translated msgid "Constraints" msgstr "Beperkingen" @@ -26385,6 +26418,10 @@ msgstr "Omlaag verplaatsen" msgid "Show / hide" msgstr "Tonen / verbergen" +# AI Translated +msgid "Zoom to selection" +msgstr "Zoomen naar selectie" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Interferentie controleren — overlappende lichamen zoeken" @@ -26406,14 +26443,17 @@ msgstr "Lichaam %d geselecteerd — rechtsklik voor de beschikbare acties" msgid "Variables" msgstr "Variabelen" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Variabele toevoegen" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Variabele bewerken" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Variabele verwijderen" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -26432,9 +26472,10 @@ msgstr "Schets bijgewerkt" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Schets gemaakt (%zu sturende maten) — selecteer deze en klik met de rechtermuisknop om te extruderen" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Lengte %.2f mm, hoek %.1f°" # AI Translated msgid "(locked)" @@ -26456,6 +26497,10 @@ msgstr "Gebied geselecteerd — rechtsklik om te extruderen of dubbelklik om te msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Schets geselecteerd — rechtsklik om te extruderen of dubbelklik om te bewerken" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Dat vlak is niet plat — klik op een plat vlak of een referentievlak" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -26484,30 +26529,29 @@ msgstr "Lichaam %d: vlak %d geselecteerd — rechtsklik om het te duwen/trekken, msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Vlak %d geselecteerd — rechtsklik om het te duwen/trekken, of klik nogmaals voor het hele lichaam" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Lichaam %d: %zu rand geselecteerd — Shift+klik voegt er een toe of verwijdert er een, Afronding/Afschuining werkt ze allemaal af" +msgstr[1] "Lichaam %d: %zu randen geselecteerd — Shift+klik voegt er een toe of verwijdert er een, Afronding/Afschuining werkt ze allemaal af" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "%zu rand geselecteerd — Shift+klik voegt er een toe of verwijdert er een, Afronding/Afschuining werkt ze allemaal af" +msgstr[1] "%zu randen geselecteerd — Shift+klik voegt er een toe of verwijdert er een, Afronding/Afschuining werkt ze allemaal af" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "%s-vlak geselecteerd — rechtsklik voor de tekengereedschappen" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Lichaam %d: rand %d geselecteerd — Shift+klik om randen toe te voegen, of klik nogmaals voor het hele lichaam" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Rand %d geselecteerd — Shift+klik om randen toe te voegen, of klik nogmaals voor het hele lichaam" # AI Translated #, c-format, boost-format @@ -26532,8 +26576,9 @@ msgstr "Gereedschap afgesloten" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Schets behouden — Bevestigen om vast te leggen, Annuleren om te verwerpen" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Selecteer iets om te verwijderen" # AI Translated msgid "✗ Conflicting constraints" @@ -26565,17 +26610,21 @@ msgstr "Bewerken: Schets %d · N = loodrecht op het vlak kijken · Beves msgid "OK — %zu triangles" msgstr "OK — %zu driehoeken" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Bewerk de tekst — Enter past toe, Esc laat deze ongewijzigd" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Typ de tekst — deze verschijnt tijdens het typen in de weergave; Enter voegt in, Esc annuleert" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Tekst ongewijzigd" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Tekst geannuleerd" # AI Translated msgid "Import SVG" @@ -26601,9 +26650,10 @@ msgstr "STEP lezen…" msgid "No solids found in STEP" msgstr "Geen volumelichamen gevonden in STEP" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "STEP-import mislukt: %s" # AI Translated msgid "Rebuilding model…" @@ -26628,9 +26678,10 @@ msgstr "Meshbestanden (*.stl;*.obj)|*.stl;*.obj|Alle bestanden|*.*" msgid "Could not read the STL file" msgstr "Het STL-bestand kon niet worden gelezen" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Het OBJ-bestand kon niet worden gelezen: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -26655,20 +26706,23 @@ msgstr "" msgid "Large mesh" msgstr "Grote mesh" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Meshconversie mislukt: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "Meshconversie heeft geen geometrie opgeleverd" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Mesh" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Meshimport mislukt: %s" # AI Translated #, c-format, boost-format @@ -26697,17 +26751,19 @@ msgstr " — sleep om te plaatsen/schalen en bevestig daarna" msgid "Insert canceled" msgstr "Invoegen geannuleerd" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Sleep een hoek om te schalen, het midden om te verplaatsen — Enter of ✓ als u klaar bent, Esc om te verwerpen" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Schets toegevoegd (vlak: %s) — selecteer deze en klik met de rechtermuisknop om te extruderen" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Het model kon niet opnieuw worden opgebouwd: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -26779,18 +26835,21 @@ msgstr "Kies eerst een schets met een open lijn" msgid "Add at least one face to delete first" msgstr "Voeg eerst minstens één te verwijderen vlak toe" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Koppeling vereist twee coördinatensystemen — maak deze eerst" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Koppeling: A en B moeten verschillende coördinatensystemen zijn" # AI Translated msgid "Mate rejected" msgstr "Koppeling geweigerd" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Interferentie vereist minstens twee lichamen" # AI Translated msgid "No interference found" @@ -26801,36 +26860,43 @@ msgstr "Geen interferentie gevonden" msgid "Body %d" msgstr "Lichaam %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu overlappend paar: %s" +msgstr[1] "%zu overlappende paren: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Selecteer een lichaam om het te meten" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Dit lichaam kon niet worden gemeten" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: oppervlaklichaam, oppervlakte %.2f mm², geen volume — verdik het om er een te krijgen" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: volume %.2f mm³, oppervlakte %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Patroon vereist een volumelichaam — voeg er eerst een toe of importeer er een" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Booleaans vereist twee lichamen — voeg een tweede toe of importeer er een" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -26845,35 +26911,45 @@ msgstr "Gekozen vlak (Lichaam %d)" msgid "Picked face" msgstr "Gekozen vlak" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "de nieuwe vorm kon niet met het lichaam worden samengevoegd" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "de nieuwe vorm kon niet uit het lichaam worden gesneden" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "de vormen konden niet worden doorsneden" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "nog niets in de geschiedenis maakt een volumelichaam" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "het schetsprofiel is geen nette gesloten lus" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "het gereedschap raakt het lichaam niet" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "een expressie gebruikt een variabele die niet bestaat" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "een expressie deelt door nul" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "twee variabelen verwijzen in hun definitie naar elkaar" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "een geometriebewerking is mislukt" # AI Translated #, c-format, boost-format @@ -26912,15 +26988,17 @@ msgstr "Maat — klik op het tweede punt" msgid "Line — click the start point" msgstr "Lijn — klik op het beginpunt" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Lijn — klik op het eindpunt; de lengte en hoek kunnen daarna worden getypt" # AI Translated msgid "Polyline — click the first point" msgstr "Polylijn — klik op het eerste punt" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Polylijn — klik op het volgende punt · klik op het beginpunt om deze te sluiten · rechtsklik, dubbelklik of Enter beëindigt de keten" # AI Translated msgid "Rectangle — click one corner" @@ -26966,8 +27044,9 @@ msgstr "Afgeronde rechthoek — klik om de hoekstraal in te stellen" msgid "Circle — click the center" msgstr "Cirkel — klik op het middelpunt" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Cirkel — klik om de straal in te stellen; deze kan daarna worden getypt" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -27093,18 +27172,21 @@ msgstr "Elliptische boog — klik waar de boog eindigt" msgid "Spline — click the first control point" msgstr "Spline — klik op het eerste controlepunt" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline — klik op het volgende controlepunt · rechtsklik, dubbelklik of Enter voltooit de curve" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Punt — klik om er een te plaatsen; het gereedschap blijft actief voor meer" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Inkorten — klik op een segment waar het een andere entiteit kruist · Esc om af te sluiten" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Verlengen — klik op een lijn of boog om deze te verlengen tot de dichtstbijzijnde entiteit · Esc om af te sluiten" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -27114,8 +27196,9 @@ msgstr "Afronding — klik op de eerste van twee lijnen die samenkomen" msgid "Fillet — click the second line" msgstr "Afronding — klik op de tweede lijn" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Afronding — sleep de pijl of klik op het getal om de straal te typen · Enter past toe · Esc annuleert" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -27125,63 +27208,74 @@ msgstr "Afschuining — klik op de eerste van twee lijnen die samenkomen" msgid "Chamfer — click the second line" msgstr "Afschuining — klik op de tweede lijn" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Afschuining — sleep de pijl of klik op het getal om de afstand te typen · Enter past toe · Esc annuleert" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Offset — klik op een curve; de hele omtrek ervan krijgt een offset" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Offset — sleep de pijl naar een van beide kanten of klik op het getal om de afstand te typen · Enter past toe · Esc annuleert" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Spiegelen — klik eerst op de LIJN waarin gespiegeld wordt (een constructielijn werkt ook)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Spiegelen — as ingesteld · klik nu op de te spiegelen entiteiten · Esc annuleert" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Spiegelen — as ingesteld · %d te spiegelen · klik op een andere om deze toe te voegen of te verwijderen · Enter past toe" # AI Translated msgid "Move — click the entities to move" msgstr "Verplaatsen — klik op de te verplaatsen entiteiten" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Verplaatsen — sleep de greep of klik op het getal om de afstand te typen · Enter past toe" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Roteren — klik op de te roteren entiteiten" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Roteren — sleep de greep of klik op het getal om de hoek te typen · Enter past toe" # AI Translated msgid "Scale — click the entities to scale" msgstr "Schalen — klik op de te schalen entiteiten" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Schalen — sleep de greep of klik op het getal om de factor te typen · Enter past toe" # AI Translated msgid "Array — click the entities to repeat" msgstr "Patroon — klik op de te herhalen entiteiten" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Patroon — sleep de greep om de stap in te stellen, klik op het aantal om het te typen · Enter past toe" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Polair patroon — klik op de te herhalen entiteiten" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Polair patroon — sleep de greep om de hoekomvang in te stellen, klik op het aantal om het te typen · Enter past toe" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Sleep een hoek om te schalen, het midden om te verplaatsen · Enter of ✓ als u klaar bent, Esc om te verwerpen" # AI Translated msgid " · Esc goes back to Select" @@ -27191,62 +27285,77 @@ msgstr " · Esc gaat terug naar Selecteren" msgid " · click a constraint badge to remove it" msgstr " · klik op een beperkingslabel om het te verwijderen" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — volumelichaam" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — oppervlaklichaam" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Plat vlak %d van %s" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Cilindrisch vlak %d van %s" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Vlak %d van %s" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu rand van %s" +msgstr[1] "%zu randen van %s" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Rechte rand %d van %s" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Cirkelvormige rand %d van %s" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Hoekpunt van %s" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Schetsprofiel" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Schets — niets geselecteerd" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Schetslijn" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Schetscurve" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Schetspunt" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d schetsentiteiten" # AI Translated msgid "select something first" @@ -27309,8 +27418,9 @@ msgstr "Vlak toegevoegd — kies het als schetsvlak" msgid "Axis added" msgstr "As toegevoegd" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Coördinatensysteem toegevoegd" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -27327,10 +27437,10 @@ msgstr "Lossing vereist een gekozen vlak — klik eerst op een zijvlak" # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Nog niets — importeer een STEP of een mesh via de werkbalk,\n" -"of klik op een referentievlak en klik er met de rechtermuisknop op om een schets te beginnen." +"of druk op Schets en klik op een referentievlak om een schets te beginnen." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -27340,9 +27450,10 @@ msgstr "Nog geen volumelichaam — selecteer een schets en klik er met de rechte msgid "Could not restore the CAD model from this project" msgstr "Het CAD-model kon niet uit dit project worden hersteld" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Het CAD-model kon niet worden hersteld: %s" # AI Translated #, c-format @@ -27365,17 +27476,35 @@ msgstr "Doorsnede — de bovenste helft wordt getoond" msgid "Section view — showing the lower half" msgstr "Doorsnede — de onderste helft wordt getoond" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Vlakken van de feature zoeken…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Selecteer eerst een lichaam — klik erop in de viewport of in de lijst Lichamen" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Het model wordt opnieuw opgebouwd — zoom opnieuw zodra dit klaar is" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s heeft niets zichtbaars om naar te zoomen" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Dat lichaam heeft nog geen weergavemesh — herbereken eerst" +# AI Translated +msgid "Select something to zoom to" +msgstr "Selecteer iets om naar te zoomen" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Voltooi of annuleer eerst wat er geopend is" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Selecteer eerst een lichaam — klik erop in de viewport of in de lijst Lichamen" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Sleep de pijlen om te verplaatsen, de ringen om te roteren — en bevestig daarna (Esc annuleert)" @@ -27401,12 +27530,10 @@ msgstr "Klik op een vlak van het volumelichaam en druk daarna op F" msgid "Placed on face — body laid flat on the bed" msgstr "Op vlak geplaatst — lichaam plat op het printbed gelegd" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Bewerking geweigerd: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -27425,9 +27552,10 @@ msgstr "Dit lichaam heeft geen feature om te verwijderen — gebruik Nieuw ontwe msgid "feature %d" msgstr "feature %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "%s verwijderd, de feature waaruit dit lichaam is gemaakt — Ctrl+Z herstelt deze" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -27819,12 +27947,14 @@ msgstr "STEP-bestanden (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP geëxporteerd" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "STEP-export mislukt: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Naar printbed (als lichamen) — elk lichaam als eigen object naar Voorbereiden sturen" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -27838,19 +27968,36 @@ msgstr "Niets om vast te leggen — voeg eerst een feature toe" msgid "All bodies hidden — show one before committing" msgstr "Alle lichamen zijn verborgen — toon er een voordat u vastlegt" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu rand" +msgstr[1] "%zu randen" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Middellijn E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Lijn E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Schetsvlak: %s — kies een gereedschap" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Schetsvlak: %s.\n" +"Kies een gereedschap of druk op Menu voor de lijst." # AI Translated msgid "Plane ready" @@ -27860,8 +28007,9 @@ msgstr "Vlak gereed" msgid "Axis ready" msgstr "As gereed" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Coördinatensysteem gereed" # AI Translated msgid "Helix ready" @@ -27879,9 +28027,10 @@ msgstr "Schets gereed" msgid "Mate ready" msgstr "Koppeling gereed" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Ongeldig: %s" # AI Translated #, c-format @@ -27965,110 +28114,139 @@ msgstr "Variabele bewerken" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "Variabele '%s' kon niet worden verwijderd (waarschijnlijk nog gebruikt in een feature-expressie): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" is geen waarde die door een expressie kan worden aangestuurd" # AI Translated msgid "No binding for that field" msgstr "Geen binding voor dat veld" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "De waarde moet groter zijn dan nul" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "De waarde mag niet negatief zijn (nul betekent samenvallend)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Aan die maat kan niet worden voldaan — de schets is overbeperkt" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "%1% beperking(en) kunnen niet op deze geometrie werken (een ellips of splinecurve, of een cirkel met grootte nul) en worden genegeerd" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Dit profiel kruist zichzelf of vouwt op zichzelf terug bij de rode markering, en omsluit daardoor niet één enkel gebied" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Zijde" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Halve lange as" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Halve korte as" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "De hoek moet tussen 0° en 360° liggen" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "De halve lange as kan niet korter zijn dan de halve korte as" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "De hoekstraal moet kleiner zijn dan de helft van de kortste zijde" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "De sleuf is te breed voor zijn straal — de breedte moet kleiner zijn dan tweemaal de straal" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Aan %1% kan niet worden voldaan — de schets is overbeperkt" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Die twee lijnen komen niet samen in een hoek — kies twee lijnen die dat wel doen" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "De grootte moet groter zijn dan nul" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Afronding: de straal reikt voorbij een van de benen, of de twee lijnen komen niet samen in een hoek" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Afschuining: de afstand reikt voorbij een van de benen, of de twee lijnen komen niet samen in een hoek" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "%1% beperking(en) die door de afronding/afschuining ongeldig werden, zijn verwijderd" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Offset: een ellips of spline heeft geen parallel van dezelfde soort — kies lijnen, bogen of cirkels" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "De schaalfactor moet groter zijn dan nul" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Kopieën" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Het aantal kopieën moet een geheel getal van 2 of meer zijn" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "%1% beperking(en) opgeheven door de transformatie" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "De patroonkopieën zijn niet beperkt — de solver heeft elke binding geweigerd" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "rechtsklik of dubbelklik om te voltooien, klik op het begin om te sluiten" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Verlengen: klik op een lijn of een boog die een andere entiteit kan bereiken" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Inkorten: klik op een segment waar het een andere entiteit kruist" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Druk op Enter of ✓ om toe te passen, Esc om te verwerpen" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Nog geen maat voor die entiteit — klik op een lijn, een cirkel, een boog of twee punten" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Klik op een tweede punt, of op een lijn waartoe de afstand moet worden gemeten" # AI Translated msgid "Enter a number" @@ -28104,8 +28282,12 @@ msgid "Sketch" msgstr "Schets" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Klik op een vlak of een referentievlak en kies daarna een tekengereedschap" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Selecteer een plat vlak of een referentievlak om op te schetsen" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Schetsen op het geselecteerde platte vlak of referentievlak, of klik er daarna een aan" # AI Translated msgctxt "Design" @@ -28127,9 +28309,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Verdikken" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Samenvoegen" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -28182,17 +28365,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Oppervlak verdikken" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Oppervlak verdikken vereist een oppervlaklichaam — maak er eerst een met een oppervlakgereedschap" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Gat" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -28207,8 +28388,9 @@ msgctxt "Design" msgid "Split" msgstr "Splitsen" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Splitsen vereist een volumelichaam — voeg er eerst een toe of importeer er een" # AI Translated msgid "Split the body along a picked face into two solids" @@ -28254,8 +28436,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Oppervlakoffset" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Oppervlakoffset vereist een oppervlaklichaam — maak er eerst een met een oppervlakgereedschap" # AI Translated msgctxt "Design" @@ -28285,8 +28468,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Patroon langs curve" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Patroon langs curve vereist een lichaam en een curve" # AI Translated msgid "Repeat the body along a picked curve" @@ -28307,8 +28491,9 @@ msgctxt "Design" msgid "Align to" msgstr "Uitlijnen op" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Uitlijnen vereist een lichaam — voeg er eerst een toe of importeer er een" # AI Translated msgid "Align the body to a picked face or plane" @@ -28324,9 +28509,10 @@ msgctxt "Design" msgid "Axis" msgstr "As" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Coördinatensysteem" # AI Translated msgctxt "Design" @@ -28342,9 +28528,10 @@ msgstr "Meten" msgid "Measure between the picked points, edges or faces" msgstr "Meten tussen de gekozen punten, randen of vlakken" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Volume en oppervlakte" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -28386,12 +28573,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Vlak verwijderen" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Kleur" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "De weergavekleur van het geselecteerde lichaam instellen" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Zoomen naar selectie" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "De selectie in beeld brengen met behoud van de kijkrichting" # AI Translated msgctxt "Design" @@ -28430,9 +28628,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Rechthoek vanuit hoek" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Rechthoek vanuit middelpunt" # AI Translated msgctxt "Design" @@ -28444,9 +28643,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Afgeronde rechthoek" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Cirkel vanuit middelpunt" # AI Translated msgctxt "Design" @@ -28468,9 +28668,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Raakboog" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Boog vanuit middelpunt" # AI Translated msgctxt "Design" @@ -28502,48 +28703,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Driehoek" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Driehoek — klik op het middelpunt, daarna op een hoekpunt" # AI Translated msgctxt "Design" msgid "Square" msgstr "Vierkant" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Vierkant — klik op het middelpunt, daarna op een hoekpunt" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Vijfhoek" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Vijfhoek — klik op het middelpunt, daarna op een hoekpunt" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Zeshoek" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Zeshoek — klik op het middelpunt, daarna op een hoekpunt" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Achthoek" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Achthoek — klik op het middelpunt, daarna op een hoekpunt" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Twaalfhoek" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Twaalfhoek — klik op het middelpunt, daarna op een hoekpunt" # AI Translated msgctxt "Design" @@ -28573,8 +28780,9 @@ msgctxt "Design" msgid "Text" msgstr "Tekst" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Typ tekst; deze wordt een tekstfeature op het vlak van deze schets en kan later worden bewerkt" # AI Translated msgctxt "Design" @@ -28691,27 +28899,34 @@ msgstr "Hoek / afstand…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Typ de hoek tussen twee lijnen of de afstand tussen de twee gekozen elementen" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Typ de in te voegen tekst" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Vet" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Cursief" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Dit lettertype kan niet voor tekst worden gebruikt — kies een ander" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Typ de tekst om de grootte te zien" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Dit lettertype heeft geen omtrek voor deze tekst" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Grootte: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -28809,8 +29024,9 @@ msgstr "Profiel" msgid "Start new profile (for holes)" msgstr "Nieuw profiel beginnen (voor gaten)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segmenten" # AI Translated msgid "Sides" @@ -28824,20 +29040,23 @@ msgstr "Klik op het canvas om te tekenen" msgid "Snap to grid" msgstr "Uitlijnen op raster" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Rasterstap" # AI Translated msgid "Outer" msgstr "Buiten" +# AI Translated msgid "closed" -msgstr "" +msgstr "gesloten" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% punten %4%" # AI Translated msgid "XY (Top)" @@ -28874,8 +29093,9 @@ msgstr[1] "%zu gesloten profielen" msgid "Draw a closed profile to enable" msgstr "Teken een gesloten profiel om dit in te schakelen" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Alles wissen" # AI Translated msgid "Empty result" @@ -32994,6 +33214,39 @@ msgstr "" "Kromtrekken voorkomen\n" "Wist je dat bij het printen van materialen die gevoelig zijn voor kromtrekken, zoals ABS, een juiste verhoging van de temperatuur van het warmtebed de kans op kromtrekken kan verkleinen?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Experimenteel) Printeragents gebruiken in plaats van printhosts" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "FEATURES" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Klik op een vlak of een referentievlak in de viewport en daarna op een schetsgereedschap" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Klik op een vlak of een referentievlak en daarna op een schetsgereedschap." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "%s-vlak geselecteerd — rechtsklik voor de tekengereedschappen" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Nog niets — importeer een STEP of een mesh via de werkbalk,\n" +#~ "of klik op een referentievlak en klik er met de rechtermuisknop op om een schets te beginnen." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Klik op een vlak of een referentievlak en kies daarna een tekengereedschap" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 26f8de1ef3..66bd86e2e6 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer 2.3.0-rc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga <>\n" "Language-Team: \n" @@ -3480,8 +3480,8 @@ msgstr "Dodatkowa predefinicja procesu" msgid "Remove parameter" msgstr "Usuń parametr" -msgid "to" -msgstr "do" +msgid "Range" +msgstr "Zakres" msgid "Add height range" msgstr "Dodaj zakres wysokości" @@ -5567,9 +5567,6 @@ msgstr "nazwa parametru" msgid "layers" msgstr "warstwy" -msgid "Range" -msgstr "Zakres" - # AI Translated msgid "Empty string" msgstr "Pusty ciąg znaków" @@ -8978,8 +8975,9 @@ msgstr "Podłączona drukarka to %s. Musi ona odpowiadać profilowi projektu, ab msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Czy chcesz zsynchronizować informacje o drukarce i automatycznie przełączyć profil?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Ten projekt zawiera model utworzony na karcie Projektowanie i żadnej innej geometrii. Włącz opcję \"Funkcja CAD (eksperymentalna)\" w Preferencjach i uruchom program ponownie, aby go zobaczyć i edytować; model zostanie zachowany przy zapisywaniu projektu." msgid "The file does not contain any geometry data." msgstr "Plik nie zawiera żadnych danych geometrycznych." @@ -10086,8 +10084,9 @@ msgstr "Na karcie Projektowanie rysuj łącznik połączenia jako małą powierz msgid "Auto-close sketch loops" msgstr "Automatycznie zamykaj pętle szkicu" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Traktuj końce elementów szkicu oddalone o nie więcej niż 0,001 mm jako jedno połączenie i domykaj pętlę. Wyłączone: łączą się tylko dokładnie pokrywające się punkty końcowe, więc pętla z niewielką szczeliną jest pokazywana jako otwarta, zamiast zostać zamknięta automatycznie. Zapisywane z każdym modelem CAD; dotyczy modeli rozpoczętych po zmianie." # AI Translated msgid "Pan" @@ -10560,18 +10559,6 @@ msgstr "Pokaż nieobsługiwane profile" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Pokazuj niekompatybilne/nieobsługiwane profile na listach rozwijanych drukarek i filamentów. Tych profili nie można wybrać." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Eksperymentalne) Używaj agentów drukarki zamiast serwerów druku" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Kieruje zadania druku dla drukarek innych niż Bambu przez agentów wtyczek drukarki zamiast klasycznego przesyłania do serwera druku.\n" -"Gdy opcja jest wyłączona, OrcaSlicer korzysta z dotychczasowego działania serwera druku." - # AI Translated msgid "Experimental Features" msgstr "Funkcje eksperymentalne" @@ -10588,6 +10575,18 @@ msgstr "" "Próbuje zachować malowane cechy (kolor/szew/podpory/skórę fuzzy itp.) po zmianie siatki obiektu (np. cięcie/wczytanie ponownie z dysku/uproszczenie/naprawa itp.)\n" "Wysoce eksperymentalne! Powolne i może tworzyć artefakty." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Używaj agentów drukarki zamiast serwerów druku" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Kieruje zadania druku dla drukarek innych niż Bambu przez agentów wtyczek drukarki zamiast klasycznego przesyłania do serwera druku.\n" +"Gdy opcja jest wyłączona, OrcaSlicer korzysta z dotychczasowego działania serwera druku." + # AI Translated msgid "Allow Abnormal Storage" msgstr "Zezwalaj na nieprawidłową pamięć" @@ -10760,6 +10759,9 @@ msgstr "Inna sekwencja filamentu na kolejnej warstwie" msgid "Please input layer value (>= 2)." msgstr "Proszę podać wartość warstwy (>= 2)." +msgid "to" +msgstr "do" + msgid "Plate name" msgstr "Nazwa płyty" @@ -16799,6 +16801,14 @@ msgstr "Symetryczne wypełnienie względem osi Y" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Jeśli model ma dwie części symetryczne względem osi Y i chcesz, aby miały symetryczne tekstury, zaznacz tę opcję dla jednej z części." +# AI Translated +msgid "Fill pattern tops" +msgstr "Wypełnij górne części wzoru" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Wybierz tę opcję, jeśli chcesz całkowicie wypełnić górne części wzoru wypełnienia" + msgid "Infill combination - Max layer height" msgstr "Kombinacja wypełnienia - Maks. wysokość warstwy" @@ -23318,6 +23328,26 @@ msgstr "Filament może być niezgodny z bieżącymi ustawieniami urządzenia. U msgid "The filament model is unknown. A random filament preset will be used." msgstr "Model filamentu jest nieznany. Losowy profil filamentu zostanie użyty" +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Ukryj płaszczyzny i osie odniesienia" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Pokaż płaszczyzny i osie odniesienia" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Ukryj stół drukarki i siatkę płyty" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Pokaż stół drukarki i siatkę płyty" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Kliknij płaszczyznę odniesienia lub płaską powierzchnię, aby na niej szkicować — Esc anuluje" + # AI Translated msgid "Construction" msgstr "Konstrukcyjna" @@ -23343,8 +23373,9 @@ msgstr "Okrąg — kliknij środek, potem promień" msgid "Arc — click start, end, then a point" msgstr "Łuk — kliknij początek, koniec, potem punkt" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Rowek — dwa końce linii środkowej, potem szerokość" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -23418,8 +23449,9 @@ msgstr "Pokazano osie globalne" msgid "World axes hidden" msgstr "Ukryto osie globalne" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Widok aksonometryczny, dopasowany" # AI Translated msgid "Bed shown" @@ -23430,34 +23462,12 @@ msgid "Bed hidden" msgstr "Ukryto stół" # AI Translated -msgid "FEATURES" -msgstr "OPERACJE" +msgid "Reference planes shown" +msgstr "Pokazano płaszczyzny odniesienia" # AI Translated -msgid "Sketch" -msgstr "Szkic" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Płaszczyzna szkicu: %s — wybierz narzędzie" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Kliknij w widoku powierzchnię lub płaszczyznę odniesienia, a następnie narzędzie szkicu" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Płaszczyzna szkicu: %s.\n" -"Wybierz narzędzie lub naciśnij Menu, aby wyświetlić listę." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Kliknij powierzchnię lub płaszczyznę odniesienia, a następnie narzędzie szkicu." +msgid "Reference planes hidden" +msgstr "Ukryto płaszczyzny odniesienia" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -23643,8 +23653,9 @@ msgstr "Oś" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Oś odniesienia (dwa punkty, normalna powierzchni, oś walca, dwie płaszczyzny, wzdłuż krawędzi)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Układ współrzędnych" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -23708,8 +23719,9 @@ msgstr "Lustrzane odbicie wymaga bryły — najpierw dodaj lub zaimportuj brył msgid "Mate" msgstr "Połączenie" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Złożenie: wyrównaj dwa układy współrzędnych (sztywne, płaskie, obrotowe, suwakowe, cylindryczne)" # AI Translated msgid "Boolean (combine bodies)" @@ -23808,14 +23820,6 @@ msgstr "Nagwintuj powierzchnię walcową (otwór wewnętrzny / zewnętrzna) lub msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Wybierz powierzchnię walcową (otwór / zewnętrzna) lub okrągłą krawędź do gwintu" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Importuj STEP (edytowalna bryła B-rep)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Importuj siatkę (STL/OBJ) jako edytowalną bryłę B-rep" - # AI Translated msgid "Constrain selected sketch" msgstr "Dodaj wiązania do wybranego szkicu" @@ -23848,8 +23852,9 @@ msgstr "Kliknij początek, potem koniec — następnie ustaw dokładną długoś msgid "Polyline" msgstr "Polilinia" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Klikaj punkty; kliknij pierwszy punkt, aby zamknąć pętlę, lub kliknij prawym przyciskiem albo naciśnij Enter, aby zakończyć łańcuch" # AI Translated msgid "Corner rectangle" @@ -23939,8 +23944,9 @@ msgstr "Kliknij środek, potem początek, potem punkt określający kąt końcow msgid "Slot" msgstr "Rowek" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Kliknij dwa końce linii środkowej, potem punkt określający szerokość" # AI Translated msgid "Arc slot" @@ -23970,8 +23976,9 @@ msgstr "Kliknij środek, koniec osi wielkiej, punkt osi małej, potem początek msgid "Spline" msgstr "Splajn" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Klikaj punkty kontrolne; kliknij dwukrotnie, prawym przyciskiem lub naciśnij Enter, aby zakończyć" # AI Translated msgid "Click to place a point" @@ -24024,15 +24031,17 @@ msgstr "Wybierz linię osi odbicia, potem elementy do odbicia; kliknij puste mie msgid "Trim" msgstr "Przytnij" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Kliknij odcinek, aby przyciąć go do najbliższego przecięcia; Esc kończy" # AI Translated msgid "Extend" msgstr "Wydłuż" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Kliknij linię lub łuk, aby wydłużyć je do najbliższego elementu; Esc kończy" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -24216,13 +24225,21 @@ msgstr "Odległość pionowa" msgid "New Design — clear the feature tree" msgstr "Nowy model CAD — wyczyść drzewo operacji" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Importuj STEP (edytowalna bryła B-rep)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Importuj siatkę (STL/OBJ) jako edytowalną bryłę B-rep" + # AI Translated msgid "Export STEP…" msgstr "Eksportuj STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Pokaż stół drukarki i siatkę płyty" +msgid "Create a new sketch" +msgstr "Utwórz nowy szkic" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -24236,20 +24253,25 @@ msgstr "Widok przekroju — ukryj część modelu, aby zajrzeć do środka. Page msgid "Flip Section — show the opposite half" msgstr "Odwróć przekrój — pokaż przeciwną połowę" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Wybierz, jak polecenie Przenieś na płytę wysyła bryły" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Przenieś na płytę" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Wszystkie bryły stają się jednym obiektem z osobną częścią dla każdej bryły, z zachowaniem ich wzajemnego położenia" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Przenieś na płytę (jako bryły)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Każda bryła staje się osobnym obiektem, rozmieszczanym niezależnie" # AI Translated msgid "Width / X" @@ -24259,6 +24281,10 @@ msgstr "Szerokość / X" msgid "Height / Y" msgstr "Wysokość / Y" +# AI Translated +msgid "Sketch" +msgstr "Szkic" + # AI Translated msgid "Distance X" msgstr "Odległość X" @@ -24461,8 +24487,9 @@ msgstr "Kołowy" msgid "Direction" msgstr "Kierunek" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Kąt całkowity (°)" # AI Translated msgid "Boolean" @@ -24846,11 +24873,13 @@ msgstr "Cylindryczne — osie współliniowe; swobodny obrót + przesuw osiowy" msgid "Kind" msgstr "Rodzaj" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (stały)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (ruchomy)" # AI Translated msgid "Angle °" @@ -24888,6 +24917,10 @@ msgstr "(brak powiązań)" msgid "Value" msgstr "Wartość" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Wybierz narzędzie lub naciśnij Menu, aby wyświetlić listę." + # AI Translated msgid "Constraints" msgstr "Wiązania" @@ -24926,6 +24959,10 @@ msgstr "Przesuń w dół" msgid "Show / hide" msgstr "Pokaż / ukryj" +# AI Translated +msgid "Zoom to selection" +msgstr "Przybliż do zaznaczenia" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Sprawdź kolizje — znajdź nachodzące na siebie bryły" @@ -24947,14 +24984,17 @@ msgstr "Wybrano bryłę %d — kliknij prawym przyciskiem, aby zobaczyć dostęp msgid "Variables" msgstr "Zmienne" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Dodaj zmienną" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Edytuj zmienną" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Usuń zmienną" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24973,9 +25013,10 @@ msgstr "Zaktualizowano szkic" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Utworzono szkic (wymiary sterujące: %zu) — zaznacz go, a następnie kliknij prawym przyciskiem, aby wykonać Wyciągnięcie" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Długość %.2f mm, kąt %.1f°" # AI Translated msgid "(locked)" @@ -24997,6 +25038,10 @@ msgstr "Wybrano obszar — kliknij prawym przyciskiem, aby wykonać Wyciągnięc msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Wybrano szkic — kliknij prawym przyciskiem, aby wykonać Wyciągnięcie, lub dwukrotnie, aby edytować" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Ta powierzchnia nie jest płaska — kliknij płaską powierzchnię lub płaszczyznę odniesienia" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -25025,32 +25070,31 @@ msgstr "Bryła %d: wybrano powierzchnię %d — kliknij prawym przyciskiem, aby msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Wybrano powierzchnię %d — kliknij prawym przyciskiem, aby ją wypchnąć/wciągnąć, lub kliknij ponownie, aby wybrać całą bryłę" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Bryła %d: wybrano %zu krawędź — Shift+klik dodaje lub usuwa krawędź, Zaokrąglenie/Fazowanie obrobi wszystkie wybrane" +msgstr[1] "Bryła %d: wybrano %zu krawędzie — Shift+klik dodaje lub usuwa krawędź, Zaokrąglenie/Fazowanie obrobi je wszystkie" +msgstr[2] "Bryła %d: wybrano %zu krawędzi — Shift+klik dodaje lub usuwa krawędź, Zaokrąglenie/Fazowanie obrobi je wszystkie" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "Wybrano %zu krawędź — Shift+klik dodaje lub usuwa krawędź, Zaokrąglenie/Fazowanie obrobi wszystkie wybrane" +msgstr[1] "Wybrano %zu krawędzie — Shift+klik dodaje lub usuwa krawędź, Zaokrąglenie/Fazowanie obrobi je wszystkie" +msgstr[2] "Wybrano %zu krawędzi — Shift+klik dodaje lub usuwa krawędź, Zaokrąglenie/Fazowanie obrobi je wszystkie" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "Wybrano płaszczyznę %s — kliknij prawym przyciskiem, aby wyświetlić narzędzia rysowania" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Bryła %d: wybrano krawędź %d — kliknij z wciśniętym Shift, aby dodać krawędzie, lub kliknij ponownie, aby wybrać całą bryłę" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Wybrano krawędź %d — kliknij z wciśniętym Shift, aby dodać krawędzie, lub kliknij ponownie, aby wybrać całą bryłę" # AI Translated #, c-format, boost-format @@ -25075,8 +25119,9 @@ msgstr "Zamknięto narzędzie" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Zachowano szkic — Potwierdź, aby go zatwierdzić, Anuluj, aby odrzucić" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Wybierz coś do usunięcia" # AI Translated msgid "✗ Conflicting constraints" @@ -25109,17 +25154,21 @@ msgstr "Edycja: Szkic %d · N = widok prostopadle do płaszczyzny · Pot msgid "OK — %zu triangles" msgstr "OK — trójkąty: %zu" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Edytuj tekst — Enter zatwierdza, Esc pozostawia go bez zmian" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Wpisz tekst — pojawia się w widoku w trakcie pisania; Enter wstawia, Esc anuluje" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Tekst bez zmian" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Anulowano tekst" # AI Translated msgid "Import SVG" @@ -25145,9 +25194,10 @@ msgstr "Odczytywanie STEP…" msgid "No solids found in STEP" msgstr "Nie znaleziono brył w pliku STEP" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "Import STEP nie powiódł się: %s" # AI Translated msgid "Rebuilding model…" @@ -25173,9 +25223,10 @@ msgstr "Pliki siatek (*.stl;*.obj)|*.stl;*.obj|Wszystkie pliki|*.*" msgid "Could not read the STL file" msgstr "Nie udało się odczytać pliku STL" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Nie udało się odczytać pliku OBJ: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -25200,20 +25251,23 @@ msgstr "" msgid "Large mesh" msgstr "Duża siatka" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Konwersja siatki nie powiodła się: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "Konwersja siatki nie dała żadnej geometrii" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Siatka" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Import siatki nie powiódł się: %s" # AI Translated #, c-format, boost-format @@ -25242,17 +25296,19 @@ msgstr " — przeciągnij, aby umieścić/zmienić rozmiar, a następnie potwier msgid "Insert canceled" msgstr "Anulowano wstawianie" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Przeciągnij narożnik, aby skalować, a środek, aby przesunąć — po zakończeniu naciśnij Enter lub ✓, Esc odrzuca zmiany" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Dodano szkic (płaszczyzna: %s) — zaznacz go, a następnie kliknij prawym przyciskiem, aby wykonać Wyciągnięcie" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Nie udało się przebudować modelu: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -25324,18 +25380,21 @@ msgstr "Najpierw wybierz szkic z otwartą linią" msgid "Add at least one face to delete first" msgstr "Najpierw dodaj co najmniej jedną powierzchnię do usunięcia" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Połączenie wymaga dwóch układów współrzędnych — najpierw je utwórz" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Połączenie: A i B muszą być różnymi układami współrzędnych" # AI Translated msgid "Mate rejected" msgstr "Odrzucono połączenie" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Sprawdzanie kolizji wymaga co najmniej dwóch brył" # AI Translated msgid "No interference found" @@ -25346,37 +25405,44 @@ msgstr "Nie znaleziono kolizji" msgid "Body %d" msgstr "Bryła %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%zu para nakładających się brył: %s" +msgstr[1] "%zu pary nakładających się brył: %s" +msgstr[2] "%zu par nakładających się brył: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Wybierz bryłę, aby ją zmierzyć" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Nie udało się zmierzyć tej bryły" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: bryła powierzchniowa, pole powierzchni %.2f mm², brak objętości — pogrub ją, aby uzyskać objętość" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: objętość %.2f mm³, pole powierzchni %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Szyk wymaga bryły — najpierw dodaj lub zaimportuj bryłę" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Operacja logiczna wymaga dwóch brył — dodaj lub zaimportuj drugą" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -25391,35 +25457,45 @@ msgstr "Wybrana powierzchnia (Bryła %d)" msgid "Picked face" msgstr "Wybrana powierzchnia" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "nie udało się złączyć nowego kształtu z bryłą" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "nie udało się wyciąć nowego kształtu z bryły" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "nie udało się wyznaczyć przecięcia kształtów" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "nic w historii nie tworzy jeszcze bryły" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "profil szkicu nie jest prawidłową zamkniętą pętlą" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "narzędzie nie dotyka bryły" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "wyrażenie używa zmiennej, która nie istnieje" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "wyrażenie dzieli przez zero" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "dwie zmienne definiują się nawzajem" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "operacja geometryczna nie powiodła się" # AI Translated #, c-format, boost-format @@ -25459,15 +25535,17 @@ msgstr "Wymiar — kliknij drugi punkt" msgid "Line — click the start point" msgstr "Linia — kliknij punkt początkowy" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Linia — kliknij punkt końcowy; potem można wpisać jej długość i kąt" # AI Translated msgid "Polyline — click the first point" msgstr "Polilinia — kliknij pierwszy punkt" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Polilinia — kliknij następny punkt · kliknij punkt początkowy, aby ją zamknąć · prawy przycisk, dwuklik lub Enter kończy łańcuch" # AI Translated msgid "Rectangle — click one corner" @@ -25513,8 +25591,9 @@ msgstr "Prostokąt zaokrąglony — kliknij, aby ustawić promień narożnika" msgid "Circle — click the center" msgstr "Okrąg — kliknij środek" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Okrąg — kliknij, aby ustawić promień; potem można go wpisać" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -25640,18 +25719,21 @@ msgstr "Łuk eliptyczny — kliknij miejsce końca łuku" msgid "Spline — click the first control point" msgstr "Splajn — kliknij pierwszy punkt kontrolny" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Splajn — kliknij następny punkt kontrolny · prawy przycisk, dwuklik lub Enter kończy krzywą" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Punkt — kliknij, aby umieścić punkt; narzędzie pozostaje aktywne dla kolejnych" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Przytnij — kliknij odcinek w miejscu, gdzie przecina inny element · naciśnij Esc, aby wyjść" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Wydłuż — kliknij linię lub łuk, aby wydłużyć je do najbliższego elementu · naciśnij Esc, aby wyjść" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -25661,8 +25743,9 @@ msgstr "Zaokrąglenie — kliknij pierwszą z dwóch stykających się linii" msgid "Fillet — click the second line" msgstr "Zaokrąglenie — kliknij drugą linię" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Zaokrąglenie — przeciągnij strzałkę lub kliknij liczbę, aby wpisać promień · Enter zatwierdza · Esc anuluje" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -25672,63 +25755,74 @@ msgstr "Fazowanie — kliknij pierwszą z dwóch stykających się linii" msgid "Chamfer — click the second line" msgstr "Fazowanie — kliknij drugą linię" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Fazowanie — przeciągnij strzałkę lub kliknij liczbę, aby wpisać długość fazy · Enter zatwierdza · Esc anuluje" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Odsuń — kliknij krzywą; odsunięty zostanie cały jej kontur" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Odsuń — przeciągnij strzałkę w dowolną stronę lub kliknij liczbę, aby wpisać odległość · Enter zatwierdza · Esc anuluje" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Lustrzane odbicie — najpierw kliknij LINIĘ, względem której nastąpi odbicie (może być linia konstrukcyjna)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Lustrzane odbicie — oś ustawiona · teraz kliknij elementy do odbicia · Esc anuluje" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Lustrzane odbicie — oś ustawiona · do odbicia: %d · kliknij kolejny element, aby go dodać lub usunąć · Enter zatwierdza" # AI Translated msgid "Move — click the entities to move" msgstr "Przesuń — kliknij elementy do przesunięcia" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Przesuń — przeciągnij uchwyt lub kliknij liczbę, aby wpisać odległość · Enter zatwierdza" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Obróć — kliknij elementy do obrócenia" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Obróć — przeciągnij uchwyt lub kliknij liczbę, aby wpisać kąt · Enter zatwierdza" # AI Translated msgid "Scale — click the entities to scale" msgstr "Skaluj — kliknij elementy do skalowania" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Skaluj — przeciągnij uchwyt lub kliknij liczbę, aby wpisać współczynnik · Enter zatwierdza" # AI Translated msgid "Array — click the entities to repeat" msgstr "Szyk — kliknij elementy do powielenia" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Szyk — przeciągnij uchwyt, aby ustawić krok, kliknij liczbę elementów, aby ją wpisać · Enter zatwierdza" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Szyk kołowy — kliknij elementy do powielenia" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Szyk kołowy — przeciągnij uchwyt, aby ustawić zakres kąta, kliknij liczbę elementów, aby ją wpisać · Enter zatwierdza" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Przeciągnij narożnik, aby skalować, a środek, aby przesunąć · po zakończeniu naciśnij Enter lub ✓, Esc odrzuca zmiany" # AI Translated msgid " · Esc goes back to Select" @@ -25738,63 +25832,78 @@ msgstr " · Esc wraca do zaznaczania" msgid " · click a constraint badge to remove it" msgstr " · kliknij znacznik wiązania, aby je usunąć" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — bryła pełna" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — bryła powierzchniowa" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Płaska powierzchnia %d (%s)" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Powierzchnia walcowa %d (%s)" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Powierzchnia %d (%s)" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%zu krawędź (%s)" +msgstr[1] "%zu krawędzie (%s)" +msgstr[2] "%zu krawędzi (%s)" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Prosta krawędź %d (%s)" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Okrągła krawędź %d (%s)" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Wierzchołek (%s)" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Profil szkicu" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Szkic — nic nie wybrano" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Linia szkicu" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Krzywa szkicu" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Punkt szkicu" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "Elementy szkicu: %d" # AI Translated msgid "select something first" @@ -25857,8 +25966,9 @@ msgstr "Dodano płaszczyznę — wybierz ją jako płaszczyznę szkicu" msgid "Axis added" msgstr "Dodano oś" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Dodano układ współrzędnych" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -25875,10 +25985,10 @@ msgstr "Pochylenie wymaga wybranej powierzchni — najpierw kliknij powierzchni # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Na razie nic tu nie ma — zaimportuj plik STEP lub siatkę z paska narzędzi,\n" -"albo kliknij płaszczyznę odniesienia i kliknij ją prawym przyciskiem, aby rozpocząć szkic." +"albo naciśnij Szkic i kliknij płaszczyznę odniesienia, aby rozpocząć szkic." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -25888,9 +25998,10 @@ msgstr "Brak bryły — zaznacz szkic i kliknij go prawym przyciskiem, aby wykon msgid "Could not restore the CAD model from this project" msgstr "Nie udało się przywrócić modelu CAD z tego projektu" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Nie udało się przywrócić modelu CAD: %s" # AI Translated #, c-format @@ -25913,17 +26024,35 @@ msgstr "Widok przekroju — wyświetlana jest górna połowa" msgid "Section view — showing the lower half" msgstr "Widok przekroju — wyświetlana jest dolna połowa" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Wyszukiwanie powierzchni operacji…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Najpierw wybierz bryłę — kliknij ją w widoku lub na liście Bryły" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Model jest przebudowywany — przybliż ponownie po zakończeniu" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s: nie ma nic widocznego do przybliżenia" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Ta bryła nie ma jeszcze siatki wyświetlania — najpierw przelicz model" +# AI Translated +msgid "Select something to zoom to" +msgstr "Wybierz coś do przybliżenia" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Najpierw zakończ lub anuluj to, co jest otwarte" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Najpierw wybierz bryłę — kliknij ją w widoku lub na liście Bryły" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Przeciągnij strzałki, aby przesunąć, a pierścienie, aby obrócić — następnie potwierdź (Esc anuluje)" @@ -25949,12 +26078,10 @@ msgstr "Kliknij powierzchnię bryły, a następnie naciśnij F" msgid "Placed on face — body laid flat on the bed" msgstr "Położono na powierzchni — bryła leży płasko na stole" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Odrzucono edycję: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25973,9 +26100,10 @@ msgstr "Ta bryła nie ma operacji do usunięcia — użyj opcji Nowy model CAD, msgid "feature %d" msgstr "operacja %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "Usunięto operację %s, z której powstała ta bryła — Ctrl+Z ją przywraca" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -26368,12 +26496,14 @@ msgstr "Pliki STEP (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "Wyeksportowano STEP" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "Eksport STEP nie powiódł się: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Przenieś na płytę (jako bryły) — wyślij każdą bryłę do Przygotowania jako osobny obiekt" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -26387,20 +26517,37 @@ msgstr "Nie ma czego przenieść na płytę — najpierw dodaj operację" msgid "All bodies hidden — show one before committing" msgstr "Wszystkie bryły są ukryte — pokaż jedną przed przeniesieniem na płytę" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%zu krawędź" +msgstr[1] "%zu krawędzie" +msgstr[2] "%zu krawędzi" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Linia środkowa E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Linia E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Płaszczyzna szkicu: %s — wybierz narzędzie" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Płaszczyzna szkicu: %s.\n" +"Wybierz narzędzie lub naciśnij Menu, aby wyświetlić listę." # AI Translated msgid "Plane ready" @@ -26410,8 +26557,9 @@ msgstr "Płaszczyzna gotowa" msgid "Axis ready" msgstr "Oś gotowa" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Układ współrzędnych gotowy" # AI Translated msgid "Helix ready" @@ -26429,9 +26577,10 @@ msgstr "Szkic gotowy" msgid "Mate ready" msgstr "Połączenie gotowe" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Nieprawidłowe: %s" # AI Translated #, c-format @@ -26517,110 +26666,139 @@ msgstr "Edytuj zmienną" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "Nie udało się usunąć zmiennej „%s” (prawdopodobnie nadal odwołuje się do niej wyrażenie operacji): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" nie jest wartością, którą może sterować wyrażenie" # AI Translated msgid "No binding for that field" msgstr "Brak powiązania dla tego pola" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "Wartość musi być większa od zera" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "Wartość nie może być ujemna (zero oznacza pokrywanie się)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Tego wymiaru nie można spełnić — szkic jest nadmiernie zdefiniowany" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "Pominięte wiązania, które nie mogą działać na tej geometrii (elipsa lub krzywa splajn albo okrąg o zerowym rozmiarze): %1%" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Ten profil przecina się lub zawija sam na siebie w miejscu czerwonego znacznika, więc nie ogranicza jednego obszaru" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Bok" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Półoś wielka" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Półoś mała" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "Kąt musi mieścić się w zakresie od 0° do 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "Półoś wielka nie może być krótsza niż półoś mała" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "Promień narożnika musi być mniejszy niż połowa krótszego boku" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "Rowek jest zbyt szeroki dla swojego promienia — szerokość musi być mniejsza niż dwukrotność promienia" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1%: nie można spełnić tego wymiaru — szkic jest nadmiernie zdefiniowany" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Te dwie linie nie spotykają się w narożniku — wybierz dwie, które się spotykają" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "Rozmiar musi być większy od zera" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Zaokrąglenie: promień przekracza długość ramienia albo te dwie linie nie spotykają się w narożniku" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Fazowanie: odległość przekracza długość ramienia albo te dwie linie nie spotykają się w narożniku" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "Usunięte wiązania unieważnione przez zaokrąglenie/fazowanie: %1%" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Odsuń: ani elipsa, ani splajn nie mają krzywej równoległej tego samego rodzaju — wybierz linie, łuki lub okręgi" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Współczynnik skali musi być większy od zera" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Liczba kopii" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Liczba kopii musi być liczbą całkowitą równą 2 lub większą" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "Wiązania usunięte przez transformację: %1%" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Kopie szyku nie mają wiązań — solver odrzucił wszystkie powiązania" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "kliknij prawym przyciskiem lub dwukrotnie, aby zakończyć; kliknij początek, aby zamknąć" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Wydłuż: kliknij linię lub łuk, który może dosięgnąć innego elementu" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Przytnij: kliknij odcinek w miejscu, gdzie przecina inny element" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Naciśnij Enter lub ✓, aby zastosować, Esc, aby odrzucić" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Dla tego elementu nie ma jeszcze wymiaru — kliknij linię, okrąg, łuk lub dwa punkty" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Kliknij drugi punkt lub linię, do której ma zostać zmierzona odległość" # AI Translated msgid "Enter a number" @@ -26656,8 +26834,12 @@ msgid "Sketch" msgstr "Szkic" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Kliknij powierzchnię lub płaszczyznę odniesienia, a następnie wybierz narzędzie rysowania" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Wybierz płaską powierzchnię lub płaszczyznę odniesienia, na której chcesz szkicować" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Szkicuj na wybranej płaskiej powierzchni lub płaszczyźnie albo kliknij ją w następnym kroku" # AI Translated msgctxt "Design" @@ -26679,9 +26861,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Pogrubienie" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Złączenie" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -26734,17 +26917,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Pogrubienie powierzchni" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Pogrubienie powierzchni wymaga bryły powierzchniowej — najpierw utwórz ją narzędziem powierzchniowym" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Otwór" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -26759,8 +26940,9 @@ msgctxt "Design" msgid "Split" msgstr "Podziel" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Podział wymaga bryły — najpierw dodaj lub zaimportuj bryłę" # AI Translated msgid "Split the body along a picked face into two solids" @@ -26806,8 +26988,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Odsunięcie powierzchni" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Odsunięcie powierzchni wymaga bryły powierzchniowej — najpierw utwórz ją narzędziem powierzchniowym" # AI Translated msgctxt "Design" @@ -26837,8 +27020,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Szyk wzdłuż krzywej" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Szyk wzdłuż krzywej wymaga bryły i krzywej" # AI Translated msgid "Repeat the body along a picked curve" @@ -26859,8 +27043,9 @@ msgctxt "Design" msgid "Align to" msgstr "Wyrównaj do" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Wyrównanie wymaga bryły — najpierw dodaj lub zaimportuj bryłę" # AI Translated msgid "Align the body to a picked face or plane" @@ -26876,9 +27061,10 @@ msgctxt "Design" msgid "Axis" msgstr "Oś" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Układ współrzędnych" # AI Translated msgctxt "Design" @@ -26894,9 +27080,10 @@ msgstr "Zmierz" msgid "Measure between the picked points, edges or faces" msgstr "Zmierz odległość między wybranymi punktami, krawędziami lub powierzchniami" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Objętość i pole powierzchni" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -26938,12 +27125,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Usuń powierzchnię" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Kolor" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Ustaw kolor wyświetlania wybranej bryły" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Przybliż do zaznaczenia" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Dopasuj widok do zaznaczenia, zachowując kierunek widoku" # AI Translated msgctxt "Design" @@ -26982,9 +27180,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Prostokąt od narożnika" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Prostokąt od środka" # AI Translated msgctxt "Design" @@ -26996,9 +27195,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Prostokąt zaokrąglony" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Okrąg od środka" # AI Translated msgctxt "Design" @@ -27020,9 +27220,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Łuk styczny" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Łuk od środka" # AI Translated msgctxt "Design" @@ -27054,48 +27255,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Trójkąt" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Trójkąt — kliknij środek, potem wierzchołek" # AI Translated msgctxt "Design" msgid "Square" msgstr "Kwadrat" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Kwadrat — kliknij środek, potem wierzchołek" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Pięciokąt" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Pięciokąt — kliknij środek, potem wierzchołek" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Sześciokąt" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Sześciokąt — kliknij środek, potem wierzchołek" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Ośmiokąt" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Ośmiokąt — kliknij środek, potem wierzchołek" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Dwunastokąt" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Dwunastokąt — kliknij środek, potem wierzchołek" # AI Translated msgctxt "Design" @@ -27125,8 +27332,9 @@ msgctxt "Design" msgid "Text" msgstr "Tekst" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Wpisz tekst; stanie się operacją Tekst na płaszczyźnie tego szkicu, którą można później edytować" # AI Translated msgctxt "Design" @@ -27243,27 +27451,34 @@ msgstr "Kąt / odległość…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Wpisz kąt między dwiema liniami lub odległość między dwoma wybranymi elementami" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Wpisz tekst do wstawienia" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Pogrubienie" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Kursywa" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Tej czcionki nie można użyć do tekstu — wybierz inną" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Wpisz tekst, aby zobaczyć jego rozmiar" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Ta czcionka nie ma konturu dla tego tekstu" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Rozmiar: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -27361,8 +27576,9 @@ msgstr "Profil" msgid "Start new profile (for holes)" msgstr "Rozpocznij nowy profil (dla otworów)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segmenty" # AI Translated msgid "Sides" @@ -27376,20 +27592,23 @@ msgstr "Kliknij w widoku, aby rysować" msgid "Snap to grid" msgstr "Przyciągaj do siatki" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Krok siatki" # AI Translated msgid "Outer" msgstr "Zewnętrzny" +# AI Translated msgid "closed" -msgstr "" +msgstr "zamknięty" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% pkt %4%" # AI Translated msgid "XY (Top)" @@ -27427,8 +27646,9 @@ msgstr[2] "%zu zamkniętych profili" msgid "Draw a closed profile to enable" msgstr "Narysuj zamknięty profil, aby włączyć" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Wyczyść wszystko" # AI Translated msgid "Empty result" @@ -31447,6 +31667,39 @@ msgstr "" "Unikaj odkształceń\n" "Czy wiesz, że podczas drukowania filamentami podatnymi na odkształcenia, takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może zmniejszyć prawdopodobieństwo odkształceń?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Eksperymentalne) Używaj agentów drukarki zamiast serwerów druku" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "OPERACJE" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Kliknij w widoku powierzchnię lub płaszczyznę odniesienia, a następnie narzędzie szkicu" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Kliknij powierzchnię lub płaszczyznę odniesienia, a następnie narzędzie szkicu." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "Wybrano płaszczyznę %s — kliknij prawym przyciskiem, aby wyświetlić narzędzia rysowania" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Na razie nic tu nie ma — zaimportuj plik STEP lub siatkę z paska narzędzi,\n" +#~ "albo kliknij płaszczyznę odniesienia i kliknij ją prawym przyciskiem, aby rozpocząć szkic." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Kliknij powierzchnię lub płaszczyznę odniesienia, a następnie wybierz narzędzie rysowania" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 9b319ace15..affa2aced8 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2026-07-26 11:14-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: Portuguese, Brazilian\n" @@ -3275,8 +3275,8 @@ msgstr "Predefinição de processo adicional" msgid "Remove parameter" msgstr "Remover parâmetro" -msgid "to" -msgstr "para" +msgid "Range" +msgstr "Intervalo" msgid "Add height range" msgstr "Adicionar intervalo de altura" @@ -5280,9 +5280,6 @@ msgstr "nome do parâmetro" msgid "layers" msgstr "camadas" -msgid "Range" -msgstr "Intervalo" - msgid "Empty string" msgstr "String vazia" @@ -8501,8 +8498,9 @@ msgstr "A impressora conectada é %s. Ela deve corresponder à predefinição do msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Deseja sincronizar as informações da impressora e alternar automaticamente a predefinição?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Este projeto contém um modelo feito na aba Design e nenhuma outra geometria. Ative \"Recurso CAD (experimental)\" nas Preferências e reinicie para vê-lo e editá-lo; ele é mantido quando o projeto é salvo." msgid "The file does not contain any geometry data." msgstr "O arquivo não contém dados de geometria." @@ -9521,8 +9519,9 @@ msgstr "Na aba Design, desenha um conector de posicionamento como uma pequena fa msgid "Auto-close sketch loops" msgstr "Fechar laços do esboço automaticamente" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Trata extremidades do esboço a menos de 0,001 mm umas das outras como uma só junção e fecha o laço. Desativado: somente extremidades exatamente coincidentes se unem, então um laço com uma pequena folga é mostrado como aberto em vez de ser fechado para você. Salvo com cada design; aplica-se aos designs iniciados após a alteração." msgid "Pan" msgstr "Mover" @@ -9940,16 +9939,6 @@ msgstr "Mostrar predefinições não suportadas" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Exibir predefinições incompatíveis e não suportadas nas listas de impressora e filamento. Essas predefinições não podem ser selecionadas." -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Experimental) Usar agentes de impressora em vez de hosts de impressão" - -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Encaminha os trabalhos de impressão de impressoras que não são Bambu pelos agentes de plugin de impressora em vez do fluxo clássico de envio ao host de impressão.\n" -"Quando desativado, o OrcaSlicer usa o comportamento antigo do host de impressão." - msgid "Experimental Features" msgstr "Recursos Experimentais" @@ -9963,6 +9952,17 @@ msgstr "" "Tenta manter recursos pintados (cor/costura/suporte/textura difusa etc.) após alterar a malha do objeto (como cortar/recarregar do disco/simplificar/corrigir etc.)\n" "Altamente experimental! Lento e pode criar artefatos." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Usar agentes de impressora em vez de hosts de impressão" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Encaminha os trabalhos de impressão de impressoras que não são Bambu pelos agentes de plugin de impressora em vez do fluxo clássico de envio ao host de impressão.\n" +"Quando desativado, o OrcaSlicer usa o comportamento antigo do host de impressão." + msgid "Allow Abnormal Storage" msgstr "Permitir Armazenamento Anormal" @@ -10127,6 +10127,9 @@ msgstr "Sequência de filamento de outra camada" msgid "Please input layer value (>= 2)." msgstr "Por favor insira o valor da camada (>= 2)." +msgid "to" +msgstr "para" + msgid "Plate name" msgstr "Nome da placa" @@ -15794,6 +15797,14 @@ msgstr "Preenchimento simétrico no eixo Y" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Se o modelo tiver duas partes simétricas em relação ao eixo Y e você quiser que essas partes tenham texturas simétricas, clique nesta opção em uma das partes." +# AI Translated +msgid "Fill pattern tops" +msgstr "Preencher os topos do padrão" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Escolha esta opção se quiser preencher completamente os topos do padrão de preenchimento" + msgid "Infill combination - Max layer height" msgstr "Combinação de preenchimento - Altura máx da camada" @@ -21831,6 +21842,26 @@ msgstr "O filamento pode não ser compatível com as configurações atuais da m msgid "The filament model is unknown. A random filament preset will be used." msgstr "O modelo do filamento é desconhecido. Uma predefinição de filamento aleatória será usada." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Ocultar planos e eixos de referência" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Mostrar planos e eixos de referência" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Ocultar a mesa da impressora e a grade da placa" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Mostrar a mesa da impressora e a grade da placa" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Clique em um plano de referência ou em uma face plana para esboçar — Esc cancela" + # AI Translated msgid "Construction" msgstr "Construção" @@ -21856,8 +21887,9 @@ msgstr "Círculo — clique no centro e depois no raio" msgid "Arc — click start, end, then a point" msgstr "Arco — clique no início, no fim e depois em um ponto" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Rasgo — as duas extremidades da linha central e depois a largura" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -21931,8 +21963,9 @@ msgstr "Eixos globais exibidos" msgid "World axes hidden" msgstr "Eixos globais ocultos" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Vista axonométrica, ajustada" msgid "Bed shown" msgstr "Mesa mostrada" @@ -21941,34 +21974,12 @@ msgid "Bed hidden" msgstr "Mesa oculta" # AI Translated -msgid "FEATURES" -msgstr "RECURSOS" +msgid "Reference planes shown" +msgstr "Planos de referência exibidos" # AI Translated -msgid "Sketch" -msgstr "Esboço" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Plano do esboço: %s — escolha uma ferramenta" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Clique em uma face ou em um plano de referência na janela de visualização e depois em uma ferramenta de esboço" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Plano do esboço: %s.\n" -"Escolha uma ferramenta ou pressione Menu para ver a lista." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Clique em uma face ou em um plano de referência e depois em uma ferramenta de esboço." +msgid "Reference planes hidden" +msgstr "Planos de referência ocultos" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -22154,8 +22165,9 @@ msgstr "Eixo" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Eixo de referência (dois pontos, normal da face, linha central do cilindro, dois planos, ao longo da aresta)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Sistema de coordenadas" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -22219,8 +22231,9 @@ msgstr "O espelhamento precisa de um corpo — adicione ou importe um primeiro" msgid "Mate" msgstr "Posicionamento" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Montagem: alinhar dois sistemas de coordenadas (fixo, plano, de revolução, deslizante, cilíndrico)" # AI Translated msgid "Boolean (combine bodies)" @@ -22318,14 +22331,6 @@ msgstr "Criar rosca em uma superfície cilíndrica (furo interno / externa) ou e msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Selecione uma superfície cilíndrica (furo / externa) ou uma aresta circular para a rosca" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Importar STEP (sólido B-rep editável)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Importar malha (STL/OBJ) como um sólido B-rep editável" - # AI Translated msgid "Constrain selected sketch" msgstr "Restringir o esboço selecionado" @@ -22358,8 +22363,9 @@ msgstr "Clique no início e depois no fim — depois defina o comprimento exato" msgid "Polyline" msgstr "Polilinha" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Clique nos pontos; clique no primeiro ponto para fechar o laço, clique com o botão direito ou Enter para encerrar a cadeia" # AI Translated msgid "Corner rectangle" @@ -22449,8 +22455,9 @@ msgstr "Clique no centro, depois no início e depois em um ponto para o ângulo msgid "Slot" msgstr "Rasgo" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Clique nas duas extremidades da linha central e depois em um ponto para a largura" # AI Translated msgid "Arc slot" @@ -22480,8 +22487,9 @@ msgstr "Clique no centro, na extremidade do eixo maior, no ponto do eixo menor e msgid "Spline" msgstr "Spline" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Clique nos pontos de controle; clique duplo, clique com o botão direito ou Enter para terminar" # AI Translated msgid "Click to place a point" @@ -22535,15 +22543,17 @@ msgstr "Selecione uma linha como eixo de espelhamento e depois as entidades a es msgid "Trim" msgstr "Aparar" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Clique em um segmento para apará-lo até a interseção mais próxima; Esc para sair" # AI Translated msgid "Extend" msgstr "Estender" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Clique em uma linha ou arco para estendê-lo até a entidade mais próxima; Esc para sair" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -22719,13 +22729,21 @@ msgstr "Distância vertical" msgid "New Design — clear the feature tree" msgstr "Novo design — limpar a árvore de recursos" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Importar STEP (sólido B-rep editável)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Importar malha (STL/OBJ) como um sólido B-rep editável" + # AI Translated msgid "Export STEP…" msgstr "Exportar STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Mostrar a mesa da impressora e a grade da placa" +msgid "Create a new sketch" +msgstr "Criar um novo esboço" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -22739,20 +22757,25 @@ msgstr "Vista de seção — oculta parte do modelo para ver o interior. PageUp/ msgid "Flip Section — show the opposite half" msgstr "Inverter seção — mostrar a metade oposta" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Escolher como os corpos são enviados para a placa" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Enviar para a Placa" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Todos os corpos se tornam um único objeto com uma peça por corpo, mantendo suas posições relativas" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Enviar para a Placa (como corpos separados)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Cada corpo se torna um objeto próprio, posicionado separadamente" # AI Translated msgid "Width / X" @@ -22762,6 +22785,10 @@ msgstr "Largura / X" msgid "Height / Y" msgstr "Altura / Y" +# AI Translated +msgid "Sketch" +msgstr "Esboço" + # AI Translated msgid "Distance X" msgstr "Distância X" @@ -22962,8 +22989,9 @@ msgstr "Circular" msgid "Direction" msgstr "Direção" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Ângulo total (°)" # AI Translated msgid "Boolean" @@ -23347,11 +23375,13 @@ msgstr "Cilíndrico — eixos colineares; giro livre + deslizamento axial" msgid "Kind" msgstr "Tipo" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (fixo)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (móvel)" # AI Translated msgid "Angle °" @@ -23389,6 +23419,10 @@ msgstr "(sem vínculos)" msgid "Value" msgstr "Valor" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Escolha uma ferramenta ou pressione Menu para ver a lista." + # AI Translated msgid "Constraints" msgstr "Restrições" @@ -23426,6 +23460,10 @@ msgstr "Mover para baixo" msgid "Show / hide" msgstr "Mostrar / ocultar" +# AI Translated +msgid "Zoom to selection" +msgstr "Zoom na seleção" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Verificar interferência — encontrar corpos sobrepostos" @@ -23447,14 +23485,17 @@ msgstr "Corpo %d selecionado — clique com o botão direito para ver o que se a msgid "Variables" msgstr "Variáveis" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Adicionar variável" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Editar variável" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Excluir variável" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -23473,9 +23514,10 @@ msgstr "Esboço atualizado" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Esboço criado (%zu cotas motrizes) — selecione-o e clique com o botão direito para extrudar" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Comprimento %.2f mm, ângulo %.1f°" # AI Translated msgid "(locked)" @@ -23497,6 +23539,10 @@ msgstr "Região selecionada — clique com o botão direito para extrudar ou cli msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Esboço selecionado — clique com o botão direito para extrudar ou clique duas vezes para editar" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Essa face não é plana — clique em uma face plana ou em um plano de referência" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -23525,30 +23571,29 @@ msgstr "Corpo %d: face %d selecionada — clique com o botão direito para empur msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Face %d selecionada — clique com o botão direito para empurrá-la/puxá-la, ou clique novamente para o corpo inteiro" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Corpo %d: %zu aresta selecionada — Shift+clique adiciona ou remove uma, Filete/Chanfro arredonda ou chanfra todas" +msgstr[1] "Corpo %d: %zu arestas selecionadas — Shift+clique adiciona ou remove uma, Filete/Chanfro arredonda ou chanfra todas" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "%zu aresta selecionada — Shift+clique adiciona ou remove uma, Filete/Chanfro arredonda ou chanfra todas" +msgstr[1] "%zu arestas selecionadas — Shift+clique adiciona ou remove uma, Filete/Chanfro arredonda ou chanfra todas" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "Plano %s selecionado — clique com o botão direito para ver as ferramentas de desenho" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Corpo %d: aresta %d selecionada — Shift+clique para adicionar arestas, ou clique novamente para o corpo inteiro" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Aresta %d selecionada — Shift+clique para adicionar arestas, ou clique novamente para o corpo inteiro" # AI Translated #, c-format, boost-format @@ -23573,8 +23618,9 @@ msgstr "Ferramenta encerrada" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Esboço mantido — Confirmar para efetivá-lo, Cancelar para descartá-lo" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Selecione algo para excluir" # AI Translated msgid "✗ Conflicting constraints" @@ -23606,17 +23652,21 @@ msgstr "Editando: Esboço %d · N = olhar normal ao plano · Confirmar o msgid "OK — %zu triangles" msgstr "OK — %zu triângulos" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Edite o texto — Enter aplica, Esc o mantém como estava" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Digite o texto — ele aparece na vista enquanto você digita; Enter insere, Esc cancela" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Texto inalterado" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Texto cancelado" # AI Translated msgid "Import SVG" @@ -23642,9 +23692,10 @@ msgstr "Lendo STEP…" msgid "No solids found in STEP" msgstr "Nenhum sólido encontrado no STEP" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "Falha ao importar STEP: %s" # AI Translated msgid "Rebuilding model…" @@ -23669,9 +23720,10 @@ msgstr "Arquivos de malha (*.stl;*.obj)|*.stl;*.obj|Todos os arquivos|*.*" msgid "Could not read the STL file" msgstr "Não foi possível ler o arquivo STL" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Não foi possível ler o arquivo OBJ: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -23696,20 +23748,23 @@ msgstr "" msgid "Large mesh" msgstr "Malha grande" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Falha na conversão da malha: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "A conversão da malha não produziu geometria" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Malha" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Falha ao importar a malha: %s" # AI Translated #, c-format, boost-format @@ -23738,17 +23793,19 @@ msgstr " — arraste para colocar/dimensionar e depois confirme" msgid "Insert canceled" msgstr "Inserção cancelada" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Arraste um canto para dimensionar, o centro para mover — Enter ou ✓ ao terminar, Esc para descartar" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Esboço adicionado (plano: %s) — selecione-o e clique com o botão direito para extrudar" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Não foi possível reconstruir o modelo: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -23820,18 +23877,21 @@ msgstr "Selecione primeiro um esboço com uma linha aberta" msgid "Add at least one face to delete first" msgstr "Adicione primeiro pelo menos uma face a excluir" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "O posicionamento precisa de dois sistemas de coordenadas — crie-os primeiro" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Posicionamento: A e B devem ser sistemas de coordenadas diferentes" # AI Translated msgid "Mate rejected" msgstr "Posicionamento rejeitado" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "A verificação de interferência precisa de pelo menos dois corpos" # AI Translated msgid "No interference found" @@ -23842,36 +23902,43 @@ msgstr "Nenhuma interferência encontrada" msgid "Body %d" msgstr "Corpo %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu par de corpos sobrepostos: %s" +msgstr[1] "%zu pares de corpos sobrepostos: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Selecione um corpo para medi-lo" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Não foi possível medir este corpo" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: corpo de superfície, área %.2f mm², sem volume — espesse-o para obter um" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: volume %.2f mm³, área %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "O padrão precisa de um corpo sólido — adicione ou importe um primeiro" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "A operação booleana precisa de dois corpos — adicione ou importe um segundo" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -23886,35 +23953,45 @@ msgstr "Face selecionada (Corpo %d)" msgid "Picked face" msgstr "Face selecionada" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "não foi possível unir a nova forma ao corpo" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "não foi possível subtrair a nova forma do corpo" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "não foi possível intersectar as formas" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "nada no histórico produz um sólido ainda" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "o perfil do esboço não é um laço fechado válido" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "a ferramenta não toca o corpo" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "uma expressão usa uma variável que não existe" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "uma expressão divide por zero" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "duas variáveis são definidas uma em função da outra" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "uma operação geométrica falhou" # AI Translated #, c-format, boost-format @@ -23953,15 +24030,17 @@ msgstr "Cota — clique no segundo ponto" msgid "Line — click the start point" msgstr "Linha — clique no ponto inicial" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Linha — clique no ponto final; depois o comprimento e o ângulo podem ser digitados" # AI Translated msgid "Polyline — click the first point" msgstr "Polilinha — clique no primeiro ponto" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Polilinha — clique no próximo ponto · clique no ponto inicial para fechá-la · clique com o botão direito, clique duplo ou Enter para encerrar a cadeia" # AI Translated msgid "Rectangle — click one corner" @@ -24007,8 +24086,9 @@ msgstr "Retângulo arredondado — clique para definir o raio do canto" msgid "Circle — click the center" msgstr "Círculo — clique no centro" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Círculo — clique para definir o raio; depois ele pode ser digitado" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -24134,18 +24214,21 @@ msgstr "Arco elíptico — clique onde o arco termina" msgid "Spline — click the first control point" msgstr "Spline — clique no primeiro ponto de controle" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline — clique no próximo ponto de controle · clique com o botão direito, clique duplo ou Enter para terminar a curva" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Ponto — clique para colocar um; a ferramenta continua ativa para mais" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Aparar — clique em um segmento onde ele cruza outra entidade · Esc para sair" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Estender — clique em uma linha ou arco para prolongá-lo até a entidade mais próxima · Esc para sair" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -24155,8 +24238,9 @@ msgstr "Filete — clique na primeira de duas linhas que se encontram" msgid "Fillet — click the second line" msgstr "Filete — clique na segunda linha" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Filete — arraste a seta ou clique no número para digitar o raio · Enter aplica · Esc cancela" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -24166,63 +24250,74 @@ msgstr "Chanfro — clique na primeira de duas linhas que se encontram" msgid "Chamfer — click the second line" msgstr "Chanfro — clique na segunda linha" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Chanfro — arraste a seta ou clique no número para digitar o recuo · Enter aplica · Esc cancela" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Deslocamento — clique em uma curva; todo o contorno dela é deslocado" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Deslocamento — arraste a seta para qualquer lado ou clique no número para digitar a distância · Enter aplica · Esc cancela" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Espelhar — primeiro clique na LINHA em relação à qual espelhar (uma linha de construção serve)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Espelhar — eixo definido · agora clique nas entidades a espelhar · Esc cancela" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Espelhar — eixo definido · %d a espelhar · clique em outra para adicioná-la ou removê-la · Enter aplica" # AI Translated msgid "Move — click the entities to move" msgstr "Mover — clique nas entidades a mover" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Mover — arraste a alça ou clique no número para digitar a distância · Enter aplica" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Rotacionar — clique nas entidades a rotacionar" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Rotacionar — arraste a alça ou clique no número para digitar o ângulo · Enter aplica" # AI Translated msgid "Scale — click the entities to scale" msgstr "Dimensionar — clique nas entidades a dimensionar" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Dimensionar — arraste a alça ou clique no número para digitar o fator · Enter aplica" # AI Translated msgid "Array — click the entities to repeat" msgstr "Matriz — clique nas entidades a repetir" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Matriz — arraste a alça para definir o passo, clique na quantidade para digitá-la · Enter aplica" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Matriz polar — clique nas entidades a repetir" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Matriz polar — arraste a alça para definir o ângulo total, clique na quantidade para digitá-la · Enter aplica" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Arraste um canto para dimensionar, o centro para mover · Enter ou ✓ ao terminar, Esc para descartar" # AI Translated msgid " · Esc goes back to Select" @@ -24232,62 +24327,77 @@ msgstr " · Esc volta para Selecionar" msgid " · click a constraint badge to remove it" msgstr " · clique no ícone de uma restrição para removê-la" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — corpo sólido" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — corpo de superfície" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Face plana %d de %s" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Face cilíndrica %d de %s" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Face %d de %s" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu aresta de %s" +msgstr[1] "%zu arestas de %s" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Aresta reta %d de %s" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Aresta circular %d de %s" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Vértice de %s" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Perfil de esboço" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Esboço — nada selecionado" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Linha de esboço" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Curva de esboço" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Ponto de esboço" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d entidades de esboço" msgid "select something first" msgstr "selecione algo antes" @@ -24349,8 +24459,9 @@ msgstr "Plano adicionado — selecione-o como plano de esboço" msgid "Axis added" msgstr "Eixo adicionado" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Sistema de coordenadas adicionado" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -24367,10 +24478,10 @@ msgstr "A inclinação precisa de uma face selecionada — clique primeiro em um # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Nada ainda — importe um STEP ou uma malha pela barra de ferramentas,\n" -"ou clique em um plano de referência e clique nele com o botão direito para iniciar um esboço." +"ou pressione Esboço e clique em um plano de referência para iniciar um esboço." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -24380,9 +24491,10 @@ msgstr "Nenhum sólido ainda — selecione um esboço e clique nele com o botão msgid "Could not restore the CAD model from this project" msgstr "Não foi possível restaurar o modelo CAD deste projeto" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Não foi possível restaurar o modelo CAD: %s" # AI Translated #, c-format @@ -24405,17 +24517,35 @@ msgstr "Vista de seção — mostrando a metade superior" msgid "Section view — showing the lower half" msgstr "Vista de seção — mostrando a metade inferior" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Procurando as faces do recurso…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Selecione primeiro um corpo — clique nele na janela de visualização ou na lista Corpos" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "O modelo está sendo reconstruído — dê zoom novamente quando terminar" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s não tem nada visível para dar zoom" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Esse corpo ainda não tem malha de exibição — recalcule primeiro" +# AI Translated +msgid "Select something to zoom to" +msgstr "Selecione algo para dar zoom" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Termine ou cancele primeiro o que está aberto" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Selecione primeiro um corpo — clique nele na janela de visualização ou na lista Corpos" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Arraste as setas para mover, os anéis para rotacionar — depois confirme (Esc cancela)" @@ -24441,12 +24571,10 @@ msgstr "Clique em uma face do sólido e depois pressione F" msgid "Placed on face — body laid flat on the bed" msgstr "Apoiado na face — corpo deitado na mesa" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Edição rejeitada: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -24465,9 +24593,10 @@ msgstr "Este corpo não tem recurso a excluir — use Novo design para recomeça msgid "feature %d" msgstr "recurso %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "Recurso excluído: %s, aquele a partir do qual este corpo foi criado — Ctrl+Z o restaura" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -24859,12 +24988,14 @@ msgstr "Arquivos STEP (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP exportado" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "Falha ao exportar STEP: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Enviar para a Placa (como corpos separados) — enviar cada corpo para Preparar como um objeto próprio" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -24878,19 +25009,36 @@ msgstr "Nada para enviar à placa — adicione um recurso primeiro" msgid "All bodies hidden — show one before committing" msgstr "Todos os corpos estão ocultos — mostre um antes de enviar à placa" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu aresta" +msgstr[1] "%zu arestas" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Linha central E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Linha E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Plano do esboço: %s — escolha uma ferramenta" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Plano do esboço: %s.\n" +"Escolha uma ferramenta ou pressione Menu para ver a lista." # AI Translated msgid "Plane ready" @@ -24900,8 +25048,9 @@ msgstr "Plano pronto" msgid "Axis ready" msgstr "Eixo pronto" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Sistema de coordenadas pronto" # AI Translated msgid "Helix ready" @@ -24919,9 +25068,10 @@ msgstr "Esboço pronto" msgid "Mate ready" msgstr "Posicionamento pronto" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Inválido: %s" # AI Translated #, c-format @@ -25005,110 +25155,139 @@ msgstr "Editar variável" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "Não foi possível remover a variável '%s' (provavelmente ainda referenciada pela expressão de um recurso): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" não é um valor que uma expressão possa controlar" # AI Translated msgid "No binding for that field" msgstr "Nenhum vínculo para esse campo" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "O valor deve ser maior que zero" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "O valor não deve ser negativo (zero significa coincidente)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Essa cota não pode ser satisfeita — o esboço está superrestrito" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "Restrições ignoradas por não poderem atuar sobre esta geometria (uma elipse ou curva spline, ou um círculo de tamanho zero): %1%" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Este perfil se cruza ou se dobra sobre si mesmo na marca vermelha, então não delimita uma única região" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Lado" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Semieixo maior" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Semieixo menor" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "O ângulo deve estar entre 0° e 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "O semieixo maior não pode ser mais curto que o semieixo menor" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "O raio do canto deve ser menor que a metade do lado mais curto" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "O rasgo é largo demais para o seu raio — a largura deve ser menor que o dobro do raio" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1%: impossível de satisfazer — o esboço está superrestrito" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Essas duas linhas não se encontram em um canto — selecione duas linhas que se encontrem" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "O tamanho deve ser maior que zero" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Filete: o raio excede o comprimento de um dos lados, ou as duas linhas não se encontram em um canto" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Chanfro: a distância excede o comprimento de um dos lados, ou as duas linhas não se encontram em um canto" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "Restrições invalidadas pelo filete/chanfro e removidas: %1%" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Deslocamento: uma elipse ou uma spline não tem uma paralela do mesmo tipo — selecione linhas, arcos ou círculos" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "O fator de escala deve ser maior que zero" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Cópias" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "O número de cópias deve ser um número inteiro, 2 ou mais" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "Restrições liberadas pela transformação: %1%" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "As cópias da matriz não estão restritas — o solucionador recusou todas as vinculações" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "clique com o botão direito ou clique duplo para terminar, clique no início para fechar" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Estender: clique em uma linha ou um arco que possa alcançar outra entidade" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Aparar: clique em um segmento onde ele cruza outra entidade" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Pressione Enter ou ✓ para aplicar, Esc para descartar" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Ainda não há cota para essa entidade — clique em uma linha, um círculo, um arco ou dois pontos" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Clique em um segundo ponto, ou em uma linha até a qual medir a distância" # AI Translated msgid "Enter a number" @@ -25144,8 +25323,12 @@ msgid "Sketch" msgstr "Esboço" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Clique em uma face ou em um plano de referência e depois escolha uma ferramenta de desenho" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Selecione uma face plana ou um plano de referência para esboçar" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Esboçar na face plana ou no plano selecionado, ou clicar em um deles depois" # AI Translated msgctxt "Design" @@ -25167,9 +25350,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Espessar" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Unir" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -25222,17 +25406,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Espessar superfície" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "O espessamento de superfície precisa de um corpo de superfície — crie um primeiro com uma ferramenta de superfície" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Furo" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -25247,8 +25429,9 @@ msgctxt "Design" msgid "Split" msgstr "Dividir" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "A divisão precisa de um corpo sólido — adicione ou importe um primeiro" # AI Translated msgid "Split the body along a picked face into two solids" @@ -25294,8 +25477,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Deslocamento de superfície" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "O deslocamento de superfície precisa de um corpo de superfície — crie um primeiro com uma ferramenta de superfície" # AI Translated msgctxt "Design" @@ -25325,8 +25509,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Padrão em curva" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "O padrão em curva precisa de um corpo e de uma curva" # AI Translated msgid "Repeat the body along a picked curve" @@ -25347,8 +25532,9 @@ msgctxt "Design" msgid "Align to" msgstr "Alinhar a" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "O alinhamento precisa de um corpo — adicione ou importe um primeiro" # AI Translated msgid "Align the body to a picked face or plane" @@ -25364,9 +25550,10 @@ msgctxt "Design" msgid "Axis" msgstr "Eixo" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Sistema de coordenadas" # AI Translated msgctxt "Design" @@ -25382,9 +25569,10 @@ msgstr "Medir" msgid "Measure between the picked points, edges or faces" msgstr "Medir entre os pontos, arestas ou faces selecionados" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Volume e área" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -25425,12 +25613,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Excluir face" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Cor" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Definir a cor de exibição do corpo selecionado" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Zoom na seleção" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Enquadrar a seleção na vista, mantendo a direção de visualização" # AI Translated msgctxt "Design" @@ -25469,9 +25668,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Retângulo por cantos" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Retângulo pelo centro" # AI Translated msgctxt "Design" @@ -25483,9 +25683,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Retângulo arredondado" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Círculo pelo centro" # AI Translated msgctxt "Design" @@ -25507,9 +25708,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Arco tangente" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Arco pelo centro" # AI Translated msgctxt "Design" @@ -25541,48 +25743,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Triângulo" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Triângulo — clique no centro e depois em um vértice" # AI Translated msgctxt "Design" msgid "Square" msgstr "Quadrado" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Quadrado — clique no centro e depois em um vértice" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Pentágono" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Pentágono — clique no centro e depois em um vértice" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Hexágono" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Hexágono — clique no centro e depois em um vértice" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Octógono" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Octógono — clique no centro e depois em um vértice" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Dodecágono" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Dodecágono — clique no centro e depois em um vértice" # AI Translated msgctxt "Design" @@ -25612,8 +25820,9 @@ msgctxt "Design" msgid "Text" msgstr "Texto" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Digite um texto; ele se torna um recurso Texto no plano deste esboço, editável depois" # AI Translated msgctxt "Design" @@ -25730,27 +25939,34 @@ msgstr "Ângulo / distância…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Digitar o ângulo entre duas linhas ou a distância entre as duas seleções" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Digite o texto a inserir" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Negrito" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Itálico" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Esta fonte não pode ser usada para texto — escolha outra" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Digite o texto para ver seu tamanho" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Esta fonte não tem contorno para este texto" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Tamanho: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -25848,8 +26064,9 @@ msgstr "Perfil" msgid "Start new profile (for holes)" msgstr "Iniciar novo perfil (para furos)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segmentos" # AI Translated msgid "Sides" @@ -25863,20 +26080,23 @@ msgstr "Clique na tela para desenhar" msgid "Snap to grid" msgstr "Ajustar à grade" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Passo da grade" # AI Translated msgid "Outer" msgstr "Externo" +# AI Translated msgid "closed" -msgstr "" +msgstr "fechado" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% pontos %4%" # AI Translated msgid "XY (Top)" @@ -25913,8 +26133,9 @@ msgstr[1] "%zu perfis fechados" msgid "Draw a closed profile to enable" msgstr "Desenhe um perfil fechado para ativar" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Limpar tudo" # AI Translated msgid "Empty result" @@ -30018,6 +30239,38 @@ msgstr "" "Evitar empenamento\n" "Você sabia que ao imprimir materiais propensos ao empenamento como ABS, aumentar adequadamente a temperatura da mesa aquecida pode reduzir a probabilidade de empenamento?" +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Experimental) Usar agentes de impressora em vez de hosts de impressão" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "RECURSOS" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Clique em uma face ou em um plano de referência na janela de visualização e depois em uma ferramenta de esboço" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Clique em uma face ou em um plano de referência e depois em uma ferramenta de esboço." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "Plano %s selecionado — clique com o botão direito para ver as ferramentas de desenho" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Nada ainda — importe um STEP ou uma malha pela barra de ferramentas,\n" +#~ "ou clique em um plano de referência e clique nele com o botão direito para iniciar um esboço." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Clique em uma face ou em um plano de referência e depois escolha uma ferramenta de desenho" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index d1885ca0c3..f9225f8bc1 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer V2.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2026-02-25 13:38+0300\n" "Last-Translator: Felix14_v2\n" "Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg \n" @@ -3391,8 +3391,8 @@ msgstr "Доп. профиль настроек" msgid "Remove parameter" msgstr "Удалить параметр" -msgid "to" -msgstr "до" +msgid "Range" +msgstr "Диапазон" msgid "Add height range" msgstr "Добавление диапазона высот слоёв" @@ -5458,9 +5458,6 @@ msgstr "имя параметра" msgid "layers" msgstr "слой(-я)" -msgid "Range" -msgstr "Диапазон" - # Подставляется в "По умолчанию" в подсказке к параметрам. Не уверен, нужно ли здесь "строка", может просто "пусто"? msgid "Empty string" msgstr "пустая строка" @@ -8841,8 +8838,9 @@ msgstr "Подключённый принтер – %s. Для печати он msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Синхронизировать информацию о принтере и переключить профиль?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Этот проект содержит модель, созданную на вкладке «Моделирование», и никакой другой геометрии. Включите «CAD-моделирование (экспериментально)» в настройках и перезапустите программу, чтобы увидеть и изменить её; при сохранении проекта она не теряется." msgid "The file does not contain any geometry data." msgstr "Файл не содержит никаких геометрических данных." @@ -9893,8 +9891,9 @@ msgstr "На вкладке «Моделирование» отображать msgid "Auto-close sketch loops" msgstr "Автозамыкание контуров эскиза" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Считать конечные точки эскиза, находящиеся в пределах 0,001 мм друг от друга, одной точкой и замыкать контур. Если выключено, соединяются только точно совпадающие конечные точки, поэтому контур с крошечным зазором отображается незамкнутым, а не замыкается автоматически. Параметр сохраняется вместе с каждой моделью и действует для моделей, начатых после его изменения." msgid "Pan" msgstr "Смещение" @@ -10321,18 +10320,6 @@ msgstr "" "\n" "Примечание: профили остаются недоступными для выбора." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Экспериментально) Использовать агентов принтера вместо хостов печати" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Отправлять задания печати для принтеров, отличных от Bambu, через агентов плагинов принтера вместо классической загрузки на хост печати.\n" -"Если отключено, OrcaSlicer использует прежнее поведение хоста печати." - msgid "Experimental Features" msgstr "Экспериментальные настройки" @@ -10347,6 +10334,18 @@ msgstr "" "\n" "Внимание: функция экспериментальна! Возможны падение производительности и артефакты работы." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Использовать агентов принтера вместо хостов печати" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Отправлять задания печати для принтеров, отличных от Bambu, через агентов плагинов принтера вместо классической загрузки на хост печати.\n" +"Если отключено, OrcaSlicer использует прежнее поведение хоста печати." + msgid "Allow Abnormal Storage" msgstr "Игнорировать неисправность хранилища" @@ -10515,6 +10514,9 @@ msgstr "Очерёдность материалов на других слоях msgid "Please input layer value (>= 2)." msgstr "Пожалуйста, введите значение слоя (>= 2)." +msgid "to" +msgstr "до" + msgid "Plate name" msgstr "Имя стола" @@ -16569,6 +16571,14 @@ msgstr "Отразить шаблон" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Если модель состоит из двух симметричных частей, у одной из них можно отразить шаблон заполнения, чтобы модель имела симметричную текстуру поверхности." +# AI Translated +msgid "Fill pattern tops" +msgstr "Заполнять верх шаблона" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Включите, чтобы полностью заполнять верхние части шаблона заполнения" + msgid "Infill combination - Max layer height" msgstr "Предел высоты объединённого слоя" @@ -23066,6 +23076,26 @@ msgstr "Материал может быть несовместим с теку msgid "The filament model is unknown. A random filament preset will be used." msgstr "Модель материала неизвестна. Будет использован случайный профиль материала." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Скрыть опорные плоскости и оси" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Показать опорные плоскости и оси" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Скрыть стол принтера и его сетку" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Показать стол принтера и его сетку" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Щёлкните опорную плоскость или плоскую грань, чтобы создать на ней эскиз (Esc — отмена)" + # AI Translated msgid "Construction" msgstr "Вспомогательная" @@ -23091,8 +23121,9 @@ msgstr "Окружность — щёлкните центр, затем рад msgid "Arc — click start, end, then a point" msgstr "Дуга — щёлкните начало, конец, затем точку" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Паз — два конца осевой линии, затем ширина" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -23166,8 +23197,9 @@ msgstr "Глобальные оси показаны" msgid "World axes hidden" msgstr "Глобальные оси скрыты" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Аксонометрия, вписано в окно" # AI Translated msgid "Bed shown" @@ -23178,34 +23210,12 @@ msgid "Bed hidden" msgstr "Стол скрыт" # AI Translated -msgid "FEATURES" -msgstr "ЭЛЕМЕНТЫ" +msgid "Reference planes shown" +msgstr "Опорные плоскости показаны" # AI Translated -msgid "Sketch" -msgstr "Эскиз" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Плоскость эскиза: %s — выберите инструмент" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Щёлкните грань или опорную плоскость в рабочем пространстве, затем выберите инструмент эскиза" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Плоскость эскиза: %s.\n" -"Выберите инструмент или нажмите Menu, чтобы открыть список." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Щёлкните грань или опорную плоскость, затем выберите инструмент эскиза." +msgid "Reference planes hidden" +msgstr "Опорные плоскости скрыты" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -23391,8 +23401,9 @@ msgstr "Ось" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Опорная ось (две точки, нормаль грани, ось цилиндра, две плоскости, вдоль ребра)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Система координат" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -23456,8 +23467,9 @@ msgstr "Для отражения нужно тело — сначала доб msgid "Mate" msgstr "Сопряжение" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Сборка: совмещение двух систем координат (жёсткое, плоское, вращательное, поступательное, цилиндрическое)" # AI Translated msgid "Boolean (combine bodies)" @@ -23556,14 +23568,6 @@ msgstr "Нарезать резьбу на цилиндрической пове msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Выберите цилиндрическую поверхность (отверстие / наружную) или круговое ребро для резьбы" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Импорт STEP (редактируемое твёрдое тело B-rep)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Импорт сетки (STL/OBJ) как редактируемого твёрдого тела B-rep" - # AI Translated msgid "Constrain selected sketch" msgstr "Наложить ограничения на выбранный эскиз" @@ -23596,8 +23600,9 @@ msgstr "Щёлкните начало, затем конец — затем за msgid "Polyline" msgstr "Ломаная" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Щёлкайте точки; щелчок по первой точке замыкает контур, ПКМ или Enter завершает цепочку" # AI Translated msgid "Corner rectangle" @@ -23687,8 +23692,9 @@ msgstr "Щёлкните центр, затем начало, затем точ msgid "Slot" msgstr "Паз" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Щёлкните два конца осевой линии, затем точку для ширины" # AI Translated msgid "Arc slot" @@ -23718,8 +23724,9 @@ msgstr "Щёлкните центр, конец большой оси, точк msgid "Spline" msgstr "Сплайн" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Щёлкайте контрольные точки; двойной щелчок, ПКМ или Enter — завершить" # AI Translated msgid "Click to place a point" @@ -23773,15 +23780,17 @@ msgstr "Выберите линию оси отражения, затем объ msgid "Trim" msgstr "Обрезка" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Щёлкните сегмент, чтобы обрезать его до ближайшего пересечения; Esc — выход" # AI Translated msgid "Extend" msgstr "Удлинение" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Щёлкните линию или дугу, чтобы удлинить её до ближайшего объекта; Esc — выход" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23965,13 +23974,21 @@ msgstr "Расстояние по вертикали" msgid "New Design — clear the feature tree" msgstr "Новая модель — очистить дерево элементов" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Импорт STEP (редактируемое твёрдое тело B-rep)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Импорт сетки (STL/OBJ) как редактируемого твёрдого тела B-rep" + # AI Translated msgid "Export STEP…" msgstr "Экспорт в STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Показать стол принтера и его сетку" +msgid "Create a new sketch" +msgstr "Создать новый эскиз" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23985,20 +24002,25 @@ msgstr "Сечение — скрыть часть модели, чтобы за msgid "Flip Section — show the opposite half" msgstr "Перевернуть сечение — показать противоположную половину" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Выбрать, как передавать тела на стол" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Передать на стол" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Все тела становятся одной моделью, где каждое тело — отдельная часть; их взаимное расположение сохраняется" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Передать на стол (отдельными телами)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Каждое тело становится самостоятельной моделью и размещается отдельно" # AI Translated msgid "Width / X" @@ -24008,6 +24030,10 @@ msgstr "Ширина / X" msgid "Height / Y" msgstr "Высота / Y" +# AI Translated +msgid "Sketch" +msgstr "Эскиз" + # AI Translated msgid "Distance X" msgstr "Расстояние X" @@ -24211,8 +24237,9 @@ msgstr "Круговой" msgid "Direction" msgstr "Направление" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Общий угол (°)" # AI Translated msgid "Boolean" @@ -24596,11 +24623,13 @@ msgstr "Цилиндрическое — оси коллинеарны; своб msgid "Kind" msgstr "Тип" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (неподвижная)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (подвижная)" # AI Translated msgid "Angle °" @@ -24638,6 +24667,10 @@ msgstr "(нет привязок)" msgid "Value" msgstr "Значение" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Выберите инструмент или нажмите Menu, чтобы открыть список." + # AI Translated msgid "Constraints" msgstr "Ограничения" @@ -24676,6 +24709,10 @@ msgstr "Переместить вниз" msgid "Show / hide" msgstr "Показать / скрыть" +# AI Translated +msgid "Zoom to selection" +msgstr "Приблизить к выбранному" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Проверка интерференции — найти перекрывающиеся тела" @@ -24697,14 +24734,17 @@ msgstr "Выбрано тело %d — ПКМ для доступных дейс msgid "Variables" msgstr "Переменные" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Добавить переменную" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Изменить переменную" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Удалить переменную" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24723,9 +24763,10 @@ msgstr "Эскиз обновлён" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Эскиз создан (управляющих размеров: %zu) — выберите его, затем ПКМ для выдавливания" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Длина %.2f мм, угол %.1f°" # AI Translated msgid "(locked)" @@ -24747,6 +24788,10 @@ msgstr "Область выбрана — ПКМ для выдавливания msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Эскиз выбран — ПКМ для выдавливания или двойной щелчок для изменения" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Эта грань не плоская — щёлкните плоскую грань или опорную плоскость" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24775,32 +24820,31 @@ msgstr "Тело %d: выбрана грань %d — ПКМ, чтобы выт msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Выбрана грань %d — ПКМ, чтобы вытянуть/вдавить её, или щёлкните ещё раз, чтобы выбрать всё тело" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Тело %d: выбрано %zu ребро — Shift+щелчок добавляет или убирает ребро, скругление/фаска применяется ко всем" +msgstr[1] "Тело %d: выбрано %zu ребра — Shift+щелчок добавляет или убирает ребро, скругление/фаска применяется ко всем" +msgstr[2] "Тело %d: выбрано %zu рёбер — Shift+щелчок добавляет или убирает ребро, скругление/фаска применяется ко всем" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "Выбрано %zu ребро — Shift+щелчок добавляет или убирает ребро, скругление/фаска применяется ко всем" +msgstr[1] "Выбрано %zu ребра — Shift+щелчок добавляет или убирает ребро, скругление/фаска применяется ко всем" +msgstr[2] "Выбрано %zu рёбер — Shift+щелчок добавляет или убирает ребро, скругление/фаска применяется ко всем" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "Выбрана плоскость %s — ПКМ для инструментов рисования" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Тело %d: выбрано ребро %d — Shift+щелчок, чтобы добавить рёбра, или щёлкните ещё раз, чтобы выбрать всё тело" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Выбрано ребро %d — Shift+щелчок, чтобы добавить рёбра, или щёлкните ещё раз, чтобы выбрать всё тело" # AI Translated #, c-format, boost-format @@ -24825,8 +24869,9 @@ msgstr "Инструмент закрыт" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Эскиз сохранён — подтвердите, чтобы зафиксировать его, или отмените, чтобы удалить" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Выберите что-нибудь для удаления" # AI Translated msgid "✗ Conflicting constraints" @@ -24859,17 +24904,21 @@ msgstr "Изменение: эскиз %d · N — вид по нормал msgid "OK — %zu triangles" msgstr "Ок — треугольников: %zu" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Измените текст: Enter — применить, Esc — оставить без изменений" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Введите текст — он отображается в окне по мере ввода; Enter — вставить, Esc — отмена" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Текст не изменён" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Ввод текста отменён" # AI Translated msgid "Import SVG" @@ -24895,9 +24944,10 @@ msgstr "Чтение STEP…" msgid "No solids found in STEP" msgstr "В STEP не найдено твёрдых тел" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "Ошибка импорта STEP: %s" # AI Translated msgid "Rebuilding model…" @@ -24923,9 +24973,10 @@ msgstr "Файлы сеток (*.stl;*.obj)|*.stl;*.obj|Все файлы|*.*" msgid "Could not read the STL file" msgstr "Не удалось прочитать файл STL" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Не удалось прочитать файл OBJ: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -24950,20 +25001,23 @@ msgstr "" msgid "Large mesh" msgstr "Большая сетка" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Ошибка преобразования сетки: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "Преобразование сетки не дало геометрии" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Сетка" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Ошибка импорта сетки: %s" # AI Translated #, c-format, boost-format @@ -24992,17 +25046,19 @@ msgstr " — перетащите для размещения/изменения msgid "Insert canceled" msgstr "Вставка отменена" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Перетащите угол для масштабирования, центр для перемещения — Enter или ✓ по завершении, Esc — отменить" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Эскиз добавлен (плоскость: %s) — выберите его, затем ПКМ для выдавливания" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Не удалось перестроить модель: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -25074,18 +25130,21 @@ msgstr "Сначала выберите эскиз с незамкнутой л msgid "Add at least one face to delete first" msgstr "Сначала добавьте хотя бы одну грань для удаления" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Для сопряжения нужны две системы координат — сначала создайте их" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Сопряжение: A и B должны быть разными системами координат" # AI Translated msgid "Mate rejected" msgstr "Сопряжение отклонено" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Для проверки интерференции нужны как минимум два тела" # AI Translated msgid "No interference found" @@ -25096,37 +25155,44 @@ msgstr "Интерференция не обнаружена" msgid "Body %d" msgstr "Тело %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f мм³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%zu пара с перекрытием: %s" +msgstr[1] "%zu пары с перекрытием: %s" +msgstr[2] "%zu пар с перекрытием: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Выберите тело, чтобы измерить его" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Не удалось измерить это тело" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: поверхностное тело, площадь %.2f мм², объёма нет — утолщите его, чтобы получить объём" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: объём %.2f мм³, площадь %.2f мм²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Для массива нужно твёрдое тело — сначала добавьте или импортируйте его" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Для булевой операции нужны два тела — добавьте или импортируйте второе" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -25141,35 +25207,45 @@ msgstr "Выбранная грань (тело %d)" msgid "Picked face" msgstr "Выбранная грань" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "новую форму не удалось объединить с телом" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "новую форму не удалось вырезать из тела" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "не удалось найти пересечение форм" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "в истории пока нет элементов, создающих твёрдое тело" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "профиль эскиза не является корректным замкнутым контуром" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "инструмент не касается тела" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "в выражении используется несуществующая переменная" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "в выражении деление на ноль" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "две переменные определены друг через друга" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "ошибка геометрической операции" # AI Translated #, c-format, boost-format @@ -25209,15 +25285,17 @@ msgstr "Размер — щёлкните вторую точку" msgid "Line — click the start point" msgstr "Линия — щёлкните начальную точку" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Линия — щёлкните конечную точку; затем можно ввести её длину и угол" # AI Translated msgid "Polyline — click the first point" msgstr "Ломаная — щёлкните первую точку" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Ломаная — щёлкните следующую точку · щёлкните начальную точку, чтобы замкнуть её · ПКМ, двойной щелчок или Enter — завершить цепочку" # AI Translated msgid "Rectangle — click one corner" @@ -25263,8 +25341,9 @@ msgstr "Скруглённый прямоугольник — щёлкните, msgid "Circle — click the center" msgstr "Окружность — щёлкните центр" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Окружность — щёлкните, чтобы задать радиус; затем его можно ввести" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -25390,18 +25469,21 @@ msgstr "Эллиптическая дуга — щёлкните конец ду msgid "Spline — click the first control point" msgstr "Сплайн — щёлкните первую контрольную точку" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Сплайн — щёлкните следующую контрольную точку · ПКМ, двойной щелчок или Enter — завершить кривую" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Точка — щёлкните, чтобы разместить; инструмент остаётся активным для следующих точек" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Обрезка — щёлкните сегмент в месте пересечения с другим объектом · Esc — выход" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Удлинение — щёлкните линию или дугу, чтобы продлить её до ближайшего объекта · Esc — выход" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -25411,8 +25493,9 @@ msgstr "Скругление — щёлкните первую из двух с msgid "Fillet — click the second line" msgstr "Скругление — щёлкните вторую линию" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Скругление — перетащите стрелку или щёлкните число, чтобы ввести радиус · Enter — применить · Esc — отмена" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -25422,63 +25505,74 @@ msgstr "Фаска — щёлкните первую из двух сходящ msgid "Chamfer — click the second line" msgstr "Фаска — щёлкните вторую линию" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Фаска — перетащите стрелку или щёлкните число, чтобы ввести отступ · Enter — применить · Esc — отмена" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Смещение — щёлкните кривую; смещается весь её контур" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Смещение — перетащите стрелку в любую сторону или щёлкните число, чтобы ввести расстояние · Enter — применить · Esc — отмена" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Отражение — сначала щёлкните ЛИНИЮ, относительно которой отражать (подойдёт вспомогательная линия)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Отражение — ось задана · теперь щёлкните объекты для отражения · Esc — отмена" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Отражение — ось задана · для отражения: %d · щёлкните другой объект, чтобы добавить или убрать его · Enter — применить" # AI Translated msgid "Move — click the entities to move" msgstr "Перемещение — щёлкните объекты для перемещения" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Перемещение — перетащите маркер или щёлкните число, чтобы ввести расстояние · Enter — применить" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Поворот — щёлкните объекты для поворота" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Поворот — перетащите маркер или щёлкните число, чтобы ввести угол · Enter — применить" # AI Translated msgid "Scale — click the entities to scale" msgstr "Масштаб — щёлкните объекты для масштабирования" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Масштаб — перетащите маркер или щёлкните число, чтобы ввести коэффициент · Enter — применить" # AI Translated msgid "Array — click the entities to repeat" msgstr "Массив — щёлкните объекты для повторения" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Массив — перетащите маркер, чтобы задать шаг, щёлкните количество, чтобы ввести его · Enter — применить" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Круговой массив — щёлкните объекты для повторения" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Круговой массив — перетащите маркер, чтобы задать угол охвата, щёлкните количество, чтобы ввести его · Enter — применить" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Перетащите угол для масштабирования, центр для перемещения · Enter или ✓ по завершении, Esc — отменить" # AI Translated msgid " · Esc goes back to Select" @@ -25488,63 +25582,78 @@ msgstr " · Esc — вернуться к выбору" msgid " · click a constraint badge to remove it" msgstr " · щёлкните значок ограничения, чтобы удалить его" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — твёрдое тело" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — поверхностное тело" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Плоская грань %d (%s)" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Цилиндрическая грань %d (%s)" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Грань %d (%s)" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%zu ребро (%s)" +msgstr[1] "%zu ребра (%s)" +msgstr[2] "%zu рёбер (%s)" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Прямое ребро %d (%s)" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Круговое ребро %d (%s)" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Вершина (%s)" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Профиль эскиза" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Эскиз — ничего не выбрано" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Линия эскиза" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Кривая эскиза" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Точка эскиза" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "Объектов эскиза: %d" # AI Translated msgid "select something first" @@ -25607,8 +25716,9 @@ msgstr "Плоскость добавлена — выберите её как msgid "Axis added" msgstr "Ось добавлена" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Система координат добавлена" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -25625,10 +25735,10 @@ msgstr "Для уклона нужна выбранная грань — сна # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Пока пусто — импортируйте STEP или сетку с панели инструментов\n" -"или щёлкните опорную плоскость и нажмите на ней ПКМ, чтобы начать эскиз." +"или нажмите «Эскиз» и щёлкните опорную плоскость, чтобы начать эскиз." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -25638,9 +25748,10 @@ msgstr "Твёрдых тел пока нет — выберите эскиз и msgid "Could not restore the CAD model from this project" msgstr "Не удалось восстановить CAD-модель из этого проекта" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Не удалось восстановить CAD-модель: %s" # AI Translated #, c-format @@ -25663,17 +25774,35 @@ msgstr "Сечение — показана верхняя половина" msgid "Section view — showing the lower half" msgstr "Сечение — показана нижняя половина" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Поиск граней элемента…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Сначала выберите тело — щёлкните его в рабочем пространстве или в списке «Тела»" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Модель перестраивается — повторите приближение после завершения" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "У элемента «%s» нет видимой геометрии для приближения" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "У этого тела ещё нет сетки для отображения — сначала выполните перестроение" +# AI Translated +msgid "Select something to zoom to" +msgstr "Выберите что-нибудь для приближения" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Сначала завершите или отмените то, что сейчас открыто" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Сначала выберите тело — щёлкните его в рабочем пространстве или в списке «Тела»" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Перетаскивайте стрелки для перемещения, кольца для поворота — затем подтвердите (Esc – отмена)" @@ -25699,12 +25828,10 @@ msgstr "Щёлкните грань твёрдого тела, затем наж msgid "Placed on face — body laid flat on the bed" msgstr "Размещено гранью — тело положено на стол" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Изменение отклонено: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25723,9 +25850,10 @@ msgstr "У этого тела нет элемента для удаления msgid "feature %d" msgstr "элемент %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "Удалён элемент «%s», из которого было создано это тело — Ctrl+Z восстановит его" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -26118,12 +26246,14 @@ msgstr "Файлы STEP (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP экспортирован" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "Ошибка экспорта STEP: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Передать на стол (отдельными телами) — отправить каждое тело на вкладку «Подготовка» как отдельную модель" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -26137,20 +26267,37 @@ msgstr "Нечего передавать — сначала добавьте э msgid "All bodies hidden — show one before committing" msgstr "Все тела скрыты — покажите хотя бы одно перед передачей" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%zu ребро" +msgstr[1] "%zu ребра" +msgstr[2] "%zu рёбер" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Осевая линия E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Линия E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Плоскость эскиза: %s — выберите инструмент" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Плоскость эскиза: %s.\n" +"Выберите инструмент или нажмите Menu, чтобы открыть список." # AI Translated msgid "Plane ready" @@ -26160,8 +26307,9 @@ msgstr "Плоскость готова" msgid "Axis ready" msgstr "Ось готова" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Система координат готова" # AI Translated msgid "Helix ready" @@ -26179,9 +26327,10 @@ msgstr "Эскиз готов" msgid "Mate ready" msgstr "Сопряжение готово" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Недопустимо: %s" # AI Translated #, c-format @@ -26267,110 +26416,139 @@ msgstr "Изменить переменную" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "Не удалось удалить переменную «%s» (вероятно, на неё ещё ссылается выражение элемента): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "Значением «%s» нельзя управлять с помощью выражения" # AI Translated msgid "No binding for that field" msgstr "Для этого поля нет привязки" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "Значение должно быть больше нуля" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "Значение не может быть отрицательным (ноль означает совпадение)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Этот размер невозможно соблюсти — эскиз переопределён" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "Ограничения, неприменимые к этой геометрии (эллипс, сплайн или окружность нулевого размера), игнорируются: %1%" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Этот профиль пересекает сам себя или накладывается на себя в месте красной отметки, поэтому не ограничивает единую область" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Сторона" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Большая полуось" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Малая полуось" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "Угол должен быть в диапазоне от 0° до 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "Большая полуось не может быть короче малой" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "Радиус скругления углов должен быть меньше половины короткой стороны" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "Паз слишком широкий для своего радиуса — ширина должна быть меньше удвоенного радиуса" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Размер «%1%» невозможно соблюсти — эскиз переопределён" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Эти две линии не образуют угол — выберите две сходящиеся линии" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "Размер должен быть больше нуля" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Скругление: радиус превышает длину одной из сторон или две линии не образуют угол" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Фаска: расстояние превышает длину одной из сторон или две линии не образуют угол" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "Удалено ограничений, ставших недействительными после скругления/фаски: %1%" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Смещение: для эллипса или сплайна нельзя построить эквидистанту того же типа — выберите линии, дуги или окружности" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Коэффициент масштаба должен быть больше нуля" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Число копий" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Число копий должно быть целым и не меньше 2" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "Снято ограничений при преобразовании: %1%" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Копии массива остались без ограничений — решатель отклонил все варианты привязки" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "ПКМ или двойной щелчок — завершить, щелчок по началу — замкнуть" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Удлинение: щёлкните линию или дугу, которую можно продлить до другого объекта" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Обрезка: щёлкните сегмент в месте пересечения с другим объектом" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Нажмите Enter или ✓, чтобы применить, или Esc, чтобы отменить" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Для этого объекта размер пока не поддерживается — щёлкните линию, окружность, дугу или две точки" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Щёлкните вторую точку или линию, до которой нужно измерить расстояние" # AI Translated msgid "Enter a number" @@ -26407,8 +26585,12 @@ msgid "Sketch" msgstr "Эскиз" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Щёлкните грань или опорную плоскость, затем выберите инструмент рисования" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Выберите плоскую грань или опорную плоскость для эскиза" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Создать эскиз на выбранной плоской грани или плоскости либо на той, которую вы щёлкнете следом" # AI Translated msgctxt "Design" @@ -26430,9 +26612,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Утолщение" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Объединение" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -26485,17 +26668,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Утолщение поверхности" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Для утолщения поверхности нужно поверхностное тело — сначала создайте его инструментом из группы «Поверхность»" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Отверстие" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -26510,8 +26691,9 @@ msgctxt "Design" msgid "Split" msgstr "Разделение" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Для разделения нужно твёрдое тело — сначала добавьте или импортируйте его" # AI Translated msgid "Split the body along a picked face into two solids" @@ -26557,8 +26739,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Смещение поверхности" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Для смещения поверхности нужно поверхностное тело — сначала создайте его инструментом из группы «Поверхность»" # AI Translated msgctxt "Design" @@ -26588,8 +26771,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Массив по кривой" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Для массива по кривой нужны тело и кривая" # AI Translated msgid "Repeat the body along a picked curve" @@ -26610,8 +26794,9 @@ msgctxt "Design" msgid "Align to" msgstr "Выровнять по" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Для выравнивания нужно тело — сначала добавьте или импортируйте его" # AI Translated msgid "Align the body to a picked face or plane" @@ -26627,9 +26812,10 @@ msgctxt "Design" msgid "Axis" msgstr "Ось" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Система координат" # AI Translated msgctxt "Design" @@ -26645,9 +26831,10 @@ msgstr "Измерение" msgid "Measure between the picked points, edges or faces" msgstr "Измерить расстояние между выбранными точками, рёбрами или гранями" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Объём и площадь" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -26689,12 +26876,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Удаление грани" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Цвет" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Задать цвет отображения выбранного тела" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Приблизить к выбранному" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Вписать выбранное в окно, сохранив направление взгляда" # AI Translated msgctxt "Design" @@ -26733,9 +26931,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Прямоугольник по углам" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Прямоугольник от центра" # AI Translated msgctxt "Design" @@ -26747,9 +26946,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Скруглённый прямоугольник" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Окружность по центру" # AI Translated msgctxt "Design" @@ -26771,9 +26971,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Касательная дуга" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Дуга по центру" # AI Translated msgctxt "Design" @@ -26805,48 +27006,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Треугольник" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Треугольник — щёлкните центр, затем вершину" # AI Translated msgctxt "Design" msgid "Square" msgstr "Квадрат" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Квадрат — щёлкните центр, затем вершину" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Пятиугольник" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Пятиугольник — щёлкните центр, затем вершину" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Шестиугольник" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Шестиугольник — щёлкните центр, затем вершину" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Восьмиугольник" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Восьмиугольник — щёлкните центр, затем вершину" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Двенадцатиугольник" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Двенадцатиугольник — щёлкните центр, затем вершину" # AI Translated msgctxt "Design" @@ -26876,8 +27083,9 @@ msgctxt "Design" msgid "Text" msgstr "Текст" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Введите текст; он станет элементом «Текст» на плоскости этого эскиза, и его можно будет изменить позже" # AI Translated msgctxt "Design" @@ -26994,27 +27202,34 @@ msgstr "Угол / расстояние…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Ввести угол между двумя линиями или расстояние между двумя выбранными объектами" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Введите вставляемый текст" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Полужирный" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Курсив" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Этот шрифт нельзя использовать для текста — выберите другой" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Введите текст, чтобы увидеть его размер" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "В этом шрифте нет контуров символов этого текста" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Размер: %.1f × %.1f мм" # AI Translated msgid "Primitive" @@ -27112,8 +27327,9 @@ msgstr "Профиль" msgid "Start new profile (for holes)" msgstr "Начать новый профиль (для отверстий)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Сегменты" # AI Translated msgid "Sides" @@ -27127,20 +27343,23 @@ msgstr "Щёлкайте в рабочем пространстве, чтобы msgid "Snap to grid" msgstr "Привязка к сетке" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Шаг сетки" # AI Translated msgid "Outer" msgstr "Внешний" +# AI Translated msgid "closed" -msgstr "" +msgstr "замкнутый" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2% (точек: %3%) %4%" # AI Translated msgid "XY (Top)" @@ -27178,8 +27397,9 @@ msgstr[2] "%zu замкнутых профилей" msgid "Draw a closed profile to enable" msgstr "Нарисуйте замкнутый профиль, чтобы включить" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Очистить всё" # AI Translated msgid "Empty result" @@ -31284,6 +31504,39 @@ msgstr "" "Предотвращение коробления материала\n" "Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Экспериментально) Использовать агентов принтера вместо хостов печати" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "ЭЛЕМЕНТЫ" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Щёлкните грань или опорную плоскость в рабочем пространстве, затем выберите инструмент эскиза" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Щёлкните грань или опорную плоскость, затем выберите инструмент эскиза." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "Выбрана плоскость %s — ПКМ для инструментов рисования" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Пока пусто — импортируйте STEP или сетку с панели инструментов\n" +#~ "или щёлкните опорную плоскость и нажмите на ней ПКМ, чтобы начать эскиз." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Щёлкните грань или опорную плоскость, затем выберите инструмент рисования" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 93baca1c7a..a31a633246 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -3774,8 +3774,8 @@ msgstr "Ytterligare process inställning" msgid "Remove parameter" msgstr "Ta bort parameter" -msgid "to" -msgstr "till" +msgid "Range" +msgstr "Räckvidd" msgid "Add height range" msgstr "Lägg till höjdintervall" @@ -6032,9 +6032,6 @@ msgstr "Parameter namn" msgid "layers" msgstr "lager" -msgid "Range" -msgstr "Räckvidd" - msgid "Empty string" msgstr "Tom sträng" @@ -9639,8 +9636,9 @@ msgstr "Den anslutna skrivaren är %s. Den måste matcha projektets förinställ msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Vill du synkronisera skrivarinformationen och byta förinställning automatiskt?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Det här projektet innehåller en modell som skapats i fliken Design och ingen annan geometri. Aktivera \"CAD-funktion (experimentell)\" i Inställningar och starta om för att visa och redigera den; den behålls när projektet sparas." msgid "The file does not contain any geometry data." msgstr "Filen innehåller ingen geometrisk data." @@ -10819,8 +10817,9 @@ msgstr "I fliken Design ritas en parningskoppling som en liten yta i stället f msgid "Auto-close sketch loops" msgstr "Stäng skisslingor automatiskt" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Behandla skissändpunkter inom 0,001 mm som en enda punkt och svetsa ihop slingan. Av: endast exakt sammanfallande ändpunkter sammanfogas, så en slinga med ett litet glapp visas som öppen i stället för att stängas åt dig. Sparas med varje design; gäller designer som påbörjas efter ändringen." # AI Translated msgid "Pan" @@ -11297,18 +11296,6 @@ msgstr "Visa förinställningar som inte stöds" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Visa inkompatibla förinställningar och förinställningar som inte stöds i rullgardinslistorna för skrivare och filament. Dessa förinställningar kan inte väljas." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Experimentellt) Använd skrivaragenter i stället för utskriftsvärdar" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Skickar utskriftsjobb för icke-Bambu-skrivare via skrivarens insticksmodulagenter i stället för det klassiska uppladdningsflödet till utskriftsvärden.\n" -"När detta är avaktiverat använder OrcaSlicer det äldre beteendet för utskriftsvärdar." - # AI Translated msgid "Experimental Features" msgstr "Experimentella funktioner" @@ -11325,6 +11312,18 @@ msgstr "" "Försök att behålla målade egenskaper (färg/söm/support/ojämn yta osv.) efter att objektets mesh ändrats (t.ex. snitt, läs in från disk igen, förenkla, reparera osv.)\n" "Mycket experimentellt! Långsamt och kan skapa artefakter." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Använd skrivaragenter i stället för utskriftsvärdar" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Skickar utskriftsjobb för icke-Bambu-skrivare via skrivarens insticksmodulagenter i stället för det klassiska uppladdningsflödet till utskriftsvärden.\n" +"När detta är avaktiverat använder OrcaSlicer det äldre beteendet för utskriftsvärdar." + # AI Translated msgid "Allow Abnormal Storage" msgstr "Tillåt onormalt lagringsmedium" @@ -11503,6 +11502,9 @@ msgstr "Filamentsekvens för övriga lager" msgid "Please input layer value (>= 2)." msgstr "Ange ett lagervärde (>= 2)." +msgid "to" +msgstr "till" + msgid "Plate name" msgstr "Plattans namn" @@ -18034,6 +18036,14 @@ msgstr "Symmetrisk ifyllnad kring Y-axeln" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Om modellen har två delar som är symmetriska kring Y-axeln och du vill att dessa delar ska ha symmetriska texturer, klickar du i det här alternativet på en av delarna." +# AI Translated +msgid "Fill pattern tops" +msgstr "Fyll mönstrets ovansidor" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Välj det här alternativet om du vill fylla ifyllnadsmönstrets ovansidor helt" + # AI Translated msgid "Infill combination - Max layer height" msgstr "Ifyllnadskombination – max lagerhöjd" @@ -25119,6 +25129,26 @@ msgstr "Filamentet kanske inte är kompatibelt med de aktuella maskininställnin msgid "The filament model is unknown. A random filament preset will be used." msgstr "Filamentmodellen är okänd. En slumpmässig filamentförinställning används." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Dölj referensplan och axlar" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Visa referensplan och axlar" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Dölj skrivarens byggplatta och dess rutnät" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Visa skrivarens byggplatta och dess rutnät" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Klicka på ett referensplan eller en plan yta att skissa på — Esc avbryter" + # AI Translated msgid "Construction" msgstr "Konstruktion" @@ -25144,8 +25174,9 @@ msgstr "Cirkel — klicka på mittpunkt, sedan radie" msgid "Arc — click start, end, then a point" msgstr "Båge — klicka på start, slut, sedan en punkt" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Spår — mittlinjens två ändar, sedan bredden" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -25219,8 +25250,9 @@ msgstr "Världsaxlar visas" msgid "World axes hidden" msgstr "Världsaxlar dolda" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Axonometrisk vy, anpassad" # AI Translated msgid "Bed shown" @@ -25231,34 +25263,12 @@ msgid "Bed hidden" msgstr "Byggplattan dold" # AI Translated -msgid "FEATURES" -msgstr "OPERATIONER" +msgid "Reference planes shown" +msgstr "Referensplanen visas" # AI Translated -msgid "Sketch" -msgstr "Skiss" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Skissplan: %s — välj ett verktyg" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Klicka på en yta eller ett referensplan i vyn, sedan på ett skissverktyg" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Skissplan: %s.\n" -"Välj ett verktyg, eller tryck på Meny för listan." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Klicka på en yta eller ett referensplan, sedan på ett skissverktyg." +msgid "Reference planes hidden" +msgstr "Referensplanen dolda" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -25444,8 +25454,9 @@ msgstr "Axel" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Referensaxel (två punkter, ytnormal, cylinderns mittlinje, två plan, längs kant)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Koordinatsystem" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -25509,8 +25520,9 @@ msgstr "Spegelvänd kräver en kropp — lägg till eller importera en först" msgid "Mate" msgstr "Parning" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Sammanställning: rikta in två koordinatsystem (fast, plan, roterande, glidande, cylindrisk)" # AI Translated msgid "Boolean (combine bodies)" @@ -25609,14 +25621,6 @@ msgstr "Gänga en cylindrisk yta (inre hål / yttre) eller en cirkulär kant" msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Välj en cylindrisk yta (hål / yttre) eller en cirkulär kant för en gänga" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Importera STEP (redigerbar B-rep-solid)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Importera mesh (STL/OBJ) som en redigerbar B-rep-solid" - # AI Translated msgid "Constrain selected sketch" msgstr "Lägg till villkor i vald skiss" @@ -25649,8 +25653,9 @@ msgstr "Klicka på start, sedan slut — ange sedan exakt längd" msgid "Polyline" msgstr "Polylinje" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Klicka på punkter; klicka på den första punkten för att stänga slingan, högerklicka eller tryck på Enter för att avsluta kedjan" # AI Translated msgid "Corner rectangle" @@ -25740,8 +25745,9 @@ msgstr "Klicka på mittpunkten, sedan start, sedan en punkt för slutvinkeln" msgid "Slot" msgstr "Spår" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Klicka på mittlinjens två ändar, sedan en punkt för bredden" # AI Translated msgid "Arc slot" @@ -25771,8 +25777,9 @@ msgstr "Klicka på mittpunkt, storaxelns ände, punkt på lillaxeln, sedan båge msgid "Spline" msgstr "Spline" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Klicka på styrpunkter; dubbelklicka, högerklicka eller tryck på Enter för att avsluta" # AI Translated msgid "Click to place a point" @@ -25826,15 +25833,17 @@ msgstr "Välj en linje som speglingsaxel, sedan elementen att spegla; klicka på msgid "Trim" msgstr "Trimma" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Klicka på ett segment för att trimma det till närmaste skärningspunkt; Esc avslutar" # AI Translated msgid "Extend" msgstr "Förläng" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Klicka på en linje eller båge för att förlänga den till närmaste element; Esc avslutar" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -26018,13 +26027,21 @@ msgstr "Vertikalt avstånd" msgid "New Design — clear the feature tree" msgstr "Ny design — rensa operationsträdet" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Importera STEP (redigerbar B-rep-solid)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Importera mesh (STL/OBJ) som en redigerbar B-rep-solid" + # AI Translated msgid "Export STEP…" msgstr "Exportera STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Visa skrivarens byggplatta och dess rutnät" +msgid "Create a new sketch" +msgstr "Skapa en ny skiss" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -26038,20 +26055,25 @@ msgstr "Sektionsvy — dölj en del av modellen för att se inuti. PageUp/PageDo msgid "Flip Section — show the opposite half" msgstr "Vänd sektion — visa den motsatta halvan" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Välj hur \"Överför till platta\" skickar kropparna" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Överför till platta" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Alla kroppar blir ett objekt med en del per kropp, och deras inbördes placering behålls" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Överför till platta (som kroppar)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Varje kropp blir ett eget objekt och placeras för sig" # AI Translated msgid "Width / X" @@ -26061,6 +26083,10 @@ msgstr "Bredd / X" msgid "Height / Y" msgstr "Höjd / Y" +# AI Translated +msgid "Sketch" +msgstr "Skiss" + # AI Translated msgid "Distance X" msgstr "Avstånd X" @@ -26263,8 +26289,9 @@ msgstr "Cirkulär" msgid "Direction" msgstr "Riktning" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Total vinkel (°)" # AI Translated msgid "Boolean" @@ -26648,11 +26675,13 @@ msgstr "Cylindrisk — axlarna kolinjära; fri rotation + axiell glidning" msgid "Kind" msgstr "Typ" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (fast)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (rörlig)" # AI Translated msgid "Angle °" @@ -26690,6 +26719,10 @@ msgstr "(inga bindningar)" msgid "Value" msgstr "Värde" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Välj ett verktyg, eller tryck på Meny för listan." + # AI Translated msgid "Constraints" msgstr "Villkor" @@ -26728,6 +26761,10 @@ msgstr "Flytta ner" msgid "Show / hide" msgstr "Visa / dölj" +# AI Translated +msgid "Zoom to selection" +msgstr "Zooma till markering" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Kontrollera interferens — hitta överlappande kroppar" @@ -26749,14 +26786,17 @@ msgstr "Kropp %d vald — högerklicka för det som gäller den" msgid "Variables" msgstr "Variabler" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Lägg till variabel" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Redigera variabel" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Ta bort variabel" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -26775,9 +26815,10 @@ msgstr "Skissen uppdaterad" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Skiss skapad (%zu styrande mått) — välj den och högerklicka sedan för att extrudera" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Längd %.2f mm, vinkel %.1f°" # AI Translated msgid "(locked)" @@ -26799,6 +26840,10 @@ msgstr "Område valt — högerklicka för att extrudera, eller dubbelklicka fö msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Skiss vald — högerklicka för att extrudera, eller dubbelklicka för att redigera" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Den ytan är inte plan — klicka på en plan yta eller ett referensplan" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -26827,30 +26872,29 @@ msgstr "Kropp %d: yta %d vald — högerklicka för att trycka/dra den, eller kl msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Yta %d vald — högerklicka för att trycka/dra den, eller klicka igen för hela kroppen" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Kropp %d: %zu kant vald — Shift+klick lägger till eller tar bort en, Avrundning/Fasning bearbetar alla" +msgstr[1] "Kropp %d: %zu kanter valda — Shift+klick lägger till eller tar bort en, Avrundning/Fasning bearbetar alla" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "%zu kant vald — Shift+klick lägger till eller tar bort en, Avrundning/Fasning bearbetar alla" +msgstr[1] "%zu kanter valda — Shift+klick lägger till eller tar bort en, Avrundning/Fasning bearbetar alla" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "%s-planet valt — högerklicka för ritverktygen" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Kropp %d: kant %d vald — Shift+klicka för att lägga till kanter, eller klicka igen för hela kroppen" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Kant %d vald — Shift+klicka för att lägga till kanter, eller klicka igen för hela kroppen" # AI Translated #, c-format, boost-format @@ -26875,8 +26919,9 @@ msgstr "Verktyget avslutat" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Skissen behålls — Bekräfta för att spara den, Avbryt för att förkasta den" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Välj något att ta bort" # AI Translated msgid "✗ Conflicting constraints" @@ -26908,17 +26953,21 @@ msgstr "Redigerar: Skiss %d · N = titta vinkelrätt mot planet · Bekr msgid "OK — %zu triangles" msgstr "OK — %zu trianglar" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Redigera texten — Enter tillämpar, Esc behåller den som den var" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Skriv texten — den visas i vyn medan du skriver; Enter infogar, Esc avbryter" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Texten oförändrad" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Texten avbröts" # AI Translated msgid "Import SVG" @@ -26944,9 +26993,10 @@ msgstr "Läser STEP…" msgid "No solids found in STEP" msgstr "Inga solider hittades i STEP-filen" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "STEP-importen misslyckades: %s" # AI Translated msgid "Rebuilding model…" @@ -26971,9 +27021,10 @@ msgstr "Meshfiler (*.stl;*.obj)|*.stl;*.obj|Alla filer|*.*" msgid "Could not read the STL file" msgstr "Kunde inte läsa STL-filen" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Kunde inte läsa OBJ-filen: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -26998,20 +27049,23 @@ msgstr "" msgid "Large mesh" msgstr "Stor mesh" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Mesh-konverteringen misslyckades: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "Mesh-konverteringen gav ingen geometri" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Mesh" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Mesh-importen misslyckades: %s" # AI Translated #, c-format, boost-format @@ -27040,17 +27094,19 @@ msgstr " — dra för att placera/ändra storlek, sedan Bekräfta" msgid "Insert canceled" msgstr "Infogning avbruten" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Dra i ett hörn för att skala, i mitten för att flytta — Enter eller ✓ när du är klar, Esc för att förkasta" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Skiss tillagd (plan: %s) — välj den och högerklicka sedan för att extrudera" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Modellen kunde inte byggas om: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -27122,18 +27178,21 @@ msgstr "Välj först en skiss med en öppen linje" msgid "Add at least one face to delete first" msgstr "Lägg först till minst en yta att ta bort" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Parning kräver två koordinatsystem — skapa dem först" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Parning: A och B måste vara olika koordinatsystem" # AI Translated msgid "Mate rejected" msgstr "Parningen avvisades" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Interferens kräver minst två kroppar" # AI Translated msgid "No interference found" @@ -27144,36 +27203,43 @@ msgstr "Ingen interferens hittades" msgid "Body %d" msgstr "Kropp %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu överlappande par: %s" +msgstr[1] "%zu överlappande par: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Välj en kropp för att mäta den" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Den här kroppen kunde inte mätas" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: ytkropp, area %.2f mm², ingen volym — förtjocka den för att få en" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: volym %.2f mm³, area %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Mönster kräver en solid kropp — lägg till eller importera en först" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Boolesk kräver två kroppar — lägg till eller importera en till" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -27188,35 +27254,45 @@ msgstr "Vald yta (Kropp %d)" msgid "Picked face" msgstr "Vald yta" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "den nya formen kunde inte förenas med kroppen" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "den nya formen kunde inte skäras ut ur kroppen" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "formernas skärning kunde inte beräknas" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "inget i historiken skapar en solid kropp ännu" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "skissprofilen är inte en ren sluten slinga" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "verktyget rör inte kroppen" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "ett uttryck använder en variabel som inte finns" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "ett uttryck dividerar med noll" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "två variabler hänvisar till varandra i sina definitioner" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "en geometrioperation misslyckades" # AI Translated #, c-format, boost-format @@ -27255,15 +27331,17 @@ msgstr "Mått — klicka på den andra punkten" msgid "Line — click the start point" msgstr "Linje — klicka på startpunkten" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Linje — klicka på slutpunkten; dess längd och vinkel kan sedan skrivas in" # AI Translated msgid "Polyline — click the first point" msgstr "Polylinje — klicka på den första punkten" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Polylinje — klicka på nästa punkt · klicka på startpunkten för att stänga den · högerklick, dubbelklick eller Enter avslutar kedjan" # AI Translated msgid "Rectangle — click one corner" @@ -27309,8 +27387,9 @@ msgstr "Rundad rektangel — klicka för att ange hörnradien" msgid "Circle — click the center" msgstr "Cirkel — klicka på mittpunkten" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Cirkel — klicka för att ange radien; den kan sedan skrivas in" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -27436,18 +27515,21 @@ msgstr "Elliptisk båge — klicka där bågen slutar" msgid "Spline — click the first control point" msgstr "Spline — klicka på den första styrpunkten" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline — klicka på nästa styrpunkt · högerklick, dubbelklick eller Enter avslutar kurvan" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Punkt — klicka för att placera en; verktyget förblir aktivt för fler" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Trimma — klicka på ett segment där det korsar ett annat element · Esc för att avsluta" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Förläng — klicka på en linje eller båge för att förlänga den till närmaste element · Esc för att avsluta" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -27457,8 +27539,9 @@ msgstr "Avrundning — klicka på den första av två linjer som möts" msgid "Fillet — click the second line" msgstr "Avrundning — klicka på den andra linjen" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Avrundning — dra i pilen, eller klicka på siffran för att skriva radien · Enter tillämpar · Esc avbryter" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -27468,63 +27551,74 @@ msgstr "Fasning — klicka på den första av två linjer som möts" msgid "Chamfer — click the second line" msgstr "Fasning — klicka på den andra linjen" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Fasning — dra i pilen, eller klicka på siffran för att skriva fasavståndet · Enter tillämpar · Esc avbryter" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Förskjut — klicka på en kurva; hela dess kontur förskjuts" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Förskjut — dra pilen åt någon av sidorna, eller klicka på siffran för att skriva avståndet · Enter tillämpar · Esc avbryter" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Spegelvänd — klicka först på LINJEN att spegla kring (en konstruktionslinje fungerar)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Spegelvänd — axeln är angiven · klicka nu på elementen att spegla · Esc avbryter" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Spegelvänd — axeln är angiven · %d att spegla · klicka på ett annat för att lägga till eller ta bort det · Enter tillämpar" # AI Translated msgid "Move — click the entities to move" msgstr "Flytta — klicka på elementen att flytta" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Flytta — dra i handtaget, eller klicka på siffran för att skriva avståndet · Enter tillämpar" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Rotera — klicka på elementen att rotera" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Rotera — dra i handtaget, eller klicka på siffran för att skriva vinkeln · Enter tillämpar" # AI Translated msgid "Scale — click the entities to scale" msgstr "Skala — klicka på elementen att skala" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Skala — dra i handtaget, eller klicka på siffran för att skriva faktorn · Enter tillämpar" # AI Translated msgid "Array — click the entities to repeat" msgstr "Mönster — klicka på elementen att upprepa" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Mönster — dra i handtaget för att ange steget, klicka på antalet för att skriva det · Enter tillämpar" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Polärt mönster — klicka på elementen att upprepa" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Polärt mönster — dra i handtaget för att ange vinkeln, klicka på antalet för att skriva det · Enter tillämpar" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Dra i ett hörn för att skala, i mitten för att flytta · Enter eller ✓ när du är klar, Esc för att förkasta" # AI Translated msgid " · Esc goes back to Select" @@ -27534,62 +27628,77 @@ msgstr " · Esc går tillbaka till Välj" msgid " · click a constraint badge to remove it" msgstr " · klicka på en villkorsmarkör för att ta bort den" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — solid kropp" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — ytkropp" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Plan yta %d på %s" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Cylindrisk yta %d på %s" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Yta %d på %s" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu kant på %s" +msgstr[1] "%zu kanter på %s" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Rak kant %d på %s" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Cirkulär kant %d på %s" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Hörn på %s" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Skissprofil" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Skiss — inget valt" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Skisslinje" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Skisskurva" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Skisspunkt" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d skisselement" # AI Translated msgid "select something first" @@ -27652,8 +27761,9 @@ msgstr "Plan tillagt — välj det som skissplan" msgid "Axis added" msgstr "Axel tillagd" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Koordinatsystem tillagt" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -27670,10 +27780,10 @@ msgstr "Släppvinkel kräver en vald yta — klicka först på en sidoyta" # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Inget ännu — importera en STEP-fil eller en mesh från verktygsfältet,\n" -"eller klicka på ett referensplan och högerklicka på det för att börja en skiss." +"eller tryck på Skiss och klicka på ett referensplan för att börja en skiss." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -27683,9 +27793,10 @@ msgstr "Ingen solid ännu — välj en skiss och högerklicka på den för att e msgid "Could not restore the CAD model from this project" msgstr "Kunde inte återställa CAD-modellen från det här projektet" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Kunde inte återställa CAD-modellen: %s" # AI Translated #, c-format @@ -27708,17 +27819,35 @@ msgstr "Sektionsvy — visar den övre halvan" msgid "Section view — showing the lower half" msgstr "Sektionsvy — visar den undre halvan" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Söker operationens ytor…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Välj först en kropp — klicka på den i vyn eller i listan Kroppar" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Modellen byggs om — zooma igen när den är klar" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s har inget synligt att zooma till" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Den kroppen har ingen visningsmesh än — beräkna om först" +# AI Translated +msgid "Select something to zoom to" +msgstr "Välj något att zooma till" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Slutför eller avbryt det som är öppet först" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Välj först en kropp — klicka på den i vyn eller i listan Kroppar" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Dra i pilarna för att flytta, i ringarna för att rotera — sedan Bekräfta (Esc avbryter)" @@ -27744,12 +27873,10 @@ msgstr "Klicka på en yta på soliden och tryck sedan på F" msgid "Placed on face — body laid flat on the bed" msgstr "Placerad på yta — kroppen ligger plant på byggplattan" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Redigeringen avvisades: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -27768,9 +27895,10 @@ msgstr "Den här kroppen har ingen operation att ta bort — använd Ny design f msgid "feature %d" msgstr "operation %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "%s togs bort, operationen som den här kroppen skapades från — Ctrl+Z återställer den" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -28162,12 +28290,14 @@ msgstr "STEP-filer (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP exporterad" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "STEP-exporten misslyckades: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Överför till platta (som kroppar) — skicka varje kropp till Förbered som ett eget objekt" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -28181,19 +28311,36 @@ msgstr "Inget att överföra — lägg till en operation först" msgid "All bodies hidden — show one before committing" msgstr "Alla kroppar är dolda — visa en innan du överför" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu kant" +msgstr[1] "%zu kanter" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Mittlinje E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Linje E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Skissplan: %s — välj ett verktyg" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Skissplan: %s.\n" +"Välj ett verktyg, eller tryck på Meny för listan." # AI Translated msgid "Plane ready" @@ -28203,8 +28350,9 @@ msgstr "Planet klart" msgid "Axis ready" msgstr "Axeln klar" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Koordinatsystemet klart" # AI Translated msgid "Helix ready" @@ -28222,9 +28370,10 @@ msgstr "Skissen klar" msgid "Mate ready" msgstr "Parningen klar" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Ogiltigt: %s" # AI Translated #, c-format @@ -28308,110 +28457,139 @@ msgstr "Redigera variabel" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "Variabeln '%s' kunde inte tas bort (refereras troligen fortfarande av ett operationsuttryck): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" är inte ett värde som ett uttryck kan styra" # AI Translated msgid "No binding for that field" msgstr "Ingen bindning för det fältet" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "Värdet måste vara större än noll" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "Värdet får inte vara negativt (noll betyder sammanfallande)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Det måttet kan inte uppfyllas — skissen är överdefinierad" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "%1% villkor kan inte verka på den här geometrin (en ellips eller splinekurva, eller en cirkel med storleken noll) och ignoreras" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Den här profilen korsar sig själv eller viker tillbaka på sig själv vid den röda markeringen, så den avgränsar inte ett enda område" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Sida" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Halva storaxeln" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Halva lillaxeln" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "Vinkeln måste vara mellan 0° och 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "Halva storaxeln kan inte vara kortare än halva lillaxeln" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "Hörnradien måste vara mindre än halva den kortare sidan" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "Spåret är för brett för sin radie — bredden måste vara mindre än dubbla radien" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1% kan inte uppfyllas — skissen är överdefinierad" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "De två linjerna möts inte i ett hörn — välj två linjer som gör det" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "Storleken måste vara större än noll" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Avrundning: radien sträcker sig förbi ett av benen, eller så möts inte de två linjerna i ett hörn" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Fasning: avståndet sträcker sig förbi ett av benen, eller så möts inte de två linjerna i ett hörn" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "%1% villkor som avrundningen/fasningen gjorde ogiltiga togs bort" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Förskjut: en ellips eller spline har ingen parallell av samma slag — välj linjer, bågar eller cirklar" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Skalfaktorn måste vara större än noll" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Kopior" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Antalet kopior måste vara ett heltal, 2 eller fler" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "%1% villkor upphävdes av transformationen" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Mönsterkopiorna saknar villkor — lösaren avvisade varje bindning" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "högerklicka eller dubbelklicka för att avsluta, klicka på startpunkten för att stänga" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Förläng: klicka på en linje eller en båge som kan nå ett annat element" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Trimma: klicka på ett segment där det korsar ett annat element" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Tryck på Enter eller ✓ för att tillämpa, Esc för att förkasta" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Inget mått för det elementet ännu — klicka på en linje, en cirkel, en båge eller två punkter" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Klicka på en andra punkt, eller på en linje att mäta avståndet till" # AI Translated msgid "Enter a number" @@ -28447,8 +28625,12 @@ msgid "Sketch" msgstr "Skiss" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Klicka på en yta eller ett referensplan och välj sedan ett ritverktyg" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Välj en plan yta eller ett referensplan att skissa på" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Skissa på den valda plana ytan eller planet, eller klicka på en yta eller ett plan efteråt" # AI Translated msgctxt "Design" @@ -28470,9 +28652,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Förtjocka" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Förena" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -28525,17 +28708,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Förtjocka yta" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Förtjocka yta kräver en ytkropp — skapa först en med ett ytverktyg" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Hål" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -28550,8 +28731,9 @@ msgctxt "Design" msgid "Split" msgstr "Dela" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Dela kräver en solid kropp — lägg till eller importera en först" # AI Translated msgid "Split the body along a picked face into two solids" @@ -28597,8 +28779,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Ytförskjutning" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Ytförskjutning kräver en ytkropp — skapa först en med ett ytverktyg" # AI Translated msgctxt "Design" @@ -28628,8 +28811,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Mönster längs kurva" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Mönster längs kurva kräver en kropp och en kurva" # AI Translated msgid "Repeat the body along a picked curve" @@ -28650,8 +28834,9 @@ msgctxt "Design" msgid "Align to" msgstr "Rikta in mot" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Rikta in kräver en kropp — lägg till eller importera en först" # AI Translated msgid "Align the body to a picked face or plane" @@ -28667,9 +28852,10 @@ msgctxt "Design" msgid "Axis" msgstr "Axel" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Koordinatsystem" # AI Translated msgctxt "Design" @@ -28685,9 +28871,10 @@ msgstr "Mät" msgid "Measure between the picked points, edges or faces" msgstr "Mät mellan de valda punkterna, kanterna eller ytorna" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Volym och area" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -28729,12 +28916,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Ta bort yta" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Färg" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Ange visningsfärg för den valda kroppen" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Zooma till markering" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Passa in markeringen i vyn och behåll vyriktningen" # AI Translated msgctxt "Design" @@ -28773,9 +28971,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Hörnrektangel" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Mittpunktsrektangel" # AI Translated msgctxt "Design" @@ -28787,9 +28986,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Rundad rektangel" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Mittpunktscirkel" # AI Translated msgctxt "Design" @@ -28811,9 +29011,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Tangentbåge" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Mittpunktsbåge" # AI Translated msgctxt "Design" @@ -28845,48 +29046,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Triangel" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Triangel — klicka på mittpunkten, sedan ett hörn" # AI Translated msgctxt "Design" msgid "Square" msgstr "Kvadrat" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Kvadrat — klicka på mittpunkten, sedan ett hörn" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Pentagon" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Pentagon — klicka på mittpunkten, sedan ett hörn" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Hexagon" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Hexagon — klicka på mittpunkten, sedan ett hörn" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Oktagon" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Oktagon — klicka på mittpunkten, sedan ett hörn" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Dodekagon" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Dodekagon — klicka på mittpunkten, sedan ett hörn" # AI Translated msgctxt "Design" @@ -28916,8 +29123,9 @@ msgctxt "Design" msgid "Text" msgstr "Text" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Skriv text; den blir en textoperation på den här skissens plan och kan redigeras senare" # AI Translated msgctxt "Design" @@ -29034,27 +29242,34 @@ msgstr "Vinkel / avstånd…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Skriv in vinkeln mellan två linjer eller avståndet mellan de två valda objekten" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Skriv texten som ska infogas" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Fet" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Kursiv" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Det här teckensnittet kan inte användas för text — välj ett annat" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Skriv texten för att se dess storlek" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Det här teckensnittet har ingen kontur för den här texten" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Storlek: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -29152,8 +29367,9 @@ msgstr "Profil" msgid "Start new profile (for holes)" msgstr "Starta ny profil (för hål)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segment" # AI Translated msgid "Sides" @@ -29167,20 +29383,23 @@ msgstr "Klicka i vyn för att rita" msgid "Snap to grid" msgstr "Fäst mot rutnät" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Rutnätssteg" # AI Translated msgid "Outer" msgstr "Yttre" +# AI Translated msgid "closed" -msgstr "" +msgstr "sluten" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% punkter %4%" # AI Translated msgid "XY (Top)" @@ -29217,8 +29436,9 @@ msgstr[1] "%zu slutna profiler" msgid "Draw a closed profile to enable" msgstr "Rita en sluten profil för att aktivera" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Rensa alla" # AI Translated msgid "Empty result" @@ -33342,6 +33562,39 @@ msgstr "" "Undvik vridning\n" "Visste du att när du skriver ut material som är benägna att vrida, såsom ABS, kan en lämplig ökning av värmebäddens temperatur minska sannolikheten för vridning?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Experimentellt) Använd skrivaragenter i stället för utskriftsvärdar" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "OPERATIONER" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Klicka på en yta eller ett referensplan i vyn, sedan på ett skissverktyg" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Klicka på en yta eller ett referensplan, sedan på ett skissverktyg." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "%s-planet valt — högerklicka för ritverktygen" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Inget ännu — importera en STEP-fil eller en mesh från verktygsfältet,\n" +#~ "eller klicka på ett referensplan och högerklicka på det för att börja en skiss." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Klicka på en yta eller ett referensplan och välj sedan ett ritverktyg" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index 1fb47c76fc..7631bd1f50 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2026-06-19 13:40+0700\n" "Last-Translator: Icezaza\n" "Language-Team: Thai\n" @@ -3396,8 +3396,8 @@ msgstr "พรีเซ็ตกระบวนการเพิ่มเติ msgid "Remove parameter" msgstr "ลบพารามิเตอร์" -msgid "to" -msgstr "ถึง" +msgid "Range" +msgstr "พิสัย" msgid "Add height range" msgstr "เพิ่มช่วงความสูง" @@ -5442,9 +5442,6 @@ msgstr "ชื่อพารามิเตอร์" msgid "layers" msgstr "ชั้น" -msgid "Range" -msgstr "พิสัย" - msgid "Empty string" msgstr "สตริงว่าง" @@ -8753,8 +8750,9 @@ msgstr "เครื่องพิมพ์ที่เชื่อมต่อ msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "คุณต้องการซิงค์ข้อมูลเครื่องพิมพ์และสลับการตั้งค่าล่วงหน้าโดยอัตโนมัติหรือไม่" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "โปรเจกต์นี้มีโมเดลที่สร้างในแท็บออกแบบและไม่มีรูปทรงเรขาคณิตอื่น เปิดใช้ \"ฟังก์ชัน CAD (ทดลอง)\" ในการตั้งค่าแล้วรีสตาร์ทเพื่อดูและแก้ไขโมเดลนี้ โมเดลจะยังคงอยู่เมื่อบันทึกโปรเจกต์" msgid "The file does not contain any geometry data." msgstr "ไฟล์นี้ไม่มีข้อมูลเรขาคณิตใดๆ" @@ -9803,8 +9801,9 @@ msgstr "ในแท็บออกแบบ วาดตัวเชื่อ msgid "Auto-close sketch loops" msgstr "ปิดลูปสเก็ตช์อัตโนมัติ" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "ถือว่าจุดปลายของสเก็ตช์ที่ห่างกันไม่เกิน 0.001 มม. เป็นจุดต่อเดียวกัน และเชื่อมลูปให้ปิด ปิด: เชื่อมเฉพาะจุดปลายที่ทับกันพอดีเท่านั้น ลูปที่มีช่องว่างเล็กน้อยจึงแสดงเป็นลูปเปิด แทนที่จะถูกปิดให้โดยอัตโนมัติ บันทึกไว้กับแต่ละงานออกแบบ และมีผลกับงานออกแบบที่เริ่มหลังจากการเปลี่ยนแปลง" msgid "Pan" msgstr "แพน" @@ -10226,18 +10225,6 @@ msgstr "แสดงค่าที่ตั้งไว้ล่วงหน้ msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "แสดงค่าที่ตั้งไว้ล่วงหน้าที่ไม่เข้ากันหรือไม่รองรับในรายการเลือกเครื่องพิมพ์และเส้นพลาสติก ไม่สามารถเลือกค่าที่ตั้งไว้ล่วงหน้าเหล่านี้ได้" -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(ทดลอง) ใช้เอเจนต์เครื่องพิมพ์แทนโฮสต์การพิมพ์" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"ส่งงานพิมพ์ของเครื่องพิมพ์ที่ไม่ใช่ Bambu ผ่านเอเจนต์ปลั๊กอินของเครื่องพิมพ์ แทนการอัพโหลดไปยังโฮสต์การพิมพ์แบบเดิม\n" -"เมื่อปิดใช้ OrcaSlicer จะใช้พฤติกรรมโฮสต์การพิมพ์แบบเดิม" - # AI Translated msgid "Experimental Features" msgstr "ฟีเจอร์ทดลอง" @@ -10253,6 +10240,18 @@ msgstr "" "พยายามคงคุณสมบัติการทาสีไว้ (สี/รอยตะเข็บ/ส่วนรองรับ/ผิวฟัซซี ฯลฯ) หลังจากเปลี่ยนตาข่ายวัตถุ (เช่น ตัด/โหลดซ้ำจากดิสก์/ลดความซับซ้อน/แก้ไข ฯลฯ)\n" "น่าทดลองมาก! ช้าและอาจสร้างสิ่งประดิษฐ์" +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "ใช้เอเจนต์เครื่องพิมพ์แทนโฮสต์การพิมพ์" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"ส่งงานพิมพ์ของเครื่องพิมพ์ที่ไม่ใช่ Bambu ผ่านเอเจนต์ปลั๊กอินของเครื่องพิมพ์ แทนการอัพโหลดไปยังโฮสต์การพิมพ์แบบเดิม\n" +"เมื่อปิดใช้ OrcaSlicer จะใช้พฤติกรรมโฮสต์การพิมพ์แบบเดิม" + msgid "Allow Abnormal Storage" msgstr "อนุญาตให้จัดเก็บผิดปกติ" @@ -10420,6 +10419,9 @@ msgstr "ลำดับเส้นพลาสติกชั้นอื่น msgid "Please input layer value (>= 2)." msgstr "กรุณาป้อนค่าเลเยอร์ (>= 2)" +msgid "to" +msgstr "ถึง" + msgid "Plate name" msgstr "ชื่อจาน" @@ -16247,6 +16249,14 @@ msgstr "แกน Y ไส้ในแบบสมมาตร" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "หากแบบจำลองมีสองส่วนที่สมมาตรเกี่ยวกับแกน Y และคุณต้องการให้ส่วนเหล่านี้มีพื้นผิวที่สมมาตร โปรดคลิกตัวเลือกนี้บนส่วนใดส่วนหนึ่ง" +# AI Translated +msgid "Fill pattern tops" +msgstr "เติมด้านบนของรูปแบบ" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "เลือกตัวเลือกนี้หากต้องการเติมด้านบนของรูปแบบไส้ในให้เต็ม" + msgid "Infill combination - Max layer height" msgstr "ชุดค่าผสม ไส้ใน - ความสูงของชั้นสูงสุด" @@ -22478,6 +22488,26 @@ msgstr "เส้นพลาสติกอาจไม่เข้ากัน msgid "The filament model is unknown. A random filament preset will be used." msgstr "ไม่ทราบแบบจำลองเส้นพลาสติก ระบบจะใช้การตั้งค่าฟิลาเมนต์แบบสุ่ม" +# AI Translated +msgid "Hide reference planes and axes" +msgstr "ซ่อนระนาบอ้างอิงและแกน" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "แสดงระนาบอ้างอิงและแกน" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "ซ่อนฐานพิมพ์ของเครื่องพิมพ์และเส้นกริดของฐานพิมพ์" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "แสดงฐานพิมพ์ของเครื่องพิมพ์และเส้นกริดของฐานพิมพ์" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "คลิกระนาบอ้างอิงหรือผิวหน้าแบนราบเพื่อสเก็ตช์บนนั้น — Esc เพื่อยกเลิก" + # AI Translated msgid "Construction" msgstr "ช่วยสร้าง" @@ -22503,8 +22533,9 @@ msgstr "วงกลม — คลิกจุดศูนย์กลาง แ msgid "Arc — click start, end, then a point" msgstr "ส่วนโค้ง — คลิกจุดเริ่มต้น จุดสิ้นสุด แล้วคลิกอีกหนึ่งจุด" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "ร่อง — ปลายทั้งสองของเส้นกึ่งกลาง แล้วความกว้าง" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -22578,8 +22609,9 @@ msgstr "แสดงแกนโลกแล้ว" msgid "World axes hidden" msgstr "ซ่อนแกนโลกแล้ว" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "มุมมองแอกโซโนเมตริก ปรับให้พอดีแล้ว" # AI Translated msgid "Bed shown" @@ -22590,34 +22622,12 @@ msgid "Bed hidden" msgstr "ซ่อนฐานพิมพ์แล้ว" # AI Translated -msgid "FEATURES" -msgstr "ฟีเจอร์" +msgid "Reference planes shown" +msgstr "แสดงระนาบอ้างอิงแล้ว" # AI Translated -msgid "Sketch" -msgstr "สเก็ตช์" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "ระนาบสเก็ตช์: %s — เลือกเครื่องมือ" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "คลิกผิวหน้าหรือระนาบอ้างอิงในวิวพอร์ต แล้วเลือกเครื่องมือสเก็ตช์" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"ระนาบสเก็ตช์: %s\n" -"เลือกเครื่องมือ หรือกด Menu เพื่อดูรายการ" - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "คลิกผิวหน้าหรือระนาบอ้างอิง แล้วเลือกเครื่องมือสเก็ตช์" +msgid "Reference planes hidden" +msgstr "ซ่อนระนาบอ้างอิงแล้ว" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -22803,8 +22813,9 @@ msgstr "แกน" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "แกนอ้างอิง (สองจุด, เส้นตั้งฉากผิวหน้า, เส้นแกนกลางทรงกระบอก, สองระนาบ, ตามขอบ)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "ระบบพิกัด" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -22868,8 +22879,9 @@ msgstr "คำสั่งกลับด้านต้องใช้บอด msgid "Mate" msgstr "เมท" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "การประกอบ: จัดแนวระบบพิกัดสองระบบ (ยึดแน่น, ระนาบ, หมุน, เลื่อน, ทรงกระบอก)" # AI Translated msgid "Boolean (combine bodies)" @@ -22968,14 +22980,6 @@ msgstr "ทำเกลียวบนพื้นผิวทรงกระบ msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "เลือกพื้นผิวทรงกระบอก (รูใน / ผิวนอก) หรือขอบวงกลมสำหรับทำเกลียว" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "นำเข้า STEP (ทรงตัน B-rep ที่แก้ไขได้)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "นำเข้าเมช (STL/OBJ) เป็นทรงตัน B-rep ที่แก้ไขได้" - # AI Translated msgid "Constrain selected sketch" msgstr "กำหนดเงื่อนไขบังคับให้สเก็ตช์ที่เลือก" @@ -23008,8 +23012,9 @@ msgstr "คลิกจุดเริ่มต้น แล้วจุดส msgid "Polyline" msgstr "โพลีไลน์" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "คลิกจุดต่าง ๆ; คลิกจุดแรกเพื่อปิดลูป คลิกขวาหรือกด Enter เพื่อจบเส้นต่อเนื่อง" # AI Translated msgid "Corner rectangle" @@ -23099,8 +23104,9 @@ msgstr "คลิกจุดศูนย์กลาง แล้วจุด msgid "Slot" msgstr "ร่อง" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "คลิกปลายทั้งสองของเส้นกึ่งกลาง แล้วคลิกจุดเพื่อกำหนดความกว้าง" # AI Translated msgid "Arc slot" @@ -23130,8 +23136,9 @@ msgstr "คลิกจุดศูนย์กลาง ปลายแกน msgid "Spline" msgstr "สไปลน์" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "คลิกจุดควบคุม; ดับเบิลคลิก คลิกขวา หรือกด Enter เพื่อเสร็จสิ้น" # AI Translated msgid "Click to place a point" @@ -23185,15 +23192,17 @@ msgstr "เลือกเส้นแกนกลับด้าน แล้ msgid "Trim" msgstr "ตัดเล็ม" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "คลิกช่วงเส้นเพื่อตัดเล็มกลับไปยังจุดตัดที่ใกล้ที่สุด; Esc เพื่อออก" # AI Translated msgid "Extend" msgstr "ต่อขยาย" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "คลิกเส้นหรือส่วนโค้งเพื่อต่อขยายไปยังเอนทิตีที่ใกล้ที่สุด; Esc เพื่อออก" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23375,13 +23384,21 @@ msgstr "ระยะแนวตั้ง" msgid "New Design — clear the feature tree" msgstr "งานออกแบบใหม่ — ล้างแผนผังฟีเจอร์" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "นำเข้า STEP (ทรงตัน B-rep ที่แก้ไขได้)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "นำเข้าเมช (STL/OBJ) เป็นทรงตัน B-rep ที่แก้ไขได้" + # AI Translated msgid "Export STEP…" msgstr "ส่งออก STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "แสดงฐานพิมพ์ของเครื่องพิมพ์และเส้นกริดของฐานพิมพ์" +msgid "Create a new sketch" +msgstr "สร้างสเก็ตช์ใหม่" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23395,20 +23412,25 @@ msgstr "มุมมองภาคตัดขวาง — ซ่อนบา msgid "Flip Section — show the opposite half" msgstr "พลิกภาคตัด — แสดงอีกครึ่งหนึ่ง" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "เลือกวิธีที่คำสั่ง ส่งไปยังฐานพิมพ์ ใช้ส่งบอดี้" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "ส่งไปยังฐานพิมพ์" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "บอดี้ทั้งหมดจะรวมเป็นวัตถุเดียว โดยแต่ละบอดี้เป็นหนึ่งชิ้นส่วน และคงตำแหน่งสัมพัทธ์ไว้" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "ส่งไปยังฐานพิมพ์ (แยกตามบอดี้)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "แต่ละบอดี้จะกลายเป็นวัตถุแยกของตัวเอง และถูกจัดวางแยกกัน" # AI Translated msgid "Width / X" @@ -23418,6 +23440,10 @@ msgstr "ความกว้าง / X" msgid "Height / Y" msgstr "ความสูง / Y" +# AI Translated +msgid "Sketch" +msgstr "สเก็ตช์" + # AI Translated msgid "Distance X" msgstr "ระยะ X" @@ -23620,8 +23646,9 @@ msgstr "แบบวงกลม" msgid "Direction" msgstr "ทิศทาง" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "มุมรวม (°)" # AI Translated msgid "Boolean" @@ -24005,11 +24032,13 @@ msgstr "ทรงกระบอก — แกนอยู่ในแนวเ msgid "Kind" msgstr "ชนิด" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (คงที่)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (เคลื่อนที่)" # AI Translated msgid "Angle °" @@ -24047,6 +24076,10 @@ msgstr "(ไม่มีการผูกค่า)" msgid "Value" msgstr "ค่า" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "เลือกเครื่องมือ หรือกด Menu เพื่อดูรายการ" + # AI Translated msgid "Constraints" msgstr "เงื่อนไขบังคับ" @@ -24085,6 +24118,10 @@ msgstr "ย้ายลง" msgid "Show / hide" msgstr "แสดง / ซ่อน" +# AI Translated +msgid "Zoom to selection" +msgstr "ซูมไปที่ส่วนที่เลือก" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "ตรวจสอบการทับซ้อน — ค้นหาบอดี้ที่ซ้อนทับกัน" @@ -24106,14 +24143,17 @@ msgstr "เลือกบอดี้ %d แล้ว — คลิกขวา msgid "Variables" msgstr "ตัวแปร" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "เพิ่มตัวแปร" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "แก้ไขตัวแปร" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "ลบตัวแปร" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24132,9 +24172,10 @@ msgstr "อัปเดตสเก็ตช์แล้ว" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "สร้างสเก็ตช์แล้ว (มิติขับเคลื่อน %zu รายการ) — เลือกสเก็ตช์ แล้วคลิกขวาเพื่อยืดขึ้นรูป" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "ความยาว %.2f มม., มุม %.1f°" # AI Translated msgid "(locked)" @@ -24156,6 +24197,10 @@ msgstr "เลือกพื้นที่แล้ว — คลิกขว msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "เลือกสเก็ตช์แล้ว — คลิกขวาเพื่อยืดขึ้นรูป หรือดับเบิลคลิกเพื่อแก้ไข" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "ผิวหน้านั้นไม่แบนราบ — คลิกผิวหน้าแบนราบหรือระนาบอ้างอิง" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24184,28 +24229,27 @@ msgstr "บอดี้ %d: ผิวหน้า %d ถูกเลือก msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "ผิวหน้า %d ถูกเลือก — คลิกขวาเพื่อดัน/ดึง หรือคลิกอีกครั้งเพื่อเลือกทั้งบอดี้" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" +msgstr[0] "บอดี้ %d: เลือกขอบแล้ว %zu ขอบ — Shift+คลิกเพื่อเพิ่มหรือนำออกทีละขอบ ใช้ลบมุมมน/ลบมุมเอียงเพื่อตกแต่งขอบทั้งหมด" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "เลือกขอบแล้ว %zu ขอบ — Shift+คลิกเพื่อเพิ่มหรือนำออกทีละขอบ ใช้ลบมุมมน/ลบมุมเอียงเพื่อตกแต่งขอบทั้งหมด" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "ระนาบ %s ถูกเลือก — คลิกขวาเพื่อดูเครื่องมือวาด" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "บอดี้ %d: ขอบ %d ถูกเลือก — Shift+คลิกเพื่อเพิ่มขอบ หรือคลิกอีกครั้งเพื่อเลือกทั้งบอดี้" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "ขอบ %d ถูกเลือก — Shift+คลิกเพื่อเพิ่มขอบ หรือคลิกอีกครั้งเพื่อเลือกทั้งบอดี้" # AI Translated #, c-format, boost-format @@ -24230,8 +24274,9 @@ msgstr "ออกจากเครื่องมือแล้ว" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "เก็บสเก็ตช์ไว้แล้ว — กด ยืนยัน เพื่อบันทึก หรือ ยกเลิก เพื่อทิ้ง" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "เลือกสิ่งที่จะลบ" # AI Translated msgid "✗ Conflicting constraints" @@ -24262,17 +24307,21 @@ msgstr "กำลังแก้ไข: สเก็ตช์ %d · N = ม msgid "OK — %zu triangles" msgstr "สำเร็จ — %zu รูปสามเหลี่ยม" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "แก้ไขข้อความ — Enter เพื่อใช้, Esc เพื่อคงข้อความเดิมไว้" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "พิมพ์ข้อความ — ข้อความจะปรากฏในมุมมองขณะพิมพ์; Enter เพื่อแทรก, Esc เพื่อยกเลิก" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "ข้อความไม่เปลี่ยนแปลง" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "ยกเลิกข้อความแล้ว" # AI Translated msgid "Import SVG" @@ -24298,9 +24347,10 @@ msgstr "กำลังอ่าน STEP…" msgid "No solids found in STEP" msgstr "ไม่พบทรงตันใน STEP" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "นำเข้า STEP ล้มเหลว: %s" # AI Translated msgid "Rebuilding model…" @@ -24324,9 +24374,10 @@ msgstr "ไฟล์เมช (*.stl;*.obj)|*.stl;*.obj|ไฟล์ทั้ง msgid "Could not read the STL file" msgstr "ไม่สามารถอ่านไฟล์ STL ได้" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "ไม่สามารถอ่านไฟล์ OBJ ได้: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -24351,20 +24402,23 @@ msgstr "" msgid "Large mesh" msgstr "เมชขนาดใหญ่" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "การแปลงเมชล้มเหลว: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "การแปลงเมชไม่ได้สร้างรูปทรงเรขาคณิตใด ๆ" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "เมช" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "นำเข้าเมชล้มเหลว: %s" # AI Translated #, c-format, boost-format @@ -24393,17 +24447,19 @@ msgstr " — ลากเพื่อวาง/ปรับขนาด แล msgid "Insert canceled" msgstr "ยกเลิกการแทรกแล้ว" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "ลากมุมเพื่อปรับขนาด ลากจุดกึ่งกลางเพื่อย้าย — กด Enter หรือ ✓ เมื่อเสร็จ, Esc เพื่อทิ้ง" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "เพิ่มสเก็ตช์แล้ว (ระนาบ: %s) — เลือกสเก็ตช์ แล้วคลิกขวาเพื่อยืดขึ้นรูป" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "ไม่สามารถสร้างโมเดลใหม่ได้: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -24475,18 +24531,21 @@ msgstr "เลือกสเก็ตช์ที่มีเส้นเปิ msgid "Add at least one face to delete first" msgstr "เพิ่มผิวหน้าที่จะลบอย่างน้อยหนึ่งผิวหน้าก่อน" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "เมทต้องใช้ระบบพิกัดสองระบบ — สร้างระบบพิกัดเหล่านั้นก่อน" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "เมท: A และ B ต้องเป็นระบบพิกัดที่ต่างกัน" # AI Translated msgid "Mate rejected" msgstr "เมทถูกปฏิเสธ" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "การตรวจสอบการทับซ้อนต้องใช้บอดี้อย่างน้อยสองรายการ" # AI Translated msgid "No interference found" @@ -24497,35 +24556,42 @@ msgstr "ไม่พบการทับซ้อน" msgid "Body %d" msgstr "บอดี้ %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" +msgstr[0] "คู่ที่ซ้อนทับกัน %zu คู่: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "เลือกบอดี้เพื่อวัด" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "ไม่สามารถวัดบอดี้นี้ได้" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: บอดี้พื้นผิว, พื้นที่ผิว %.2f mm², ไม่มีปริมาตร — เพิ่มความหนาเพื่อให้มีปริมาตร" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: ปริมาตร %.2f mm³, พื้นที่ผิว %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "คำสั่งแพทเทิร์นต้องใช้บอดี้ทรงตัน — เพิ่มหรือนำเข้าบอดี้ก่อน" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "คำสั่งบูลีนต้องใช้บอดี้สองรายการ — เพิ่มหรือนำเข้าบอดี้ที่สอง" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -24540,35 +24606,45 @@ msgstr "ผิวหน้าที่เลือก (บอดี้ %d)" msgid "Picked face" msgstr "ผิวหน้าที่เลือก" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "ไม่สามารถรวมรูปทรงใหม่เข้ากับบอดี้ได้" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "ไม่สามารถตัดรูปทรงใหม่ออกจากบอดี้ได้" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "ไม่สามารถหาส่วนร่วมของรูปทรงได้" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "ยังไม่มีฟีเจอร์ใดในประวัติที่สร้างทรงตัน" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "โปรไฟล์สเก็ตช์ไม่ใช่ลูปปิดที่สมบูรณ์" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "เครื่องมือไม่ได้สัมผัสบอดี้" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "นิพจน์ใช้ตัวแปรที่ไม่มีอยู่" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "นิพจน์มีการหารด้วยศูนย์" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "ตัวแปรสองตัวถูกนิยามโดยอ้างอิงซึ่งกันและกัน" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "การดำเนินการทางเรขาคณิตล้มเหลว" # AI Translated #, c-format, boost-format @@ -24606,15 +24682,17 @@ msgstr "มิติ — คลิกจุดที่สอง" msgid "Line — click the start point" msgstr "เส้น — คลิกจุดเริ่มต้น" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "เส้น — คลิกจุดสิ้นสุด แล้วจึงพิมพ์ความยาวและมุมได้" # AI Translated msgid "Polyline — click the first point" msgstr "โพลีไลน์ — คลิกจุดแรก" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "โพลีไลน์ — คลิกจุดถัดไป · คลิกจุดเริ่มต้นเพื่อปิด · คลิกขวา ดับเบิลคลิก หรือกด Enter เพื่อจบเส้นต่อเนื่อง" # AI Translated msgid "Rectangle — click one corner" @@ -24660,8 +24738,9 @@ msgstr "สี่เหลี่ยมผืนผ้ามุมมน — ค msgid "Circle — click the center" msgstr "วงกลม — คลิกจุดศูนย์กลาง" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "วงกลม — คลิกเพื่อกำหนดรัศมี แล้วจึงพิมพ์ค่าได้" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -24787,18 +24866,21 @@ msgstr "ส่วนโค้งวงรี — คลิกตำแหน่ msgid "Spline — click the first control point" msgstr "สไปลน์ — คลิกจุดควบคุมแรก" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "สไปลน์ — คลิกจุดควบคุมถัดไป · คลิกขวา ดับเบิลคลิก หรือกด Enter เพื่อจบเส้นโค้ง" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "จุด — คลิกเพื่อวางจุด; เครื่องมือยังคงพร้อมสำหรับวางจุดเพิ่ม" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "ตัดเล็ม — คลิกช่วงเส้นตรงตำแหน่งที่ตัดกับเอนทิตีอื่น · Esc เพื่อออก" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "ต่อขยาย — คลิกเส้นหรือส่วนโค้งเพื่อยืดออกไปยังเอนทิตีที่ใกล้ที่สุด · Esc เพื่อออก" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -24808,8 +24890,9 @@ msgstr "ลบมุมมน — คลิกเส้นแรกจากส msgid "Fillet — click the second line" msgstr "ลบมุมมน — คลิกเส้นที่สอง" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "ลบมุมมน — ลากลูกศร หรือคลิกตัวเลขเพื่อพิมพ์รัศมี · Enter เพื่อใช้ · Esc เพื่อยกเลิก" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -24819,63 +24902,74 @@ msgstr "ลบมุมเอียง — คลิกเส้นแรกจ msgid "Chamfer — click the second line" msgstr "ลบมุมเอียง — คลิกเส้นที่สอง" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "ลบมุมเอียง — ลากลูกศร หรือคลิกตัวเลขเพื่อพิมพ์ระยะร่น · Enter เพื่อใช้ · Esc เพื่อยกเลิก" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "ออฟเซ็ต — คลิกเส้นโค้ง แล้วเส้นขอบทั้งหมดที่เส้นโค้งนั้นอยู่จะถูกออฟเซ็ต" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "ออฟเซ็ต — ลากลูกศรไปด้านใดด้านหนึ่ง หรือคลิกตัวเลขเพื่อพิมพ์ระยะ · Enter เพื่อใช้ · Esc เพื่อยกเลิก" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "กลับด้าน — คลิก เส้น ที่จะใช้เป็นแกนกลับด้านก่อน (ใช้เส้นช่วยสร้างได้)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "กลับด้าน — กำหนดแกนแล้ว · ตอนนี้คลิกเอนทิตีที่จะกลับด้าน · Esc เพื่อยกเลิก" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "กลับด้าน — กำหนดแกนแล้ว · จะกลับด้าน %d รายการ · คลิกรายการอื่นเพื่อเพิ่มหรือนำออก · Enter เพื่อใช้" # AI Translated msgid "Move — click the entities to move" msgstr "ย้าย — คลิกเอนทิตีที่จะย้าย" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "ย้าย — ลากจุดจับ หรือคลิกตัวเลขเพื่อพิมพ์ระยะ · Enter เพื่อใช้" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "หมุน — คลิกเอนทิตีที่จะหมุน" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "หมุน — ลากจุดจับ หรือคลิกตัวเลขเพื่อพิมพ์มุม · Enter เพื่อใช้" # AI Translated msgid "Scale — click the entities to scale" msgstr "ปรับขนาด — คลิกเอนทิตีที่จะปรับขนาด" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "ปรับขนาด — ลากจุดจับ หรือคลิกตัวเลขเพื่อพิมพ์ตัวคูณ · Enter เพื่อใช้" # AI Translated msgid "Array — click the entities to repeat" msgstr "อาร์เรย์ — คลิกเอนทิตีที่จะทำซ้ำ" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "อาร์เรย์ — ลากจุดจับเพื่อกำหนดระยะห่าง คลิกจำนวนเพื่อพิมพ์ค่า · Enter เพื่อใช้" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "อาร์เรย์เชิงขั้ว — คลิกเอนทิตีที่จะทำซ้ำ" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "อาร์เรย์เชิงขั้ว — ลากจุดจับเพื่อกำหนดมุมกวาด คลิกจำนวนเพื่อพิมพ์ค่า · Enter เพื่อใช้" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "ลากมุมเพื่อปรับขนาด ลากจุดกึ่งกลางเพื่อย้าย · กด Enter หรือ ✓ เมื่อเสร็จ, Esc เพื่อทิ้ง" # AI Translated msgid " · Esc goes back to Select" @@ -24885,61 +24979,76 @@ msgstr " · Esc เพื่อกลับไปที่เครื่อ msgid " · click a constraint badge to remove it" msgstr " · คลิกป้ายเงื่อนไขบังคับเพื่อนำออก" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — บอดี้ทรงตัน" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — บอดี้พื้นผิว" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "ผิวหน้าแบนราบ %d ของ %s" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "ผิวหน้าทรงกระบอก %d ของ %s" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "ผิวหน้า %d ของ %s" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" +msgstr[0] "ขอบ %zu ขอบของ %s" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "ขอบตรง %d ของ %s" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "ขอบวงกลม %d ของ %s" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "จุดยอดของ %s" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "โปรไฟล์สเก็ตช์" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "สเก็ตช์ — ยังไม่ได้เลือกอะไร" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "เส้นสเก็ตช์" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "เส้นโค้งสเก็ตช์" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "จุดสเก็ตช์" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "เอนทิตีสเก็ตช์ %d รายการ" # AI Translated msgid "select something first" @@ -25002,8 +25111,9 @@ msgstr "เพิ่มระนาบแล้ว — เลือกระน msgid "Axis added" msgstr "เพิ่มแกนแล้ว" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "เพิ่มระบบพิกัดแล้ว" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -25020,10 +25130,10 @@ msgstr "คำสั่งมุมถอดแบบต้องมีผิว # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "ยังไม่มีอะไร — นำเข้า STEP หรือเมชจากแถบเครื่องมือ\n" -"หรือคลิกระนาบอ้างอิงแล้วคลิกขวาเพื่อเริ่มสเก็ตช์" +"หรือกด สเก็ตช์ แล้วคลิกระนาบอ้างอิงเพื่อเริ่มสเก็ตช์" # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -25033,9 +25143,10 @@ msgstr "ยังไม่มีทรงตัน — เลือกสเก msgid "Could not restore the CAD model from this project" msgstr "ไม่สามารถกู้คืนโมเดล CAD จากโปรเจกต์นี้ได้" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "ไม่สามารถกู้คืนโมเดล CAD ได้: %s" # AI Translated #, c-format @@ -25058,17 +25169,35 @@ msgstr "มุมมองภาคตัดขวาง — แสดงคร msgid "Section view — showing the lower half" msgstr "มุมมองภาคตัดขวาง — แสดงครึ่งล่าง" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "กำลังค้นหาผิวหน้าของฟีเจอร์…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "เลือกบอดี้ก่อน — คลิกในวิวพอร์ตหรือในรายการบอดี้" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "กำลังสร้างโมเดลใหม่ — ซูมอีกครั้งเมื่อเสร็จสิ้น" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s ไม่มีส่วนที่แสดงอยู่ให้ซูมไป" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "บอดี้นั้นยังไม่มีเมชสำหรับแสดงผล — คำนวณใหม่ก่อน" +# AI Translated +msgid "Select something to zoom to" +msgstr "เลือกสิ่งที่จะซูมไป" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "เสร็จสิ้นหรือยกเลิกสิ่งที่เปิดอยู่ก่อน" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "เลือกบอดี้ก่อน — คลิกในวิวพอร์ตหรือในรายการบอดี้" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "ลากลูกศรเพื่อย้าย ลากวงแหวนเพื่อหมุน — แล้วกดยืนยัน (Esc เพื่อยกเลิก)" @@ -25094,12 +25223,10 @@ msgstr "คลิกผิวหน้าบนทรงตัน แล้ว msgid "Placed on face — body laid flat on the bed" msgstr "วางบนผิวหน้าแล้ว — บอดี้วางราบบนฐานพิมพ์" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "การแก้ไขถูกปฏิเสธ: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25118,9 +25245,10 @@ msgstr "บอดี้นี้ไม่มีฟีเจอร์ให้ล msgid "feature %d" msgstr "ฟีเจอร์ %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "ลบ %s ซึ่งเป็นฟีเจอร์ที่ใช้สร้างบอดี้นี้แล้ว — กด Ctrl+Z เพื่อกู้คืน" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -25511,12 +25639,14 @@ msgstr "ไฟล์ STEP (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "ส่งออก STEP แล้ว" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "ส่งออก STEP ล้มเหลว: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "ส่งไปยังฐานพิมพ์ (แยกตามบอดี้) — ส่งแต่ละบอดี้ไปยังเตรียมพิมพ์เป็นวัตถุแยกกัน" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -25530,18 +25660,35 @@ msgstr "ไม่มีสิ่งที่จะส่งไปยังฐา msgid "All bodies hidden — show one before committing" msgstr "บอดี้ทั้งหมดถูกซ่อนอยู่ — แสดงอย่างน้อยหนึ่งบอดี้ก่อนส่งไปยังฐานพิมพ์" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" +msgstr[0] "%zu ขอบ" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "เส้นกึ่งกลาง E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "เส้น E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "ระนาบสเก็ตช์: %s — เลือกเครื่องมือ" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"ระนาบสเก็ตช์: %s\n" +"เลือกเครื่องมือ หรือกด Menu เพื่อดูรายการ" # AI Translated msgid "Plane ready" @@ -25551,8 +25698,9 @@ msgstr "ระนาบพร้อมแล้ว" msgid "Axis ready" msgstr "แกนพร้อมแล้ว" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "ระบบพิกัดพร้อมแล้ว" # AI Translated msgid "Helix ready" @@ -25570,9 +25718,10 @@ msgstr "สเก็ตช์พร้อมแล้ว" msgid "Mate ready" msgstr "เมทพร้อมแล้ว" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "ไม่ถูกต้อง: %s" # AI Translated #, c-format @@ -25654,110 +25803,139 @@ msgstr "แก้ไขตัวแปร" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "ไม่สามารถลบตัวแปร '%s' ได้ (อาจยังถูกอ้างอิงโดยนิพจน์ของฟีเจอร์): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" ไม่ใช่ค่าที่นิพจน์สามารถควบคุมได้" # AI Translated msgid "No binding for that field" msgstr "ไม่มีการผูกค่าสำหรับฟิลด์นั้น" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "ค่าต้องมากกว่าศูนย์" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "ค่าต้องไม่ติดลบ (ศูนย์หมายถึงทับกัน)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "ไม่สามารถทำให้มิตินั้นเป็นไปตามที่กำหนดได้ — สเก็ตช์มีเงื่อนไขบังคับเกิน" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "เงื่อนไขบังคับ %1% รายการใช้กับเรขาคณิตนี้ไม่ได้ (เส้นโค้งวงรีหรือสไปลน์ หรือวงกลมที่มีขนาดเป็นศูนย์) จึงถูกละเว้น" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "โปรไฟล์นี้ตัดกันเองหรือพับย้อนกลับที่เครื่องหมายสีแดง จึงไม่ได้ล้อมรอบเป็นพื้นที่เดียว" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "ความยาวด้าน" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "กึ่งแกนหลัก" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "กึ่งแกนรอง" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "มุมต้องอยู่ระหว่าง 0° ถึง 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "กึ่งแกนหลักต้องไม่สั้นกว่ากึ่งแกนรอง" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "รัศมีมุมต้องน้อยกว่าครึ่งหนึ่งของด้านที่สั้นกว่า" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "ร่องกว้างเกินไปสำหรับรัศมี — ความกว้างต้องน้อยกว่าสองเท่าของรัศมี" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "ไม่สามารถทำให้ %1% เป็นไปตามที่กำหนดได้ — สเก็ตช์มีเงื่อนไขบังคับเกิน" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "เส้นทั้งสองนั้นไม่ได้บรรจบกันที่มุม — เลือกเส้นสองเส้นที่บรรจบกัน" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "ขนาดต้องมากกว่าศูนย์" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "ลบมุมมน: รัศมีเกินความยาวของด้านใดด้านหนึ่ง หรือเส้นทั้งสองไม่ได้บรรจบกันที่มุม" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "ลบมุมเอียง: ระยะเกินความยาวของด้านใดด้านหนึ่ง หรือเส้นทั้งสองไม่ได้บรรจบกันที่มุม" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "นำเงื่อนไขบังคับ %1% รายการที่ใช้ไม่ได้แล้วหลังการลบมุมมน/ลบมุมเอียงออกแล้ว" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "ออฟเซ็ต: วงรีหรือสไปลน์ไม่มีเส้นขนานที่เป็นชนิดเดียวกัน — เลือกเส้น ส่วนโค้ง หรือวงกลม" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "ตัวคูณการปรับขนาดต้องมากกว่าศูนย์" +# AI Translated msgid "Copies" -msgstr "" +msgstr "จำนวนสำเนา" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "จำนวนสำเนาต้องเป็นจำนวนเต็มตั้งแต่ 2 ขึ้นไป" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "การแปลงรูปได้ปลดเงื่อนไขบังคับ %1% รายการ" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "สำเนาของอาร์เรย์ไม่มีเงื่อนไขบังคับ — ตัวแก้เงื่อนไขบังคับปฏิเสธการผูกทุกรายการ" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "คลิกขวาหรือดับเบิลคลิกเพื่อเสร็จสิ้น คลิกจุดเริ่มต้นเพื่อปิด" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "ต่อขยาย: คลิกเส้นหรือส่วนโค้งที่ต่อขยายไปถึงเอนทิตีอื่นได้" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "ตัดเล็ม: คลิกช่วงเส้นตรงตำแหน่งที่ตัดกับเอนทิตีอื่น" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "กด Enter หรือ ✓ เพื่อใช้, Esc เพื่อทิ้ง" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "ยังไม่รองรับการกำหนดมิติสำหรับเอนทิตีนั้น — คลิกเส้น วงกลม ส่วนโค้ง หรือจุดสองจุด" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "คลิกจุดที่สอง หรือคลิกเส้นที่ต้องการวัดระยะไปถึง" # AI Translated msgid "Enter a number" @@ -25793,8 +25971,12 @@ msgid "Sketch" msgstr "สเก็ตช์" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "คลิกผิวหน้าหรือระนาบอ้างอิง แล้วเลือกเครื่องมือวาด" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "เลือกผิวหน้าแบนราบหรือระนาบอ้างอิงเพื่อสเก็ตช์" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "สเก็ตช์บนผิวหน้าแบนราบหรือระนาบที่เลือก หรือคลิกเลือกในขั้นถัดไป" # AI Translated msgctxt "Design" @@ -25816,9 +25998,10 @@ msgctxt "Design" msgid "Thicken" msgstr "เพิ่มความหนา" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "รวม" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -25871,17 +26054,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "เพิ่มความหนาพื้นผิว" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "คำสั่งเพิ่มความหนาพื้นผิวต้องใช้บอดี้พื้นผิว — สร้างด้วยเครื่องมือพื้นผิวก่อน" # AI Translated msgctxt "Design" msgid "Hole" msgstr "รู" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -25896,8 +26077,9 @@ msgctxt "Design" msgid "Split" msgstr "แยก" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "คำสั่งแยกต้องใช้บอดี้ทรงตัน — เพิ่มหรือนำเข้าบอดี้ก่อน" # AI Translated msgid "Split the body along a picked face into two solids" @@ -25943,8 +26125,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "ออฟเซ็ตพื้นผิว" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "คำสั่งออฟเซ็ตพื้นผิวต้องใช้บอดี้พื้นผิว — สร้างด้วยเครื่องมือพื้นผิวก่อน" # AI Translated msgctxt "Design" @@ -25974,8 +26157,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "แพทเทิร์นตามเส้นโค้ง" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "แพทเทิร์นตามเส้นโค้งต้องใช้บอดี้และเส้นโค้ง" # AI Translated msgid "Repeat the body along a picked curve" @@ -25996,8 +26180,9 @@ msgctxt "Design" msgid "Align to" msgstr "จัดแนวกับ" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "คำสั่งจัดแนวต้องใช้บอดี้ — เพิ่มหรือนำเข้าบอดี้ก่อน" # AI Translated msgid "Align the body to a picked face or plane" @@ -26013,9 +26198,10 @@ msgctxt "Design" msgid "Axis" msgstr "แกน" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "ระบบพิกัด" # AI Translated msgctxt "Design" @@ -26031,9 +26217,10 @@ msgstr "วัด" msgid "Measure between the picked points, edges or faces" msgstr "วัดระหว่างจุด ขอบ หรือผิวหน้าที่เลือก" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "ปริมาตรและพื้นที่ผิว" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -26075,12 +26262,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "ลบผิวหน้า" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "สี" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "ตั้งค่าสีที่แสดงของบอดี้ที่เลือก" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "ซูมไปที่ส่วนที่เลือก" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "จัดส่วนที่เลือกให้พอดีกับมุมมอง โดยคงทิศทางมุมมองไว้" # AI Translated msgctxt "Design" @@ -26119,9 +26317,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "สี่เหลี่ยมผืนผ้าแบบมุม" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "สี่เหลี่ยมผืนผ้าแบบจุดศูนย์กลาง" # AI Translated msgctxt "Design" @@ -26133,9 +26332,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "สี่เหลี่ยมผืนผ้ามุมมน" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "วงกลมแบบจุดศูนย์กลาง" # AI Translated msgctxt "Design" @@ -26157,9 +26357,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "ส่วนโค้งสัมผัส" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "ส่วนโค้งแบบจุดศูนย์กลาง" # AI Translated msgctxt "Design" @@ -26191,48 +26392,54 @@ msgctxt "Design" msgid "Triangle" msgstr "สามเหลี่ยม" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "สามเหลี่ยม — คลิกจุดศูนย์กลาง แล้วคลิกจุดยอด" # AI Translated msgctxt "Design" msgid "Square" msgstr "สี่เหลี่ยมจัตุรัส" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "สี่เหลี่ยมจัตุรัส — คลิกจุดศูนย์กลาง แล้วคลิกจุดยอด" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "ห้าเหลี่ยม" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "ห้าเหลี่ยม — คลิกจุดศูนย์กลาง แล้วคลิกจุดยอด" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "หกเหลี่ยม" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "หกเหลี่ยม — คลิกจุดศูนย์กลาง แล้วคลิกจุดยอด" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "แปดเหลี่ยม" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "แปดเหลี่ยม — คลิกจุดศูนย์กลาง แล้วคลิกจุดยอด" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "สิบสองเหลี่ยม" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "สิบสองเหลี่ยม — คลิกจุดศูนย์กลาง แล้วคลิกจุดยอด" # AI Translated msgctxt "Design" @@ -26262,8 +26469,9 @@ msgctxt "Design" msgid "Text" msgstr "ข้อความ" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "พิมพ์ข้อความ; ข้อความจะกลายเป็นฟีเจอร์ข้อความบนระนาบของสเก็ตช์นี้ และแก้ไขได้ภายหลัง" # AI Translated msgctxt "Design" @@ -26380,27 +26588,34 @@ msgstr "มุม / ระยะ…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "พิมพ์มุมระหว่างเส้นสองเส้น หรือระยะระหว่างสองตำแหน่งที่เลือก" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "พิมพ์ข้อความที่จะแทรก" +# AI Translated msgid "Bold" -msgstr "" +msgstr "ตัวหนา" +# AI Translated msgid "Italic" -msgstr "" +msgstr "ตัวเอียง" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "ไม่สามารถใช้แบบอักษรนี้กับข้อความได้ — เลือกแบบอักษรอื่น" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "พิมพ์ข้อความเพื่อดูขนาด" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "แบบอักษรนี้ไม่มีเส้นขอบสำหรับข้อความนี้" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "ขนาด: %.1f × %.1f มม." # AI Translated msgid "Primitive" @@ -26498,8 +26713,9 @@ msgstr "โปรไฟล์" msgid "Start new profile (for holes)" msgstr "เริ่มโปรไฟล์ใหม่ (สำหรับรู)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "เซกเมนต์" # AI Translated msgid "Sides" @@ -26513,20 +26729,23 @@ msgstr "คลิกบนพื้นที่วาดเพื่อวาด msgid "Snap to grid" msgstr "สแน็ปกับกริด" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "ระยะกริด" # AI Translated msgid "Outer" msgstr "ด้านนอก" +# AI Translated msgid "closed" -msgstr "" +msgstr "แบบปิด" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% จุด %4%" # AI Translated msgid "XY (Top)" @@ -26562,8 +26781,9 @@ msgstr[0] "โปรไฟล์ปิด %zu รายการ" msgid "Draw a closed profile to enable" msgstr "วาดโปรไฟล์ปิดเพื่อเปิดใช้งาน" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "ล้างทั้งหมด" # AI Translated msgid "Empty result" @@ -30675,6 +30895,39 @@ msgstr "" "หลีกเลี่ยงการบิดเบี้ยว\n" "คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(ทดลอง) ใช้เอเจนต์เครื่องพิมพ์แทนโฮสต์การพิมพ์" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "ฟีเจอร์" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "คลิกผิวหน้าหรือระนาบอ้างอิงในวิวพอร์ต แล้วเลือกเครื่องมือสเก็ตช์" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "คลิกผิวหน้าหรือระนาบอ้างอิง แล้วเลือกเครื่องมือสเก็ตช์" + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "ระนาบ %s ถูกเลือก — คลิกขวาเพื่อดูเครื่องมือวาด" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "ยังไม่มีอะไร — นำเข้า STEP หรือเมชจากแถบเครื่องมือ\n" +#~ "หรือคลิกระนาบอ้างอิงแล้วคลิกขวาเพื่อเริ่มสเก็ตช์" + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "คลิกผิวหน้าหรือระนาบอ้างอิง แล้วเลือกเครื่องมือวาด" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 05e70c3a2c..44a8586724 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2026-08-21 23:18+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" @@ -3435,8 +3435,8 @@ msgstr "Ek işlem ön ayarı" msgid "Remove parameter" msgstr "Parametreyi kaldır" -msgid "to" -msgstr "ile" +msgid "Range" +msgstr "Aralık" msgid "Add height range" msgstr "Yükseklik aralığı ekle" @@ -5502,9 +5502,6 @@ msgstr "parametre adı" msgid "layers" msgstr "katman" -msgid "Range" -msgstr "Aralık" - msgid "Empty string" msgstr "Boş dize" @@ -8845,8 +8842,9 @@ msgstr "Bağlı yazıcı: %s. Yazdırma için proje ön ayarıyla eşleşmelidir msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Yazıcı bilgilerini senkronize etmek ve ön ayarı otomatik olarak değiştirmek ister misiniz?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Bu proje, Tasarım sekmesinde oluşturulmuş bir model içeriyor ve başka geometri içermiyor. Görüntülemek ve düzenlemek için Tercihler'de \"CAD özelliği (deneysel)\" seçeneğini etkinleştirin ve yeniden başlatın; model, proje kaydedildiğinde korunur." msgid "The file does not contain any geometry data." msgstr "Dosya herhangi bir geometri verisi içermiyor." @@ -9900,8 +9898,9 @@ msgstr "Tasarım sekmesinde montaj bağlayıcısını, dönüş çeyreği olan g msgid "Auto-close sketch loops" msgstr "Eskiz döngülerini otomatik kapat" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Birbirine 0,001 mm'den yakın eskiz uç noktalarını tek bir birleşim noktası sayar ve döngüyü kaynaklayarak kapatır. Kapalı: yalnızca tam çakışan uç noktalar birleşir; bu nedenle küçük bir boşluğu olan döngü sizin için kapatılmak yerine açık olarak gösterilir. Her tasarımla birlikte kaydedilir; değişiklikten sonra başlatılan tasarımlara uygulanır." # AI Translated msgid "Pan" @@ -10358,18 +10357,6 @@ msgstr "Desteklenmeyen ön ayarları göster" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Yazıcı ve filament açılır listelerinde uyumsuz/desteklenmeyen ön ayarları gösterir. Bu ön ayarlar seçilemez." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Deneysel) Baskı sunucuları yerine yazıcı aracılarını kullan" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Bambu olmayan yazıcıların baskı işlerini, klasik baskı sunucusuna yükleme akışı yerine yazıcı eklenti aracıları üzerinden yönlendirir.\n" -"Devre dışı bırakıldığında OrcaSlicer eski baskı sunucusu davranışını kullanır." - # AI Translated msgid "Experimental Features" msgstr "Deneysel Özellikler" @@ -10386,6 +10373,18 @@ msgstr "" "Nesne mesh'i değiştikten sonra (kesme/diskten yeniden yükleme/basitleştirme/onarma vb.) boyanmış özellikleri (renk/dikiş/destek/pütür vb.) korumaya çalışır.\n" "Oldukça deneyseldir! Yavaştır ve bozulmalara yol açabilir." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Baskı sunucuları yerine yazıcı aracılarını kullan" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Bambu olmayan yazıcıların baskı işlerini, klasik baskı sunucusuna yükleme akışı yerine yazıcı eklenti aracıları üzerinden yönlendirir.\n" +"Devre dışı bırakıldığında OrcaSlicer eski baskı sunucusu davranışını kullanır." + msgid "Allow Abnormal Storage" msgstr "Anormal Depolamaya İzin Ver" @@ -10555,6 +10554,9 @@ msgstr "Diğer katman filament dizisi" msgid "Please input layer value (>= 2)." msgstr "Lütfen katman değerini girin (>= 2)." +msgid "to" +msgstr "ile" + msgid "Plate name" msgstr "Plaka adı" @@ -16503,6 +16505,14 @@ msgstr "Simetrik dolgu Y ekseni" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Modelin Y ekseni etrafında simetrik iki parçası varsa ve bu parçaların simetrik dokulara sahip olmasını istiyorsanız, lütfen parçalardan birinde bu seçeneğe tıklayın." +# AI Translated +msgid "Fill pattern tops" +msgstr "Desenin üst kısımlarını doldur" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Dolgu deseninin üst kısımlarını tamamen doldurmak istiyorsanız bu seçeneği seçin" + msgid "Infill combination - Max layer height" msgstr "Dolgu kombinasyonu - Maksimum katman yüksekliği" @@ -22911,6 +22921,26 @@ msgstr "Filament mevcut makine ayarlarıyla uyumlu olmayabilir. Rastgele bir fil msgid "The filament model is unknown. A random filament preset will be used." msgstr "Filament modeli bilinmiyor. Rastgele bir filament ön ayarı kullanılacaktır." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Referans düzlemlerini ve eksenlerini gizle" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Referans düzlemlerini ve eksenlerini göster" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Yazıcı yatağını ve plaka ızgarasını gizle" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Yazıcı yatağını ve plaka ızgarasını göster" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Üzerine eskiz çizmek için bir referans düzlemine veya düz bir yüze tıklayın — Esc iptal eder" + # AI Translated msgid "Construction" msgstr "Yardımcı" @@ -22936,8 +22966,9 @@ msgstr "Daire — merkeze, ardından yarıçapa tıklayın" msgid "Arc — click start, end, then a point" msgstr "Yay — başlangıca, bitişe, ardından bir noktaya tıklayın" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Kanal — merkez çizgisinin iki ucu, ardından genişlik" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -23011,8 +23042,9 @@ msgstr "Dünya eksenleri gösterildi" msgid "World axes hidden" msgstr "Dünya eksenleri gizlendi" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Aksonometrik görünüm, sığdırıldı" # AI Translated msgid "Bed shown" @@ -23023,34 +23055,12 @@ msgid "Bed hidden" msgstr "Yatak gizlendi" # AI Translated -msgid "FEATURES" -msgstr "UNSURLAR" +msgid "Reference planes shown" +msgstr "Referans düzlemleri gösterildi" # AI Translated -msgid "Sketch" -msgstr "Eskiz" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Eskiz düzlemi: %s — bir araç seçin" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Görünüm penceresinde bir yüze veya referans düzlemine, ardından bir eskiz aracına tıklayın" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Eskiz düzlemi: %s.\n" -"Bir araç seçin veya liste için Menü tuşuna basın." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Bir yüze veya referans düzlemine, ardından bir eskiz aracına tıklayın." +msgid "Reference planes hidden" +msgstr "Referans düzlemleri gizlendi" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -23236,8 +23246,9 @@ msgstr "Eksen" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Referans ekseni (iki nokta, yüz normali, silindir merkez çizgisi, iki düzlem, kenar boyunca)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Koordinat sistemi" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -23301,8 +23312,9 @@ msgstr "Aynalama için bir gövde gerekir — önce bir tane ekleyin veya içe a msgid "Mate" msgstr "Montaj ilişkisi" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Montaj: iki koordinat sistemini hizalayın (sabit, düzlemsel, döner, kayar, silindirik)" # AI Translated msgid "Boolean (combine bodies)" @@ -23401,14 +23413,6 @@ msgstr "Silindirik bir yüzeye (iç delik / dış) veya dairesel bir kenara diş msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Diş için silindirik bir yüzey (delik / dış) veya dairesel bir kenar seçin" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "STEP içe aktar (düzenlenebilir B-rep katı)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Mesh'i (STL/OBJ) düzenlenebilir B-rep katı olarak içe aktar" - # AI Translated msgid "Constrain selected sketch" msgstr "Seçili eskizi kısıtla" @@ -23441,8 +23445,9 @@ msgstr "Başlangıca, ardından bitişe tıklayın — sonra tam uzunluğu ayarl msgid "Polyline" msgstr "Çoklu çizgi" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Noktalara tıklayın; döngüyü kapatmak için ilk noktaya tıklayın, zinciri bitirmek için sağ tıklayın veya Enter'a basın" # AI Translated msgid "Corner rectangle" @@ -23532,8 +23537,9 @@ msgstr "Merkeze, ardından başlangıca, sonra bitiş açısı için bir noktaya msgid "Slot" msgstr "Kanal" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Merkez çizgisinin iki ucuna, ardından genişlik için bir noktaya tıklayın" # AI Translated msgid "Arc slot" @@ -23563,8 +23569,9 @@ msgstr "Merkeze, büyük eksen ucuna, küçük eksen noktasına, ardından yayı msgid "Spline" msgstr "Spline" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Kontrol noktalarına tıklayın; bitirmek için çift tıklayın, sağ tıklayın veya Enter'a basın" # AI Translated msgid "Click to place a point" @@ -23618,15 +23625,17 @@ msgstr "Bir aynalama ekseni çizgisi, ardından aynalanacak öğeleri seçin; uy msgid "Trim" msgstr "Kırp" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Bir segmenti en yakın kesişimine kadar kırpmak için ona tıklayın; çıkmak için Esc'ye basın" # AI Translated msgid "Extend" msgstr "Uzat" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Bir çizgiyi veya yayı en yakın öğeye kadar uzatmak için ona tıklayın; çıkmak için Esc'ye basın" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23809,13 +23818,21 @@ msgstr "Dikey mesafe" msgid "New Design — clear the feature tree" msgstr "Yeni Tasarım — unsur ağacını temizle" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "STEP içe aktar (düzenlenebilir B-rep katı)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Mesh'i (STL/OBJ) düzenlenebilir B-rep katı olarak içe aktar" + # AI Translated msgid "Export STEP…" msgstr "STEP olarak dışa aktar…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Yazıcı yatağını ve plaka ızgarasını göster" +msgid "Create a new sketch" +msgstr "Yeni bir eskiz oluştur" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23829,20 +23846,25 @@ msgstr "Kesit Görünümü — içini görmek için modelin bir kısmını gizle msgid "Flip Section — show the opposite half" msgstr "Kesiti Çevir — karşı yarıyı göster" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Plakaya Aktar'ın gövdeleri nasıl göndereceğini seçin" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Plakaya Aktar" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Tüm gövdeler, her gövde için bir parça içeren tek bir nesne olur ve birbirlerine göre konumlarını korur" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Plakaya Aktar (gövdeler olarak)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Her gövde ayrı bir nesne olur ve ayrı ayrı yerleştirilir" # AI Translated msgid "Width / X" @@ -23852,6 +23874,10 @@ msgstr "Genişlik / X" msgid "Height / Y" msgstr "Yükseklik / Y" +# AI Translated +msgid "Sketch" +msgstr "Eskiz" + # AI Translated msgid "Distance X" msgstr "Mesafe X" @@ -24054,8 +24080,9 @@ msgstr "Dairesel" msgid "Direction" msgstr "Yön" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Toplam açı (°)" # AI Translated msgid "Boolean" @@ -24439,11 +24466,13 @@ msgstr "Silindirik — eksenler eş doğrusal; serbest dönme + eksenel kayma" msgid "Kind" msgstr "Tür" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (sabit)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (hareketli)" # AI Translated msgid "Angle °" @@ -24481,6 +24510,10 @@ msgstr "(bağlama yok)" msgid "Value" msgstr "Değer" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Bir araç seçin veya liste için Menü tuşuna basın." + # AI Translated msgid "Constraints" msgstr "Kısıtlamalar" @@ -24519,6 +24552,10 @@ msgstr "Aşağı taşı" msgid "Show / hide" msgstr "Göster / gizle" +# AI Translated +msgid "Zoom to selection" +msgstr "Seçime yakınlaştır" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Girişim kontrolü — çakışan gövdeleri bul" @@ -24540,14 +24577,17 @@ msgstr "Gövde %d seçildi — uygulanabilecek işlemler için sağ tıklayın" msgid "Variables" msgstr "Değişkenler" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Değişken ekle" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Değişkeni düzenle" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Değişkeni sil" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24566,9 +24606,10 @@ msgstr "Eskiz güncellendi" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Eskiz oluşturuldu (%zu sürücü ölçü) — seçin, ardından Ekstrüzyon için sağ tıklayın" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Uzunluk %.2f mm, açı %.1f°" # AI Translated msgid "(locked)" @@ -24590,6 +24631,10 @@ msgstr "Bölge seçildi — Ekstrüzyon için sağ tıklayın veya düzenlemek i msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Eskiz seçildi — Ekstrüzyon için sağ tıklayın veya düzenlemek için çift tıklayın" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Bu yüz düz değil — düz bir yüze veya referans düzlemine tıklayın" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24618,30 +24663,29 @@ msgstr "Gövde %d: yüz %d seçildi — itmek/çekmek için sağ tıklayın veya msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Yüz %d seçildi — itmek/çekmek için sağ tıklayın veya tüm gövde için tekrar tıklayın" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Gövde %d: %zu kenar seçildi — Shift+tıklama bir kenar ekler veya kaldırır, Yuvarlatma/Pah hepsini işler" +msgstr[1] "Gövde %d: %zu kenar seçildi — Shift+tıklama bir kenar ekler veya kaldırır, Yuvarlatma/Pah hepsini işler" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "%zu kenar seçildi — Shift+tıklama bir kenar ekler veya kaldırır, Yuvarlatma/Pah hepsini işler" +msgstr[1] "%zu kenar seçildi — Shift+tıklama bir kenar ekler veya kaldırır, Yuvarlatma/Pah hepsini işler" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "%s düzlemi seçildi — çizim araçları için sağ tıklayın" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Gövde %d: kenar %d seçildi — kenar eklemek için Shift ile tıklayın veya tüm gövde için tekrar tıklayın" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Kenar %d seçildi — kenar eklemek için Shift ile tıklayın veya tüm gövde için tekrar tıklayın" # AI Translated #, c-format, boost-format @@ -24666,8 +24710,9 @@ msgstr "Araçtan çıkıldı" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Eskiz korundu — kaydetmek için Onayla'ya, atmak için İptal'e basın" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Silmek için bir şey seçin" # AI Translated msgid "✗ Conflicting constraints" @@ -24699,17 +24744,21 @@ msgstr "Düzenleniyor: Eskiz %d · N = düzleme dik bak · Araç çubuğ msgid "OK — %zu triangles" msgstr "Tamam — %zu üçgen" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Metni düzenleyin — Enter uygular, Esc eski hâlinde bırakır" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Metni yazın — siz yazdıkça görünümde belirir; Enter ekler, Esc iptal eder" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Metin değişmedi" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Metin iptal edildi" # AI Translated msgid "Import SVG" @@ -24735,9 +24784,10 @@ msgstr "STEP okunuyor…" msgid "No solids found in STEP" msgstr "STEP içinde katı bulunamadı" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "STEP içe aktarma başarısız oldu: %s" # AI Translated msgid "Rebuilding model…" @@ -24762,9 +24812,10 @@ msgstr "Mesh dosyaları (*.stl;*.obj)|*.stl;*.obj|Tüm dosyalar|*.*" msgid "Could not read the STL file" msgstr "STL dosyası okunamadı" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "OBJ dosyası okunamadı: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -24789,20 +24840,23 @@ msgstr "" msgid "Large mesh" msgstr "Büyük mesh" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Mesh dönüştürme başarısız oldu: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "Mesh dönüştürme hiç geometri üretmedi" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Mesh" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Mesh içe aktarma başarısız oldu: %s" # AI Translated #, c-format, boost-format @@ -24831,17 +24885,19 @@ msgstr " — yerleştirmek/boyutlandırmak için sürükleyin, ardından Onayla' msgid "Insert canceled" msgstr "Ekleme iptal edildi" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Ölçeklendirmek için bir köşeyi, taşımak için merkezi sürükleyin — bitince Enter veya ✓, atmak için Esc" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Eskiz eklendi (düzlem: %s) — seçin, ardından Ekstrüzyon için sağ tıklayın" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Model yeniden oluşturulamadı: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -24913,18 +24969,21 @@ msgstr "Önce açık çizgi içeren bir eskiz seçin" msgid "Add at least one face to delete first" msgstr "Önce silinecek en az bir yüz ekleyin" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Montaj ilişkisi için iki koordinat sistemi gerekir — önce bunları oluşturun" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Montaj ilişkisi: A ve B farklı koordinat sistemleri olmalıdır" # AI Translated msgid "Mate rejected" msgstr "Montaj ilişkisi reddedildi" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Girişim için en az iki gövde gerekir" # AI Translated msgid "No interference found" @@ -24935,36 +24994,43 @@ msgstr "Girişim bulunamadı" msgid "Body %d" msgstr "Gövde %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu çakışan çift: %s" +msgstr[1] "%zu çakışan çift: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Ölçmek için bir gövde seçin" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Bu gövde ölçülemedi" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: yüzey gövdesi, alan %.2f mm², hacim yok — hacim kazandırmak için kalınlaştırın" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: hacim %.2f mm³, alan %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Çoğaltma için katı bir gövde gerekir — önce bir tane ekleyin veya içe aktarın" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Boole için iki gövde gerekir — ikinci bir gövde ekleyin veya içe aktarın" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -24979,35 +25045,45 @@ msgstr "Seçilen yüz (Gövde %d)" msgid "Picked face" msgstr "Seçilen yüz" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "yeni şekil gövdeyle birleştirilemedi" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "yeni şekil gövdeden çıkarılamadı" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "şekillerin kesişimi alınamadı" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "unsur geçmişinde henüz katı oluşturan bir şey yok" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "eskiz profili temiz bir kapalı döngü değil" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "araç gövdesi hedefe temas etmiyor" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "bir ifade var olmayan bir değişken kullanıyor" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "bir ifade sıfıra bölüyor" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "iki değişken birbiri cinsinden tanımlanmış" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "bir geometri işlemi başarısız oldu" # AI Translated #, c-format, boost-format @@ -25046,15 +25122,17 @@ msgstr "Ölçü — ikinci noktaya tıklayın" msgid "Line — click the start point" msgstr "Çizgi — başlangıç noktasına tıklayın" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Çizgi — bitiş noktasına tıklayın; ardından uzunluğu ve açısı yazılabilir" # AI Translated msgid "Polyline — click the first point" msgstr "Çoklu çizgi — ilk noktaya tıklayın" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Çoklu çizgi — sonraki noktaya tıklayın · kapatmak için başlangıç noktasına tıklayın · sağ tıklama, çift tıklama veya Enter zinciri bitirir" # AI Translated msgid "Rectangle — click one corner" @@ -25100,8 +25178,9 @@ msgstr "Yuvarlatılmış dikdörtgen — köşe yarıçapını ayarlamak için t msgid "Circle — click the center" msgstr "Daire — merkeze tıklayın" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Daire — yarıçapı ayarlamak için tıklayın; ardından yazarak da girebilirsiniz" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -25227,18 +25306,21 @@ msgstr "Eliptik yay — yayın bittiği yere tıklayın" msgid "Spline — click the first control point" msgstr "Spline — ilk kontrol noktasına tıklayın" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline — sonraki kontrol noktasına tıklayın · sağ tıklama, çift tıklama veya Enter eğriyi bitirir" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Nokta — yerleştirmek için tıklayın; araç daha fazlası için etkin kalır" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Kırp — bir segmente, başka bir öğeyle kesiştiği yerde tıklayın · çıkmak için Esc'ye basın" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Uzat — en yakın öğeye kadar uzatmak için bir çizgiye veya yaya tıklayın · çıkmak için Esc'ye basın" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -25248,8 +25330,9 @@ msgstr "Yuvarlatma — birleşen iki çizgiden ilkine tıklayın" msgid "Fillet — click the second line" msgstr "Yuvarlatma — ikinci çizgiye tıklayın" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Yuvarlatma — oku sürükleyin veya yarıçapı yazmak için sayıya tıklayın · Enter uygular · Esc iptal eder" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -25259,63 +25342,74 @@ msgstr "Pah — birleşen iki çizgiden ilkine tıklayın" msgid "Chamfer — click the second line" msgstr "Pah — ikinci çizgiye tıklayın" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Pah — oku sürükleyin veya pah mesafesini yazmak için sayıya tıklayın · Enter uygular · Esc iptal eder" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Ofset — bir eğriye tıklayın; tüm dış hattı ofsetlenir" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Ofset — oku iki yönden birine sürükleyin veya mesafeyi yazmak için sayıya tıklayın · Enter uygular · Esc iptal eder" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Aynala — önce aynalama ekseni olacak ÇİZGİYE tıklayın (yardımcı çizgi de olur)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Aynala — eksen belirlendi · şimdi aynalanacak öğelere tıklayın · Esc iptal eder" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Aynala — eksen belirlendi · aynalanacak: %d · eklemek veya kaldırmak için başka bir öğeye tıklayın · Enter uygular" # AI Translated msgid "Move — click the entities to move" msgstr "Taşı — taşınacak öğelere tıklayın" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Taşı — tutamacı sürükleyin veya mesafeyi yazmak için sayıya tıklayın · Enter uygular" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Döndür — döndürülecek öğelere tıklayın" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Döndür — tutamacı sürükleyin veya açıyı yazmak için sayıya tıklayın · Enter uygular" # AI Translated msgid "Scale — click the entities to scale" msgstr "Ölçeklendir — ölçeklendirilecek öğelere tıklayın" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Ölçeklendir — tutamacı sürükleyin veya katsayıyı yazmak için sayıya tıklayın · Enter uygular" # AI Translated msgid "Array — click the entities to repeat" msgstr "Dizi — tekrarlanacak öğelere tıklayın" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Dizi — adımı ayarlamak için tutamacı sürükleyin, adedi yazmak için adet değerine tıklayın · Enter uygular" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Dairesel dizi — tekrarlanacak öğelere tıklayın" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Dairesel dizi — açıyı ayarlamak için tutamacı sürükleyin, adedi yazmak için adet değerine tıklayın · Enter uygular" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Ölçeklendirmek için bir köşeyi, taşımak için merkezi sürükleyin · bitince Enter veya ✓, atmak için Esc" # AI Translated msgid " · Esc goes back to Select" @@ -25325,62 +25419,77 @@ msgstr " · Esc ile Seç aracına dönülür" msgid " · click a constraint badge to remove it" msgstr " · kaldırmak için bir kısıtlama rozetine tıklayın" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — katı gövde" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — yüzey gövdesi" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Düz yüz %d (%s)" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Silindirik yüz %d (%s)" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Yüz %d (%s)" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu kenar (%s)" +msgstr[1] "%zu kenar (%s)" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Düz kenar %d (%s)" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Dairesel kenar %d (%s)" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Köşe noktası (%s)" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Eskiz profili" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Eskiz — hiçbir şey seçilmedi" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Eskiz çizgisi" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Eskiz eğrisi" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Eskiz noktası" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d eskiz öğesi" # AI Translated msgid "select something first" @@ -25443,8 +25552,9 @@ msgstr "Düzlem eklendi — onu eskiz düzlemi olarak seçin" msgid "Axis added" msgstr "Eksen eklendi" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Koordinat sistemi eklendi" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -25461,10 +25571,10 @@ msgstr "Koniklik için seçilmiş bir yüz gerekir — önce bir yan yüze tıkl # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Henüz bir şey yok — araç çubuğundan bir STEP veya mesh içe aktarın\n" -"ya da bir eskize başlamak için bir referans düzlemine tıklayıp sağ tıklayın." +"ya da bir eskize başlamak için Eskiz'e basıp bir referans düzlemine tıklayın." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -25474,9 +25584,10 @@ msgstr "Henüz katı yok — Ekstrüzyon için bir eskiz seçip sağ tıklayın. msgid "Could not restore the CAD model from this project" msgstr "CAD modeli bu projeden geri yüklenemedi" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "CAD modeli geri yüklenemedi: %s" # AI Translated #, c-format @@ -25499,17 +25610,35 @@ msgstr "Kesit görünümü — üst yarı gösteriliyor" msgid "Section view — showing the lower half" msgstr "Kesit görünümü — alt yarı gösteriliyor" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Unsurun yüzleri bulunuyor…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Önce bir gövde seçin — görünüm penceresinde veya Gövdeler listesinde ona tıklayın" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Model yeniden oluşturuluyor — bittiğinde tekrar yakınlaştırın" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s içinde yakınlaştırılacak görünür bir şey yok" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Bu gövdenin henüz görüntüleme mesh'i yok — önce yeniden hesaplayın" +# AI Translated +msgid "Select something to zoom to" +msgstr "Yakınlaştırmak için bir şey seçin" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Önce açık olanı bitirin veya iptal edin" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Önce bir gövde seçin — görünüm penceresinde veya Gövdeler listesinde ona tıklayın" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Taşımak için okları, döndürmek için halkaları sürükleyin — ardından Onayla'ya basın (Esc iptal eder)" @@ -25535,12 +25664,10 @@ msgstr "Katı üzerinde bir yüze tıklayın, ardından F'ye basın" msgid "Placed on face — body laid flat on the bed" msgstr "Yüze yerleştirildi — gövde yatağa düz yatırıldı" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Düzenleme reddedildi: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25559,9 +25686,10 @@ msgstr "Bu gövdenin silinecek unsuru yok — baştan başlamak için Yeni Tasar msgid "feature %d" msgstr "unsur %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "Bu gövdenin oluşturulduğu unsur olan %s silindi — Ctrl+Z ile geri getirebilirsiniz" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -25953,12 +26081,14 @@ msgstr "STEP dosyaları (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP dışa aktarıldı" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "STEP dışa aktarma başarısız oldu: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Plakaya Aktar (gövdeler olarak) — her gövdeyi ayrı bir nesne olarak Hazırlık'a gönder" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -25972,19 +26102,36 @@ msgstr "Aktarılacak bir şey yok — önce bir unsur ekleyin" msgid "All bodies hidden — show one before committing" msgstr "Tüm gövdeler gizli — aktarmadan önce birini gösterin" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%zu kenar" +msgstr[1] "%zu kenar" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Merkez çizgisi E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Çizgi E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Eskiz düzlemi: %s — bir araç seçin" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Eskiz düzlemi: %s.\n" +"Bir araç seçin veya liste için Menü tuşuna basın." # AI Translated msgid "Plane ready" @@ -25994,8 +26141,9 @@ msgstr "Düzlem hazır" msgid "Axis ready" msgstr "Eksen hazır" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Koordinat sistemi hazır" # AI Translated msgid "Helix ready" @@ -26013,9 +26161,10 @@ msgstr "Eskiz hazır" msgid "Mate ready" msgstr "Montaj ilişkisi hazır" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Geçersiz: %s" # AI Translated #, c-format @@ -26099,110 +26248,139 @@ msgstr "Değişkeni Düzenle" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "'%s' değişkeni kaldırılamadı (muhtemelen hâlâ bir unsur ifadesinde başvuruluyor): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" bir ifadeyle belirlenebilecek bir değer değil" # AI Translated msgid "No binding for that field" msgstr "Bu alan için bağlama yok" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "Değer sıfırdan büyük olmalıdır" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "Değer negatif olamaz (sıfır, çakışık anlamına gelir)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Bu ölçü sağlanamıyor — eskiz aşırı kısıtlı" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "%1% kısıtlama bu geometriye uygulanamıyor (elips veya spline eğrisi ya da sıfır boyutlu daire) ve yok sayılıyor" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Bu profil kırmızı işaretin olduğu yerde kendisiyle kesişiyor veya kendi üzerine geri katlanıyor, bu yüzden tek bir bölgeyi sınırlamıyor" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Kenar" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Yarı büyük eksen" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Yarı küçük eksen" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "Açı 0° ile 360° arasında olmalıdır" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "Yarı büyük eksen, yarı küçük eksenden kısa olamaz" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "Köşe yarıçapı kısa kenarın yarısından küçük olmalıdır" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "Kanal, yarıçapına göre çok geniş — genişlik yarıçapın iki katından küçük olmalıdır" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "%1% sağlanamıyor — eskiz aşırı kısıtlı" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Bu iki çizgi bir köşede birleşmiyor — bir köşede birleşen iki çizgi seçin" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "Boyut sıfırdan büyük olmalıdır" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Yuvarlatma: yarıçap kollardan birinin ucunu aşıyor veya iki çizgi bir köşede birleşmiyor" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Pah: mesafe kollardan birinin ucunu aşıyor veya iki çizgi bir köşede birleşmiyor" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "Yuvarlatma/pah nedeniyle geçersiz hâle gelen %1% kısıtlama kaldırıldı" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Ofset: bir elipsin veya spline'ın kendi türünden bir paraleli yoktur — çizgi, yay veya daire seçin" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Ölçek katsayısı sıfırdan büyük olmalıdır" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Kopyalar" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Kopya sayısı 2 veya daha büyük bir tam sayı olmalıdır" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "%1% kısıtlama dönüştürme nedeniyle serbest bırakıldı" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Dizi kopyaları kısıtlanmamış — çözücü tüm bağlamaları reddetti" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "bitirmek için sağ tıklayın veya çift tıklayın, kapatmak için başlangıç noktasına tıklayın" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Uzat: başka bir öğeye ulaşabilen bir çizgiye veya yaya tıklayın" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Kırp: başka bir öğeyle kesiştiği yerde bir segmente tıklayın" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Uygulamak için Enter'a veya ✓ düğmesine, atmak için Esc'ye basın" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Bu öğe için henüz ölçü yok — bir çizgiye, daireye, yaya veya iki noktaya tıklayın" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "İkinci bir noktaya veya mesafenin ölçüleceği bir çizgiye tıklayın" # AI Translated msgid "Enter a number" @@ -26238,8 +26416,12 @@ msgid "Sketch" msgstr "Eskiz" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Bir yüze veya referans düzlemine tıklayın, ardından bir çizim aracı seçin" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Üzerine eskiz çizmek için düz bir yüz veya referans düzlemi seçin" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Seçili düz yüz veya düzlem üzerinde eskiz çizin ya da ardından birine tıklayın" # AI Translated msgctxt "Design" @@ -26261,9 +26443,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Kalınlaştır" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Birleştirme" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -26316,17 +26499,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Yüzeyi Kalınlaştır" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Yüzey kalınlaştırma için bir yüzey gövdesi gerekir — önce bir Yüzey aracıyla bir tane oluşturun" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Delik" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -26341,8 +26522,9 @@ msgctxt "Design" msgid "Split" msgstr "Böl" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Bölme için katı bir gövde gerekir — önce bir tane ekleyin veya içe aktarın" # AI Translated msgid "Split the body along a picked face into two solids" @@ -26388,8 +26570,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Yüzey Ofseti" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Yüzey ofseti için bir yüzey gövdesi gerekir — önce bir Yüzey aracıyla bir tane oluşturun" # AI Translated msgctxt "Design" @@ -26419,8 +26602,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Eğri Üzerinde Çoğaltma" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Eğri Üzerinde Çoğaltma için bir gövde ve bir eğri gerekir" # AI Translated msgid "Repeat the body along a picked curve" @@ -26441,8 +26625,9 @@ msgctxt "Design" msgid "Align to" msgstr "Hizala" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Hizalama için bir gövde gerekir — önce bir tane ekleyin veya içe aktarın" # AI Translated msgid "Align the body to a picked face or plane" @@ -26458,9 +26643,10 @@ msgctxt "Design" msgid "Axis" msgstr "Eksen" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Koordinat sistemi" # AI Translated msgctxt "Design" @@ -26476,9 +26662,10 @@ msgstr "Ölçüm" msgid "Measure between the picked points, edges or faces" msgstr "Seçilen noktalar, kenarlar veya yüzler arasında ölçüm yapın" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Hacim ve alan" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -26520,12 +26707,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Yüzü Sil" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Renk" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Seçili gövdenin görüntüleme rengini ayarlayın" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Seçime yakınlaştır" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Görünüm yönünü koruyarak seçimi görünümde çerçeveleyin" # AI Translated msgctxt "Design" @@ -26564,9 +26762,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Köşe dikdörtgeni" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Merkez dikdörtgeni" # AI Translated msgctxt "Design" @@ -26578,9 +26777,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Yuvarlatılmış dikdörtgen" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Merkezden daire" # AI Translated msgctxt "Design" @@ -26602,9 +26802,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Teğet yay" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Merkez noktalı yay" # AI Translated msgctxt "Design" @@ -26636,48 +26837,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Üçgen" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Üçgen — merkeze, ardından bir köşe noktasına tıklayın" # AI Translated msgctxt "Design" msgid "Square" msgstr "Kare" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Kare — merkeze, ardından bir köşe noktasına tıklayın" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Beşgen" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Beşgen — merkeze, ardından bir köşe noktasına tıklayın" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Altıgen" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Altıgen — merkeze, ardından bir köşe noktasına tıklayın" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Sekizgen" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Sekizgen — merkeze, ardından bir köşe noktasına tıklayın" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Onikigen" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Onikigen — merkeze, ardından bir köşe noktasına tıklayın" # AI Translated msgctxt "Design" @@ -26707,8 +26914,9 @@ msgctxt "Design" msgid "Text" msgstr "Metin" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Metin yazın; bu eskizin düzleminde, daha sonra düzenlenebilen bir Metin unsuruna dönüşür" # AI Translated msgctxt "Design" @@ -26825,27 +27033,34 @@ msgstr "Açı / mesafe…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "İki çizgi arasındaki açıyı veya iki seçim arasındaki mesafeyi yazın" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Eklenecek metni yazın" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Kalın" +# AI Translated msgid "Italic" -msgstr "" +msgstr "İtalik" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Bu yazı tipi metin için kullanılamaz — başka bir tane seçin" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Boyutunu görmek için metni yazın" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Bu yazı tipinde bu metin için dış hat yok" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Boyut: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -26943,8 +27158,9 @@ msgstr "Profil" msgid "Start new profile (for holes)" msgstr "Yeni profil başlat (delikler için)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Segmentler" # AI Translated msgid "Sides" @@ -26958,20 +27174,23 @@ msgstr "Çizmek için tuvale tıklayın" msgid "Snap to grid" msgstr "Izgaraya yasla" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Izgara adımı" # AI Translated msgid "Outer" msgstr "Dış" +# AI Translated msgid "closed" -msgstr "" +msgstr "kapalı" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% nokta %4%" # AI Translated msgid "XY (Top)" @@ -27008,8 +27227,9 @@ msgstr[1] "%zu kapalı profil" msgid "Draw a closed profile to enable" msgstr "Etkinleştirmek için kapalı bir profil çizin" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Tümünü temizle" # AI Translated msgid "Empty result" @@ -31126,6 +31346,39 @@ msgstr "" "Eğilmeyi önleyin\n" "ABS gibi bükülmeye yatkın malzemelere baskı yaparken, ısıtma yatağı sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını azaltabileceğini biliyor muydunuz?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Deneysel) Baskı sunucuları yerine yazıcı aracılarını kullan" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "UNSURLAR" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Görünüm penceresinde bir yüze veya referans düzlemine, ardından bir eskiz aracına tıklayın" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Bir yüze veya referans düzlemine, ardından bir eskiz aracına tıklayın." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "%s düzlemi seçildi — çizim araçları için sağ tıklayın" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Henüz bir şey yok — araç çubuğundan bir STEP veya mesh içe aktarın\n" +#~ "ya da bir eskize başlamak için bir referans düzlemine tıklayıp sağ tıklayın." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Bir yüze veya referans düzlemine tıklayın, ardından bir çizim aracı seçin" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 9fc84e9cac..b688a2a88c 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: orcaslicerua\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2026-07-17 16:25+0300\n" "Last-Translator: Andrij Mizyk \n" "Language-Team: Ukrainian\n" @@ -3362,8 +3362,8 @@ msgstr "Додатковий пресет процесу" msgid "Remove parameter" msgstr "Вилучити параметр" -msgid "to" -msgstr "в" +msgid "Range" +msgstr "Діапазон" msgid "Add height range" msgstr "Додавання діапазон висот шарів" @@ -5448,9 +5448,6 @@ msgstr "назва параметра" msgid "layers" msgstr "шари" -msgid "Range" -msgstr "Діапазон" - msgid "Empty string" msgstr "Порожній рядок" @@ -8850,8 +8847,9 @@ msgstr "Підключений принтер — %s. Для друку він msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Бажаєте синхронізувати інформацію про принтер і автоматично перемкнути пресет?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Цей проєкт містить модель, створену на вкладці «Конструювання», і жодної іншої геометрії. Увімкніть «Функція CAD (експериментальна)» у налаштуваннях і перезапустіть програму, щоб побачити та редагувати її; під час збереження проєкту вона не втрачається." msgid "The file does not contain any geometry data." msgstr "Файл не містить геометричних даних." @@ -9926,8 +9924,9 @@ msgstr "На вкладці «Конструювання» показувати msgid "Auto-close sketch loops" msgstr "Автоматично замикати контури ескізу" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Вважати кінцеві точки ескізу на відстані до 0.001 мм одним зʼєднанням і зварювати контур у замкнений. Вимкнено: зʼєднуються лише точно збіжні кінцеві точки, тож контур із крихітним проміжком показується відкритим, а не замикається автоматично. Параметр зберігається з кожною конструкцією й діє для конструкцій, розпочатих після його зміни." # AI Translated msgid "Pan" @@ -10365,18 +10364,6 @@ msgstr "Показати непідтримувані пресети" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Показати несумісні/непідтримувані пресети у випадаючому списку принтера і філаменту. Ці пресети не можна вибрати." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Експериментально) Використовувати агентів принтера замість хостів друку" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Спрямовує завдання друку для принтерів, відмінних від Bambu, через агентів плагінів принтера замість класичного завантаження на хост друку.\n" -"Коли вимкнено, OrcaSlicer використовує попередню поведінку хоста друку." - msgid "Experimental Features" msgstr "Експериментальні функції" @@ -10391,6 +10378,18 @@ msgstr "" "Намагатися зберегти намальовані елементи (колір/шов/підтримки/шорсткість тощо) після зміни сітки обʼєкта (наприклад, розрізання/перезавантаження з диска/спрощення/виправлення тощо)\n" "Дуже експериментально! Повільно і може створювати артефакти." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Використовувати агентів принтера замість хостів друку" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Спрямовує завдання друку для принтерів, відмінних від Bambu, через агентів плагінів принтера замість класичного завантаження на хост друку.\n" +"Коли вимкнено, OrcaSlicer використовує попередню поведінку хоста друку." + msgid "Allow Abnormal Storage" msgstr "Дозволити незвичне сховище" @@ -10558,6 +10557,9 @@ msgstr "Послідовність філатури на інших шарах" msgid "Please input layer value (>= 2)." msgstr "Будь ласка, введіть значення шару (≥ 2)." +msgid "to" +msgstr "в" + msgid "Plate name" msgstr "Назва пластини" @@ -16656,6 +16658,14 @@ msgstr "Симетричне заповнення по осі Y" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Якщо модель має дві частини, симетричні відносно осі Y, і ви хочете, щоб ці частини мали симетричні текстури, увімкніть цю опцію на одній із частин." +# AI Translated +msgid "Fill pattern tops" +msgstr "Заповнювати верх шаблону" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Увімкніть, щоб повністю заповнювати верхні частини шаблону заповнення" + msgid "Infill combination - Max layer height" msgstr "Комбінація заповнення - Максимальна висота шару" @@ -23054,6 +23064,26 @@ msgstr "Цей філамент може бути несумісним з пот msgid "The filament model is unknown. A random filament preset will be used." msgstr "Модель філамента невідома. Буде використаний випадковий пресет філамента" +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Приховати опорні площини та осі" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Показати опорні площини та осі" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Приховати стіл принтера та сітку пластини" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Показати стіл принтера та сітку пластини" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Клацніть опорну площину або плоску грань, щоб створити на ній ескіз — Esc скасовує" + # AI Translated msgid "Construction" msgstr "Допоміжна" @@ -23079,8 +23109,9 @@ msgstr "Коло — клацніть центр, потім радіус" msgid "Arc — click start, end, then a point" msgstr "Дуга — клацніть початок, кінець, потім точку" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Паз — два кінці осьової лінії, потім ширина" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -23154,8 +23185,9 @@ msgstr "Світові осі показано" msgid "World axes hidden" msgstr "Світові осі приховано" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Аксонометричний вигляд, вписано" # AI Translated msgid "Bed shown" @@ -23166,34 +23198,12 @@ msgid "Bed hidden" msgstr "Стіл приховано" # AI Translated -msgid "FEATURES" -msgstr "ЕЛЕМЕНТИ" +msgid "Reference planes shown" +msgstr "Опорні площини показано" # AI Translated -msgid "Sketch" -msgstr "Ескіз" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Площина ескізу: %s — виберіть інструмент" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Клацніть грань або опорну площину у вікні перегляду, потім інструмент ескізу" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Площина ескізу: %s.\n" -"Виберіть інструмент або натисніть «Меню», щоб побачити список." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Клацніть грань або опорну площину, потім інструмент ескізу." +msgid "Reference planes hidden" +msgstr "Опорні площини приховано" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -23379,8 +23389,9 @@ msgstr "Вісь" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Опорна вісь (дві точки, нормаль грані, вісь циліндра, дві площини, уздовж ребра)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Система координат" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -23444,8 +23455,9 @@ msgstr "Для дзеркального відображення потрібн msgid "Mate" msgstr "Сполучення" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Збірка: вирівняти дві системи координат (жорстке, площинне, обертальне, ковзне, циліндричне)" # AI Translated msgid "Boolean (combine bodies)" @@ -23544,14 +23556,6 @@ msgstr "Нарізати різьбу на циліндричній поверх msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Виберіть циліндричну поверхню (отвір / зовнішня) або кругове ребро для різьби" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Імпорт STEP (редаговане тверде тіло B-rep)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Імпортувати сітку (STL/OBJ) як редаговане тверде тіло B-rep" - # AI Translated msgid "Constrain selected sketch" msgstr "Накласти обмеження на вибраний ескіз" @@ -23584,8 +23588,9 @@ msgstr "Клацніть початок, потім кінець — потім msgid "Polyline" msgstr "Ламана" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Клацайте точки; клацніть першу точку, щоб замкнути контур, клацніть правою кнопкою або натисніть Enter, щоб завершити ланцюжок" # AI Translated msgid "Corner rectangle" @@ -23675,8 +23680,9 @@ msgstr "Клацніть центр, потім початок, потім то msgid "Slot" msgstr "Паз" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Клацніть два кінці осьової лінії, потім точку для ширини" # AI Translated msgid "Arc slot" @@ -23706,8 +23712,9 @@ msgstr "Клацніть центр, кінець великої осі, точ msgid "Spline" msgstr "Сплайн" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Клацайте контрольні точки; подвійне клацання, клацання правою кнопкою або Enter — завершити" # AI Translated msgid "Click to place a point" @@ -23761,15 +23768,17 @@ msgstr "Виберіть лінію осі дзеркального відобр msgid "Trim" msgstr "Обрізка" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Клацніть сегмент, щоб обрізати його до найближчого перетину; Esc — вихід" # AI Translated msgid "Extend" msgstr "Подовження" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Клацніть лінію або дугу, щоб подовжити її до найближчого обʼєкта; Esc — вихід" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23954,13 +23963,21 @@ msgstr "Вертикальна відстань" msgid "New Design — clear the feature tree" msgstr "Нова конструкція — очистити дерево елементів" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Імпорт STEP (редаговане тверде тіло B-rep)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Імпортувати сітку (STL/OBJ) як редаговане тверде тіло B-rep" + # AI Translated msgid "Export STEP…" msgstr "Експортувати STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Показати стіл принтера та сітку пластини" +msgid "Create a new sketch" +msgstr "Створити новий ескіз" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23974,20 +23991,25 @@ msgstr "Вигляд у розрізі — приховати частину м msgid "Flip Section — show the opposite half" msgstr "Перевернути розріз — показати протилежну половину" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Вибрати, як передавати тіла на пластину" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Передати на пластину" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Усі тіла стають одним обʼєктом, де кожне тіло — окрема частина; їхнє взаємне розташування зберігається" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Передати на пластину (окремими тілами)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Кожне тіло стає окремим обʼєктом і розміщується самостійно" # AI Translated msgid "Width / X" @@ -23997,6 +24019,10 @@ msgstr "Ширина / X" msgid "Height / Y" msgstr "Висота / Y" +# AI Translated +msgid "Sketch" +msgstr "Ескіз" + # AI Translated msgid "Distance X" msgstr "Відстань X" @@ -24199,8 +24225,9 @@ msgstr "Круговий" msgid "Direction" msgstr "Напрямок" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Загальний кут (°)" # AI Translated msgid "Boolean" @@ -24584,11 +24611,13 @@ msgstr "Циліндричне — осі колінеарні; вільне о msgid "Kind" msgstr "Вид" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (нерухома)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (рухома)" # AI Translated msgid "Angle °" @@ -24626,6 +24655,10 @@ msgstr "(немає привʼязок)" msgid "Value" msgstr "Значення" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Виберіть інструмент або натисніть «Меню», щоб побачити список." + # AI Translated msgid "Constraints" msgstr "Обмеження" @@ -24664,6 +24697,10 @@ msgstr "Перемістити вниз" msgid "Show / hide" msgstr "Показати / приховати" +# AI Translated +msgid "Zoom to selection" +msgstr "Масштабувати до вибраного" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Перевірити взаємопроникнення — знайти тіла, що перекриваються" @@ -24685,14 +24722,17 @@ msgstr "Тіло %d вибрано — клацніть правою кнопк msgid "Variables" msgstr "Змінні" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Додати змінну" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Редагувати змінну" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Видалити змінну" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24711,9 +24751,10 @@ msgstr "Ескіз оновлено" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Ескіз створено (керівних розмірів: %zu) — виберіть його, потім клацніть правою кнопкою для видавлювання" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Довжина %.2f мм, кут %.1f°" # AI Translated msgid "(locked)" @@ -24735,6 +24776,10 @@ msgstr "Область вибрано — клацніть правою кноп msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Ескіз вибрано — клацніть правою кнопкою для видавлювання або двічі, щоб редагувати" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Ця грань не плоска — клацніть плоску грань або опорну площину" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24763,34 +24808,33 @@ msgstr "Тіло %d: вибрано грань %d — клацніть прав msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Вибрано грань %d — клацніть правою кнопкою, щоб втиснути/витягнути її, або клацніть ще раз, щоб вибрати все тіло" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Тіло %d: вибрано %zu ребро — Shift+клацання додає або вилучає ребро, заокруглення/фаска застосовується до всіх" +msgstr[1] "Тіло %d: вибрано %zu ребра — Shift+клацання додає або вилучає ребро, заокруглення/фаска застосовується до всіх" +msgstr[2] "Тіло %d: вибрано %zu ребер — Shift+клацання додає або вилучає ребро, заокруглення/фаска застосовується до всіх" +msgstr[3] "Тіло %d: вибрано %zu ребра — Shift+клацання додає або вилучає ребро, заокруглення/фаска застосовується до всіх" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "Вибрано %zu ребро — Shift+клацання додає або вилучає ребро, заокруглення/фаска застосовується до всіх" +msgstr[1] "Вибрано %zu ребра — Shift+клацання додає або вилучає ребро, заокруглення/фаска застосовується до всіх" +msgstr[2] "Вибрано %zu ребер — Shift+клацання додає або вилучає ребро, заокруглення/фаска застосовується до всіх" +msgstr[3] "Вибрано %zu ребра — Shift+клацання додає або вилучає ребро, заокруглення/фаска застосовується до всіх" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "Вибрано площину %s — клацніть правою кнопкою, щоб відкрити інструменти креслення" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Тіло %d: вибрано ребро %d — Shift+клацання, щоб додати ребра, або клацніть ще раз, щоб вибрати все тіло" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Вибрано ребро %d — Shift+клацання, щоб додати ребра, або клацніть ще раз, щоб вибрати все тіло" # AI Translated #, c-format, boost-format @@ -24815,8 +24859,9 @@ msgstr "Вихід з інструмента" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Ескіз збережено — «Підтвердити», щоб зафіксувати його, «Скасувати», щоб відкинути" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Виберіть щось для видалення" # AI Translated msgid "✗ Conflicting constraints" @@ -24850,17 +24895,21 @@ msgstr "Редагування: Ескіз %d · N — погляд перп msgid "OK — %zu triangles" msgstr "ОК — трикутників: %zu" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Відредагуйте текст — Enter застосовує, Esc залишає його без змін" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Введіть текст — він зʼявляється у вікні перегляду під час введення; Enter вставляє, Esc скасовує" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Текст не змінено" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Введення тексту скасовано" # AI Translated msgid "Import SVG" @@ -24886,9 +24935,10 @@ msgstr "Читання STEP…" msgid "No solids found in STEP" msgstr "У STEP не знайдено твердих тіл" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "Не вдалося імпортувати STEP: %s" # AI Translated msgid "Rebuilding model…" @@ -24915,9 +24965,10 @@ msgstr "Файли сіток (*.stl;*.obj)|*.stl;*.obj|Усі файли|*.*" msgid "Could not read the STL file" msgstr "Не вдалося прочитати файл STL" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Не вдалося прочитати файл OBJ: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -24942,20 +24993,23 @@ msgstr "" msgid "Large mesh" msgstr "Велика сітка" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Не вдалося перетворити сітку: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "Перетворення сітки не дало жодної геометрії" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Сітка" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Не вдалося імпортувати сітку: %s" # AI Translated #, c-format, boost-format @@ -24984,17 +25038,19 @@ msgstr " — перетягніть, щоб розмістити/змінити msgid "Insert canceled" msgstr "Вставлення скасовано" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Перетягніть кут, щоб масштабувати, центр — щоб перемістити; після завершення натисніть Enter або ✓, Esc — відкинути" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Ескіз додано (площина: %s) — виберіть його, потім клацніть правою кнопкою для видавлювання" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Не вдалося перебудувати модель: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -25066,18 +25122,21 @@ msgstr "Спершу виберіть ескіз із відкритою лін msgid "Add at least one face to delete first" msgstr "Спершу додайте щонайменше одну грань для видалення" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Для сполучення потрібні дві системи координат — спершу створіть їх" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Сполучення: A і B мають бути різними системами координат" # AI Translated msgid "Mate rejected" msgstr "Сполучення відхилено" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Для перевірки взаємопроникнення потрібні щонайменше два тіла" # AI Translated msgid "No interference found" @@ -25088,38 +25147,45 @@ msgstr "Взаємопроникнень не знайдено" msgid "Body %d" msgstr "Тіло %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f мм³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "%zu пара з перекриттям: %s" +msgstr[1] "%zu пари з перекриттям: %s" +msgstr[2] "%zu пар з перекриттям: %s" +msgstr[3] "%zu пари з перекриттям: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Виберіть тіло, щоб виміряти його" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Не вдалося виміряти це тіло" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: поверхневе тіло, площа %.2f мм², без обʼєму — потовщіть його, щоб отримати обʼєм" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: обʼєм %.2f мм³, площа %.2f мм²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Для масиву потрібне тверде тіло — спершу додайте або імпортуйте його" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Для булевої операції потрібні два тіла — додайте або імпортуйте друге" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -25134,35 +25200,45 @@ msgstr "Вибрана грань (тіло %d)" msgid "Picked face" msgstr "Вибрана грань" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "нову форму не вдалося обʼєднати з тілом" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "нову форму не вдалося вирізати з тіла" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "не вдалося знайти перетин форм" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "в історії поки немає елементів, що створюють тверде тіло" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "профіль ескізу не є коректним замкненим контуром" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "інструмент не торкається тіла" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "у виразі використано змінну, якої не існує" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "у виразі ділення на нуль" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "дві змінні визначено одна через другу" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "помилка геометричної операції" # AI Translated #, c-format, boost-format @@ -25203,15 +25279,17 @@ msgstr "Розмір — клацніть другу точку" msgid "Line — click the start point" msgstr "Лінія — клацніть початкову точку" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Лінія — клацніть кінцеву точку; потім можна ввести її довжину та кут" # AI Translated msgid "Polyline — click the first point" msgstr "Ламана — клацніть першу точку" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Ламана — клацніть наступну точку · клацніть початкову точку, щоб замкнути її · клацання правою кнопкою, подвійне клацання або Enter завершує ланцюжок" # AI Translated msgid "Rectangle — click one corner" @@ -25257,8 +25335,9 @@ msgstr "Заокруглений прямокутник — клацніть, щ msgid "Circle — click the center" msgstr "Коло — клацніть центр" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Коло — клацніть, щоб задати радіус; потім його можна ввести" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -25384,18 +25463,21 @@ msgstr "Еліптична дуга — клацніть місце закінч msgid "Spline — click the first control point" msgstr "Сплайн — клацніть першу контрольну точку" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Сплайн — клацніть наступну контрольну точку · клацання правою кнопкою, подвійне клацання або Enter завершує криву" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Точка — клацніть, щоб розмістити; інструмент лишається активним для наступних" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Обрізка — клацніть сегмент там, де він перетинає інший обʼєкт · натисніть Esc, щоб вийти" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Подовження — клацніть лінію або дугу, щоб подовжити її до найближчого обʼєкта · натисніть Esc, щоб вийти" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -25405,8 +25487,9 @@ msgstr "Заокруглення — клацніть першу з двох л msgid "Fillet — click the second line" msgstr "Заокруглення — клацніть другу лінію" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Заокруглення — перетягніть стрілку або клацніть число, щоб ввести радіус · Enter застосовує · Esc скасовує" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -25416,63 +25499,74 @@ msgstr "Фаска — клацніть першу з двох ліній, що msgid "Chamfer — click the second line" msgstr "Фаска — клацніть другу лінію" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Фаска — перетягніть стрілку або клацніть число, щоб ввести відступ · Enter застосовує · Esc скасовує" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Зміщення — клацніть криву; зміщується весь її контур" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Зміщення — перетягніть стрілку в будь-який бік або клацніть число, щоб ввести відстань · Enter застосовує · Esc скасовує" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Дзеркально — спершу клацніть ЛІНІЮ, відносно якої відображати (підійде й допоміжна лінія)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Дзеркально — вісь задано · тепер клацніть обʼєкти для відображення · Esc скасовує" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Дзеркально — вісь задано · для відображення: %d · клацніть інший, щоб додати або вилучити його · Enter застосовує" # AI Translated msgid "Move — click the entities to move" msgstr "Переміщення — клацніть обʼєкти для переміщення" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Переміщення — перетягніть маркер або клацніть число, щоб ввести відстань · Enter застосовує" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Поворот — клацніть обʼєкти для повороту" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Поворот — перетягніть маркер або клацніть число, щоб ввести кут · Enter застосовує" # AI Translated msgid "Scale — click the entities to scale" msgstr "Масштабування — клацніть обʼєкти для масштабування" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Масштабування — перетягніть маркер або клацніть число, щоб ввести коефіцієнт · Enter застосовує" # AI Translated msgid "Array — click the entities to repeat" msgstr "Масив — клацніть обʼєкти для повторення" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Масив — перетягніть маркер, щоб задати крок, клацніть кількість, щоб ввести її · Enter застосовує" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Круговий масив — клацніть обʼєкти для повторення" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Круговий масив — перетягніть маркер, щоб задати кут охоплення, клацніть кількість, щоб ввести її · Enter застосовує" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Перетягніть кут, щоб масштабувати, центр — щоб перемістити · після завершення натисніть Enter або ✓, Esc — відкинути" # AI Translated msgid " · Esc goes back to Select" @@ -25482,64 +25576,79 @@ msgstr " · Esc — повернутися до вибору" msgid " · click a constraint badge to remove it" msgstr " · клацніть значок обмеження, щоб вилучити його" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — тверде тіло" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — поверхневе тіло" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Плоска грань %d (%s)" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Циліндрична грань %d (%s)" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Грань %d (%s)" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "%zu ребро (%s)" +msgstr[1] "%zu ребра (%s)" +msgstr[2] "%zu ребер (%s)" +msgstr[3] "%zu ребра (%s)" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Пряме ребро %d (%s)" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Кругове ребро %d (%s)" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Вершина (%s)" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Профіль ескізу" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Ескіз — нічого не вибрано" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Лінія ескізу" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Крива ескізу" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Точка ескізу" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "Обʼєктів ескізу: %d" # AI Translated msgid "select something first" @@ -25602,8 +25711,9 @@ msgstr "Площину додано — виберіть її як площин msgid "Axis added" msgstr "Вісь додано" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Систему координат додано" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -25620,10 +25730,10 @@ msgstr "Для ухилу потрібна вибрана грань — спе # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Поки що нічого немає — імпортуйте STEP або сітку з панелі інструментів,\n" -"або клацніть опорну площину й клацніть її правою кнопкою, щоб почати ескіз." +"або натисніть «Ескіз» і клацніть опорну площину, щоб почати ескіз." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -25633,9 +25743,10 @@ msgstr "Твердого тіла ще немає — виберіть ескі msgid "Could not restore the CAD model from this project" msgstr "Не вдалося відновити CAD-модель із цього проєкту" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Не вдалося відновити CAD-модель: %s" # AI Translated #, c-format @@ -25658,17 +25769,35 @@ msgstr "Вигляд у розрізі — показано верхню пол msgid "Section view — showing the lower half" msgstr "Вигляд у розрізі — показано нижню половину" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Пошук граней елемента…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Спершу виберіть тіло — клацніть його у вікні перегляду або в списку «Тіла»" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Модель перебудовується — повторіть масштабування, коли перебудову буде завершено" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "Елемент «%s» не має видимої геометрії для масштабування" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Це тіло ще не має сітки для відображення — спершу виконайте перерахунок" +# AI Translated +msgid "Select something to zoom to" +msgstr "Виберіть щось для масштабування" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Спершу завершіть або скасуйте те, що зараз відкрито" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Спершу виберіть тіло — клацніть його у вікні перегляду або в списку «Тіла»" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Перетягуйте стрілки для переміщення, кільця для повороту — потім підтвердьте (Esc скасовує)" @@ -25694,12 +25823,10 @@ msgstr "Клацніть грань твердого тіла, потім нат msgid "Placed on face — body laid flat on the bed" msgstr "Покладено на грань — тіло лежить пласко на столі" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Зміну відхилено: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25718,9 +25845,10 @@ msgstr "Це тіло не має елемента для видалення — msgid "feature %d" msgstr "елемент %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "Видалено елемент «%s», з якого створено це тіло — Ctrl+Z відновить його" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -26114,12 +26242,14 @@ msgstr "Файли STEP (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "STEP експортовано" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "Не вдалося експортувати STEP: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Передати на пластину (окремими тілами) — надіслати кожне тіло до «Підготовки» як окремий обʼєкт" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -26133,21 +26263,38 @@ msgstr "Нічого передавати — спершу додайте еле msgid "All bodies hidden — show one before committing" msgstr "Усі тіла приховано — покажіть хоча б одне перед передаванням" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "%zu ребро" +msgstr[1] "%zu ребра" +msgstr[2] "%zu ребер" +msgstr[3] "%zu ребра" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Осьова лінія E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Лінія E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Площина ескізу: %s — виберіть інструмент" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Площина ескізу: %s.\n" +"Виберіть інструмент або натисніть «Меню», щоб побачити список." # AI Translated msgid "Plane ready" @@ -26157,8 +26304,9 @@ msgstr "Площина готова" msgid "Axis ready" msgstr "Вісь готова" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Система координат готова" # AI Translated msgid "Helix ready" @@ -26176,9 +26324,10 @@ msgstr "Ескіз готовий" msgid "Mate ready" msgstr "Сполучення готове" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Недопустимо: %s" # AI Translated #, c-format @@ -26266,110 +26415,139 @@ msgstr "Редагувати змінну" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "Не вдалося вилучити змінну '%s' (імовірно, на неї досі посилається вираз елемента): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "Значенням «%s» не можна керувати за допомогою виразу" # AI Translated msgid "No binding for that field" msgstr "Для цього поля немає привʼязки" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "Значення має бути більшим за нуль" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "Значення не може бути відʼємним (нуль означає збіг)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Цього розміру неможливо дотриматися — ескіз має надлишкові обмеження" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "Обмеження, які не можуть діяти на цю геометрію (еліпс, сплайн або коло нульового розміру), ігноруються: %1%" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Цей профіль перетинає сам себе або накладається сам на себе в місці червоної позначки, тому не обмежує єдину область" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Сторона" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Велика піввісь" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Мала піввісь" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "Кут має бути в межах від 0° до 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "Велика піввісь не може бути коротшою за малу" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "Радіус кутів має бути меншим за половину коротшої сторони" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "Паз занадто широкий для свого радіуса — ширина має бути меншою за подвоєний радіус" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Розміру «%1%» неможливо дотриматися — ескіз має надлишкові обмеження" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Ці дві лінії не утворюють кута — виберіть дві лінії, що сходяться" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "Розмір має бути більшим за нуль" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Заокруглення: радіус перевищує довжину однієї зі сторін або дві лінії не утворюють кута" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Фаска: відстань перевищує довжину однієї зі сторін або дві лінії не утворюють кута" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "Видалено обмежень, які стали недійсними через заокруглення/фаску: %1%" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Зміщення: для еліпса або сплайна не можна побудувати еквідистанту того самого типу — виберіть лінії, дуги або кола" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Коефіцієнт масштабування має бути більшим за нуль" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Кількість копій" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Кількість копій має бути цілим числом, не меншим за 2" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "Знято обмежень під час перетворення: %1%" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Копії масиву залишилися без обмежень — розвʼязувач відхилив усі варіанти привʼязки" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "клацніть правою кнопкою або двічі, щоб завершити; клацніть початок, щоб замкнути" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Подовження: клацніть лінію або дугу, яка може досягти іншого обʼєкта" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Обрізка: клацніть сегмент там, де він перетинає інший обʼєкт" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Натисніть Enter або ✓, щоб застосувати, або Esc, щоб відкинути" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Для цього обʼєкта розмір поки не підтримується — клацніть лінію, коло, дугу або дві точки" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Клацніть другу точку або лінію, до якої потрібно виміряти відстань" # AI Translated msgid "Enter a number" @@ -26405,8 +26583,12 @@ msgid "Sketch" msgstr "Ескіз" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Клацніть грань або опорну площину, потім виберіть інструмент малювання" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Виберіть плоску грань або опорну площину для ескізу" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Створити ескіз на вибраній плоскій грані або площині чи на тій, яку ви клацнете наступною" # AI Translated msgctxt "Design" @@ -26428,9 +26610,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Потовщення" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Обʼєднання" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -26483,17 +26666,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Потовщення поверхні" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Для потовщення поверхні потрібне поверхневе тіло — спершу створіть його інструментом із групи «Поверхня»" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Отвір" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -26508,8 +26689,9 @@ msgctxt "Design" msgid "Split" msgstr "Розділення" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Для розділення потрібне тверде тіло — спершу додайте або імпортуйте його" # AI Translated msgid "Split the body along a picked face into two solids" @@ -26555,8 +26737,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Зміщення поверхні" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Для зміщення поверхні потрібне поверхневе тіло — спершу створіть його інструментом із групи «Поверхня»" # AI Translated msgctxt "Design" @@ -26586,8 +26769,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Масив уздовж кривої" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Для масиву вздовж кривої потрібні тіло та крива" # AI Translated msgid "Repeat the body along a picked curve" @@ -26608,8 +26792,9 @@ msgctxt "Design" msgid "Align to" msgstr "Вирівняти за" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Для вирівнювання потрібне тіло — спершу додайте або імпортуйте його" # AI Translated msgid "Align the body to a picked face or plane" @@ -26625,9 +26810,10 @@ msgctxt "Design" msgid "Axis" msgstr "Вісь" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Система координат" # AI Translated msgctxt "Design" @@ -26643,9 +26829,10 @@ msgstr "Вимірювання" msgid "Measure between the picked points, edges or faces" msgstr "Виміряти відстань між вибраними точками, ребрами або гранями" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Обʼєм і площа" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -26687,12 +26874,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Видалити грань" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Колір" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Задати колір відображення вибраного тіла" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Масштабувати до вибраного" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Вписати вибране у вікно перегляду, зберігши напрямок погляду" # AI Translated msgctxt "Design" @@ -26731,9 +26929,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Прямокутник за кутами" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Прямокутник від центру" # AI Translated msgctxt "Design" @@ -26745,9 +26944,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Заокруглений прямокутник" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Коло за центром" # AI Translated msgctxt "Design" @@ -26769,9 +26969,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Дотична дуга" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Дуга за центром" # AI Translated msgctxt "Design" @@ -26803,48 +27004,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Трикутник" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Трикутник — клацніть центр, потім вершину" # AI Translated msgctxt "Design" msgid "Square" msgstr "Квадрат" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Квадрат — клацніть центр, потім вершину" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Пʼятикутник" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Пʼятикутник — клацніть центр, потім вершину" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Шестикутник" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Шестикутник — клацніть центр, потім вершину" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Восьмикутник" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Восьмикутник — клацніть центр, потім вершину" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Дванадцятикутник" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Дванадцятикутник — клацніть центр, потім вершину" # AI Translated msgctxt "Design" @@ -26874,8 +27081,9 @@ msgctxt "Design" msgid "Text" msgstr "Текст" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Введіть текст; він стане елементом «Текст» на площині цього ескізу, і його можна буде редагувати пізніше" # AI Translated msgctxt "Design" @@ -26992,27 +27200,34 @@ msgstr "Кут / відстань…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Введіть кут між двома лініями або відстань між двома вибраними обʼєктами" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Введіть текст для вставлення" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Жирний" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Курсив" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Цей шрифт не можна використати для тексту — виберіть інший" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Введіть текст, щоб побачити його розмір" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "У цьому шрифті немає контурів символів цього тексту" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Розмір: %.1f × %.1f мм" # AI Translated msgid "Primitive" @@ -27110,8 +27325,9 @@ msgstr "Профіль" msgid "Start new profile (for holes)" msgstr "Почати новий профіль (для отворів)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Сегменти" # AI Translated msgid "Sides" @@ -27125,20 +27341,23 @@ msgstr "Клацніть на полотні, щоб малювати" msgid "Snap to grid" msgstr "Привʼязка до сітки" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Крок сітки" # AI Translated msgid "Outer" msgstr "Зовнішній" +# AI Translated msgid "closed" -msgstr "" +msgstr "замкнений" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2% (точок: %3%) %4%" # AI Translated msgid "XY (Top)" @@ -27177,8 +27396,9 @@ msgstr[3] "%zu замкненого профілю" msgid "Draw a closed profile to enable" msgstr "Намалюйте замкнений профіль, щоб увімкнути" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Очистити все" # AI Translated msgid "Empty result" @@ -31296,6 +31516,39 @@ msgstr "" "Уникнення деформації\n" "Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури столу може зменшити ймовірність деформації?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Експериментально) Використовувати агентів принтера замість хостів друку" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "ЕЛЕМЕНТИ" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Клацніть грань або опорну площину у вікні перегляду, потім інструмент ескізу" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Клацніть грань або опорну площину, потім інструмент ескізу." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "Вибрано площину %s — клацніть правою кнопкою, щоб відкрити інструменти креслення" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Поки що нічого немає — імпортуйте STEP або сітку з панелі інструментів,\n" +#~ "або клацніть опорну площину й клацніть її правою кнопкою, щоб почати ескіз." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Клацніть грань або опорну площину, потім виберіть інструмент малювання" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index e68d276d92..561b7dc2b6 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2025-10-02 17:43+0700\n" "Last-Translator: \n" "Language-Team: hainguyen.ts13@gmail.com\n" @@ -3553,8 +3553,8 @@ msgstr "Preset process bổ sung" msgid "Remove parameter" msgstr "Xóa tham số" -msgid "to" -msgstr "đến" +msgid "Range" +msgstr "Phạm vi" msgid "Add height range" msgstr "Thêm phạm vi chiều cao" @@ -5767,9 +5767,6 @@ msgstr "tên tham số" msgid "layers" msgstr "lớp" -msgid "Range" -msgstr "Phạm vi" - msgid "Empty string" msgstr "Chuỗi rỗng" @@ -9272,8 +9269,9 @@ msgstr "Máy in đã kết nối là %s. Nó phải khớp với cài đặt s msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "Bạn có muốn đồng bộ thông tin máy in và tự động chuyển cài đặt sẵn không?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "Dự án này chứa một mô hình được tạo trong tab Thiết kế và không có hình học nào khác. Hãy bật \"Tính năng CAD (thử nghiệm)\" trong Tùy chọn rồi khởi động lại để xem và chỉnh sửa nó; mô hình vẫn được giữ lại khi lưu dự án." msgid "The file does not contain any geometry data." msgstr "File không chứa bất kỳ dữ liệu hình học nào." @@ -10401,8 +10399,9 @@ msgstr "Trong tab Thiết kế, vẽ đầu nối lắp ghép dưới dạng m msgid "Auto-close sketch loops" msgstr "Tự động khép kín vòng phác thảo" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "Coi các điểm đầu mút phác thảo cách nhau trong phạm vi 0.001 mm là một điểm nối và hàn kín vòng. Tắt: chỉ các điểm đầu mút trùng khít mới được nối, nên một vòng có khe hở nhỏ sẽ hiển thị là hở thay vì được tự động khép kín. Được lưu cùng mỗi thiết kế; áp dụng cho các thiết kế bắt đầu sau khi thay đổi." # AI Translated msgid "Pan" @@ -10876,18 +10875,6 @@ msgstr "Hiện cài đặt sẵn không được hỗ trợ" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Hiện các cài đặt sẵn không tương thích/không được hỗ trợ trong danh sách thả xuống máy in và filament. Không thể chọn các cài đặt sẵn này." -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(Thử nghiệm) Dùng tác nhân máy in thay cho máy chủ in" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"Định tuyến các tác vụ in của máy in không phải Bambu qua các tác nhân plugin máy in thay vì luồng tải lên máy chủ in cổ điển.\n" -"Khi tắt, OrcaSlicer sẽ dùng hành vi máy chủ in cũ." - # AI Translated msgid "Experimental Features" msgstr "Tính năng thử nghiệm" @@ -10904,6 +10891,18 @@ msgstr "" "Cố gắng giữ lại các phần đã tô (màu/đường nối/support/fuzzy v.v.) sau khi thay đổi lưới của vật thể (như cắt/tải lại từ đĩa/đơn giản hóa/sửa v.v.)\n" "Rất thử nghiệm! Chậm và có thể tạo ra khuyết điểm." +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "Dùng tác nhân máy in thay cho máy chủ in" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"Định tuyến các tác vụ in của máy in không phải Bambu qua các tác nhân plugin máy in thay vì luồng tải lên máy chủ in cổ điển.\n" +"Khi tắt, OrcaSlicer sẽ dùng hành vi máy chủ in cũ." + # AI Translated msgid "Allow Abnormal Storage" msgstr "Cho phép Bộ nhớ bất thường" @@ -11081,6 +11080,9 @@ msgstr "Trình tự filament lớp khác" msgid "Please input layer value (>= 2)." msgstr "Vui lòng nhập giá trị lớp (>= 2)." +msgid "to" +msgstr "đến" + msgid "Plate name" msgstr "Tên bản" @@ -17202,6 +17204,14 @@ msgstr "Infill đối xứng trục Y" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Nếu model có hai phần đối xứng về trục Y, và bạn muốn các phần này có kết cấu đối xứng, vui lòng nhấp tùy chọn này trên một trong các phần." +# AI Translated +msgid "Fill pattern tops" +msgstr "Lấp đầy mặt trên của mẫu" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "Chọn tùy chọn này nếu bạn muốn lấp đầy hoàn toàn mặt trên của mẫu infill" + msgid "Infill combination - Max layer height" msgstr "Kết hợp infill - Chiều cao lớp tối đa" @@ -23766,6 +23776,26 @@ msgstr "Filament có thể không tương thích với cài đặt máy hiện t msgid "The filament model is unknown. A random filament preset will be used." msgstr "Không rõ mẫu filament. Một cài đặt sẵn filament ngẫu nhiên sẽ được dùng." +# AI Translated +msgid "Hide reference planes and axes" +msgstr "Ẩn các mặt phẳng tham chiếu và trục" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "Hiện các mặt phẳng tham chiếu và trục" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "Ẩn bàn in của máy in và lưới plate" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "Hiện bàn in của máy in và lưới plate" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "Nhấn một mặt phẳng tham chiếu hoặc một mặt phẳng của khối để phác thảo lên đó — Esc để hủy" + # AI Translated msgid "Construction" msgstr "Dựng hình" @@ -23791,8 +23821,9 @@ msgstr "Đường tròn — nhấn tâm, rồi bán kính" msgid "Arc — click start, end, then a point" msgstr "Cung — nhấn điểm đầu, điểm cuối, rồi một điểm" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "Rãnh — hai đầu đường tâm, rồi độ rộng" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -23866,8 +23897,9 @@ msgstr "Đã hiện các trục toàn cục" msgid "World axes hidden" msgstr "Đã ẩn các trục toàn cục" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "Chế độ xem trục đo, đã vừa khung" # AI Translated msgid "Bed shown" @@ -23878,34 +23910,12 @@ msgid "Bed hidden" msgstr "Đã ẩn bàn in" # AI Translated -msgid "FEATURES" -msgstr "ĐẶC TRƯNG" +msgid "Reference planes shown" +msgstr "Đã hiện các mặt phẳng tham chiếu" # AI Translated -msgid "Sketch" -msgstr "Phác thảo" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "Mặt phẳng phác thảo: %s — chọn một công cụ" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "Nhấn một mặt hoặc một mặt phẳng tham chiếu trong khung nhìn, rồi chọn một công cụ phác thảo" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"Mặt phẳng phác thảo: %s.\n" -"Chọn một công cụ, hoặc nhấn Menu để xem danh sách." - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "Nhấn một mặt hoặc một mặt phẳng tham chiếu, rồi chọn một công cụ phác thảo." +msgid "Reference planes hidden" +msgstr "Đã ẩn các mặt phẳng tham chiếu" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -24091,8 +24101,9 @@ msgstr "Trục" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "Trục chuẩn (hai điểm, pháp tuyến mặt, đường tâm hình trụ, hai mặt phẳng, dọc theo cạnh)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "Hệ tọa độ" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -24156,8 +24167,9 @@ msgstr "Lấy đối xứng cần một khối — hãy thêm hoặc nhập mộ msgid "Mate" msgstr "Lắp ghép" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "Lắp ráp: căn chỉnh hai hệ tọa độ (cố định, phẳng, quay, trượt, trụ)" # AI Translated msgid "Boolean (combine bodies)" @@ -24256,14 +24268,6 @@ msgstr "Tạo ren trên một bề mặt trụ (lỗ trong / mặt ngoài) hoặ msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "Chọn một bề mặt trụ (lỗ / mặt ngoài) hoặc một cạnh tròn để tạo ren" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "Nhập STEP (khối đặc B-rep có thể chỉnh sửa)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "Nhập lưới (STL/OBJ) thành khối đặc B-rep có thể chỉnh sửa" - # AI Translated msgid "Constrain selected sketch" msgstr "Ràng buộc phác thảo đã chọn" @@ -24296,8 +24300,9 @@ msgstr "Nhấn điểm đầu, rồi điểm cuối — sau đó đặt độ d msgid "Polyline" msgstr "Đa tuyến" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "Nhấn các điểm; nhấn điểm đầu tiên để khép vòng, nhấn chuột phải hoặc Enter để kết thúc chuỗi" # AI Translated msgid "Corner rectangle" @@ -24387,8 +24392,9 @@ msgstr "Nhấn tâm, rồi điểm đầu, rồi một điểm để đặt góc msgid "Slot" msgstr "Rãnh" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "Nhấn hai đầu đường tâm, rồi một điểm để đặt độ rộng" # AI Translated msgid "Arc slot" @@ -24418,8 +24424,9 @@ msgstr "Nhấn tâm, đầu trục lớn, điểm trên trục nhỏ, rồi đi msgid "Spline" msgstr "Spline" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "Nhấn các điểm điều khiển; nhấp đúp, nhấn chuột phải hoặc nhấn Enter để kết thúc" # AI Translated msgid "Click to place a point" @@ -24473,15 +24480,17 @@ msgstr "Chọn một đường thẳng làm trục đối xứng, rồi các th msgid "Trim" msgstr "Cắt tỉa" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "Nhấn một đoạn để cắt tỉa đến giao điểm gần nhất; Esc để thoát" # AI Translated msgid "Extend" msgstr "Kéo dài" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "Nhấn một đường thẳng hoặc cung để kéo dài đến thực thể gần nhất; Esc để thoát" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -24663,13 +24672,21 @@ msgstr "Khoảng cách dọc" msgid "New Design — clear the feature tree" msgstr "Thiết kế mới — xóa cây đặc trưng" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "Nhập STEP (khối đặc B-rep có thể chỉnh sửa)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "Nhập lưới (STL/OBJ) thành khối đặc B-rep có thể chỉnh sửa" + # AI Translated msgid "Export STEP…" msgstr "Xuất STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "Hiện bàn in của máy in và lưới plate" +msgid "Create a new sketch" +msgstr "Tạo một phác thảo mới" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -24683,20 +24700,25 @@ msgstr "Chế độ xem mặt cắt — ẩn một phần mô hình để nhìn msgid "Flip Section — show the opposite half" msgstr "Lật mặt cắt — hiện nửa đối diện" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "Chọn cách lệnh Đưa lên plate gửi các khối" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "Đưa lên plate" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "Tất cả các khối trở thành một vật thể, mỗi khối là một phần, giữ nguyên vị trí tương đối giữa chúng" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "Đưa lên plate (theo từng khối)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "Mỗi khối trở thành một vật thể riêng, được đặt riêng rẽ" # AI Translated msgid "Width / X" @@ -24706,6 +24728,10 @@ msgstr "Độ rộng / X" msgid "Height / Y" msgstr "Chiều cao / Y" +# AI Translated +msgid "Sketch" +msgstr "Phác thảo" + # AI Translated msgid "Distance X" msgstr "Khoảng cách X" @@ -24908,8 +24934,9 @@ msgstr "Tròn" msgid "Direction" msgstr "Hướng" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "Tổng góc (°)" # AI Translated msgid "Boolean" @@ -25293,11 +25320,13 @@ msgstr "Trụ — các trục cộng tuyến; xoay tự do + trượt dọc tr msgid "Kind" msgstr "Kiểu" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A (cố định)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B (di chuyển)" # AI Translated msgid "Angle °" @@ -25335,6 +25364,10 @@ msgstr "(không có liên kết)" msgid "Value" msgstr "Giá trị" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "Chọn một công cụ, hoặc nhấn Menu để xem danh sách." + # AI Translated msgid "Constraints" msgstr "Ràng buộc" @@ -25373,6 +25406,10 @@ msgstr "Di chuyển xuống" msgid "Show / hide" msgstr "Hiện / ẩn" +# AI Translated +msgid "Zoom to selection" +msgstr "Thu phóng đến vùng chọn" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "Kiểm tra giao thoa — tìm các khối chồng lấn" @@ -25394,14 +25431,17 @@ msgstr "Đã chọn khối %d — nhấn chuột phải để xem các thao tác msgid "Variables" msgstr "Biến" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "Thêm biến" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "Sửa biến" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "Xóa biến" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -25420,9 +25460,10 @@ msgstr "Đã cập nhật phác thảo" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "Đã tạo phác thảo (%zu kích thước điều khiển) — chọn nó, rồi nhấn chuột phải để Đùn" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "Độ dài %.2f mm, góc %.1f°" # AI Translated msgid "(locked)" @@ -25444,6 +25485,10 @@ msgstr "Đã chọn vùng — nhấn chuột phải để Đùn, hoặc nhấp msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "Đã chọn phác thảo — nhấn chuột phải để Đùn, hoặc nhấp đúp để chỉnh sửa" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "Mặt đó không phẳng — hãy nhấn một mặt phẳng của khối hoặc một mặt phẳng tham chiếu" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -25472,28 +25517,27 @@ msgstr "Khối %d: đã chọn mặt %d — nhấn chuột phải để đẩy/k msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "Đã chọn mặt %d — nhấn chuột phải để đẩy/kéo nó, hoặc nhấn lần nữa để chọn cả khối" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" +msgstr[0] "Khối %d: đã chọn %zu cạnh — Shift+nhấn để thêm hoặc bỏ từng cạnh, Bo tròn/Vát cạnh sẽ hoàn thiện tất cả" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "Đã chọn %zu cạnh — Shift+nhấn để thêm hoặc bỏ từng cạnh, Bo tròn/Vát cạnh sẽ hoàn thiện tất cả" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "Đã chọn mặt phẳng %s — nhấn chuột phải để mở các công cụ vẽ" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Khối %d: đã chọn cạnh %d — Shift+nhấn để thêm cạnh, hoặc nhấn lần nữa để chọn cả khối" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "Đã chọn cạnh %d — Shift+nhấn để thêm cạnh, hoặc nhấn lần nữa để chọn cả khối" # AI Translated #, c-format, boost-format @@ -25518,8 +25562,9 @@ msgstr "Đã thoát công cụ" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "Đã giữ phác thảo — Xác nhận để áp dụng, Hủy để loại bỏ" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "Hãy chọn thứ cần xóa" # AI Translated msgid "✗ Conflicting constraints" @@ -25550,17 +25595,21 @@ msgstr "Đang chỉnh sửa: Phác thảo %d · N = nhìn vuông góc với msgid "OK — %zu triangles" msgstr "OK — %zu tam giác" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "Chỉnh sửa chữ — Enter để áp dụng, Esc để giữ nguyên như cũ" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "Nhập chữ — chữ hiện trong khung nhìn ngay khi bạn gõ; Enter để chèn, Esc để hủy" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "Chữ không thay đổi" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "Đã hủy chữ" # AI Translated msgid "Import SVG" @@ -25586,9 +25635,10 @@ msgstr "Đang đọc STEP…" msgid "No solids found in STEP" msgstr "Không tìm thấy khối đặc nào trong STEP" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "Nhập STEP thất bại: %s" # AI Translated msgid "Rebuilding model…" @@ -25612,9 +25662,10 @@ msgstr "File lưới (*.stl;*.obj)|*.stl;*.obj|Tất cả file|*.*" msgid "Could not read the STL file" msgstr "Không thể đọc file STL" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "Không thể đọc file OBJ: %s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -25639,20 +25690,23 @@ msgstr "" msgid "Large mesh" msgstr "Lưới lớn" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "Chuyển đổi lưới thất bại: %s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "Chuyển đổi lưới không tạo ra hình học nào" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "Lưới" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "Nhập lưới thất bại: %s" # AI Translated #, c-format, boost-format @@ -25681,17 +25735,19 @@ msgstr " — kéo để đặt vị trí/kích thước, rồi Xác nhận" msgid "Insert canceled" msgstr "Đã hủy chèn" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Kéo một góc để co giãn, kéo tâm để di chuyển — Enter hoặc ✓ khi xong, Esc để loại bỏ" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "Đã thêm phác thảo (mặt phẳng: %s) — chọn nó, rồi nhấn chuột phải để Đùn" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "Không thể dựng lại mô hình: %s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -25763,18 +25819,21 @@ msgstr "Hãy chọn một phác thảo có đường hở trước" msgid "Add at least one face to delete first" msgstr "Hãy thêm ít nhất một mặt cần xóa trước" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "Lắp ghép cần hai hệ tọa độ — hãy tạo chúng trước" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "Lắp ghép: A và B phải là hai hệ tọa độ khác nhau" # AI Translated msgid "Mate rejected" msgstr "Lắp ghép bị từ chối" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "Kiểm tra giao thoa cần ít nhất hai khối" # AI Translated msgid "No interference found" @@ -25785,35 +25844,42 @@ msgstr "Không tìm thấy giao thoa" msgid "Body %d" msgstr "Khối %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s %.2f mm³" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" +msgstr[0] "%zu cặp chồng lấn: %s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "Hãy chọn một khối để đo" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "Không thể đo khối này" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s: khối bề mặt, diện tích bề mặt %.2f mm², không có thể tích — hãy làm dày để có thể tích" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s: thể tích %.2f mm³, diện tích bề mặt %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "Mảng cần một khối đặc — hãy thêm hoặc nhập một khối trước" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "Boolean cần hai khối — hãy thêm hoặc nhập khối thứ hai" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -25828,35 +25894,45 @@ msgstr "Mặt đã chọn (Khối %d)" msgid "Picked face" msgstr "Mặt đã chọn" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "không thể nối hình dạng mới vào khối" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "không thể cắt hình dạng mới khỏi khối" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "không thể lấy phần giao của các hình dạng" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "chưa có đặc trưng nào trong lịch sử tạo ra khối đặc" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "biên dạng phác thảo không phải là một vòng khép kín hoàn chỉnh" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "công cụ không chạm vào khối" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "một biểu thức dùng biến không tồn tại" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "một biểu thức chia cho không" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "hai biến được định nghĩa dựa vào nhau" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "một thao tác hình học đã thất bại" # AI Translated #, c-format, boost-format @@ -25894,15 +25970,17 @@ msgstr "Kích thước — nhấn điểm thứ hai" msgid "Line — click the start point" msgstr "Đường thẳng — nhấn điểm đầu" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "Đường thẳng — nhấn điểm cuối; sau đó có thể nhập độ dài và góc" # AI Translated msgid "Polyline — click the first point" msgstr "Đa tuyến — nhấn điểm đầu tiên" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "Đa tuyến — nhấn điểm tiếp theo · nhấn điểm đầu để khép kín · nhấn chuột phải, nhấp đúp hoặc Enter để kết thúc chuỗi" # AI Translated msgid "Rectangle — click one corner" @@ -25948,8 +26026,9 @@ msgstr "Hình chữ nhật bo góc — nhấn để đặt bán kính góc" msgid "Circle — click the center" msgstr "Đường tròn — nhấn tâm" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "Đường tròn — nhấn để đặt bán kính; sau đó có thể nhập giá trị" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -26075,18 +26154,21 @@ msgstr "Cung elip — nhấn vào vị trí cung kết thúc" msgid "Spline — click the first control point" msgstr "Spline — nhấn điểm điều khiển đầu tiên" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "Spline — nhấn điểm điều khiển tiếp theo · nhấn chuột phải, nhấp đúp hoặc Enter để hoàn tất đường cong" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "Điểm — nhấn để đặt một điểm; công cụ vẫn sẵn sàng để đặt thêm" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "Cắt tỉa — nhấn một đoạn tại chỗ nó cắt qua thực thể khác · Esc để thoát" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "Kéo dài — nhấn một đường thẳng hoặc cung để kéo dài đến thực thể gần nhất · Esc để thoát" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -26096,8 +26178,9 @@ msgstr "Bo tròn — nhấn đường thẳng thứ nhất trong hai đường g msgid "Fillet — click the second line" msgstr "Bo tròn — nhấn đường thẳng thứ hai" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "Bo tròn — kéo mũi tên, hoặc nhấn vào con số để nhập bán kính · Enter để áp dụng · Esc để hủy" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -26107,63 +26190,74 @@ msgstr "Vát cạnh — nhấn đường thẳng thứ nhất trong hai đườn msgid "Chamfer — click the second line" msgstr "Vát cạnh — nhấn đường thẳng thứ hai" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "Vát cạnh — kéo mũi tên, hoặc nhấn vào con số để nhập khoảng lùi · Enter để áp dụng · Esc để hủy" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "Dời song song — nhấn một đường cong; toàn bộ đường viền chứa nó sẽ được dời" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "Dời song song — kéo mũi tên sang một trong hai phía, hoặc nhấn vào con số để nhập khoảng cách · Enter để áp dụng · Esc để hủy" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "Lấy đối xứng — trước tiên nhấn ĐƯỜNG THẲNG làm trục đối xứng (có thể dùng đường dựng hình)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "Lấy đối xứng — đã đặt trục · giờ hãy nhấn các thực thể cần lấy đối xứng · Esc để hủy" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "Lấy đối xứng — đã đặt trục · %d thực thể cần lấy đối xứng · nhấn thực thể khác để thêm hoặc bỏ · Enter để áp dụng" # AI Translated msgid "Move — click the entities to move" msgstr "Di chuyển — nhấn các thực thể cần di chuyển" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "Di chuyển — kéo tay nắm, hoặc nhấn vào con số để nhập khoảng cách · Enter để áp dụng" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "Xoay — nhấn các thực thể cần xoay" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "Xoay — kéo tay nắm, hoặc nhấn vào con số để nhập góc · Enter để áp dụng" # AI Translated msgid "Scale — click the entities to scale" msgstr "Co giãn — nhấn các thực thể cần co giãn" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "Co giãn — kéo tay nắm, hoặc nhấn vào con số để nhập hệ số · Enter để áp dụng" # AI Translated msgid "Array — click the entities to repeat" msgstr "Mảng — nhấn các thực thể cần lặp lại" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "Mảng — kéo tay nắm để đặt bước, nhấn vào số lượng để nhập · Enter để áp dụng" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "Mảng tròn — nhấn các thực thể cần lặp lại" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "Mảng tròn — kéo tay nắm để đặt góc quét, nhấn vào số lượng để nhập · Enter để áp dụng" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "Kéo một góc để co giãn, kéo tâm để di chuyển · Enter hoặc ✓ khi xong, Esc để loại bỏ" # AI Translated msgid " · Esc goes back to Select" @@ -26173,61 +26267,76 @@ msgstr " · Esc để quay lại Chọn" msgid " · click a constraint badge to remove it" msgstr " · nhấn vào nhãn ràng buộc để xóa nó" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — khối đặc" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — khối bề mặt" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "Mặt phẳng %d của %s" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "Mặt trụ %d của %s" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "Mặt %d của %s" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" +msgstr[0] "%zu cạnh của %s" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "Cạnh thẳng %d của %s" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "Cạnh tròn %d của %s" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "Đỉnh của %s" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "Biên dạng phác thảo" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "Phác thảo — chưa chọn gì" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "Đường thẳng phác thảo" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "Đường cong phác thảo" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "Điểm phác thảo" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d thực thể phác thảo" # AI Translated msgid "select something first" @@ -26290,8 +26399,9 @@ msgstr "Đã thêm mặt phẳng — hãy chọn nó làm mặt phẳng phác th msgid "Axis added" msgstr "Đã thêm trục" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "Đã thêm hệ tọa độ" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -26308,10 +26418,10 @@ msgstr "Thoát khuôn cần một mặt đã chọn — hãy nhấn một mặt # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "Chưa có gì — hãy nhập STEP hoặc lưới từ thanh công cụ,\n" -"hoặc nhấn một mặt phẳng tham chiếu rồi nhấn chuột phải vào nó để bắt đầu phác thảo." +"hoặc nhấn Phác thảo rồi nhấn một mặt phẳng tham chiếu để bắt đầu phác thảo." # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -26321,9 +26431,10 @@ msgstr "Chưa có khối đặc — hãy chọn một phác thảo rồi nhấn msgid "Could not restore the CAD model from this project" msgstr "Không thể khôi phục mô hình CAD từ dự án này" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "Không thể khôi phục mô hình CAD: %s" # AI Translated #, c-format @@ -26346,17 +26457,35 @@ msgstr "Chế độ xem mặt cắt — đang hiện nửa trên" msgid "Section view — showing the lower half" msgstr "Chế độ xem mặt cắt — đang hiện nửa dưới" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "Đang tìm các mặt của đặc trưng…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "Hãy chọn một khối trước — nhấn vào nó trong khung nhìn hoặc trong danh sách Các khối" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "Mô hình đang được dựng lại — hãy thu phóng lại khi hoàn tất" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s không có phần nào đang hiển thị để thu phóng tới" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "Khối đó chưa có lưới hiển thị — hãy tính toán lại trước" +# AI Translated +msgid "Select something to zoom to" +msgstr "Hãy chọn thứ cần thu phóng tới" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "Hãy hoàn tất hoặc hủy thao tác đang mở trước" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "Hãy chọn một khối trước — nhấn vào nó trong khung nhìn hoặc trong danh sách Các khối" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "Kéo mũi tên để di chuyển, kéo vòng để xoay — rồi Xác nhận (Esc để hủy)" @@ -26382,12 +26511,10 @@ msgstr "Nhấn một mặt trên khối đặc, rồi nhấn F" msgid "Placed on face — body laid flat on the bed" msgstr "Đã đặt lên mặt — khối được đặt nằm phẳng trên bàn in" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "Chỉnh sửa bị từ chối: %s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -26406,9 +26533,10 @@ msgstr "Khối này không có đặc trưng nào để xóa — hãy dùng Thi msgid "feature %d" msgstr "đặc trưng %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "Đã xóa %s, đặc trưng tạo nên khối này — Ctrl+Z để khôi phục" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -26799,12 +26927,14 @@ msgstr "File STEP (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "Đã xuất STEP" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "Xuất STEP thất bại: %s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "Đưa lên plate (theo từng khối) — gửi mỗi khối sang Chuẩn bị thành một vật thể riêng" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -26818,18 +26948,35 @@ msgstr "Không có gì để đưa lên plate — hãy thêm một đặc trưng msgid "All bodies hidden — show one before committing" msgstr "Tất cả khối đều đang ẩn — hãy hiện một khối trước khi đưa lên plate" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" +msgstr[0] "%zu cạnh" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "Đường tâm E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "Đường thẳng E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "Mặt phẳng phác thảo: %s — chọn một công cụ" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"Mặt phẳng phác thảo: %s.\n" +"Chọn một công cụ, hoặc nhấn Menu để xem danh sách." # AI Translated msgid "Plane ready" @@ -26839,8 +26986,9 @@ msgstr "Mặt phẳng đã sẵn sàng" msgid "Axis ready" msgstr "Trục đã sẵn sàng" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "Hệ tọa độ đã sẵn sàng" # AI Translated msgid "Helix ready" @@ -26858,9 +27006,10 @@ msgstr "Phác thảo đã sẵn sàng" msgid "Mate ready" msgstr "Lắp ghép đã sẵn sàng" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "Không hợp lệ: %s" # AI Translated #, c-format @@ -26942,110 +27091,139 @@ msgstr "Sửa biến" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "Không thể xóa biến '%s' (có thể vẫn đang được tham chiếu bởi biểu thức của một đặc trưng): %s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "\"%s\" không phải là giá trị mà biểu thức có thể điều khiển" # AI Translated msgid "No binding for that field" msgstr "Không có liên kết cho trường đó" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "Giá trị phải lớn hơn không" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "Giá trị không được âm (bằng không nghĩa là trùng nhau)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Không thể thỏa mãn kích thước đó — phác thảo bị thừa ràng buộc" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "%1% ràng buộc không thể tác động lên hình học này (đường cong elip hoặc spline, hoặc đường tròn có kích thước bằng không) và bị bỏ qua" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "Biên dạng này tự cắt hoặc gấp ngược lại chính nó tại dấu đỏ, nên không bao quanh một vùng duy nhất" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "Cạnh" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "Bán trục lớn" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "Bán trục nhỏ" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "Góc phải nằm trong khoảng 0° đến 360°" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "Bán trục lớn không được ngắn hơn bán trục nhỏ" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "Bán kính góc phải nhỏ hơn một nửa cạnh ngắn hơn" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "Rãnh quá rộng so với bán kính — độ rộng phải nhỏ hơn hai lần bán kính" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "Không thể thỏa mãn %1% — phác thảo bị thừa ràng buộc" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "Hai đường thẳng đó không gặp nhau tại một góc — hãy chọn hai đường thẳng có gặp nhau" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "Kích thước phải lớn hơn không" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Bo tròn: bán kính vượt quá độ dài một cạnh của góc, hoặc hai đường thẳng không gặp nhau tại một góc" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "Vát cạnh: khoảng cách vượt quá độ dài một cạnh của góc, hoặc hai đường thẳng không gặp nhau tại một góc" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "Đã xóa %1% ràng buộc bị bo tròn/vát cạnh làm mất hiệu lực" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "Dời song song: elip hoặc spline không có đường song song cùng loại — hãy chọn đường thẳng, cung hoặc đường tròn" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "Hệ số co giãn phải lớn hơn không" +# AI Translated msgid "Copies" -msgstr "" +msgstr "Số bản sao" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "Số bản sao phải là số nguyên từ 2 trở lên" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "Phép biến đổi đã gỡ bỏ %1% ràng buộc" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "Các bản sao của mảng không bị ràng buộc — bộ giải đã từ chối mọi liên kết" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "nhấn chuột phải hoặc nhấp đúp để kết thúc, nhấn điểm đầu để khép kín" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "Kéo dài: nhấn một đường thẳng hoặc một cung có thể chạm tới một thực thể khác" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "Cắt tỉa: nhấn một đoạn tại chỗ nó cắt qua một thực thể khác" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "Nhấn Enter hoặc ✓ để áp dụng, Esc để loại bỏ" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "Chưa thể ghi kích thước cho thực thể đó — hãy nhấn một đường thẳng, một đường tròn, một cung, hoặc hai điểm" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "Nhấn điểm thứ hai, hoặc một đường thẳng để đo khoảng cách tới nó" # AI Translated msgid "Enter a number" @@ -27081,8 +27259,12 @@ msgid "Sketch" msgstr "Phác thảo" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "Nhấn một mặt hoặc một mặt phẳng tham chiếu, rồi chọn một công cụ vẽ" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "Hãy chọn một mặt phẳng của khối hoặc một mặt phẳng tham chiếu để phác thảo" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "Phác thảo trên mặt phẳng của khối hoặc mặt phẳng tham chiếu đang chọn, hoặc nhấn chọn sau đó" # AI Translated msgctxt "Design" @@ -27104,9 +27286,10 @@ msgctxt "Design" msgid "Thicken" msgstr "Làm dày" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "Nối" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -27159,17 +27342,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "Làm dày bề mặt" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Làm dày bề mặt cần một khối bề mặt — hãy tạo một khối bằng công cụ Bề mặt trước" # AI Translated msgctxt "Design" msgid "Hole" msgstr "Lỗ" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -27184,8 +27365,9 @@ msgctxt "Design" msgid "Split" msgstr "Tách" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "Tách cần một khối đặc — hãy thêm hoặc nhập một khối trước" # AI Translated msgid "Split the body along a picked face into two solids" @@ -27231,8 +27413,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "Dời bề mặt" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "Dời bề mặt cần một khối bề mặt — hãy tạo một khối bằng công cụ Bề mặt trước" # AI Translated msgctxt "Design" @@ -27262,8 +27445,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "Mảng theo đường cong" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "Mảng theo đường cong cần một khối và một đường cong" # AI Translated msgid "Repeat the body along a picked curve" @@ -27284,8 +27468,9 @@ msgctxt "Design" msgid "Align to" msgstr "Căn theo" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "Căn chỉnh cần một khối — hãy thêm hoặc nhập một khối trước" # AI Translated msgid "Align the body to a picked face or plane" @@ -27301,9 +27486,10 @@ msgctxt "Design" msgid "Axis" msgstr "Trục" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "Hệ tọa độ" # AI Translated msgctxt "Design" @@ -27319,9 +27505,10 @@ msgstr "Đo" msgid "Measure between the picked points, edges or faces" msgstr "Đo giữa các điểm, cạnh hoặc mặt đã chọn" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "Thể tích và diện tích bề mặt" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -27363,12 +27550,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "Xóa mặt" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "Màu" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "Đặt màu hiển thị của khối đã chọn" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "Thu phóng đến vùng chọn" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "Đưa vùng chọn vừa khung nhìn, giữ nguyên hướng nhìn" # AI Translated msgctxt "Design" @@ -27407,9 +27605,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "Hình chữ nhật theo góc" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "Hình chữ nhật theo tâm" # AI Translated msgctxt "Design" @@ -27421,9 +27620,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "Hình chữ nhật bo góc" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "Đường tròn theo tâm" # AI Translated msgctxt "Design" @@ -27445,9 +27645,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "Cung tiếp tuyến" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "Cung theo tâm" # AI Translated msgctxt "Design" @@ -27479,48 +27680,54 @@ msgctxt "Design" msgid "Triangle" msgstr "Tam giác" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "Tam giác — nhấn tâm, rồi một đỉnh" # AI Translated msgctxt "Design" msgid "Square" msgstr "Hình vuông" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "Hình vuông — nhấn tâm, rồi một đỉnh" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "Ngũ giác" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "Ngũ giác — nhấn tâm, rồi một đỉnh" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "Lục giác" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "Lục giác — nhấn tâm, rồi một đỉnh" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "Bát giác" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "Bát giác — nhấn tâm, rồi một đỉnh" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "Thập nhị giác" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "Thập nhị giác — nhấn tâm, rồi một đỉnh" # AI Translated msgctxt "Design" @@ -27550,8 +27757,9 @@ msgctxt "Design" msgid "Text" msgstr "Chữ" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "Nhập chữ; chữ sẽ trở thành một đặc trưng Chữ trên mặt phẳng của phác thảo này, có thể chỉnh sửa sau" # AI Translated msgctxt "Design" @@ -27668,27 +27876,34 @@ msgstr "Góc / khoảng cách…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "Nhập góc giữa hai đường thẳng, hoặc khoảng cách giữa hai đối tượng đã chọn" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "Nhập chữ cần chèn" +# AI Translated msgid "Bold" -msgstr "" +msgstr "Đậm" +# AI Translated msgid "Italic" -msgstr "" +msgstr "Nghiêng" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "Không thể dùng font này cho chữ — hãy chọn font khác" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "Nhập chữ để xem kích thước" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "Font này không có đường viền cho chữ này" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "Kích thước: %.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -27786,8 +28001,9 @@ msgstr "Biên dạng" msgid "Start new profile (for holes)" msgstr "Bắt đầu biên dạng mới (cho lỗ)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "Số đoạn" # AI Translated msgid "Sides" @@ -27801,20 +28017,23 @@ msgstr "Nhấn vào khung vẽ để vẽ" msgid "Snap to grid" msgstr "Bám theo lưới" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "Bước lưới" # AI Translated msgid "Outer" msgstr "Ngoài" +# AI Translated msgid "closed" -msgstr "" +msgstr "khép kín" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%: %3% điểm %4%" # AI Translated msgid "XY (Top)" @@ -27850,8 +28069,9 @@ msgstr[0] "%zu biên dạng khép kín" msgid "Draw a closed profile to enable" msgstr "Vẽ một biên dạng khép kín để bật" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "Xóa tất cả" # AI Translated msgid "Empty result" @@ -31965,6 +32185,39 @@ msgstr "" "Tránh cong vênh\n" "Bạn có biết rằng khi in vật liệu dễ cong vênh như ABS, tăng nhiệt độ bàn nóng một cách thích hợp có thể giảm xác suất cong vênh không?" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(Thử nghiệm) Dùng tác nhân máy in thay cho máy chủ in" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "ĐẶC TRƯNG" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "Nhấn một mặt hoặc một mặt phẳng tham chiếu trong khung nhìn, rồi chọn một công cụ phác thảo" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "Nhấn một mặt hoặc một mặt phẳng tham chiếu, rồi chọn một công cụ phác thảo." + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "Đã chọn mặt phẳng %s — nhấn chuột phải để mở các công cụ vẽ" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "Chưa có gì — hãy nhập STEP hoặc lưới từ thanh công cụ,\n" +#~ "hoặc nhấn một mặt phẳng tham chiếu rồi nhấn chuột phải vào nó để bắt đầu phác thảo." + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "Nhấn một mặt hoặc một mặt phẳng tham chiếu, rồi chọn một công cụ vẽ" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index b54372e24f..e5c067013f 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2026-06-11 12:37-0300\n" "Last-Translator: Handle \n" "Language-Team: \n" @@ -3279,8 +3279,8 @@ msgstr "附加工艺预设" msgid "Remove parameter" msgstr "删除参数" -msgid "to" -msgstr "到" +msgid "Range" +msgstr "范围" msgid "Add height range" msgstr "添加高度范围" @@ -5293,9 +5293,6 @@ msgstr "参数名称" msgid "layers" msgstr "层" -msgid "Range" -msgstr "范围" - msgid "Empty string" msgstr "空字符串" @@ -8574,8 +8571,9 @@ msgstr "连接的打印机是 %s。它必须与打印预设的项目相匹配。 msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "您想要同步打印机信息并自动切换预设吗?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "此项目包含一个在“设计”标签页中创建的模型,且不含其他几何体。请在偏好设置中启用“CAD 功能(实验性)”并重新启动,以查看和编辑该模型;保存项目时会保留该模型。" msgid "The file does not contain any geometry data." msgstr "此文件不包含任何几何数据。" @@ -9614,8 +9612,9 @@ msgstr "在“设计”标签页中,将配合连接器绘制为一个小面, msgid "Auto-close sketch loops" msgstr "自动闭合草图环" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "将相距 0.001 mm 以内的草图端点视为同一连接点,并将环焊接闭合。关闭时:只有完全重合的端点才会连接,因此存在微小间隙的环会显示为开放,而不会被自动闭合。此设置随每个设计一起保存;仅适用于更改后新建的设计。" msgid "Pan" msgstr "平移" @@ -10037,18 +10036,6 @@ msgstr "显示不受支持的预设" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "在打印机和耗材下拉列表中显示不兼容/不受支持的预设。这些预设无法被选择。" -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(实验性)使用打印机代理替代打印主机" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"非 Bambu 打印机的打印任务将通过打印机插件代理发送,而不是经典的打印主机上传流程。\n" -"禁用时,OrcaSlicer 使用旧的打印主机行为。" - # AI Translated msgid "Experimental Features" msgstr "实验性功能" @@ -10064,6 +10051,18 @@ msgstr "" "在更改对象网格(如切割/从磁盘重新加载/简化/修复等)后,尝试保留绘制的特征(颜色/接缝/支撑/绒毛等)。\n" "高度实验性!速度较慢且可能产生瑕疵。" +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "使用打印机代理替代打印主机" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"非 Bambu 打印机的打印任务将通过打印机插件代理发送,而不是经典的打印主机上传流程。\n" +"禁用时,OrcaSlicer 使用旧的打印主机行为。" + msgid "Allow Abnormal Storage" msgstr "允许异常存储" @@ -10230,6 +10229,9 @@ msgstr "其它层耗材打印顺序" msgid "Please input layer value (>= 2)." msgstr "请输入层号(>=2)。" +msgid "to" +msgstr "到" + msgid "Plate name" msgstr "盘名称" @@ -15985,6 +15987,14 @@ msgstr "对称填充Y轴" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "若模型有两个在Y轴上对称的部分,并且您想对其使用对称的纹理,就请在对应的模型部分上应用此设置。" +# AI Translated +msgid "Fill pattern tops" +msgstr "填满图案顶部" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "如果希望将填充图案的顶部完全填满,请选择此选项" + msgid "Infill combination - Max layer height" msgstr "填充组合 - 最大层高" @@ -22196,6 +22206,26 @@ msgstr "此耗材可能与当前设备设置不兼容,将使用随机耗材预 msgid "The filament model is unknown. A random filament preset will be used." msgstr "此耗材可能于当前设备设置不兼容,将使用随机耗材预设。" +# AI Translated +msgid "Hide reference planes and axes" +msgstr "隐藏基准面和轴" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "显示基准面和轴" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "隐藏打印机热床及其网格" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "显示打印机热床及其网格" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "单击基准面或平面以在其上绘制草图 — 按 Esc 取消" + # AI Translated msgid "Construction" msgstr "构造" @@ -22221,8 +22251,9 @@ msgstr "圆 — 单击圆心,然后单击确定半径" msgid "Arc — click start, end, then a point" msgstr "圆弧 — 依次单击起点、终点,然后单击一个点" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "槽口 — 中心线两端,然后是宽度" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -22296,8 +22327,9 @@ msgstr "已显示世界坐标轴" msgid "World axes hidden" msgstr "已隐藏世界坐标轴" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "轴测视图,已缩放至适合" # AI Translated msgid "Bed shown" @@ -22308,34 +22340,12 @@ msgid "Bed hidden" msgstr "已隐藏热床" # AI Translated -msgid "FEATURES" -msgstr "特征" +msgid "Reference planes shown" +msgstr "已显示基准面" # AI Translated -msgid "Sketch" -msgstr "草图" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "草图平面:%s — 请选取工具" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "在视口中单击一个面或基准面,然后单击草图工具" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"草图平面:%s。\n" -"请选取工具,或按“菜单”查看列表。" - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "单击一个面或基准面,然后单击草图工具。" +msgid "Reference planes hidden" +msgstr "已隐藏基准面" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -22521,8 +22531,9 @@ msgstr "轴" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "基准轴(两点、面法线、圆柱中心线、两平面相交、沿边线)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "坐标系" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -22586,8 +22597,9 @@ msgstr "镜像需要一个实体 — 请先添加或导入实体" msgid "Mate" msgstr "配合" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "装配:对齐两个坐标系(紧固、平面、旋转、滑块、圆柱)" # AI Translated msgid "Boolean (combine bodies)" @@ -22686,14 +22698,6 @@ msgstr "在圆柱面(内孔 / 外圆)或圆形边上创建螺纹" msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "选取用于螺纹的圆柱面(内孔 / 外圆)或圆形边" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "导入 STEP(可编辑的 B-rep 实体)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "将网格 (STL/OBJ) 导入为可编辑的 B-rep 实体" - # AI Translated msgid "Constrain selected sketch" msgstr "约束所选草图" @@ -22726,8 +22730,9 @@ msgstr "单击起点,然后单击终点 — 再设置精确长度" msgid "Polyline" msgstr "多段线" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "单击各点;单击第一个点以闭合环,右键单击或按 Enter 结束连线" # AI Translated msgid "Corner rectangle" @@ -22817,8 +22822,9 @@ msgstr "单击圆心,然后单击起点,再单击一个点确定终止角度 msgid "Slot" msgstr "槽口" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "单击中心线的两个端点,然后单击一个点确定宽度" # AI Translated msgid "Arc slot" @@ -22848,8 +22854,9 @@ msgstr "单击中心、长轴端点、短轴点,然后单击圆弧的起点和 msgid "Spline" msgstr "样条曲线" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "单击控制点;双击、右键单击或按 Enter 完成" # AI Translated msgid "Click to place a point" @@ -22903,15 +22910,17 @@ msgstr "选取一条镜像轴线,然后选取要镜像的图元;单击空白 msgid "Trim" msgstr "修剪" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "单击线段,将其修剪到最近的交点;按 Esc 退出" # AI Translated msgid "Extend" msgstr "延伸" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "单击直线或圆弧,将其延伸到最近的图元;按 Esc 退出" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23093,13 +23102,21 @@ msgstr "竖直距离" msgid "New Design — clear the feature tree" msgstr "新建设计 — 清空特征树" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "导入 STEP(可编辑的 B-rep 实体)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "将网格 (STL/OBJ) 导入为可编辑的 B-rep 实体" + # AI Translated msgid "Export STEP…" msgstr "导出 STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "显示打印机热床及其网格" +msgid "Create a new sketch" +msgstr "新建草图" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23113,20 +23130,25 @@ msgstr "剖面视图 — 隐藏模型的一部分以查看内部。PageUp/PageDo msgid "Flip Section — show the opposite half" msgstr "翻转剖面 — 显示另一半" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "选择“提交到盘”发送实体的方式" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "提交到盘" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "所有实体合并为一个对象,每个实体作为一个零件,并保持相对位置" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "提交到盘(按实体)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "每个实体成为独立的对象,并各自放置" # AI Translated msgid "Width / X" @@ -23136,6 +23158,10 @@ msgstr "宽度 / X" msgid "Height / Y" msgstr "高度 / Y" +# AI Translated +msgid "Sketch" +msgstr "草图" + # AI Translated msgid "Distance X" msgstr "距离 X" @@ -23338,8 +23364,9 @@ msgstr "圆周" msgid "Direction" msgstr "方向" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "总角度 (°)" # AI Translated msgid "Boolean" @@ -23723,11 +23750,13 @@ msgstr "圆柱 — 轴共线;可自由旋转并沿轴向滑动" msgid "Kind" msgstr "类型" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A(固定)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B(移动)" # AI Translated msgid "Angle °" @@ -23765,6 +23794,10 @@ msgstr "(无绑定)" msgid "Value" msgstr "数值" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "请选取工具,或按菜单键查看列表。" + # AI Translated msgid "Constraints" msgstr "约束" @@ -23803,6 +23836,10 @@ msgstr "下移" msgid "Show / hide" msgstr "显示 / 隐藏" +# AI Translated +msgid "Zoom to selection" +msgstr "缩放到所选内容" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "干涉检查 — 查找重叠的实体" @@ -23824,14 +23861,17 @@ msgstr "已选择实体 %d — 右键单击查看适用的操作" msgid "Variables" msgstr "变量" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "添加变量" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "编辑变量" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "删除变量" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -23850,9 +23890,10 @@ msgstr "草图已更新" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "草图已创建(%zu 个驱动尺寸) — 选择它,然后右键单击进行拉伸" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "长度 %.2f mm,角度 %.1f°" # AI Translated msgid "(locked)" @@ -23874,6 +23915,10 @@ msgstr "已选择区域 — 右键单击进行拉伸,或双击进行编辑" msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "已选择草图 — 右键单击进行拉伸,或双击进行编辑" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "该面不是平面 — 请单击平面或基准面" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -23902,28 +23947,27 @@ msgstr "实体 %d:已选择面 %d — 右键单击可推/拉该面,或再次 msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "已选择面 %d — 右键单击可推/拉该面,或再次单击选择整个实体" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" +msgstr[0] "实体 %d:已选择 %zu 条边 — 按住 Shift 单击可添加或移除一条边,圆角/倒角会修饰所有选中的边" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "已选择 %zu 条边 — 按住 Shift 单击可添加或移除一条边,圆角/倒角会修饰所有选中的边" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "已选择 %s 平面 — 右键单击打开绘图工具" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "实体 %d:已选择边 %d — 按住 Shift 单击可添加更多边,或再次单击选择整个实体" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "已选择边 %d — 按住 Shift 单击可添加更多边,或再次单击选择整个实体" # AI Translated #, c-format, boost-format @@ -23948,8 +23992,9 @@ msgstr "已退出工具" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "草图已保留 — 单击“确定”提交,单击“取消”放弃" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "请选择要删除的内容" # AI Translated msgid "✗ Conflicting constraints" @@ -23980,17 +24025,21 @@ msgstr "正在编辑:草图 %d · N = 正视于平面 · 在工具栏 msgid "OK — %zu triangles" msgstr "完成 — %zu 个三角形" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "编辑文字 — 按 Enter 应用,按 Esc 保持原样" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "输入文字 — 输入时会实时显示在视图中;按 Enter 插入,按 Esc 取消" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "文字未更改" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "已取消文字输入" # AI Translated msgid "Import SVG" @@ -24016,9 +24065,10 @@ msgstr "正在读取 STEP…" msgid "No solids found in STEP" msgstr "STEP 中未找到实体" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "STEP 导入失败:%s" # AI Translated msgid "Rebuilding model…" @@ -24042,9 +24092,10 @@ msgstr "网格文件 (*.stl;*.obj)|*.stl;*.obj|所有文件|*.*" msgid "Could not read the STL file" msgstr "无法读取 STL 文件" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "无法读取 OBJ 文件:%s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -24069,20 +24120,23 @@ msgstr "" msgid "Large mesh" msgstr "大型网格" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "网格转换失败:%s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "网格转换未生成任何几何体" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "网格" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "网格导入失败:%s" # AI Translated #, c-format, boost-format @@ -24111,17 +24165,19 @@ msgstr " — 拖动以放置/调整大小,然后单击“确定”" msgid "Insert canceled" msgstr "已取消插入" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "拖动角点缩放,拖动中心移动 — 完成后按 Enter 或 ✓,按 Esc 放弃" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "已添加草图(平面:%s) — 选择它,然后右键单击进行拉伸" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "无法重建模型:%s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -24193,18 +24249,21 @@ msgstr "请先选取包含开放线条的草图" msgid "Add at least one face to delete first" msgstr "请先添加至少一个要删除的面" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "配合需要两个坐标系 — 请先创建它们" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "配合:A 和 B 必须是不同的坐标系" # AI Translated msgid "Mate rejected" msgstr "配合被拒绝" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "干涉检查至少需要两个实体" # AI Translated msgid "No interference found" @@ -24215,35 +24274,42 @@ msgstr "未发现干涉" msgid "Body %d" msgstr "实体 %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s(%.2f mm³)" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" +msgstr[0] "%zu 对实体重叠:%s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "请选择要测量的实体" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "无法测量此实体" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s:曲面实体,表面积 %.2f mm²,无体积 — 加厚后即可获得体积" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s:体积 %.2f mm³,表面积 %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "阵列需要一个实体 — 请先添加或导入实体" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "布尔需要两个实体 — 请添加或导入第二个实体" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -24258,35 +24324,45 @@ msgstr "选取的面(实体 %d)" msgid "Picked face" msgstr "选取的面" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "无法将新形状合并到实体" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "无法从实体中切除新形状" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "无法对这些形状求交" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "历史记录中尚无可生成实体的特征" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "草图轮廓不是干净的闭合环" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "工具未接触实体" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "表达式使用了不存在的变量" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "表达式中出现除以零" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "两个变量相互循环引用" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "几何运算失败" # AI Translated #, c-format, boost-format @@ -24324,15 +24400,17 @@ msgstr "尺寸 — 单击第二个点" msgid "Line — click the start point" msgstr "直线 — 单击起点" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "直线 — 单击终点;之后可输入其长度和角度" # AI Translated msgid "Polyline — click the first point" msgstr "多段线 — 单击第一个点" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "多段线 — 单击下一个点 · 单击起点以闭合 · 右键单击、双击或按 Enter 结束连线" # AI Translated msgid "Rectangle — click one corner" @@ -24378,8 +24456,9 @@ msgstr "圆角矩形 — 单击以设置圆角半径" msgid "Circle — click the center" msgstr "圆 — 单击圆心" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "圆 — 单击以设置半径;之后可输入半径值" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -24505,18 +24584,21 @@ msgstr "椭圆弧 — 单击圆弧的结束位置" msgid "Spline — click the first control point" msgstr "样条曲线 — 单击第一个控制点" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "样条曲线 — 单击下一个控制点 · 右键单击、双击或按 Enter 完成曲线" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "点 — 单击放置一个点;工具保持激活,可继续放置" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "修剪 — 单击与其他图元相交的线段 · 按 Esc 退出" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "延伸 — 单击直线或圆弧,将其延长到最近的图元 · 按 Esc 退出" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -24526,8 +24608,9 @@ msgstr "圆角 — 单击两条相交直线中的第一条" msgid "Fillet — click the second line" msgstr "圆角 — 单击第二条直线" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "圆角 — 拖动箭头,或单击数值输入半径 · 按 Enter 应用 · 按 Esc 取消" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -24537,63 +24620,74 @@ msgstr "倒角 — 单击两条相交直线中的第一条" msgid "Chamfer — click the second line" msgstr "倒角 — 单击第二条直线" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "倒角 — 拖动箭头,或单击数值输入倒角距离 · 按 Enter 应用 · 按 Esc 取消" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "偏移 — 单击一条曲线;将偏移其整个轮廓" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "偏移 — 向任意一侧拖动箭头,或单击数值输入距离 · 按 Enter 应用 · 按 Esc 取消" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "镜像 — 先单击作为镜像轴的直线(可使用构造线)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "镜像 — 已设置镜像轴 · 现在单击要镜像的图元 · 按 Esc 取消" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "镜像 — 已设置镜像轴 · 待镜像 %d 个 · 单击其他图元可添加或移除 · 按 Enter 应用" # AI Translated msgid "Move — click the entities to move" msgstr "移动 — 单击要移动的图元" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "移动 — 拖动控制柄,或单击数值输入距离 · 按 Enter 应用" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "旋转 — 单击要旋转的图元" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "旋转 — 拖动控制柄,或单击数值输入角度 · 按 Enter 应用" # AI Translated msgid "Scale — click the entities to scale" msgstr "缩放 — 单击要缩放的图元" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "缩放 — 拖动控制柄,或单击数值输入比例因子 · 按 Enter 应用" # AI Translated msgid "Array — click the entities to repeat" msgstr "阵列 — 单击要阵列的图元" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "阵列 — 拖动控制柄设置间距,单击数量值进行输入 · 按 Enter 应用" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "圆周阵列 — 单击要阵列的图元" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "圆周阵列 — 拖动控制柄设置总角度,单击数量值进行输入 · 按 Enter 应用" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "拖动角点缩放,拖动中心移动 · 完成后按 Enter 或 ✓,按 Esc 放弃" # AI Translated msgid " · Esc goes back to Select" @@ -24603,61 +24697,76 @@ msgstr " · 按 Esc 返回选择工具" msgid " · click a constraint badge to remove it" msgstr " · 单击约束标记可将其移除" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — 实体" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — 曲面实体" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "平面 %d(%s)" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "圆柱面 %d(%s)" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "面 %d(%s)" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" +msgstr[0] "%zu 条边(%s)" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "直边 %d(%s)" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "圆形边 %d(%s)" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "%s 的顶点" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "草图轮廓" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "草图 — 未选择任何内容" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "草图直线" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "草图曲线" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "草图点" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d 个草图图元" # AI Translated msgid "select something first" @@ -24720,8 +24829,9 @@ msgstr "已添加平面 — 可将其选作草图平面" msgid "Axis added" msgstr "已添加轴" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "已添加坐标系" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -24738,10 +24848,10 @@ msgstr "拔模需要选取一个面 — 请先单击一个侧面" # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "尚无内容 — 从工具栏导入 STEP 或网格,\n" -"或单击一个基准面并右键单击它以开始绘制草图。" +"或单击“草图”,然后单击一个基准面以开始绘制草图。" # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -24751,9 +24861,10 @@ msgstr "尚无实体 — 选择一个草图并右键单击它进行拉伸。" msgid "Could not restore the CAD model from this project" msgstr "无法从此项目恢复 CAD 模型" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "无法恢复 CAD 模型:%s" # AI Translated #, c-format @@ -24776,17 +24887,35 @@ msgstr "剖面视图 — 正在显示上半部分" msgid "Section view — showing the lower half" msgstr "剖面视图 — 正在显示下半部分" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "正在查找特征的面…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "请先选择一个实体 — 在视口或实体列表中单击它" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "模型正在重建 — 完成后请再次缩放" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s 当前没有可供缩放的可见内容" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "该实体尚无显示网格 — 请先重新计算" +# AI Translated +msgid "Select something to zoom to" +msgstr "请选择要缩放显示的内容" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "请先完成或取消当前打开的内容" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "请先选择一个实体 — 在视口或实体列表中单击它" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "拖动箭头移动,拖动圆环旋转 — 然后单击“确定”(按 Esc 取消)" @@ -24812,12 +24941,10 @@ msgstr "单击实体上的一个面,然后按 F" msgid "Placed on face — body laid flat on the bed" msgstr "已放置在面上 — 实体已平放在热床上" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "编辑被拒绝:%s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -24836,9 +24963,10 @@ msgstr "此实体没有可删除的特征 — 请使用“新建设计”重新 msgid "feature %d" msgstr "特征 %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "已删除 %s(即创建此实体的特征) — 按 Ctrl+Z 可恢复" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -25229,12 +25357,14 @@ msgstr "STEP 文件 (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "已导出 STEP" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "STEP 导出失败:%s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "提交到盘(按实体) — 将每个实体作为独立对象发送到“准备”" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -25248,18 +25378,35 @@ msgstr "没有可提交的内容 — 请先添加特征" msgid "All bodies hidden — show one before committing" msgstr "所有实体均已隐藏 — 请在提交前显示至少一个实体" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" +msgstr[0] "%zu 条边" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "中心线 E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "直线 E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "草图平面:%s — 请选取工具" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"草图平面:%s。\n" +"请选取工具,或按菜单键查看列表。" # AI Translated msgid "Plane ready" @@ -25269,8 +25416,9 @@ msgstr "平面已就绪" msgid "Axis ready" msgstr "轴已就绪" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "坐标系已就绪" # AI Translated msgid "Helix ready" @@ -25288,9 +25436,10 @@ msgstr "草图已就绪" msgid "Mate ready" msgstr "配合已就绪" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "无效:%s" # AI Translated #, c-format @@ -25372,110 +25521,139 @@ msgstr "编辑变量" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "无法移除变量“%s”(可能仍被某个特征表达式引用):%s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "“%s”不是表达式可以驱动的值" # AI Translated msgid "No binding for that field" msgstr "该字段没有绑定" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "数值必须大于零" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "数值不能为负(零表示重合)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "无法满足该尺寸 — 草图过约束" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "%1% 个约束无法作用于此几何图形(椭圆或样条曲线,或大小为零的圆),已被忽略" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "此轮廓在红色标记处自相交或折返,因此无法围成单一区域" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "边长" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "半长轴" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "半短轴" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "角度必须介于 0° 到 360° 之间" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "半长轴不能短于半短轴" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "圆角半径必须小于短边长度的一半" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "槽口相对于其半径过宽 — 宽度必须小于半径的两倍" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "无法满足%1% — 草图过约束" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "这两条直线未在角点相交 — 请选取两条在角点相交的直线" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "大小必须大于零" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "圆角:半径超出了其中一条边的长度,或两条直线未在角点相交" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "倒角:距离超出了其中一条边的长度,或两条直线未在角点相交" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "已移除 %1% 个因圆角/倒角而失效的约束" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "偏移:椭圆或样条曲线无法生成同类型的平行曲线 — 请选取直线、圆弧或圆" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "缩放比例必须大于零" +# AI Translated msgid "Copies" -msgstr "" +msgstr "副本数" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "副本数必须是大于或等于 2 的整数" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "变换解除了 %1% 个约束" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "阵列副本未受约束 — 求解器拒绝了所有绑定约束" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "右键单击或双击结束,单击起点闭合" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "延伸:单击一条可延伸至其他图元的直线或圆弧" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "修剪:单击与其他图元相交的线段" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "按 Enter 或 ✓ 应用,按 Esc 放弃" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "尚不支持为该图元标注尺寸 — 请单击直线、圆、圆弧或两个点" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "单击第二个点,或单击一条直线以测量到该直线的距离" # AI Translated msgid "Enter a number" @@ -25511,8 +25689,12 @@ msgid "Sketch" msgstr "草图" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "单击一个面或基准面,然后选取绘图工具" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "选择要在其上绘制草图的平面或基准面" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "在所选的平面或基准面上绘制草图,或随后单击选择一个" # AI Translated msgctxt "Design" @@ -25534,9 +25716,10 @@ msgctxt "Design" msgid "Thicken" msgstr "加厚" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "并集" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -25589,17 +25772,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "加厚曲面" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "加厚曲面需要一个曲面实体 — 请先使用曲面工具创建" # AI Translated msgctxt "Design" msgid "Hole" msgstr "孔" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -25614,8 +25795,9 @@ msgctxt "Design" msgid "Split" msgstr "分割" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "分割需要一个实体 — 请先添加或导入实体" # AI Translated msgid "Split the body along a picked face into two solids" @@ -25661,8 +25843,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "偏移曲面" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "偏移曲面需要一个曲面实体 — 请先使用曲面工具创建" # AI Translated msgctxt "Design" @@ -25692,8 +25875,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "沿曲线阵列" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "沿曲线阵列需要一个实体和一条曲线" # AI Translated msgid "Repeat the body along a picked curve" @@ -25714,8 +25898,9 @@ msgctxt "Design" msgid "Align to" msgstr "对齐到" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "对齐需要一个实体 — 请先添加或导入实体" # AI Translated msgid "Align the body to a picked face or plane" @@ -25731,9 +25916,10 @@ msgctxt "Design" msgid "Axis" msgstr "轴" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "坐标系" # AI Translated msgctxt "Design" @@ -25749,9 +25935,10 @@ msgstr "测量" msgid "Measure between the picked points, edges or faces" msgstr "在选取的点、边或面之间进行测量" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "体积和表面积" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -25793,12 +25980,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "删除面" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "颜色" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "设置所选实体的显示颜色" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "缩放到所选内容" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "将所选内容缩放至适合视图,并保持视图方向不变" # AI Translated msgctxt "Design" @@ -25837,9 +26035,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "边角矩形" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "中心矩形" # AI Translated msgctxt "Design" @@ -25851,9 +26050,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "圆角矩形" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "中心圆" # AI Translated msgctxt "Design" @@ -25875,9 +26075,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "切线弧" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "中心点圆弧" # AI Translated msgctxt "Design" @@ -25909,48 +26110,54 @@ msgctxt "Design" msgid "Triangle" msgstr "三角形" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "三角形 — 单击中心,然后单击一个顶点" # AI Translated msgctxt "Design" msgid "Square" msgstr "正方形" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "正方形 — 单击中心,然后单击一个顶点" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "五边形" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "五边形 — 单击中心,然后单击一个顶点" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "六边形" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "六边形 — 单击中心,然后单击一个顶点" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "八边形" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "八边形 — 单击中心,然后单击一个顶点" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "十二边形" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "十二边形 — 单击中心,然后单击一个顶点" # AI Translated msgctxt "Design" @@ -25980,8 +26187,9 @@ msgctxt "Design" msgid "Text" msgstr "文字" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "输入文字;它将成为此草图平面上的文字特征,之后可再编辑" # AI Translated msgctxt "Design" @@ -26098,27 +26306,34 @@ msgstr "角度 / 距离…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "输入两条直线之间的角度,或两个选取对象之间的距离" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "输入要插入的文字" +# AI Translated msgid "Bold" -msgstr "" +msgstr "粗体" +# AI Translated msgid "Italic" -msgstr "" +msgstr "斜体" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "此字体无法用于文字 — 请选择其他字体" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "输入文字以查看其大小" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "此字体中没有该文字的字形轮廓" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "大小:%.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -26216,8 +26431,9 @@ msgstr "轮廓" msgid "Start new profile (for holes)" msgstr "开始新轮廓(用于孔)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "段数" # AI Translated msgid "Sides" @@ -26231,20 +26447,23 @@ msgstr "单击画布进行绘制" msgid "Snap to grid" msgstr "吸附到网格" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "网格间距" # AI Translated msgid "Outer" msgstr "外轮廓" +# AI Translated msgid "closed" -msgstr "" +msgstr "已闭合" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%:%3% 个点 %4%" # AI Translated msgid "XY (Top)" @@ -26280,8 +26499,9 @@ msgstr[0] "%zu 个闭合轮廓" msgid "Draw a closed profile to enable" msgstr "绘制一个闭合轮廓以启用" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "全部清除" # AI Translated msgid "Empty result" @@ -30403,6 +30623,39 @@ msgstr "" "避免翘曲\n" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(实验性)使用打印机代理替代打印主机" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "特征" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "在视口中单击一个面或基准面,然后单击草图工具" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "单击一个面或基准面,然后单击草图工具。" + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "已选择 %s 平面 — 右键单击打开绘图工具" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "尚无内容 — 从工具栏导入 STEP 或网格,\n" +#~ "或单击一个基准面并右键单击它以开始绘制草图。" + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "单击一个面或基准面,然后选取绘图工具" + #~ msgid "X" #~ msgstr "X" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 22f01a5b20..f47b5900ee 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-05 10:49-0300\n" +"POT-Creation-Date: 2026-10-06 15:16-0300\n" "PO-Revision-Date: 2025-11-28 13:48-0600\n" "Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n" "Language-Team: \n" @@ -3368,8 +3368,8 @@ msgstr "附加列印參數預設" msgid "Remove parameter" msgstr "刪除參數" -msgid "to" -msgstr "到" +msgid "Range" +msgstr "範圍" msgid "Add height range" msgstr "新增高度範圍" @@ -5424,9 +5424,6 @@ msgstr "參數名稱" msgid "layers" msgstr "層" -msgid "Range" -msgstr "範圍" - msgid "Empty string" msgstr "空字串" @@ -8740,8 +8737,9 @@ msgstr "連線的列印裝置是 %s。列印時必須與專案預設相符。\n" msgid "Do you want to sync the printer information and automatically switch the preset?" msgstr "您是否要同步列印裝置資訊並自動切換預設?" +# AI Translated msgid "This project contains a model made in the Design tab and no other geometry. Enable \"CAD feature (experimental)\" in Preferences and restart to see and edit it; it is kept when the project is saved." -msgstr "" +msgstr "此專案包含一個在「設計」分頁中建立的模型,且沒有其他幾何。請在偏好設定中啟用「CAD 功能(實驗性)」並重新啟動,以檢視及編輯該模型;儲存專案時會保留該模型。" msgid "The file does not contain any geometry data." msgstr "此檔案不包含任何幾何資料。" @@ -9789,8 +9787,9 @@ msgstr "在「設計」分頁中,將結合連接器繪製為一個小面,而 msgid "Auto-close sketch loops" msgstr "自動封閉草圖迴圈" +# AI Translated msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you. Saved with each design; applies to designs started after the change." -msgstr "" +msgstr "將相距 0.001 mm 以內的草圖端點視為同一接點,並將迴圈接合封閉。關閉時:只有完全重合的端點才會相接,因此有微小缺口的迴圈會顯示為開放,而不會自動為您封閉。此設定會隨每個設計一併儲存;僅套用於變更後開始的設計。" msgid "Pan" msgstr "平移" @@ -10212,18 +10211,6 @@ msgstr "顯示不支援的預設" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "在列印裝置和線材下拉選單中顯示不相容/不支援的預設。這些預設無法選取。" -# AI Translated -msgid "(Experimental) Use printer agents instead of print hosts" -msgstr "(實驗性)使用列印裝置代理程式取代列印主機" - -# AI Translated -msgid "" -"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" -"When disabled, OrcaSlicer uses the legacy print-host behavior." -msgstr "" -"將非 Bambu 列印裝置的列印工作透過列印裝置外掛代理程式傳送,而非傳統的列印主機上傳流程。\n" -"停用時,OrcaSlicer 會使用舊有的列印主機行為。" - # AI Translated msgid "Experimental Features" msgstr "實驗性功能" @@ -10239,6 +10226,18 @@ msgstr "" "嘗試在變更物件網格(例如切割/從磁碟重新載入/簡化/修復等)後,保留已繪製的特徵(顏色/Z 縫/支撐/絨毛等)。\n" "高度實驗性!速度緩慢且可能產生瑕疵。" +# AI Translated +msgid "Use printer agents instead of print hosts" +msgstr "使用列印裝置代理程式取代列印主機" + +# AI Translated +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" +"將非 Bambu 列印裝置的列印工作透過列印裝置外掛代理程式傳送,而非傳統的列印主機上傳流程。\n" +"停用時,OrcaSlicer 會使用舊有的列印主機行為。" + msgid "Allow Abnormal Storage" msgstr "允許異常儲存空間" @@ -10406,6 +10405,9 @@ msgstr "其他層的線材列印順序" msgid "Please input layer value (>= 2)." msgstr "請輸入層數值(>= 2)" +msgid "to" +msgstr "到" + msgid "Plate name" msgstr "列印板名稱" @@ -16191,6 +16193,14 @@ msgstr "對稱填充Y軸" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "若模型有兩個在Y軸上對稱的部分,並且您想對其使用對稱的紋理,就請在對應的模型部分上應用此設定。" +# AI Translated +msgid "Fill pattern tops" +msgstr "填滿圖案頂部" + +# AI Translated +msgid "Choose this option if you want to completely fill in the tops of the infill pattern" +msgstr "若要將填充圖案的頂部完全填滿,請選擇此選項" + msgid "Infill combination - Max layer height" msgstr "合併填充 - 最大層高" @@ -22394,6 +22404,26 @@ msgstr "線材可能與目前的列印裝置設定不相容,將使用隨機線 msgid "The filament model is unknown. A random filament preset will be used." msgstr "線材型號未知,將使用隨機線材預設。" +# AI Translated +msgid "Hide reference planes and axes" +msgstr "隱藏參考平面與軸" + +# AI Translated +msgid "Show reference planes and axes" +msgstr "顯示參考平面與軸" + +# AI Translated +msgid "Hide the printer bed and its plate grid" +msgstr "隱藏列印板及其網格" + +# AI Translated +msgid "Show the printer bed and its plate grid" +msgstr "顯示列印板及其網格" + +# AI Translated +msgid "Click a reference plane or a flat face to sketch on it — Esc cancels" +msgstr "點選參考平面或平面以在其上繪製草圖 — 按 Esc 取消" + # AI Translated msgid "Construction" msgstr "建構" @@ -22419,8 +22449,9 @@ msgstr "圓 — 點選圓心,再點選半徑" msgid "Arc — click start, end, then a point" msgstr "圓弧 — 依序點選起點、終點,再點選一點" +# AI Translated msgid "Slot — two centerline ends, then the width" -msgstr "" +msgstr "槽 — 點選中心線兩端,再設定寬度" # AI Translated msgid "Ellipse — center, major end, minor point" @@ -22494,8 +22525,9 @@ msgstr "已顯示世界座標軸" msgid "World axes hidden" msgstr "已隱藏世界座標軸" +# AI Translated msgid "Axonometric view, fitted" -msgstr "" +msgstr "軸測視圖,已縮放至適當大小" # AI Translated msgid "Bed shown" @@ -22506,34 +22538,12 @@ msgid "Bed hidden" msgstr "已隱藏列印板" # AI Translated -msgid "FEATURES" -msgstr "特徵" +msgid "Reference planes shown" +msgstr "已顯示參考平面" # AI Translated -msgid "Sketch" -msgstr "草圖" - -# AI Translated -#, c-format, boost-format -msgid "Sketch plane: %s — pick a tool" -msgstr "草圖平面:%s — 請選擇工具" - -# AI Translated -msgid "Click a face or a reference plane in the viewport, then a sketch tool" -msgstr "在視埠中點選一個面或參考平面,再選擇草圖工具" - -# AI Translated -#, c-format, boost-format -msgid "" -"Sketch plane: %s.\n" -"Pick a tool, or press Menu for the list." -msgstr "" -"草圖平面:%s。\n" -"請選擇工具,或按「選單」查看清單。" - -# AI Translated -msgid "Click a face or a reference plane, then a sketch tool." -msgstr "點選一個面或參考平面,再選擇草圖工具。" +msgid "Reference planes hidden" +msgstr "已隱藏參考平面" # AI Translated msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" @@ -22719,8 +22729,9 @@ msgstr "軸" msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" msgstr "基準軸(兩點、面法線、圓柱中心線、兩平面、沿邊)" +# AI Translated msgid "Coordinate system" -msgstr "" +msgstr "座標系" # AI Translated msgid "Datum coordinate system (world point, or face + direction edge)" @@ -22784,8 +22795,9 @@ msgstr "鏡像需要本體 — 請先新增或匯入一個" msgid "Mate" msgstr "結合" +# AI Translated msgid "Assembly: align two coordinate systems (fastened, planar, revolute, slider, cylindrical)" -msgstr "" +msgstr "組合件:對齊兩個座標系(固定、平面、旋轉、滑動、圓柱)" # AI Translated msgid "Boolean (combine bodies)" @@ -22884,14 +22896,6 @@ msgstr "在圓柱面(內孔 / 外圓)或圓形邊上建立螺紋" msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" msgstr "選取要建立螺紋的圓柱面(內孔 / 外圓)或圓形邊" -# AI Translated -msgid "Import STEP (editable B-rep solid)" -msgstr "匯入 STEP(可編輯的 B-rep 實體)" - -# AI Translated -msgid "Import mesh (STL/OBJ) as an editable B-rep solid" -msgstr "將網格 (STL/OBJ) 匯入為可編輯的 B-rep 實體" - # AI Translated msgid "Constrain selected sketch" msgstr "約束所選草圖" @@ -22924,8 +22928,9 @@ msgstr "點選起點,再點選終點 — 然後設定精確長度" msgid "Polyline" msgstr "聚合線" +# AI Translated msgid "Click points; click the first point to close the loop, right-click or Enter to end the chain" -msgstr "" +msgstr "點選各點;點選第一點以封閉迴圈,按右鍵或按 Enter 結束連續線段" # AI Translated msgid "Corner rectangle" @@ -23015,8 +23020,9 @@ msgstr "點選圓心,再點選起點,然後點選一點設定終止角度" msgid "Slot" msgstr "槽" +# AI Translated msgid "Click two centerline ends, then a point for the width" -msgstr "" +msgstr "點選中心線的兩端,再點選一點設定寬度" # AI Translated msgid "Arc slot" @@ -23046,8 +23052,9 @@ msgstr "點選中心、長軸端點、短軸點,再點選圓弧的起點與終 msgid "Spline" msgstr "雲形線" +# AI Translated msgid "Click control points; double-click, right-click or Enter to finish" -msgstr "" +msgstr "點選控制點;按兩下、按右鍵或按 Enter 以完成" # AI Translated msgid "Click to place a point" @@ -23101,15 +23108,17 @@ msgstr "選取鏡像軸線,再選取要鏡像的圖元;點選空白處以套 msgid "Trim" msgstr "修剪" +# AI Translated msgid "Click a segment to trim it back to its nearest intersection; Esc exits" -msgstr "" +msgstr "點選線段,將其修剪至最近的交點;按 Esc 結束" # AI Translated msgid "Extend" msgstr "延伸" +# AI Translated msgid "Click a line or arc to extend it to the nearest entity; Esc exits" -msgstr "" +msgstr "點選直線或圓弧,將其延伸至最近的圖元;按 Esc 結束" # AI Translated msgid "Constrain — add geometric/dimensional relations" @@ -23291,13 +23300,21 @@ msgstr "垂直距離" msgid "New Design — clear the feature tree" msgstr "新設計 — 清除特徵樹" +# AI Translated +msgid "Import STEP (editable B-rep solid)" +msgstr "匯入 STEP(可編輯的 B-rep 實體)" + +# AI Translated +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "將網格 (STL/OBJ) 匯入為可編輯的 B-rep 實體" + # AI Translated msgid "Export STEP…" msgstr "匯出 STEP…" # AI Translated -msgid "Show the printer bed and its plate grid" -msgstr "顯示列印板及其網格" +msgid "Create a new sketch" +msgstr "建立新草圖" # AI Translated msgid "Place on Face (F) — lay the picked face on the bed" @@ -23311,20 +23328,25 @@ msgstr "剖面圖 — 隱藏部分模型以查看內部。PageUp/PageDown 移動 msgid "Flip Section — show the opposite half" msgstr "翻轉剖面 — 顯示另一半" +# AI Translated msgid "Choose how Commit to Plate sends the bodies" -msgstr "" +msgstr "選擇「送至列印板」傳送本體的方式" +# AI Translated msgid "Commit to Plate" -msgstr "" +msgstr "送至列印板" +# AI Translated msgid "All bodies become one object with a part per body, keeping their relative positions" -msgstr "" +msgstr "所有本體合併為一個物件,每個本體各為一個零件,並保持其相對位置" +# AI Translated msgid "Commit to Plate (as bodies)" -msgstr "" +msgstr "送至列印板(依本體)" +# AI Translated msgid "Each body becomes its own object, placed on its own" -msgstr "" +msgstr "每個本體各自成為獨立的物件,並個別擺放" # AI Translated msgid "Width / X" @@ -23334,6 +23356,10 @@ msgstr "寬度 / X" msgid "Height / Y" msgstr "高度 / Y" +# AI Translated +msgid "Sketch" +msgstr "草圖" + # AI Translated msgid "Distance X" msgstr "X 距離" @@ -23536,8 +23562,9 @@ msgstr "環形" msgid "Direction" msgstr "方向" +# AI Translated msgid "Total angle (°)" -msgstr "" +msgstr "總角度 (°)" # AI Translated msgid "Boolean" @@ -23921,11 +23948,13 @@ msgstr "圓柱 — 軸共線;可自由旋轉 + 軸向滑動" msgid "Kind" msgstr "類型" +# AI Translated msgid "A (fixed)" -msgstr "" +msgstr "A(固定)" +# AI Translated msgid "B (moves)" -msgstr "" +msgstr "B(移動)" # AI Translated msgid "Angle °" @@ -23963,6 +23992,10 @@ msgstr "(無繫結)" msgid "Value" msgstr "數值" +# AI Translated +msgid "Pick a tool, or press Menu for the list." +msgstr "請選擇工具,或按選單鍵查看清單。" + # AI Translated msgid "Constraints" msgstr "約束" @@ -24001,6 +24034,10 @@ msgstr "下移" msgid "Show / hide" msgstr "顯示 / 隱藏" +# AI Translated +msgid "Zoom to selection" +msgstr "縮放至選取項目" + # AI Translated msgid "Check interference — find overlapping bodies" msgstr "干涉檢查 — 找出重疊的本體" @@ -24022,14 +24059,17 @@ msgstr "已選取本體 %d — 按右鍵查看適用的操作" msgid "Variables" msgstr "變數" +# AI Translated msgid "Add variable" -msgstr "" +msgstr "新增變數" +# AI Translated msgid "Edit variable" -msgstr "" +msgstr "編輯變數" +# AI Translated msgid "Delete variable" -msgstr "" +msgstr "刪除變數" # AI Translated msgid "Sketch created — select it, then right-click to Extrude" @@ -24048,9 +24088,10 @@ msgstr "草圖已更新" msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" msgstr "已建立草圖(%zu 個驅動尺寸) — 選取它,然後按右鍵進行擠出" +# AI Translated #, c-format, boost-format msgid "Length %.2f mm, angle %.1f°" -msgstr "" +msgstr "長度 %.2f mm,角度 %.1f°" # AI Translated msgid "(locked)" @@ -24072,6 +24113,10 @@ msgstr "已選取區域 — 按右鍵進行擠出,或按兩下進行編輯" msgid "Sketch selected — right-click to Extrude, or double-click to edit" msgstr "已選取草圖 — 按右鍵進行擠出,或按兩下進行編輯" +# AI Translated +msgid "That face is not flat — click a flat face or a reference plane" +msgstr "該面不是平面 — 請點選平面或參考平面" + # AI Translated #, c-format, boost-format msgid "Body %d: vertex selected — click again for the whole body" @@ -24100,28 +24145,27 @@ msgstr "本體 %d:已選取面 %d — 按右鍵進行推拉,或再次點選 msgid "Face %d selected — right-click to push/pull it, or click again for the whole body" msgstr "已選取面 %d — 按右鍵進行推拉,或再次點選以選取整個本體" +# AI Translated #, c-format msgid "Body %d: %zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "Body %d: %zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" +msgstr[0] "本體 %d:已選取 %zu 條邊 — 按住 Shift 點選可加入或移除一條邊,圓角/倒角會修飾所有選取的邊" +# AI Translated #, c-format msgid "%zu edge selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" msgid_plural "%zu edges selected — Shift+click adds or removes one, Fillet/Chamfer dresses them all" -msgstr[0] "" - -#, c-format, boost-format -msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" - -#, c-format, boost-format -msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" -msgstr "" +msgstr[0] "已選取 %zu 條邊 — 按住 Shift 點選可加入或移除一條邊,圓角/倒角會修飾所有選取的邊" # AI Translated #, c-format, boost-format -msgid "%s plane selected — right-click for the drawing tools" -msgstr "已選取 %s 平面 — 按右鍵開啟繪圖工具" +msgid "Body %d: edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "本體 %d:已選取邊 %d — 按住 Shift 點選以加入更多邊,或再次點選以選取整個本體" + +# AI Translated +#, c-format, boost-format +msgid "Edge %d selected — Shift+click to add edges, or click again for the whole body" +msgstr "已選取邊 %d — 按住 Shift 點選以加入更多邊,或再次點選以選取整個本體" # AI Translated #, c-format, boost-format @@ -24146,8 +24190,9 @@ msgstr "已退出工具" msgid "Sketch kept — Confirm to commit it, Cancel to discard" msgstr "已保留草圖 — 按「確認」提交,按「取消」捨棄" +# AI Translated msgid "Select something to delete" -msgstr "" +msgstr "請選取要刪除的項目" # AI Translated msgid "✗ Conflicting constraints" @@ -24178,17 +24223,21 @@ msgstr "編輯中:草圖 %d · N = 正視平面 · 在工具列中按 msgid "OK — %zu triangles" msgstr "成功 — %zu 個三角形" +# AI Translated msgid "Edit the text — Enter applies, Esc keeps it as it was" -msgstr "" +msgstr "編輯文字 — 按 Enter 套用,按 Esc 保持原樣" +# AI Translated msgid "Type the text — it appears in the view as you type; Enter inserts, Esc cancels" -msgstr "" +msgstr "輸入文字 — 輸入時會即時顯示在視圖中;按 Enter 插入,按 Esc 取消" +# AI Translated msgid "Text unchanged" -msgstr "" +msgstr "文字未變更" -msgid "Text cancelled" -msgstr "" +# AI Translated +msgid "Text canceled" +msgstr "已取消文字輸入" # AI Translated msgid "Import SVG" @@ -24214,9 +24263,10 @@ msgstr "正在讀取 STEP…" msgid "No solids found in STEP" msgstr "STEP 中找不到實體" +# AI Translated #, c-format, boost-format msgid "STEP import failed: %s" -msgstr "" +msgstr "STEP 匯入失敗:%s" # AI Translated msgid "Rebuilding model…" @@ -24240,9 +24290,10 @@ msgstr "網格檔案 (*.stl;*.obj)|*.stl;*.obj|所有檔案|*.*" msgid "Could not read the STL file" msgstr "無法讀取 STL 檔案" +# AI Translated #, c-format, boost-format msgid "Could not read the OBJ file: %s" -msgstr "" +msgstr "無法讀取 OBJ 檔案:%s" # AI Translated msgid "Unsupported mesh format (STL and OBJ are supported)" @@ -24267,20 +24318,23 @@ msgstr "" msgid "Large mesh" msgstr "大型網格" +# AI Translated #, c-format, boost-format msgid "Mesh conversion failed: %s" -msgstr "" +msgstr "網格轉換失敗:%s" # AI Translated msgid "Mesh conversion produced no geometry" msgstr "網格轉換未產生任何幾何" +# AI Translated msgid "Mesh" -msgstr "" +msgstr "網格" +# AI Translated #, c-format, boost-format msgid "Mesh import failed: %s" -msgstr "" +msgstr "網格匯入失敗:%s" # AI Translated #, c-format, boost-format @@ -24309,17 +24363,19 @@ msgstr " — 拖曳以放置/調整大小,然後按「確認」" msgid "Insert canceled" msgstr "已取消插入" +# AI Translated msgid "Drag a corner to scale, the center to move — Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "拖曳角點以縮放,拖曳中心以移動 — 完成後按 Enter 或 ✓,按 Esc 捨棄" # AI Translated #, c-format, boost-format msgid "Sketch added (plane: %s) — select it, then right-click to Extrude" msgstr "已加入草圖(平面:%s) — 選取它,然後按右鍵進行擠出" +# AI Translated #, c-format, boost-format msgid "The model could not be rebuilt: %s" -msgstr "" +msgstr "無法重建模型:%s" # AI Translated msgid "Add a solid (sketch + extrude) first" @@ -24391,18 +24447,21 @@ msgstr "請先選取含開放線條的草圖" msgid "Add at least one face to delete first" msgstr "請先加入至少一個要刪除的面" +# AI Translated msgid "Mate needs two coordinate systems — create them first" -msgstr "" +msgstr "結合需要兩個座標系 — 請先建立" +# AI Translated msgid "Mate: A and B must be different coordinate systems" -msgstr "" +msgstr "結合:A 與 B 必須是不同的座標系" # AI Translated msgid "Mate rejected" msgstr "結合被拒絕" +# AI Translated msgid "Interference needs at least two bodies" -msgstr "" +msgstr "干涉檢查需要至少兩個本體" # AI Translated msgid "No interference found" @@ -24413,35 +24472,42 @@ msgstr "未發現干涉" msgid "Body %d" msgstr "本體 %d" +# AI Translated #, c-format, boost-format msgid "%s ↔ %s %.2f mm³" -msgstr "" +msgstr "%s ↔ %s(%.2f mm³)" +# AI Translated #, c-format msgid "%zu overlapping pair: %s" msgid_plural "%zu overlapping pairs: %s" -msgstr[0] "" +msgstr[0] "%zu 組本體重疊:%s" +# AI Translated msgid "Select a body to measure it" -msgstr "" +msgstr "請選取要測量的本體" +# AI Translated msgid "This body could not be measured" -msgstr "" +msgstr "無法測量此本體" +# AI Translated #, c-format, boost-format msgid "%s: sheet body, area %.2f mm², no volume — thicken it to get one" -msgstr "" +msgstr "%s:曲面本體,表面積 %.2f mm²,無體積 — 加厚後即可得到體積" +# AI Translated #, c-format, boost-format msgid "%s: volume %.2f mm³, area %.2f mm²" -msgstr "" +msgstr "%s:體積 %.2f mm³,表面積 %.2f mm²" # AI Translated msgid "Pattern needs a solid body — add or import one first" msgstr "陣列需要實體本體 — 請先新增或匯入一個" +# AI Translated msgid "Boolean needs two bodies — add or import a second one" -msgstr "" +msgstr "布林需要兩個本體 — 請新增或匯入第二個" # AI Translated msgid "Cut needs a solid body — add or import one first" @@ -24456,35 +24522,45 @@ msgstr "選取的面(本體 %d)" msgid "Picked face" msgstr "選取的面" +# AI Translated msgid "the new shape could not be joined to the body" -msgstr "" +msgstr "無法將新形狀接合至本體" +# AI Translated msgid "the new shape could not be cut from the body" -msgstr "" +msgstr "無法從本體中切除新形狀" +# AI Translated msgid "the shapes could not be intersected" -msgstr "" +msgstr "無法計算這些形狀的交集" +# AI Translated msgid "nothing in the history makes a solid yet" -msgstr "" +msgstr "歷史記錄中尚無可產生實體的特徵" +# AI Translated msgid "the sketch profile is not a clean closed loop" -msgstr "" +msgstr "草圖輪廓不是乾淨的封閉迴圈" +# AI Translated msgid "the tool does not touch the body" -msgstr "" +msgstr "工具未接觸本體" +# AI Translated msgid "an expression uses a variable that does not exist" -msgstr "" +msgstr "運算式使用了不存在的變數" +# AI Translated msgid "an expression divides by zero" -msgstr "" +msgstr "運算式中出現除以零" +# AI Translated msgid "two variables are defined in terms of each other" -msgstr "" +msgstr "兩個變數相互循環參照" +# AI Translated msgid "a geometry operation failed" -msgstr "" +msgstr "幾何運算失敗" # AI Translated #, c-format, boost-format @@ -24522,15 +24598,17 @@ msgstr "尺寸 — 點選第二點" msgid "Line — click the start point" msgstr "直線 — 點選起點" +# AI Translated msgid "Line — click the end point; its length and angle can then be typed" -msgstr "" +msgstr "直線 — 點選終點;之後可輸入其長度與角度" # AI Translated msgid "Polyline — click the first point" msgstr "聚合線 — 點選第一點" +# AI Translated msgid "Polyline — click the next point · click the start point to close it · right-click, double-click or Enter ends the chain" -msgstr "" +msgstr "聚合線 — 點選下一點 · 點選起點以封閉 · 按右鍵、按兩下或按 Enter 結束連續線段" # AI Translated msgid "Rectangle — click one corner" @@ -24576,8 +24654,9 @@ msgstr "圓角矩形 — 點選以設定圓角半徑" msgid "Circle — click the center" msgstr "圓 — 點選圓心" +# AI Translated msgid "Circle — click to set the radius; it can then be typed" -msgstr "" +msgstr "圓 — 點選以設定半徑;之後可輸入半徑值" # AI Translated msgid "Circle (2 points) — click one end of the diameter" @@ -24703,18 +24782,21 @@ msgstr "橢圓弧 — 點選圓弧的終點" msgid "Spline — click the first control point" msgstr "雲形線 — 點選第一個控制點" +# AI Translated msgid "Spline — click the next control point · right-click, double-click or Enter finishes the curve" -msgstr "" +msgstr "雲形線 — 點選下一個控制點 · 按右鍵、按兩下或按 Enter 完成曲線" # AI Translated msgid "Point — click to place one; the tool stays armed for more" msgstr "點 — 點選以放置一點;工具會保持啟用以繼續放置" +# AI Translated msgid "Trim — click a segment where it crosses another entity · Esc to exit" -msgstr "" +msgstr "修剪 — 點選與其他圖元相交的線段 · 按 Esc 結束" +# AI Translated msgid "Extend — click a line or arc to grow it out to the nearest entity · Esc to exit" -msgstr "" +msgstr "延伸 — 點選直線或圓弧,將其延伸至最近的圖元 · 按 Esc 結束" # AI Translated msgid "Fillet — click the first of two lines that meet" @@ -24724,8 +24806,9 @@ msgstr "圓角 — 點選相交兩直線中的第一條" msgid "Fillet — click the second line" msgstr "圓角 — 點選第二條直線" +# AI Translated msgid "Fillet — drag the arrow, or click the number to type the radius · Enter applies · Esc cancels" -msgstr "" +msgstr "圓角 — 拖曳箭頭,或點選數字以輸入半徑 · 按 Enter 套用 · 按 Esc 取消" # AI Translated msgid "Chamfer — click the first of two lines that meet" @@ -24735,63 +24818,74 @@ msgstr "倒角 — 點選相交兩直線中的第一條" msgid "Chamfer — click the second line" msgstr "倒角 — 點選第二條直線" +# AI Translated msgid "Chamfer — drag the arrow, or click the number to type the setback · Enter applies · Esc cancels" -msgstr "" +msgstr "倒角 — 拖曳箭頭,或點選數字以輸入倒角距離 · 按 Enter 套用 · 按 Esc 取消" +# AI Translated msgid "Offset — click a curve; its whole outline is offset" -msgstr "" +msgstr "偏移 — 點選一條曲線;其整個輪廓都會偏移" +# AI Translated msgid "Offset — drag the arrow to either side, or click the number to type the distance · Enter applies · Esc cancels" -msgstr "" +msgstr "偏移 — 將箭頭拖曳至任一側,或點選數字以輸入距離 · 按 Enter 套用 · 按 Esc 取消" # AI Translated msgid "Mirror — first click the LINE to mirror about (a construction line works)" msgstr "鏡像 — 先點選作為鏡像軸的「直線」(可使用建構線)" +# AI Translated msgid "Mirror — axis set · now click the entities to mirror · Esc cancels" -msgstr "" +msgstr "鏡像 — 已設定軸 · 現在點選要鏡像的圖元 · 按 Esc 取消" +# AI Translated #, c-format, boost-format msgid "Mirror — axis set · %d to mirror · click another to add or remove it · Enter applies" -msgstr "" +msgstr "鏡像 — 已設定軸 · %d 個要鏡像 · 點選其他圖元以加入或移除 · 按 Enter 套用" # AI Translated msgid "Move — click the entities to move" msgstr "移動 — 點選要移動的圖元" +# AI Translated msgid "Move — drag the handle, or click the number to type the distance · Enter applies" -msgstr "" +msgstr "移動 — 拖曳控點,或點選數字以輸入距離 · 按 Enter 套用" # AI Translated msgid "Rotate — click the entities to rotate" msgstr "旋轉 — 點選要旋轉的圖元" +# AI Translated msgid "Rotate — drag the handle, or click the number to type the angle · Enter applies" -msgstr "" +msgstr "旋轉 — 拖曳控點,或點選數字以輸入角度 · 按 Enter 套用" # AI Translated msgid "Scale — click the entities to scale" msgstr "縮放 — 點選要縮放的圖元" +# AI Translated msgid "Scale — drag the handle, or click the number to type the factor · Enter applies" -msgstr "" +msgstr "縮放 — 拖曳控點,或點選數字以輸入比例 · 按 Enter 套用" # AI Translated msgid "Array — click the entities to repeat" msgstr "陣列 — 點選要重複的圖元" +# AI Translated msgid "Array — drag the handle to set the step, click the count to type it · Enter applies" -msgstr "" +msgstr "陣列 — 拖曳控點以設定間距,點選數量以輸入 · 按 Enter 套用" # AI Translated msgid "Polar array — click the entities to repeat" msgstr "環形陣列 — 點選要重複的圖元" +# AI Translated msgid "Polar array — drag the handle to set the sweep, click the count to type it · Enter applies" -msgstr "" +msgstr "環形陣列 — 拖曳控點以設定角度範圍,點選數量以輸入 · 按 Enter 套用" +# AI Translated msgid "Drag a corner to scale, the center to move · Enter or ✓ when done, Esc to discard" -msgstr "" +msgstr "拖曳角點以縮放,拖曳中心以移動 · 完成後按 Enter 或 ✓,按 Esc 捨棄" # AI Translated msgid " · Esc goes back to Select" @@ -24801,61 +24895,76 @@ msgstr " · 按 Esc 返回選取" msgid " · click a constraint badge to remove it" msgstr " · 點選約束標記即可移除" +# AI Translated #, c-format, boost-format msgid "%s — solid body" -msgstr "" +msgstr "%s — 實體本體" +# AI Translated #, c-format, boost-format msgid "%s — surface body" -msgstr "" +msgstr "%s — 曲面本體" +# AI Translated #, c-format, boost-format msgid "Flat face %d of %s" -msgstr "" +msgstr "平面 %d(%s)" +# AI Translated #, c-format, boost-format msgid "Cylindrical face %d of %s" -msgstr "" +msgstr "圓柱面 %d(%s)" +# AI Translated #, c-format, boost-format msgid "Face %d of %s" -msgstr "" +msgstr "面 %d(%s)" +# AI Translated #, c-format msgid "%zu edge of %s" msgid_plural "%zu edges of %s" -msgstr[0] "" +msgstr[0] "%zu 條邊(%s)" +# AI Translated #, c-format, boost-format msgid "Straight edge %d of %s" -msgstr "" +msgstr "直線邊 %d(%s)" +# AI Translated #, c-format, boost-format msgid "Circular edge %d of %s" -msgstr "" +msgstr "圓形邊 %d(%s)" +# AI Translated #, c-format, boost-format msgid "Vertex of %s" -msgstr "" +msgstr "%s 的頂點" +# AI Translated msgid "Sketch profile" -msgstr "" +msgstr "草圖輪廓" +# AI Translated msgid "Sketch — nothing selected" -msgstr "" +msgstr "草圖 — 未選擇任何內容" +# AI Translated msgid "Sketch line" -msgstr "" +msgstr "草圖直線" +# AI Translated msgid "Sketch curve" -msgstr "" +msgstr "草圖曲線" +# AI Translated msgid "Sketch point" -msgstr "" +msgstr "草圖點" +# AI Translated #, c-format, boost-format msgid "%d sketch entities" -msgstr "" +msgstr "%d 個草圖圖元" # AI Translated msgid "select something first" @@ -24918,8 +25027,9 @@ msgstr "已新增平面 — 可將其選為草圖平面" msgid "Axis added" msgstr "已新增軸" +# AI Translated msgid "Coordinate system added" -msgstr "" +msgstr "已新增座標系" # AI Translated msgid "Shell needs a solid body — add or import one first" @@ -24936,10 +25046,10 @@ msgstr "拔模需要選取的面 — 請先點選側面" # AI Translated msgid "" "Nothing yet — import a STEP or a mesh from the toolbar,\n" -"or click a reference plane and right-click it to start a sketch." +"or press Sketch and click a reference plane to start a sketch." msgstr "" "目前沒有任何內容 — 從工具列匯入 STEP 或網格,\n" -"或點選參考平面後按右鍵開始繪製草圖。" +"或按「草圖」後點選參考平面以開始繪製草圖。" # AI Translated msgid "No solid yet — select a sketch and right-click it to Extrude." @@ -24949,9 +25059,10 @@ msgstr "尚無實體 — 選取草圖後按右鍵進行擠出。" msgid "Could not restore the CAD model from this project" msgstr "無法從此專案還原 CAD 模型" +# AI Translated #, c-format, boost-format msgid "Could not restore the CAD model: %s" -msgstr "" +msgstr "無法還原 CAD 模型:%s" # AI Translated #, c-format @@ -24974,17 +25085,35 @@ msgstr "剖面圖 — 顯示上半部" msgid "Section view — showing the lower half" msgstr "剖面圖 — 顯示下半部" +# AI Translated msgid "Finding the feature's faces…" -msgstr "" +msgstr "正在尋找特徵的面…" # AI Translated -msgid "Select a body first — click it in the viewport or the Bodies list" -msgstr "請先選取本體 — 在視埠或本體清單中點選" +msgid "The model is being rebuilt — zoom again when it finishes" +msgstr "模型正在重建 — 完成後請再次縮放" + +# AI Translated +#, c-format, boost-format +msgid "%s has nothing on show to zoom to" +msgstr "%s 目前沒有可供縮放的可見內容" # AI Translated msgid "That body has no display mesh yet — recompute first" msgstr "該本體尚無顯示網格 — 請先重新計算" +# AI Translated +msgid "Select something to zoom to" +msgstr "請選取要縮放顯示的項目" + +# AI Translated +msgid "Finish or cancel what is open first" +msgstr "請先完成或取消目前開啟的項目" + +# AI Translated +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "請先選取本體 — 在視埠或本體清單中點選" + # AI Translated msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" msgstr "拖曳箭頭以移動,拖曳圓環以旋轉 — 然後按「確認」(Esc 取消)" @@ -25010,12 +25139,10 @@ msgstr "點選實體上的面,然後按 F" msgid "Placed on face — body laid flat on the bed" msgstr "已選擇底面 — 本體已平放在列印板上" -msgid "Finish or cancel what is open first" -msgstr "" - +# AI Translated #, c-format, boost-format msgid "Edit rejected: %s" -msgstr "" +msgstr "編輯被拒絕:%s" # AI Translated msgid "Erase all features and bodies and start a new design? This cannot be undone." @@ -25034,9 +25161,10 @@ msgstr "此本體沒有可刪除的特徵 — 請使用「新設計」重新開 msgid "feature %d" msgstr "特徵 %d" +# AI Translated #, c-format, boost-format msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" -msgstr "" +msgstr "已刪除 %s(即建立此本體的特徵) — 按 Ctrl+Z 可復原" # AI Translated msgid "Select the FEATURE that created this body (or use New Design)" @@ -25427,12 +25555,14 @@ msgstr "STEP 檔案 (*.step;*.stp)|*.step;*.stp" msgid "Exported STEP" msgstr "已匯出 STEP" +# AI Translated #, c-format, boost-format msgid "STEP export failed: %s" -msgstr "" +msgstr "STEP 匯出失敗:%s" +# AI Translated msgid "Commit to Plate (as bodies) — send each body to Prepare as its own object" -msgstr "" +msgstr "送至列印板(依本體) — 將每個本體作為獨立物件送到「準備」" # AI Translated msgid "Commit to Plate — send the solid to Prepare" @@ -25446,18 +25576,35 @@ msgstr "沒有可提交的內容 — 請先新增特徵" msgid "All bodies hidden — show one before committing" msgstr "所有本體皆已隱藏 — 提交前請先顯示一個" +# AI Translated #, c-format msgid "%zu edge" msgid_plural "%zu edges" -msgstr[0] "" +msgstr[0] "%zu 條邊" +# AI Translated #, c-format, boost-format msgid "Centerline E%d" -msgstr "" +msgstr "中心線 E%d" +# AI Translated #, c-format, boost-format msgid "Line E%d" +msgstr "直線 E%d" + +# AI Translated +#, c-format, boost-format +msgid "Sketch plane: %s — pick a tool" +msgstr "草圖平面:%s — 請選擇工具" + +# AI Translated +#, c-format, boost-format +msgid "" +"Sketch plane: %s.\n" +"Pick a tool, or press Menu for the list." msgstr "" +"草圖平面:%s。\n" +"請選擇工具,或按選單鍵查看清單。" # AI Translated msgid "Plane ready" @@ -25467,8 +25614,9 @@ msgstr "平面已就緒" msgid "Axis ready" msgstr "軸已就緒" +# AI Translated msgid "Coordinate system ready" -msgstr "" +msgstr "座標系已就緒" # AI Translated msgid "Helix ready" @@ -25486,9 +25634,10 @@ msgstr "草圖已就緒" msgid "Mate ready" msgstr "結合已就緒" +# AI Translated #, c-format, boost-format msgid "Invalid: %s" -msgstr "" +msgstr "無效:%s" # AI Translated #, c-format @@ -25570,110 +25719,139 @@ msgstr "編輯變數" msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" msgstr "無法移除變數「%s」(可能仍被特徵運算式參照):%s" +# AI Translated #, c-format, boost-format msgid "\"%s\" is not a value an expression can drive" -msgstr "" +msgstr "「%s」不是運算式可驅動的值" # AI Translated msgid "No binding for that field" msgstr "該欄位沒有繫結" +# AI Translated msgid "The value must be greater than zero" -msgstr "" +msgstr "數值必須大於零" +# AI Translated msgid "The value must not be negative (zero means coincident)" -msgstr "" +msgstr "數值不能為負(零表示重合)" +# AI Translated msgid "That dimension cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "無法滿足該尺寸 — 草圖已過度約束" +# AI Translated #, boost-format msgid "%1% constraint(s) cannot act on this geometry (an ellipse or spline curve, or a zero-size circle) and are ignored" -msgstr "" +msgstr "%1% 個約束無法作用於此幾何(橢圓或雲形線,或尺寸為零的圓),已忽略" +# AI Translated msgid "This profile crosses or folds back on itself at the red mark, so it does not bound one region" -msgstr "" +msgstr "此輪廓在紅色標記處自我交叉或反折,因此無法圍成單一區域" # AI Translated #. TRN Design sketch: length of one side of a regular polygon (inline value editor title) msgid "Side" msgstr "邊長" +# AI Translated msgid "Semi-major axis" -msgstr "" +msgstr "半長軸" +# AI Translated msgid "Semi-minor axis" -msgstr "" +msgstr "半短軸" +# AI Translated msgid "The angle must be between 0° and 360°" -msgstr "" +msgstr "角度必須介於 0° 到 360° 之間" +# AI Translated msgid "The semi-major axis cannot be shorter than the semi-minor axis" -msgstr "" +msgstr "半長軸不能短於半短軸" +# AI Translated msgid "The corner radius must be less than half the shorter side" -msgstr "" +msgstr "圓角半徑必須小於短邊長度的一半" +# AI Translated msgid "The slot is too wide for its radius — the width must be less than twice the radius" -msgstr "" +msgstr "槽相對於其半徑過寬 — 寬度必須小於半徑的兩倍" +# AI Translated #, boost-format msgid "%1% cannot be satisfied — the sketch is over-constrained" -msgstr "" +msgstr "無法滿足%1% — 草圖已過度約束" +# AI Translated msgid "Those two lines do not meet at a corner — pick two lines that do" -msgstr "" +msgstr "這兩條直線未相交於角點 — 請選取兩條相交於角點的直線" +# AI Translated msgid "The size must be greater than zero" -msgstr "" +msgstr "尺寸必須大於零" +# AI Translated msgid "Fillet: the radius overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "圓角:半徑超出其中一邊的長度,或兩條直線未相交於角點" +# AI Translated msgid "Chamfer: the distance overruns a leg, or the two lines do not meet at a corner" -msgstr "" +msgstr "倒角:距離超出其中一邊的長度,或兩條直線未相交於角點" +# AI Translated #, boost-format msgid "%1% constraint(s) the fillet/chamfer invalidated were removed" -msgstr "" +msgstr "已移除 %1% 個因圓角/倒角而失效的約束" +# AI Translated msgid "Offset: an ellipse or a spline has no parallel of its own kind — pick lines, arcs or circles" -msgstr "" +msgstr "偏移:橢圓或雲形線無法產生同類型的平行曲線 — 請選取直線、圓弧或圓" +# AI Translated msgid "The scale factor must be greater than zero" -msgstr "" +msgstr "縮放比例必須大於零" +# AI Translated msgid "Copies" -msgstr "" +msgstr "副本數" +# AI Translated msgid "The number of copies must be a whole number, 2 or more" -msgstr "" +msgstr "副本數必須是 2 以上的整數" +# AI Translated #, boost-format msgid "%1% constraint(s) released by the transform" -msgstr "" +msgstr "變換解除了 %1% 個約束" +# AI Translated msgid "The array copies are unconstrained — the solver refused every binding" -msgstr "" +msgstr "陣列副本未受約束 — 求解器拒絕了所有繫結約束" # AI Translated msgid "right-click or double-click to finish, click start to close" msgstr "按右鍵或按兩下以完成,點選起點以封閉" +# AI Translated msgid "Extend: click a line or an arc that can reach another entity" -msgstr "" +msgstr "延伸:點選可延伸至其他圖元的直線或圓弧" +# AI Translated msgid "Trim: click a segment where it crosses another entity" -msgstr "" +msgstr "修剪:點選與其他圖元相交的線段" +# AI Translated msgid "Press Enter or ✓ to apply, Esc to discard" -msgstr "" +msgstr "按 Enter 或 ✓ 套用,按 Esc 捨棄" +# AI Translated msgid "No dimension for that entity yet — click a line, a circle, an arc, or two points" -msgstr "" +msgstr "目前尚無法為該圖元標註尺寸 — 請點選直線、圓、圓弧或兩個點" +# AI Translated msgid "Click a second point, or a line to measure the distance to" -msgstr "" +msgstr "點選第二點,或點選一條直線以測量到該直線的距離" # AI Translated msgid "Enter a number" @@ -25709,8 +25887,12 @@ msgid "Sketch" msgstr "草圖" # AI Translated -msgid "Click a face or a reference plane, then pick a drawing tool" -msgstr "點選一個面或參考平面,再選擇繪圖工具" +msgid "Select a flat face or a reference plane to sketch on" +msgstr "選取要在其上繪製草圖的平面或參考平面" + +# AI Translated +msgid "Sketch on the selected flat face or plane, or click one next" +msgstr "在選取的平面或參考平面上繪製草圖,或隨後點選一個" # AI Translated msgctxt "Design" @@ -25732,9 +25914,10 @@ msgctxt "Design" msgid "Thicken" msgstr "加厚" +# AI Translated msgctxt "Design" msgid "Join" -msgstr "" +msgstr "聯集" # AI Translated msgid "Fuse the tool body into the target — one solid, no seam" @@ -25787,17 +25970,15 @@ msgctxt "Design" msgid "Thicken Surface" msgstr "加厚曲面" +# AI Translated msgid "Thicken Surface needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "加厚曲面需要曲面本體 — 請先使用曲面工具建立" # AI Translated msgctxt "Design" msgid "Hole" msgstr "孔" -msgid "Drill a hole, centerd on a picked face or placed on a plane" -msgstr "" - # AI Translated msgctxt "Design" msgid "Thread" @@ -25812,8 +25993,9 @@ msgctxt "Design" msgid "Split" msgstr "分割" +# AI Translated msgid "Split needs a solid body — add or import one first" -msgstr "" +msgstr "分割需要實體本體 — 請先新增或匯入一個" # AI Translated msgid "Split the body along a picked face into two solids" @@ -25859,8 +26041,9 @@ msgctxt "Design" msgid "Surface Offset" msgstr "曲面偏移" +# AI Translated msgid "Surface Offset needs a surface body — make one with a Surface tool first" -msgstr "" +msgstr "曲面偏移需要曲面本體 — 請先使用曲面工具建立" # AI Translated msgctxt "Design" @@ -25890,8 +26073,9 @@ msgctxt "Design" msgid "Pattern on Curve" msgstr "沿曲線陣列" +# AI Translated msgid "Pattern on Curve needs a body and a curve" -msgstr "" +msgstr "沿曲線陣列需要本體與曲線" # AI Translated msgid "Repeat the body along a picked curve" @@ -25912,8 +26096,9 @@ msgctxt "Design" msgid "Align to" msgstr "對齊至" +# AI Translated msgid "Align needs a body — add or import one first" -msgstr "" +msgstr "對齊需要本體 — 請先新增或匯入一個" # AI Translated msgid "Align the body to a picked face or plane" @@ -25929,9 +26114,10 @@ msgctxt "Design" msgid "Axis" msgstr "軸" +# AI Translated msgctxt "Design" msgid "Coordinate system" -msgstr "" +msgstr "座標系" # AI Translated msgctxt "Design" @@ -25947,9 +26133,10 @@ msgstr "測量" msgid "Measure between the picked points, edges or faces" msgstr "在選取的點、邊或面之間進行測量" +# AI Translated msgctxt "Design" msgid "Volume and area" -msgstr "" +msgstr "體積與表面積" # AI Translated msgid "Report the volume and surface area of the selected body" @@ -25991,12 +26178,23 @@ msgctxt "Design" msgid "Delete Face" msgstr "刪除面" +# AI Translated msgctxt "Design" msgid "Color" -msgstr "" +msgstr "顏色" +# AI Translated msgid "Set the selected body's display color" -msgstr "" +msgstr "設定所選本體的顯示顏色" + +# AI Translated +msgctxt "Design" +msgid "Zoom to selection" +msgstr "縮放至選取項目" + +# AI Translated +msgid "Frame the selection in the view, keeping the view direction" +msgstr "將選取項目縮放至適合視圖,並保持目前的檢視方向" # AI Translated msgctxt "Design" @@ -26035,9 +26233,10 @@ msgctxt "Design" msgid "Corner rectangle" msgstr "角點矩形" +# AI Translated msgctxt "Design" msgid "Center rectangle" -msgstr "" +msgstr "中心矩形" # AI Translated msgctxt "Design" @@ -26049,9 +26248,10 @@ msgctxt "Design" msgid "Rounded rectangle" msgstr "圓角矩形" +# AI Translated msgctxt "Design" msgid "Center circle" -msgstr "" +msgstr "中心圓" # AI Translated msgctxt "Design" @@ -26073,9 +26273,10 @@ msgctxt "Design" msgid "Tangent arc" msgstr "相切圓弧" +# AI Translated msgctxt "Design" msgid "Center-point arc" -msgstr "" +msgstr "中心點圓弧" # AI Translated msgctxt "Design" @@ -26107,48 +26308,54 @@ msgctxt "Design" msgid "Triangle" msgstr "三角形" +# AI Translated msgid "Triangle — click center, then a vertex" -msgstr "" +msgstr "三角形 — 點選中心,再點選一個頂點" # AI Translated msgctxt "Design" msgid "Square" msgstr "正方形" +# AI Translated msgid "Square — click center, then a vertex" -msgstr "" +msgstr "正方形 — 點選中心,再點選一個頂點" # AI Translated msgctxt "Design" msgid "Pentagon" msgstr "五邊形" +# AI Translated msgid "Pentagon — click center, then a vertex" -msgstr "" +msgstr "五邊形 — 點選中心,再點選一個頂點" # AI Translated msgctxt "Design" msgid "Hexagon" msgstr "六邊形" +# AI Translated msgid "Hexagon — click center, then a vertex" -msgstr "" +msgstr "六邊形 — 點選中心,再點選一個頂點" # AI Translated msgctxt "Design" msgid "Octagon" msgstr "八邊形" +# AI Translated msgid "Octagon — click center, then a vertex" -msgstr "" +msgstr "八邊形 — 點選中心,再點選一個頂點" # AI Translated msgctxt "Design" msgid "Dodecagon" msgstr "十二邊形" +# AI Translated msgid "Dodecagon — click center, then a vertex" -msgstr "" +msgstr "十二邊形 — 點選中心,再點選一個頂點" # AI Translated msgctxt "Design" @@ -26178,8 +26385,9 @@ msgctxt "Design" msgid "Text" msgstr "文字" +# AI Translated msgid "Type text; it becomes a Text feature on this sketch's plane, editable later" -msgstr "" +msgstr "輸入文字;它會成為此草圖平面上的文字特徵,之後可再編輯" # AI Translated msgctxt "Design" @@ -26296,27 +26504,34 @@ msgstr "角度 / 距離…" msgid "Type the angle between two lines, or the distance between the two picks" msgstr "輸入兩條直線之間的角度,或兩個選取項目之間的距離" +# AI Translated msgid "Type the text to insert" -msgstr "" +msgstr "輸入要插入的文字" +# AI Translated msgid "Bold" -msgstr "" +msgstr "粗體" +# AI Translated msgid "Italic" -msgstr "" +msgstr "斜體" +# AI Translated msgid "This font cannot be used for text — pick another one" -msgstr "" +msgstr "此字型無法用於文字 — 請選擇其他字型" +# AI Translated msgid "Type the text to see its size" -msgstr "" +msgstr "輸入文字以查看其尺寸" +# AI Translated msgid "This font has no outline for this text" -msgstr "" +msgstr "此字型中沒有該文字的字形輪廓" +# AI Translated #, c-format, boost-format msgid "Size: %.1f × %.1f mm" -msgstr "" +msgstr "尺寸:%.1f × %.1f mm" # AI Translated msgid "Primitive" @@ -26414,8 +26629,9 @@ msgstr "輪廓" msgid "Start new profile (for holes)" msgstr "開始新輪廓(用於孔洞)" +# AI Translated msgid "Segments" -msgstr "" +msgstr "段數" # AI Translated msgid "Sides" @@ -26429,20 +26645,23 @@ msgstr "在畫布上點選以繪製" msgid "Snap to grid" msgstr "貼齊格線" +# AI Translated msgid "Grid step" -msgstr "" +msgstr "格線間距" # AI Translated msgid "Outer" msgstr "外輪廓" +# AI Translated msgid "closed" -msgstr "" +msgstr "已封閉" +# AI Translated #. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing #, boost-format msgid "%1% %2%: %3% points %4%" -msgstr "" +msgstr "%1% %2%:%3% 個點 %4%" # AI Translated msgid "XY (Top)" @@ -26478,8 +26697,9 @@ msgstr[0] "%zu 個封閉輪廓" msgid "Draw a closed profile to enable" msgstr "請繪製封閉輪廓以啟用" +# AI Translated msgid "Clear all" -msgstr "" +msgstr "全部清除" # AI Translated msgid "Empty result" @@ -30617,6 +30837,39 @@ msgstr "" "避免翹曲\n" "您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率。" +# AI Translated +#~ msgid "(Experimental) Use printer agents instead of print hosts" +#~ msgstr "(實驗性)使用列印裝置代理程式取代列印主機" + +# AI Translated +#~ msgid "FEATURES" +#~ msgstr "特徵" + +# AI Translated +#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" +#~ msgstr "在視埠中點選一個面或參考平面,再選擇草圖工具" + +# AI Translated +#~ msgid "Click a face or a reference plane, then a sketch tool." +#~ msgstr "點選一個面或參考平面,再選擇草圖工具。" + +# AI Translated +#, c-format, boost-format +#~ msgid "%s plane selected — right-click for the drawing tools" +#~ msgstr "已選取 %s 平面 — 按右鍵開啟繪圖工具" + +# AI Translated +#~ msgid "" +#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" +#~ "or click a reference plane and right-click it to start a sketch." +#~ msgstr "" +#~ "目前沒有任何內容 — 從工具列匯入 STEP 或網格,\n" +#~ "或點選參考平面後按右鍵開始繪製草圖。" + +# AI Translated +#~ msgid "Click a face or a reference plane, then pick a drawing tool" +#~ msgstr "點選一個面或參考平面,再選擇繪圖工具" + #~ msgid "X" #~ msgstr "X" diff --git a/resources/images/design_bed.svg b/resources/images/design_bed.svg new file mode 100644 index 0000000000..a9441e7b5d --- /dev/null +++ b/resources/images/design_bed.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_export.svg b/resources/images/design_export.svg new file mode 100644 index 0000000000..b998ea19fc --- /dev/null +++ b/resources/images/design_export.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_import_mesh.svg b/resources/images/design_import_mesh.svg new file mode 100644 index 0000000000..7517578578 --- /dev/null +++ b/resources/images/design_import_mesh.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_new.svg b/resources/images/design_new.svg new file mode 100644 index 0000000000..dfe7425de4 --- /dev/null +++ b/resources/images/design_new.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_new_sketch.svg b/resources/images/design_new_sketch.svg new file mode 100644 index 0000000000..a645cf1dff --- /dev/null +++ b/resources/images/design_new_sketch.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_step.svg b/resources/images/design_step.svg index a4a92b7b20..45974dfd77 100644 --- a/resources/images/design_step.svg +++ b/resources/images/design_step.svg @@ -1 +1 @@ - + diff --git a/resources/images/design_zoom.svg b/resources/images/design_zoom.svg new file mode 100644 index 0000000000..e9048dcff4 --- /dev/null +++ b/resources/images/design_zoom.svg @@ -0,0 +1 @@ + diff --git a/resources/profiles/Prusa.json b/resources/profiles/Prusa.json index 57884bea9b..1b46c1deff 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -1,6 +1,6 @@ { "name": "Prusa", - "version": "02.04.00.15", + "version": "02.04.00.16", "force_update": "0", "description": "Prusa configurations", "machine_model_list": [ @@ -1573,48 +1573,32 @@ ], "filament_list": [ { - "name": "Generic ASA @Prusa CORE One", - "sub_path": "filament/Generic ASA @Prusa CORE One.json" - }, - { - "name": "Generic PLA Silk @Prusa CORE One", - "sub_path": "filament/Generic PLA Silk @Prusa CORE One.json" + "name": "Generic PC @Prusa", + "sub_path": "filament/Generic PC @Prusa.json" }, { "name": "fdm_filament_common", "sub_path": "filament/fdm_filament_common.json" }, { - "name": "Generic ASA @Prusa CORE One 0.6", - "sub_path": "filament/Generic ASA @Prusa CORE One 0.6.json" + "name": "fdm_filament_template_indx", + "sub_path": "filament/fdm_filament_template_indx.json" }, { - "name": "Generic ASA @Prusa CORE One 0.8", - "sub_path": "filament/Generic ASA @Prusa CORE One 0.8.json" + "name": "fdm_filament_template_nextruder_pet", + "sub_path": "filament/fdm_filament_template_nextruder_pet.json" }, { - "name": "Generic ASA @Prusa CORE One HF 0.4", - "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.4.json" + "name": "fdm_filament_template_nextruder_pet_hf", + "sub_path": "filament/fdm_filament_template_nextruder_pet_hf.json" }, { - "name": "Generic ASA @Prusa CORE One HF 0.5", - "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.5.json" + "name": "fdm_filament_template_nextruder_pla", + "sub_path": "filament/fdm_filament_template_nextruder_pla.json" }, { - "name": "Generic ASA @Prusa CORE One HF 0.6", - "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.6.json" - }, - { - "name": "Generic ASA @Prusa CORE One HF 0.8", - "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.8.json" - }, - { - "name": "Generic PLA Silk @Prusa CORE One 0.6", - "sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.6.json" - }, - { - "name": "Generic PLA Silk @Prusa CORE One 0.8", - "sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.8.json" + "name": "fdm_filament_template_nextruder_pla_hf", + "sub_path": "filament/fdm_filament_template_nextruder_pla_hf.json" }, { "name": "fdm_filament_abs", @@ -1664,6 +1648,22 @@ "name": "fdm_filament_tpu", "sub_path": "filament/fdm_filament_tpu.json" }, + { + "name": "Generic PLA Silk @Prusa CORE One INDX", + "sub_path": "filament/Generic PLA Silk @Prusa CORE One INDX.json" + }, + { + "name": "Generic ASA @Prusa CORE One", + "sub_path": "filament/Generic ASA @Prusa CORE One.json" + }, + { + "name": "Generic PC @Prusa MK4 MMU3", + "sub_path": "filament/Generic PC @Prusa MK4 MMU3.json" + }, + { + "name": "Generic PLA Silk @Prusa CORE One", + "sub_path": "filament/Generic PLA Silk @Prusa CORE One.json" + }, { "name": "Generic ABS @Prusa MK3.5", "sub_path": "filament/Generic ABS @Prusa MK3.5.json" @@ -2160,6 +2160,38 @@ "name": "Generic TPU HF @Prusa MK3.5", "sub_path": "filament/Generic TPU HF @Prusa MK3.5.json" }, + { + "name": "Generic ASA @Prusa CORE One 0.6", + "sub_path": "filament/Generic ASA @Prusa CORE One 0.6.json" + }, + { + "name": "Generic ASA @Prusa CORE One 0.8", + "sub_path": "filament/Generic ASA @Prusa CORE One 0.8.json" + }, + { + "name": "Generic ASA @Prusa CORE One HF 0.4", + "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.4.json" + }, + { + "name": "Generic ASA @Prusa CORE One HF 0.5", + "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.5.json" + }, + { + "name": "Generic ASA @Prusa CORE One HF 0.6", + "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.6.json" + }, + { + "name": "Generic ASA @Prusa CORE One HF 0.8", + "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.8.json" + }, + { + "name": "Generic PLA Silk @Prusa CORE One 0.6", + "sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.6.json" + }, + { + "name": "Generic PLA Silk @Prusa CORE One 0.8", + "sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.8.json" + }, { "name": "Generic ABS @Prusa MK4S HF0.4", "sub_path": "filament/Generic ABS @Prusa MK4S HF0.4.json" @@ -2212,6 +2244,10 @@ "name": "Generic ABS HF @Prusa MINIIS 0.8", "sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.8.json" }, + { + "name": "Generic ASA @Prusa MK4 MMU3", + "sub_path": "filament/Generic ASA @Prusa MK4 MMU3.json" + }, { "name": "Generic ASA @Prusa MK4S 0.6", "sub_path": "filament/Generic ASA @Prusa MK4S 0.6.json" @@ -2260,6 +2296,10 @@ "name": "Prusament ASA @CORE One HF 0.8", "sub_path": "filament/Prusament ASA @CORE One HF 0.8.json" }, + { + "name": "Prusament ASA @MK4 MMU3", + "sub_path": "filament/Prusament ASA @MK4 MMU3.json" + }, { "name": "Prusament ASA @MK4S 0.6", "sub_path": "filament/Prusament ASA @MK4S 0.6.json" @@ -2392,6 +2432,10 @@ "name": "Prusament PC Blend @CORE One HF 0.8", "sub_path": "filament/Prusament PC Blend @CORE One HF 0.8.json" }, + { + "name": "Prusament PC Blend @MK4 MMU3", + "sub_path": "filament/Prusament PC Blend @MK4 MMU3.json" + }, { "name": "Prusament PC Blend @MK4S 0.6", "sub_path": "filament/Prusament PC Blend @MK4S 0.6.json" @@ -2532,6 +2576,10 @@ "name": "Prusament PETG @CORE One HF 0.8", "sub_path": "filament/Prusament PETG @CORE One HF 0.8.json" }, + { + "name": "Prusament PETG @MK4 MMU3", + "sub_path": "filament/Prusament PETG @MK4 MMU3.json" + }, { "name": "Prusament PETG @MK4S 0.6", "sub_path": "filament/Prusament PETG @MK4S 0.6.json" @@ -2668,6 +2716,10 @@ "name": "Prusament PLA @CORE One HF 0.8", "sub_path": "filament/Prusament PLA @CORE One HF 0.8.json" }, + { + "name": "Prusament PLA @MK4 MMU3", + "sub_path": "filament/Prusament PLA @MK4 MMU3.json" + }, { "name": "Prusament PLA @MK4S 0.6", "sub_path": "filament/Prusament PLA @MK4S 0.6.json" @@ -2704,6 +2756,10 @@ "name": "Prusament rPLA @CORE One 0.8", "sub_path": "filament/Prusament rPLA @CORE One 0.8.json" }, + { + "name": "Prusament rPLA @MK4 MMU3", + "sub_path": "filament/Prusament rPLA @MK4 MMU3.json" + }, { "name": "Prusament rPLA @MK4S 0.6", "sub_path": "filament/Prusament rPLA @MK4S 0.6.json" @@ -2856,6 +2912,10 @@ "name": "Generic ABS @Prusa CORE One HF 0.8", "sub_path": "filament/Generic ABS @Prusa CORE One HF 0.8.json" }, + { + "name": "Generic ABS @Prusa MK4 MMU3", + "sub_path": "filament/Generic ABS @Prusa MK4 MMU3.json" + }, { "name": "Generic ASA @Prusa MK4S HF0.5", "sub_path": "filament/Generic ASA @Prusa MK4S HF0.5.json" @@ -2904,6 +2964,10 @@ "name": "Generic PETG @Prusa CORE One HF 0.8", "sub_path": "filament/Generic PETG @Prusa CORE One HF 0.8.json" }, + { + "name": "Generic PETG @Prusa MK4 MMU3", + "sub_path": "filament/Generic PETG @Prusa MK4 MMU3.json" + }, { "name": "Generic PLA @Prusa MK4S HF0.5", "sub_path": "filament/Generic PLA @Prusa MK4S HF0.5.json" @@ -2948,6 +3012,10 @@ "name": "Generic PLA @Prusa CORE One HF 0.8", "sub_path": "filament/Generic PLA @Prusa CORE One HF 0.8.json" }, + { + "name": "Generic PLA @Prusa MK4 MMU3", + "sub_path": "filament/Generic PLA @Prusa MK4 MMU3.json" + }, { "name": "Generic TPU @Prusa CORE One 0.6", "sub_path": "filament/Generic TPU @Prusa CORE One 0.6.json" @@ -2955,14 +3023,6 @@ { "name": "Generic TPU @Prusa CORE One 0.8", "sub_path": "filament/Generic TPU @Prusa CORE One 0.8.json" - }, - { - "name": "Generic PC @Prusa", - "sub_path": "filament/Generic PC @Prusa.json" - }, - { - "name": "Generic PLA Silk @Prusa CORE One INDX", - "sub_path": "filament/Generic PLA Silk @Prusa CORE One INDX.json" } ], "machine_list": [ diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.4.json index caf36dc7d1..205704705f 100644 --- a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.4.json @@ -7,6 +7,9 @@ "setting_id": "ASYz8yASE82tQDII", "filament_id": "OFY9muEs", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.5.json index 4d0ae20a33..631940cee5 100644 --- a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.5.json @@ -7,6 +7,9 @@ "setting_id": "mzZCm8XDmAR23YR6", "filament_id": "OFY9muEs", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.6.json index 6419e2a9d4..4b0a714f62 100644 --- a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.6.json @@ -7,6 +7,9 @@ "setting_id": "gJhX2KBpk4wfXIj0", "filament_id": "OFY9muEs", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One INDX.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One INDX.json index 7a154dfc54..6a4bdbf5fb 100644 --- a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One INDX.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One INDX.json @@ -5,6 +5,9 @@ "from": "system", "setting_id": "JEatvybG9xIkrPk3", "instantiation": "true", + "include": [ + "fdm_filament_template_indx" + ], "filament_cost": [ "34.65" ], diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One.json index a3fcbdee47..5138e20528 100644 --- a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One.json @@ -6,6 +6,9 @@ "from": "system", "setting_id": "0k31oXq1pLQsHvrj", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], "chamber_temperature": [ "40" ], diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4 MMU3.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4 MMU3.json new file mode 100644 index 0000000000..9c3a15622a --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4 MMU3.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4 MMU3", + "inherits": "Generic ABS @Prusa MK4", + "from": "system", + "setting_id": "uFmixo2FX1yxNsDB", + "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], + "compatible_printers": [ + "Prusa MK4 MMU3 0.4 nozzle", + "Prusa MK4 MMU3 0.6 nozzle", + "Prusa MK4 MMU3 HF0.4 nozzle" + ], + "filament_minimal_purge_on_wipe_tower": [ + "35" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.4.json index 80c129fab9..c368fcae43 100644 --- a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.4.json @@ -7,6 +7,9 @@ "setting_id": "eKDfiVRE59itoppm", "filament_id": "OFLPAxz3", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.5.json index 4ea45b0f5b..07ee914c50 100644 --- a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.5.json @@ -7,6 +7,9 @@ "setting_id": "ZjHf5Vvtf4ESNnWb", "filament_id": "OFLPAxz3", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.6.json index d6b2fff248..d602b9e774 100644 --- a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.6.json @@ -7,6 +7,9 @@ "setting_id": "aRDgUgQJWdNDJx5c", "filament_id": "OFLPAxz3", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One.json index 09a8349005..d135ffcbad 100644 --- a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One.json @@ -6,6 +6,9 @@ "from": "system", "setting_id": "Q7fgojkHRZI0floy", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], "chamber_temperature": [ "40" ], diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4 MMU3.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4 MMU3.json new file mode 100644 index 0000000000..dc9f5f3b0e --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4 MMU3.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4 MMU3", + "inherits": "Generic ASA @Prusa MK4", + "from": "system", + "setting_id": "iq9bFkpmAOJ4ae4g", + "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], + "compatible_printers": [ + "Prusa MK4 MMU3 0.4 nozzle", + "Prusa MK4 MMU3 0.6 nozzle", + "Prusa MK4 MMU3 HF0.4 nozzle" + ], + "filament_minimal_purge_on_wipe_tower": [ + "35" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC @Prusa MK4 MMU3.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MK4 MMU3.json new file mode 100644 index 0000000000..9d02147b66 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MK4 MMU3.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PC @Prusa MK4 MMU3", + "inherits": "Generic PC @Prusa", + "from": "system", + "setting_id": "qMawlK9QPI7DcF8I", + "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], + "compatible_printers": [ + "Prusa MK4 MMU3 0.4 nozzle", + "Prusa MK4 MMU3 0.6 nozzle", + "Prusa MK4 MMU3 HF0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.4.json index 510e1d2baf..38ab9dc4c2 100644 --- a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.4.json @@ -7,6 +7,9 @@ "setting_id": "7oUyjvRHLH4bJyX0", "filament_id": "OFYPdQJh", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.5.json index f28f5f10a3..f24f1f8f26 100644 --- a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.5.json @@ -7,6 +7,9 @@ "setting_id": "6HiIOGURZWwman1l", "filament_id": "OFYPdQJh", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.6.json index 53dd49907d..c78dbe3b1e 100644 --- a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.6.json @@ -7,6 +7,9 @@ "setting_id": "KKiug7A9NOQPe1m7", "filament_id": "OFYPdQJh", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One INDX.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One INDX.json index 7e72e330d8..fa9bab9192 100644 --- a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One INDX.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One INDX.json @@ -5,6 +5,9 @@ "from": "system", "setting_id": "HbevqxqvYHuvRc3v", "instantiation": "true", + "include": [ + "fdm_filament_template_indx" + ], "filament_cost": [ "27.82" ], diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One.json index b605f77a89..4f3e7f400c 100644 --- a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One.json @@ -6,6 +6,9 @@ "from": "system", "setting_id": "W71PW5bpf7CV16D4", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], "chamber_temperature": [ "35" ], diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4 MMU3.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4 MMU3.json new file mode 100644 index 0000000000..ec32594010 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4 MMU3.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK4 MMU3", + "inherits": "Generic PETG @Prusa MK4", + "from": "system", + "setting_id": "lBiZBFpSXZNIp5XG", + "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], + "compatible_printers": [ + "Prusa MK4 MMU3 0.4 nozzle", + "Prusa MK4 MMU3 0.6 nozzle", + "Prusa MK4 MMU3 HF0.4 nozzle" + ], + "filament_minimal_purge_on_wipe_tower": [ + "35" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.6.json index 009a827c7f..4718313292 100644 --- a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.6.json @@ -8,12 +8,16 @@ "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ - "Prusa CORE One 0.6 nozzle" + "Prusa CORE One 0.6 nozzle", + "Prusa CORE One MMU3 0.6 nozzle" ], "nozzle_temperature": [ "210" ], "slow_down_layer_time": [ "15" + ], + "filament_cooling_final_speed": [ + "1.5" ] } diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.4.json index e821c4d97d..cfaa133cb9 100644 --- a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.4.json @@ -7,6 +7,9 @@ "setting_id": "vniEPaoyABoAfLFa", "filament_id": "OFDSrzZ8", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pla_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle", "Prusa CORE One L HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.5.json index af02d26924..8ddcd915a8 100644 --- a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.5.json @@ -7,6 +7,9 @@ "setting_id": "NPEs4gtBlKWupYZX", "filament_id": "OFDSrzZ8", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pla_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.6.json index dd830e04cd..912bd0d131 100644 --- a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.6.json @@ -7,6 +7,9 @@ "setting_id": "SnfULjrWGCiA7ljq", "filament_id": "OFDSrzZ8", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pla_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" ], @@ -24,5 +27,8 @@ ], "slow_down_min_speed": [ "15" + ], + "filament_cooling_final_speed": [ + "1.5" ] } diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One INDX.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One INDX.json index 98583cf4b3..8c3c1e2a15 100644 --- a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One INDX.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One INDX.json @@ -5,6 +5,9 @@ "from": "system", "setting_id": "4qjcaIf1vk3K1x4Z", "instantiation": "true", + "include": [ + "fdm_filament_template_indx" + ], "filament_cost": [ "25.4" ], diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One.json index 247ebd2763..6f19c61dc6 100644 --- a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One.json @@ -6,6 +6,9 @@ "from": "system", "setting_id": "r2i4c7DsYXYIMVCX", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pla" + ], "chamber_temperature": [ "20" ], @@ -17,8 +20,7 @@ "Prusa CORE One L 0.4 nozzle", "Prusa CORE One MMU3 0.4 nozzle", "Prusa CORE One MMU3 0.25 nozzle", - "Prusa CORE One MMU3 0.3 nozzle", - "Prusa CORE One MMU3 0.6 nozzle" + "Prusa CORE One MMU3 0.3 nozzle" ], "fan_cooling_layer_time": [ "40" diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4 MMU3.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4 MMU3.json new file mode 100644 index 0000000000..a83fbb411d --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4 MMU3.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK4 MMU3", + "inherits": "Generic PLA @Prusa MK4", + "from": "system", + "setting_id": "kZvIh84niJ487FsY", + "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pla" + ], + "compatible_printers": [ + "Prusa MK4 MMU3 0.4 nozzle", + "Prusa MK4 MMU3 0.6 nozzle", + "Prusa MK4 MMU3 HF0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.6.json index 55f3698ba3..31000de70a 100644 --- a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.6.json @@ -29,5 +29,8 @@ ], "slow_down_layer_time": [ "15" + ], + "filament_cooling_final_speed": [ + "1.5" ] } diff --git a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One INDX.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One INDX.json index 4c180da592..d4791320a9 100644 --- a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One INDX.json +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One INDX.json @@ -5,6 +5,9 @@ "from": "system", "setting_id": "eKla6su22rYaL9iz", "instantiation": "true", + "include": [ + "fdm_filament_template_indx" + ], "filament_flow_ratio": [ "1", "1", diff --git a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One.json index 71aa3d915d..d22f3c6c6c 100644 --- a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One.json +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One.json @@ -6,6 +6,9 @@ "from": "system", "setting_id": "F9lNHyhZwZi7aD74", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pla" + ], "chamber_temperature": [ "20" ], diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.4.json index e7977e0c94..19287185da 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.4.json @@ -6,6 +6,9 @@ "setting_id": "tXktQXr79am1s5UL", "filament_id": "OFmFwUWM", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.5.json index 26e053cd79..64c8a59399 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.5.json @@ -6,6 +6,9 @@ "setting_id": "YbyojtjXvEtI4Tt3", "filament_id": "OFmFwUWM", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.6.json index 5bde9d8869..9962f5cc76 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.6.json @@ -6,6 +6,9 @@ "setting_id": "35H9TLr1p2Jy767g", "filament_id": "OFmFwUWM", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One.json index fef0f31669..739b511db9 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One.json @@ -7,6 +7,9 @@ "setting_id": "UUTjJ4Y8St3c87jD", "filament_id": "OFmFwUWM", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], "chamber_temperature": [ "40" ], diff --git a/resources/profiles/Prusa/filament/Prusament ASA @MK4 MMU3.json b/resources/profiles/Prusa/filament/Prusament ASA @MK4 MMU3.json new file mode 100644 index 0000000000..249fd6f025 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament ASA @MK4 MMU3.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Prusament ASA @MK4 MMU3", + "inherits": "Prusament ASA @MK4", + "from": "system", + "setting_id": "IRJ2dtBgjCMfmpOH", + "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], + "compatible_printers": [ + "Prusa MK4 MMU3 0.4 nozzle", + "Prusa MK4 MMU3 0.6 nozzle", + "Prusa MK4 MMU3 HF0.4 nozzle" + ], + "filament_minimal_purge_on_wipe_tower": [ + "35" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PA11 Carbon Fiber @CORE One.json b/resources/profiles/Prusa/filament/Prusament PA11 Carbon Fiber @CORE One.json index 0913f1ea9a..d32a445e21 100644 --- a/resources/profiles/Prusa/filament/Prusament PA11 Carbon Fiber @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PA11 Carbon Fiber @CORE One.json @@ -7,6 +7,9 @@ "setting_id": "sNGgucQjiFXwuFkq", "filament_id": "OF4MZtnE", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], "chamber_temperature": [ "40" ], diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.4.json index 4e5b5643bd..bdcf80c13c 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.4.json @@ -6,6 +6,9 @@ "setting_id": "pEsP537TBR5kozQB", "filament_id": "OFvDbkFq", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.5.json index ab9a127df8..0e82457803 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.5.json @@ -6,6 +6,9 @@ "setting_id": "3IfLi1ZVCKKbEBUW", "filament_id": "OFvDbkFq", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.6.json index 642f421819..9d72d40e58 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.6.json @@ -6,6 +6,9 @@ "setting_id": "Q8qWw2G7l2UvxGut", "filament_id": "OFvDbkFq", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One.json index 1ef6ad5868..00b62e3e37 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One.json @@ -7,6 +7,9 @@ "setting_id": "x1SkWhSSkVVIPwCF", "filament_id": "OFvDbkFq", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], "chamber_temperature": [ "40" ], diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @MK4 MMU3.json b/resources/profiles/Prusa/filament/Prusament PC Blend @MK4 MMU3.json new file mode 100644 index 0000000000..d728830afd --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @MK4 MMU3.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Prusament PC Blend @MK4 MMU3", + "inherits": "Prusament PC Blend @MK4", + "from": "system", + "setting_id": "gmNuCspHHxgP6zH8", + "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], + "compatible_printers": [ + "Prusa MK4 MMU3 0.4 nozzle", + "Prusa MK4 MMU3 0.6 nozzle", + "Prusa MK4 MMU3 HF0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend Carbon Fiber @CORE One.json b/resources/profiles/Prusa/filament/Prusament PC Blend Carbon Fiber @CORE One.json index d691595bf5..edaad073df 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend Carbon Fiber @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend Carbon Fiber @CORE One.json @@ -7,6 +7,9 @@ "setting_id": "B8Cm9l8i9osp5J2q", "filament_id": "OFdO6vpt", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], "chamber_temperature": [ "40" ], diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.4.json index f34dcd29a7..5fc23cd3dc 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.4.json @@ -6,6 +6,9 @@ "setting_id": "lwT1VxW5OkY36kUX", "filament_id": "OFkR8E2c", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.5.json index 71001294fa..527974207b 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.5.json @@ -6,6 +6,9 @@ "setting_id": "XAgW7fElXxhaKaBT", "filament_id": "OFkR8E2c", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.6.json index cea5ef7809..271b04399f 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.6.json @@ -6,6 +6,9 @@ "setting_id": "6aTGEZj2EmpTR1mu", "filament_id": "OFkR8E2c", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" ], diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One.json index 39090d8977..51aaba3419 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One.json @@ -7,6 +7,9 @@ "setting_id": "LSvba9ds3XTwDMCG", "filament_id": "OFkR8E2c", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], "chamber_temperature": [ "35" ], diff --git a/resources/profiles/Prusa/filament/Prusament PETG @MK4 MMU3.json b/resources/profiles/Prusa/filament/Prusament PETG @MK4 MMU3.json new file mode 100644 index 0000000000..9e3caf2d9f --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PETG @MK4 MMU3.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Prusament PETG @MK4 MMU3", + "inherits": "Prusament PETG @MK4", + "from": "system", + "setting_id": "7DQ6YEKyQKYDTKtE", + "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pet" + ], + "compatible_printers": [ + "Prusa MK4 MMU3 0.4 nozzle", + "Prusa MK4 MMU3 0.6 nozzle", + "Prusa MK4 MMU3 HF0.4 nozzle" + ], + "filament_minimal_purge_on_wipe_tower": [ + "35" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PETG @Prusa CORE One INDX.json b/resources/profiles/Prusa/filament/Prusament PETG @Prusa CORE One INDX.json index 0fdb644150..14a4494246 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @Prusa CORE One INDX.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @Prusa CORE One INDX.json @@ -6,6 +6,9 @@ "setting_id": "2viuOmBvXuQm2FwV", "filament_id": "OFkR8E2c", "instantiation": "true", + "include": [ + "fdm_filament_template_indx" + ], "filament_flow_ratio": [ "1" ], diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.4.json index 8c1d806d98..a4e85823dd 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.4.json @@ -6,6 +6,9 @@ "setting_id": "mf4Muog4IcsgkYoA", "filament_id": "OFnO4wnf", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pla_hf" + ], "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle", "Prusa CORE One L HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One.json index e90e22ad51..a28ea07ed4 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One.json @@ -7,6 +7,9 @@ "setting_id": "PuujUMjNKLZvZNAH", "filament_id": "OFnO4wnf", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pla" + ], "chamber_temperature": [ "20" ], @@ -104,5 +107,11 @@ ], "slow_down_min_speed": [ "20" + ], + "filament_unloading_speed": [ + "100" + ], + "filament_unloading_speed_start": [ + "100" ] } diff --git a/resources/profiles/Prusa/filament/Prusament PLA @MK4 MMU3.json b/resources/profiles/Prusa/filament/Prusament PLA @MK4 MMU3.json new file mode 100644 index 0000000000..d52b958727 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PLA @MK4 MMU3.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Prusament PLA @MK4 MMU3", + "inherits": "Prusament PLA @MK4", + "from": "system", + "setting_id": "MsDcN4npnmLRXOjm", + "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pla" + ], + "compatible_printers": [ + "Prusa MK4 MMU3 0.4 nozzle", + "Prusa MK4 MMU3 0.6 nozzle", + "Prusa MK4 MMU3 HF0.4 nozzle" + ], + "filament_unloading_speed": [ + "100" + ], + "filament_unloading_speed_start": [ + "100" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PLA @Prusa CORE One INDX.json b/resources/profiles/Prusa/filament/Prusament PLA @Prusa CORE One INDX.json index f5f64a98b3..82fdd349da 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @Prusa CORE One INDX.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @Prusa CORE One INDX.json @@ -6,6 +6,9 @@ "setting_id": "B2UB9QUbbjpn12Ka", "filament_id": "OFnO4wnf", "instantiation": "true", + "include": [ + "fdm_filament_template_indx" + ], "filament_flow_ratio": [ "1" ], diff --git a/resources/profiles/Prusa/filament/Prusament PVB @CORE One.json b/resources/profiles/Prusa/filament/Prusament PVB @CORE One.json index 56987a8093..9f6786bd38 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @CORE One.json @@ -7,6 +7,9 @@ "setting_id": "085dGkrnPhatF07x", "filament_id": "OFh7mvPO", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pla" + ], "chamber_temperature": [ "20" ], @@ -105,5 +108,11 @@ ], "slow_down_min_speed": [ "20" + ], + "filament_unloading_speed": [ + "60" + ], + "filament_unloading_speed_start": [ + "60" ] } diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.6.json index adbf76e56d..0af7c24c5e 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.6.json @@ -8,12 +8,16 @@ "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", - "Prusa CORE One HF 0.6 nozzle" + "Prusa CORE One HF 0.6 nozzle", + "Prusa CORE One MMU3 0.6 nozzle" ], "filament_max_volumetric_speed": [ "14" ], "slow_down_layer_time": [ "15" + ], + "filament_cooling_final_speed": [ + "1.5" ] } diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One.json b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One.json index 7f41ae32e4..73633d6044 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One.json @@ -7,6 +7,9 @@ "setting_id": "Bw6H4vFnq7YExyLd", "filament_id": "OFWRITFw", "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pla" + ], "chamber_temperature": [ "20" ], @@ -22,8 +25,7 @@ "Prusa CORE One HF 0.5 nozzle", "Prusa CORE One MMU3 0.4 nozzle", "Prusa CORE One MMU3 0.25 nozzle", - "Prusa CORE One MMU3 0.3 nozzle", - "Prusa CORE One MMU3 0.6 nozzle" + "Prusa CORE One MMU3 0.3 nozzle" ], "fan_cooling_layer_time": [ "40" diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @MK4 MMU3.json b/resources/profiles/Prusa/filament/Prusament rPLA @MK4 MMU3.json new file mode 100644 index 0000000000..e8b182bbf0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament rPLA @MK4 MMU3.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Prusament rPLA @MK4 MMU3", + "inherits": "Prusament rPLA @MK4", + "from": "system", + "setting_id": "wKhvyGpgjmW6glLj", + "instantiation": "true", + "include": [ + "fdm_filament_template_nextruder_pla" + ], + "compatible_printers": [ + "Prusa MK4 MMU3 0.4 nozzle", + "Prusa MK4 MMU3 0.6 nozzle", + "Prusa MK4 MMU3 HF0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/fdm_filament_template_indx.json b/resources/profiles/Prusa/filament/fdm_filament_template_indx.json new file mode 100644 index 0000000000..4aea931123 --- /dev/null +++ b/resources/profiles/Prusa/filament/fdm_filament_template_indx.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "fdm_filament_template_indx", + "from": "system", + "instantiation": "false", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "30" + ], + "filament_multitool_ramming_volume": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "10" + ], + "filament_start_gcode": [ + "M572 S{pressure_advance[filament_extruder_id]} ; Pressure advance\nM573 R" + ] +} diff --git a/resources/profiles/Prusa/filament/fdm_filament_template_nextruder_pet.json b/resources/profiles/Prusa/filament/fdm_filament_template_nextruder_pet.json new file mode 100644 index 0000000000..ba12bb2e62 --- /dev/null +++ b/resources/profiles/Prusa/filament/fdm_filament_template_nextruder_pet.json @@ -0,0 +1,36 @@ +{ + "type": "filament", + "name": "fdm_filament_template_nextruder_pet", + "from": "system", + "instantiation": "false", + "filament_ramming_parameters": [ + "250 100 42.4194 42.4194 42.4194 42.4194 42.4194| 0.05 42.4387 0.45 42.4387 0.95 42.4387 1.45 42.4387 1.95 42.4387 2.45 42.4387 2.95 42.4387 3.45 42.4387 3.95 42.4387 4.45 42.4387 4.95 42.4387" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_unloading_speed": [ + "60" + ], + "filament_unloading_speed_start": [ + "60" + ], + "filament_cooling_moves": [ + "3" + ], + "filament_cooling_initial_speed": [ + "5" + ], + "filament_cooling_final_speed": [ + "2.5" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "26.5" + ] +} diff --git a/resources/profiles/Prusa/filament/fdm_filament_template_nextruder_pet_hf.json b/resources/profiles/Prusa/filament/fdm_filament_template_nextruder_pet_hf.json new file mode 100644 index 0000000000..ba16fadbad --- /dev/null +++ b/resources/profiles/Prusa/filament/fdm_filament_template_nextruder_pet_hf.json @@ -0,0 +1,9 @@ +{ + "type": "filament", + "name": "fdm_filament_template_nextruder_pet_hf", + "from": "system", + "instantiation": "false", + "filament_ramming_parameters": [ + "250 100 42.4194 42.4194| 0.05 42.4387 0.45 42.4387 0.95 42.4387 1.45 42.4387 1.95 42.4387 2.45 42.4387 2.95 42.4387 3.45 42.4387 3.95 42.4387 4.45 42.4387 4.95 42.4387" + ] +} diff --git a/resources/profiles/Prusa/filament/fdm_filament_template_nextruder_pla.json b/resources/profiles/Prusa/filament/fdm_filament_template_nextruder_pla.json new file mode 100644 index 0000000000..d7b2a4b381 --- /dev/null +++ b/resources/profiles/Prusa/filament/fdm_filament_template_nextruder_pla.json @@ -0,0 +1,36 @@ +{ + "type": "filament", + "name": "fdm_filament_template_nextruder_pla", + "from": "system", + "instantiation": "false", + "filament_ramming_parameters": [ + "250 100 40.1613 40.3548 40.4516 40.3548 40.2581| 0.05 40.1483 0.45 40.3419 0.95 40.3419 1.45 40.3419 1.95 40.3419 2.45 40.3419 2.95 40.3419 3.45 40.3419 3.95 40.3419 4.45 40.3419 4.95 40.3419" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_unloading_speed": [ + "40" + ], + "filament_unloading_speed_start": [ + "30" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ] +} diff --git a/resources/profiles/Prusa/filament/fdm_filament_template_nextruder_pla_hf.json b/resources/profiles/Prusa/filament/fdm_filament_template_nextruder_pla_hf.json new file mode 100644 index 0000000000..675668725c --- /dev/null +++ b/resources/profiles/Prusa/filament/fdm_filament_template_nextruder_pla_hf.json @@ -0,0 +1,9 @@ +{ + "type": "filament", + "name": "fdm_filament_template_nextruder_pla_hf", + "from": "system", + "instantiation": "false", + "filament_ramming_parameters": [ + "250 100 39.871 39.871| 0.05 39.9547 0.45 39.9547 0.95 39.9547 1.45 39.9547 1.95 39.9547 2.45 39.9547 2.95 39.9547 3.45 39.9547 3.95 39.9547 4.45 39.9547 4.95 39.9547" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa CORE One MMU3.json b/resources/profiles/Prusa/machine/Prusa CORE One MMU3.json index a9af70344e..fdbe0969df 100644 --- a/resources/profiles/Prusa/machine/Prusa CORE One MMU3.json +++ b/resources/profiles/Prusa/machine/Prusa CORE One MMU3.json @@ -3,7 +3,7 @@ "name": "Prusa CORE One MMU3", "bed_model": "coreone_bed.stl", "bed_texture": "coreone.svg", - "default_materials": "Generic ABS @Prusa CORE One;Generic ASA @Prusa CORE One;Generic PETG @Prusa CORE One;Generic PLA @Prusa CORE One;Generic PLA Silk @Prusa CORE One;Generic TPU @Prusa CORE One", + "default_materials": "Generic ABS @Prusa CORE One;Generic ASA @Prusa CORE One;Generic PETG @Prusa CORE One;Generic PLA @Prusa CORE One;Generic PLA Silk @Prusa CORE One;Generic TPU @Prusa CORE One;Generic PLA @Prusa CORE One 0.6", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa MK4 MMU3 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 MMU3 0.4 nozzle.json index a330559184..f89da08a0d 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 MMU3 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 MMU3 0.4 nozzle.json @@ -16,7 +16,7 @@ ], "printer_model": "Prusa MK4 MMU3", "default_filament_profile": [ - "Generic PLA @System" + "Generic PLA @Prusa MK4 MMU3" ], "default_print_profile": "0.20mm SPEED @MK4 MMU3 0.4", "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPRINTER_MODEL_MK4MMU3\nPG" diff --git a/resources/profiles/Prusa/machine/Prusa MK4 MMU3 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 MMU3 0.6 nozzle.json index dcbb537214..8b4fed8700 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 MMU3 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 MMU3 0.6 nozzle.json @@ -17,7 +17,7 @@ "printer_model": "Prusa MK4 MMU3", "printer_variant": "0.6", "default_filament_profile": [ - "Generic PLA @System" + "Generic PLA @Prusa MK4 MMU3" ], "default_print_profile": "0.25mm SPEED @MK4 MMU3 0.6", "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPRINTER_MODEL_MK4MMU3\nPG" diff --git a/resources/profiles/Prusa/machine/Prusa MK4 MMU3 HF.json b/resources/profiles/Prusa/machine/Prusa MK4 MMU3 HF.json index 11eaf998ec..1b33bcd514 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 MMU3 HF.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 MMU3 HF.json @@ -8,5 +8,5 @@ "bed_model": "mk4_bed.stl", "bed_texture": "mk4is.svg", "hotend_model": "", - "default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System" + "default_materials": "Generic PLA @Prusa MK4 MMU3;Generic PETG @Prusa MK4 MMU3;Generic ABS @Prusa MK4 MMU3" } diff --git a/resources/profiles/Prusa/machine/Prusa MK4 MMU3 HF0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 MMU3 HF0.4 nozzle.json index 9010b9d75d..95a8628e96 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 MMU3 HF0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 MMU3 HF0.4 nozzle.json @@ -16,7 +16,7 @@ ], "printer_model": "Prusa MK4 MMU3 HF", "default_filament_profile": [ - "Generic PLA @System" + "Generic PLA @Prusa MK4 MMU3" ], "default_print_profile": "0.20mm SPEED @MK4 MMU3 HF0.4", "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPRINTER_MODEL_MK4MMU3\nPG\nHF_NOZZLE" diff --git a/resources/profiles/Prusa/machine/Prusa MK4 MMU3.json b/resources/profiles/Prusa/machine/Prusa MK4 MMU3.json index 76a181b22a..cc071c0839 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 MMU3.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 MMU3.json @@ -8,5 +8,5 @@ "bed_model": "mk4_bed.stl", "bed_texture": "mk4is.svg", "hotend_model": "", - "default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System" + "default_materials": "Generic PLA @Prusa MK4 MMU3;Generic PETG @Prusa MK4 MMU3;Generic ABS @Prusa MK4 MMU3" } diff --git a/scripts/CAD/check-gui-click-edit.py b/scripts/CAD/check-gui-click-edit.py index 159bdb19f1..5eb9b3c4f2 100755 --- a/scripts/CAD/check-gui-click-edit.py +++ b/scripts/CAD/check-gui-click-edit.py @@ -147,6 +147,7 @@ def seed_datadir(datadir): # ~90% case expects. A ladder whose result depends on the developer's own preferences is not # a gate. app["auto_close_sketch_loops"] = True + app["design_show_bed"] = True # SILENCE THE NETWORK PLUGIN PROMPT. Without this, GUI_App::post_init() re-raises "Bambu # Network Plug-in Required" from an IDLE event — after any modal sweep this driver does at # startup — and ShowModal() then runs a nested event loop. The app is alive, its window is @@ -480,10 +481,14 @@ def type_into_open_field(value, mark): def enter_sketch(timeout=180): """Open a real sketch on a real plane, and PROVE it with the socket before drawing anything. - THE SEQUENCE MATTERS AND IT IS NOT OBVIOUS. Shift+S enters sketch MODE and pops the plane - offer; the offer must be dismissed; and the plane itself is chosen by clicking it in the - viewport BEFORE Shift+S. check-gui-sketching.py has always done all four steps. This ladder - did two of them — Design tab, then Shift+S — and went straight to the tool letters. + THE SEQUENCE MATTERS AND IT IS NOT OBVIOUS. The reference planes are hidden until Shift+S, + with nothing picked, brings them up to choose from, so the plane is clicked AFTER it. That + click opens the session on the plane and pops the tool offer, and a click outside a popup + menu only closes it, so the spot is clicked twice, apart: the second click closes the offer, + and inside the session it is empty canvas. No Escape — with no offer up, Escape in an empty + sketch leaves it. Then a tool letter arms the tool. check-gui-sketching.py does the same + steps. This ladder once did two of them — Design tab, then Shift+S — and went straight to + the tool letters. That intermediate state is the trap. `is_sketching` reads 1, every tool key is accepted and traced, and not one click draws anything, because there is no plane under them. The ladder @@ -499,10 +504,10 @@ def enter_sketch(timeout=180): click(132, 53) # Design tab time.sleep(2.0) dismiss_modals() - click(*PLANE_PX) # pick the plane IN THE VIEWPORT — before Shift+S - key("shift+s", 1.0) - key("Escape", 0.5) # entering sketch mode pops the offer; dismiss it - key("p", 0.6) # any sketch tool starts the session on that plane + key("shift+s", 1.0) # nothing picked: the reference planes come up + click(*PLANE_PX, pause=0.8) # picks the plane IN THE VIEWPORT: session open, offer up... + click(*PLANE_PX) # ...and this closes the offer + key("p", 0.6) # arms Point in the session if try_call("sketch_describe") is not None: # NO Escape here. Every rung already opens with one to drop whatever tool the last # one left armed, and Escape in the Design tab walks a LIFO: first press drops the @@ -511,14 +516,15 @@ def enter_sketch(timeout=180): # reported all eleven checks failed with "nothing opened" — the tools were arming # into an empty Feature-mode document. return - die("no sketch opened after plane click + Shift+S within " + die("no sketch opened after Shift+S + plane click within " f"{timeout}s — sketch_describe never answered on {A.sock} (trace {TRACE})") # tool key, the clicks that draw it, and one distinct value per queued field. The values are # deliberately nothing like the as-drawn size, so a committed prefill cannot coincide with them. -# Where the plane label sits in the viewport before a sketch is open. Same constant the gesture -# ladder uses; it is a label on the 3D view, not a widget, so it moves only if the camera does. +# Where the plane label sits in the viewport once Shift+S has brought the planes up. Same +# constant the gesture ladder uses; it is a label on the 3D view, not a widget, so it moves only +# if the camera does. PLANE_PX = (913, 359) # Every coordinate below stays inside 1000..1400 x 500..760 — the box check-gui-sketching.py's diff --git a/scripts/CAD/check-gui-sketching.py b/scripts/CAD/check-gui-sketching.py index d4ebd1f1ca..df83803819 100644 --- a/scripts/CAD/check-gui-sketching.py +++ b/scripts/CAD/check-gui-sketching.py @@ -229,7 +229,20 @@ CHROME_DY = int(os.environ.get("ORCA_CAD_CHROME_DY", "26")) DESIGN_TAB = (128, 29 + CHROME_DY) -# Feature-tree rows, measured on the rig at 1920x1080: first row centre, then 23 px apart. +# The ribbon's document group lost its Bed checkbox and label when the bed toggle moved to the +# Feature tree, and every group to its right moved left by their width: wxLEFT 6 + the 18 px +# CheckBox + wxLEFT 4 + the "Bed" label (~24 px) + wxRIGHT 4, about 56 px. The x of +# CONSTRUCTION_CHECKBOX, CON_BTN and CON_BTN_SKETCH below is the one measured before that, plus +# this. DERIVED, NOT MEASURED: re-measure on the rig and fold it in. CONFIRM_BTN sits after the +# ribbon's stretch spacer and did not move. +RIBBON_DX = -56 + +# Feature-tree rows, measured on the rig at 1920x1080: the list's first row is centred at y=215, +# then 23 px apart. The first two rows are the Origin and the Bed, unframed on the card above the +# features' own framed list, so the first FEATURE row sits two rows and TREE_GAP further down; +# reset_document and the reopening double-click both need a feature. TREE_GAP is the list's +# 12 px top margin plus its 1 px frame, derived rather than measured -- re-measure on the rig, like +# RIBBON_DX. # x=300, not the label: a second click ON the label opens the inline rename, and Delete then # edits the text instead of removing the feature. # @@ -237,7 +250,8 @@ DESIGN_TAB = (128, 29 + CHROME_DY) # unshifted click lands 26 px BELOW the first row -- just past its 23 px height -- so the row is # never selected, Delete does nothing, and reset_document spends 40 rounds on it before dying # with "could not empty the feature tree". That names the feature tree, which is not the fault. -TREE_ROW0 = (300, 215 + CHROME_DY) +TREE_GAP = 12 + 1 +TREE_ROW0 = (300, 215 + 2 * 23 + TREE_GAP + CHROME_DY) def go_design(): @@ -266,18 +280,21 @@ def reset_document(): def enter_sketch(tool_key, plane_px=(913, 359)): """Enter a sketch the way the design law says: pick the plane in the viewport, then the tool. - Shift+S enters sketch MODE and pops the offer; Escape dismisses it; the tool letter then - starts the session on the plane the click selected. All four steps are real input — nothing - here goes through the socket. + leave_sketch()'s Escapes let go of every pick, so Shift+S finds nothing to sketch on and only + brings the reference planes up; the click on one opens the session on it and pops the tool + offer. A click outside a popup menu only closes it, so the same spot is clicked again, apart: + inside the session it is empty canvas, so it selects nothing if the offer is slow to appear. + No Escape: with no offer up, Escape in an empty sketch leaves it. The tool letter then arms + the tool. All of it is real input — nothing here goes through the socket. """ leave_sketch() - click(*plane_px) key("shift+s", 0.8) - key("Escape", 0.4) # entering sketch mode pops the offer; dismiss it + click(*plane_px, pause=0.8) # picks the plane: the session opens and the offer pops... + click(*plane_px) # ...and this closes the offer key("p", 0.6) if try_call("sketch_describe") is None: shot("/shots/gl-enter-failed.png") - die("no sketch opened after plane click + Shift+S (see /shots/gl-enter-failed.png)") + die("no sketch opened after Shift+S + plane click (see /shots/gl-enter-failed.png)") calibrate_here() # THIS sketch's own camera map, on THIS sketch's own plane key(tool_key, 0.6) @@ -737,7 +754,7 @@ def corner_pair(ents): die("no adjacent pair in what should be a rectangle") -CONSTRUCTION_CHECKBOX = (419, 75 + CHROME_DY) +CONSTRUCTION_CHECKBOX = (419 + RIBBON_DX, 75 + CHROME_DY) def draw_line(x0, y0, x1, y1, length, angle): @@ -866,7 +883,7 @@ def rung_extend(): # because the ladder only ever clicks "perpendicular" (3) and "equal" (5), both of which sit # before the first insertion. The next rung to use "tangent" would have clicked "collinear". CON_BTN_Y = 76 + CHROME_DY -CON_BTN = {n: (449 + 42 * i, CON_BTN_Y) for i, n in enumerate( +CON_BTN = {n: (449 + RIBBON_DX + 42 * i, CON_BTN_Y) for i, n in enumerate( ["horizontal", "vertical", "parallel", "perpendicular", "coincident", "equal", "equal_radius", "collinear", "concentric", "tangent", "midpoint", "symmetric", "sym_v", "sym_h", "angle", "radius", "diameter", "fix", "dist_x", "dist_y"])} @@ -880,7 +897,7 @@ CON_BTN = {n: (449 + 42 * i, CON_BTN_Y) for i, n in enumerate( # which already carries CHROME_DY), but the X start depends on how wide the sketch toolbar to the # left of this group renders, and this fork keeps mainline's top row. Re-measure before trusting # D11 here: screenshot in sketch mode and detect the icon columns, do not derive it by offset. -CON_BTN_SKETCH = {n: (677 + 42 * i, CON_BTN_Y) for i, n in enumerate( +CON_BTN_SKETCH = {n: (677 + RIBBON_DX + 42 * i, CON_BTN_Y) for i, n in enumerate( ["horizontal", "vertical", "parallel", "perpendicular", "coincident", "equal", "equal_radius", "collinear", "concentric", "tangent", "midpoint", "symmetric", "sym_v", "sym_h", "angle", "radius", "diameter", "fix", "dist_x", "dist_y"])} diff --git a/scripts/CAD/tool_atlas.json b/scripts/CAD/tool_atlas.json index 1e7f1bf968..0610dbf7d3 100644 --- a/scripts/CAD/tool_atlas.json +++ b/scripts/CAD/tool_atlas.json @@ -229,11 +229,11 @@ "none" ], "needs": {}, - "refusal": "Click a face or a reference plane in the viewport, then a sketch tool", + "refusal": "Select a flat face or a reference plane to sketch on", "gui": true, "action": "key:S+S", "icon": "design_sketch", - "hint": "Click a face or a reference plane, then pick a drawing tool" + "hint": "Sketch on the selected flat face or plane, or click one next" }, { "id": "extrude", @@ -513,7 +513,7 @@ "gui": true, "action": "key:S+H", "icon": "design_hole", - "hint": "Drill a hole, centerd on a picked face or placed on a plane" + "hint": "Drill a hole, centered on a picked face or placed on a plane" }, { "id": "thread", @@ -1113,6 +1113,32 @@ "icon": "color_palette", "hint": "Set the selected body's display color" }, + { + "id": "zoom_to", + "name": "Zoom to selection", + "slot": "top", + "key": null, + "feature": null, + "mcp": null, + "mode": "model", + "accepts": [ + "body_solid", + "body_sheet", + "face_planar", + "face_cyl", + "face_other", + "edge_str", + "edge_circ", + "vertex", + "sk_loop" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:zoom_to", + "icon": "design_zoom", + "hint": "Frame the selection in the view, keeping the view direction" + }, { "id": "delete", "name": "Delete", diff --git a/scripts/clang_tidy_diff.py b/scripts/clang_tidy_diff.py index b0fec730b2..130e4661df 100644 --- a/scripts/clang_tidy_diff.py +++ b/scripts/clang_tidy_diff.py @@ -8,6 +8,9 @@ include) fails wherever the error is. Headers are compiled on their own, and fail only on errors in their changed lines. Deleting an #include also fails on every use, changed or not, that now lacks the header it provided. +With -- --fix, clang-tidy adds the missing includes, on those lines only, and +each file it changed is checked again so that only what remains is reported. + The checks come from .clang-tidy at the repository root. The compile database must come from a configure with SLIC3R_PCH=OFF, or the precompiled header hides missing includes. @@ -102,9 +105,10 @@ def is_checked(path): def changed_files(merge_base): # Against the working tree, so a local run covers uncommitted edits too. - # core.quotePath=false keeps a non-ASCII path unquoted, so parse_diff sees its b/ prefix. + # core.quotePath=false keeps a non-ASCII path unquoted, and the explicit prefixes + # override diff.noprefix and diff.mnemonicPrefix, so parse_diff sees its b/ prefix. diff = subprocess.run(["git", "-c", "core.quotePath=false", "diff", "-U0", "--no-color", "--no-ext-diff", - "--diff-filter=AMR", merge_base], + "--src-prefix=a/", "--dst-prefix=b/", "--diff-filter=AMR", merge_base], check=True, capture_output=True, **UTF8).stdout return {path: change for path, change in parse_diff(diff).items() if is_checked(path)} @@ -201,13 +205,19 @@ def errors_alone_at(revision, clang_tidy, build_dir, path): def check_file(clang_tidy, build_dir, merge_base, path, change, extra_args): - """Run clang-tidy on one file and return (failed, output, failing diagnostics).""" + """Run clang-tidy on one file and return (failed, output, failing diagnostics, fixed).""" + fixing = any(arg.startswith("--fix") for arg in extra_args) + if fixing: + with open(path, "rb") as f: + before = f.read() # A deleted include can orphan uses on unchanged lines, so such a file is - # checked whole and the findings narrowed here. --fix keeps the line filter - # so it never rewrites unrelated code. - whole = bool(change.removed_includes) and not extra_args + # checked whole and the findings narrowed here. --fix keeps a line filter so + # it never rewrites unrelated code, which for such a file means a second, + # fixing run limited to the lines the first one found wanting. + whole = bool(change.removed_includes) returncode, output, diagnostics = run_clang_tidy(clang_tidy, build_dir, path, - None if whole else change.lines, extra_args) + None if whole else change.lines, + [] if whole else extra_args) real = os.path.realpath(path) def introduced(d): @@ -223,14 +233,25 @@ def check_file(clang_tidy, build_dir, merge_base, path, change, extra_args): if errors and change.removed_includes: with open(path, encoding="utf-8") as f: text = f.read() - before = errors_alone_at(merge_base, clang_tidy, build_dir, path) + before_sites = errors_alone_at(merge_base, clang_tidy, build_dir, path) failing += [d for d in errors if d not in failing - and (error_sites([d], text) - before)] - return bool(failing), output, failing - if whole: + and (error_sites([d], text) - before_sites)] + failed = bool(failing) + elif whole: failing = [d for d in diagnostics if d.is_compile_error or introduced(d)] - return bool(failing), output, failing - return returncode != 0, output, diagnostics + failed = bool(failing) + else: + failing, failed = diagnostics, returncode != 0 + if not fixing: + return failed, output, failing, False + if whole and failing: + lines = change.lines + [[d.line, d.line] for d in failing if os.path.realpath(d.file) == real] + run_clang_tidy(clang_tidy, build_dir, path, lines, extra_args) + with open(path, "rb") as f: + if f.read() == before: + return failed, output, failing, False + # Checked again, so what is reported is what the fixes left. + return check_file(clang_tidy, build_dir, merge_base, path, change, [])[:3] + (True,) def main(): @@ -263,11 +284,14 @@ def main(): annotate = os.environ.get("GITHUB_ACTIONS") == "true" root = os.getcwd() + os.sep failed = [] + fixed = [] with ThreadPoolExecutor(max_workers=args.jobs) as pool: jobs = {path: pool.submit(check_file, args.clang_tidy, args.build_dir, merge_base, path, change, args.extra_args) for path, change in todo} for path, job in jobs.items(): - file_failed, output, diagnostics = job.result() + file_failed, output, diagnostics, file_fixed = job.result() + if file_fixed: + fixed.append(path) if not file_failed: continue failed.append(path) @@ -282,6 +306,13 @@ def main(): if len(diagnostics) > MAX_REPORTED: print(f"... and {len(diagnostics) - MAX_REPORTED} more") + if fixed: + print(f"\nAdded includes to {len(fixed)} file(s):") + for path in fixed: + print(f" {path}") + if failed and fixed: + print(f"\nclang-tidy still fails on {len(failed)} file(s); the findings above are what --fix could not add.") + return 1 if failed: print(f"\nclang-tidy failed on {len(failed)} file(s). Add the includes it names, or apply its " "suggestions locally with scripts/run_clang_tidy.sh --fix (scripts\\run_clang_tidy.ps1 -Fix on Windows).") diff --git a/scripts/run_clang_tidy.sh b/scripts/run_clang_tidy.sh index f8a935da38..70a723f3ac 100755 --- a/scripts/run_clang_tidy.sh +++ b/scripts/run_clang_tidy.sh @@ -6,8 +6,9 @@ # scripts/run_clang_tidy.sh --fix also add the missing includes it names # # It configures a separate build directory (build-tidy) without the precompiled -# header, installs the pinned clang-tidy into a virtual environment inside it, and -# runs scripts/clang_tidy_diff.py the way CI does. Uncommitted changes are checked too. +# header, uses the clang-tidy on your system or installs the pinned one into a +# virtual environment inside it, and runs scripts/clang_tidy_diff.py the way CI +# does. Uncommitted changes are checked too. set -euo pipefail @@ -23,7 +24,8 @@ Usage: scripts/run_clang_tidy.sh [options] deps/build/ on macOS) -j, --jobs N parallel clang-tidy runs (default: all cores) --fix apply clang-tidy's fixes (adds the missing includes) - -y, --yes install missing tools without asking + -y, --yes install missing tools without asking; another clang-tidy + version found on the system is then not offered -h, --help show this help EOF } @@ -136,12 +138,38 @@ REQUIREMENTS="$ROOT/scripts/clang_tidy_requirements.txt" PINNED=$(sed -n 's/^clang-tidy==//p' "$REQUIREMENTS") VENV="$BUILD_DIR/clang-tidy-venv" -if [ -n "${CLANG_TIDY:-}" ]; then +is_pinned() { + [ -x "$1" ] && "$1" --version 2>/dev/null | grep -q "version $PINNED" +} + +CLANG_TIDY="${CLANG_TIDY:-}" +if [ -n "$CLANG_TIDY" ]; then # Set by the caller: use it as is. - : + is_pinned "$CLANG_TIDY" || echo "Warning: $CLANG_TIDY is not clang-tidy $PINNED, so results may differ from CI." >&2 else + # One already on the system comes first: the pinned version outright, another + # version if the user accepts the difference. The pinned version is installed + # into a virtual environment otherwise. + INSTALLED="" + for candidate in $(command -v clang-tidy "clang-tidy-${PINNED%%.*}" || true) \ + "/usr/lib/llvm-${PINNED%%.*}/bin/clang-tidy" \ + "$(brew --prefix llvm 2>/dev/null || true)/bin/clang-tidy"; do + if is_pinned "$candidate"; then + CLANG_TIDY="$candidate" + break + fi + [ -z "$INSTALLED" ] && [ -x "$candidate" ] && INSTALLED="$candidate" + done + if [ -z "$CLANG_TIDY" ] && [ -n "$INSTALLED" ] && [ "$YES" = 0 ] && ! is_pinned "$VENV/bin/clang-tidy"; then + echo "Found $INSTALLED, which is $("$INSTALLED" --version | sed -n 's/.*version \([0-9.]*\).*/\1/p' | head -n 1), not the $PINNED CI uses, so results may differ slightly." + if ask "Use it anyway?"; then + CLANG_TIDY="$INSTALLED" + fi + fi +fi +if [ -z "$CLANG_TIDY" ]; then CLANG_TIDY="$VENV/bin/clang-tidy" - if [ ! -x "$CLANG_TIDY" ] || ! "$CLANG_TIDY" --version | grep -q "version $PINNED"; then + if ! is_pinned "$CLANG_TIDY"; then if ask "clang-tidy $PINNED (the version CI uses) is not installed. Install it into $VENV?"; then mkdir -p "$BUILD_DIR" if ! python3 -m venv "$VENV"; then @@ -158,9 +186,6 @@ else fi fi fi -if ! "$CLANG_TIDY" --version | grep -q "version $PINNED"; then - echo "Warning: $CLANG_TIDY is not clang-tidy $PINNED, so results may differ from CI." >&2 -fi # --- Dependencies ------------------------------------------------------------- @@ -217,7 +242,12 @@ cmake --build "$BUILD_DIR" --target git_commit_hash_header >/dev/null if [ -z "$BASE" ]; then REMOTE=$(git remote -v | awk '/github\.com[:\/]OrcaSlicer\/OrcaSlicer(\.git)? \(fetch\)/ { print $1; exit }') - REMOTE="${REMOTE:-origin}" + if [ -z "$REMOTE" ]; then + # Against a fork's main that already has the commits, nothing is checked. + echo "Warning: no remote points at github.com/OrcaSlicer/OrcaSlicer, so this compares against origin/main." >&2 + echo "If origin is your fork, add the upstream remote (git remote add upstream https://github.com/OrcaSlicer/OrcaSlicer.git) or pass --base." >&2 + REMOTE=origin + fi if [ "$FETCH" = 1 ]; then git fetch --quiet "$REMOTE" main fi diff --git a/scripts/tests/test_clang_tidy_diff.py b/scripts/tests/test_clang_tidy_diff.py index a9a1520d0f..a6551171b5 100644 --- a/scripts/tests/test_clang_tidy_diff.py +++ b/scripts/tests/test_clang_tidy_diff.py @@ -155,6 +155,8 @@ class TestSubprocessCalls(unittest.TestCase): diff = "+++ b/src/libslic3r/Über.cpp\n@@ -1,0 +2 @@\n+// 打印\n" files, call, _ = self.run_patched(clang_tidy_diff.changed_files, "base", stdout=diff) self.assertIn("core.quotePath=false", call.args[0]) + # Whatever diff.noprefix or diff.mnemonicPrefix a user has set. + self.assertIn("--dst-prefix=b/", call.args[0]) self.assertEqual(call.kwargs["encoding"], "utf-8") self.assertEqual(files["src/libslic3r/Über.cpp"].lines, [[2, 2]]) @@ -167,5 +169,60 @@ class TestSubprocessCalls(unittest.TestCase): self.assertEqual(call.kwargs["encoding"], "utf-8") +class TestCheckFileFix(unittest.TestCase): + """check_file with -- --fix: what clang-tidy is run on, and what is reported afterwards.""" + + def setUp(self): + self.dir = tempfile.TemporaryDirectory() + self.addCleanup(self.dir.cleanup) + self.path = os.path.join(self.dir.name, "Color.cpp") + with open(self.path, "w") as f: + f.write("int x;\n") + + def finding(self, line, include=""): + return clang_tidy_diff.Diagnostic(self.path, line, 1, "error", + 'no header providing "x" is directly included [misc-include-cleaner]', include) + + def check(self, change, results, fix_writes=None): + """Run check_file with run_clang_tidy answering from `results` in turn; the --fix run + rewrites the file with `fix_writes` when given. Returns (result, calls).""" + calls = [] + + def run(clang_tidy, build_dir, path, lines, extra_args): + calls.append((lines, extra_args)) + if "--fix" in extra_args and fix_writes is not None: + with open(path, "w") as f: + f.write(fix_writes) + return results[len(calls) - 1] + + with mock.patch.object(clang_tidy_diff, "run_clang_tidy", side_effect=run): + result = clang_tidy_diff.check_file("clang-tidy", "build", "base", self.path, change, ["--fix"]) + return result, calls + + def test_a_deleted_include_is_fixed_on_the_lines_it_orphaned_only(self): + change = clang_tidy_diff.FileChange(lines=[[4, 4]], removed_includes={"libslic3r/Point.hpp"}) + orphaned = self.finding(50, "") + unrelated = self.finding(60, "") + (failed, _, failing, fixed), calls = self.check( + change, [(1, "", [orphaned, unrelated]), (1, "", [orphaned]), (0, "", [])], fix_writes="#include \n") + self.assertEqual(calls, [(None, []), ([[4, 4], [50, 50]], ["--fix"]), (None, [])]) + self.assertEqual((failed, failing, fixed), (False, [], True)) + + def test_a_file_the_fix_did_not_change_keeps_its_findings(self): + change = clang_tidy_diff.FileChange(lines=[[4, 4]]) + error = clang_tidy_diff.Diagnostic(self.path, 4, 1, "error", "unknown type name 'Foo' [clang-diagnostic-error]") + (failed, _, failing, fixed), calls = self.check(change, [(1, "", [error])]) + self.assertEqual(calls, [([[4, 4]], ["--fix"])]) + self.assertEqual((failed, failing, fixed), (True, [error], False)) + + def test_a_changed_file_is_checked_again_and_reports_what_is_left(self): + change = clang_tidy_diff.FileChange(lines=[[4, 4]]) + error = clang_tidy_diff.Diagnostic(self.path, 4, 1, "error", "unknown type name 'Foo' [clang-diagnostic-error]") + (failed, _, failing, fixed), calls = self.check( + change, [(1, "", [self.finding(4, ""), error]), (1, "", [error])], fix_writes="#include \n") + self.assertEqual(calls, [([[4, 4]], ["--fix"]), ([[4, 4]], [])]) + self.assertEqual((failed, failing, fixed), (True, [error], True)) + + if __name__ == "__main__": unittest.main() diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index ebaa17a4b7..984524b0ba 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -370,6 +370,10 @@ void AppConfig::set_defaults() // restores the conventional CAD representation for users who expect it (x0kd). if (get("design_connector_face_glyph").empty()) set_bool("design_connector_face_glyph", true); + + // Design tab: draw the printer bed and its plate grid (the Feature tree's Bed row). + if (get("design_show_bed").empty()) + set_bool("design_show_bed", true); #endif //#ifdef SUPPORT_SHOW_HINTS diff --git a/src/libslic3r/Fill/FillSpiralInset.cpp b/src/libslic3r/Fill/FillSpiralInset.cpp index 8f0c75ff83..5931e813cf 100644 --- a/src/libslic3r/Fill/FillSpiralInset.cpp +++ b/src/libslic3r/Fill/FillSpiralInset.cpp @@ -352,6 +352,16 @@ void FillSpiralInset::_fill_surface_single(const FillParams& params, assert(params.use_arachne); assert(this->print_config != nullptr && this->print_object_config != nullptr); + // Internal solid infill must not add Arachne's standalone thin walls: one of those walls can + // become the extra centre point after the spiral has finished. Top and bottom surfaces keep + // Arachne, including the centre plug handled by generate_spiral_insets(). + if (params.extrusion_role == erSolidInfill) { + Polylines polylines; + this->_fill_surface_single(params, thickness_layers, direction, expolygon, polylines); + append(thick_polylines_out, to_thick_polylines(std::move(polylines), scaled(this->spacing))); + return; + } + // Only a solid surface is worth the variable width walls; a sparse one falls back to plain loops. if (params.density <= 0.9999f || params.dont_adjust) { Polylines polylines; diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index fa418e1b62..3e4fe2492f 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -751,6 +751,50 @@ template } } +namespace { +// Writes G-code to a file in blocks and records in lines_ends the file offset after every '\n' +class GCodeFileWriter +{ +public: + GCodeFileWriter(FilePtr& out, const std::string& out_path, std::vector& lines_ends, const char* error_message) + : m_out(out), m_out_path(out_path), m_lines_ends(lines_ends), m_error_message(error_message) + {} + ~GCodeFileWriter() { assert(m_buffer.empty() || std::uncaught_exceptions() > 0); } + + void append(std::string_view text) + { + const size_t text_pos = m_file_pos + m_buffer.size(); + for (size_t i = text.find('\n'); i != std::string_view::npos; i = text.find('\n', i + 1)) + m_lines_ends.emplace_back(text_pos + i + 1); + m_buffer += text; + if (m_buffer.size() >= GCodeProcessor::Output_Block_Size) + flush(); + } + + void flush() + { + if (m_buffer.empty()) + return; + fwrite(m_buffer.data(), 1, m_buffer.size(), m_out.f); + if (ferror(m_out.f)) { + m_out.close(); + boost::nowide::remove(m_out_path.c_str()); + throw Slic3r::RuntimeError(m_error_message); + } + m_file_pos += m_buffer.size(); + m_buffer.clear(); + } + +private: + FilePtr& m_out; + const std::string& m_out_path; + std::vector& m_lines_ends; + const char* m_error_message; + std::string m_buffer; + size_t m_file_pos{0}; +}; +} // namespace + // Helper class to modify and export gcode to file class ExportLines { @@ -765,16 +809,6 @@ public: enum class EWriteType { BySize, ByTime }; private: - static void update_lines_ends_and_out_file_pos(const std::string& out_string, std::vector& lines_ends, size_t* out_file_pos) - { - for (size_t i = 0; i < out_string.size(); ++i) { - if (out_string[i] == '\n') - lines_ends.emplace_back((out_file_pos != nullptr) ? *out_file_pos + i + 1 : i + 1); - } - if (out_file_pos != nullptr) - *out_file_pos += out_string.size(); - } - struct LineData { std::string line; @@ -814,12 +848,14 @@ private: EWriteType m_write_type{EWriteType::BySize}; // Time machines containing g1 times cache const std::array(PrintEstimatedStatistics::ETimeMode::Count)>& m_machines; + // Output file writer + GCodeFileWriter& m_writer; // Current time std::array(PrintEstimatedStatistics::ETimeMode::Count)> m_times{0.0f, 0.0f}; - // Current size in bytes + // Current size of the cache in bytes size_t m_size{0}; - // gcode lines cache + // gcode lines cache, used only when writing by time std::deque m_lines; size_t m_added_lines_counter{0}; // map of gcode line ids from original to final @@ -827,16 +863,16 @@ private: std::vector> m_gcode_lines_map; size_t m_times_cache_id{0}; - size_t m_out_file_pos{0}; public: - ExportLines(EWriteType type, const std::array(PrintEstimatedStatistics::ETimeMode::Count)>& machines) + ExportLines(EWriteType type, const std::array(PrintEstimatedStatistics::ETimeMode::Count)>& machines, GCodeFileWriter& writer) #ifndef NDEBUG : m_statistics(*this) , m_write_type(type) - , m_machines(machines){} + , m_machines(machines) + , m_writer(writer){} #else - : m_write_type(type), m_machines(machines) + : m_write_type(type), m_machines(machines), m_writer(writer) {} #endif // NDEBUG @@ -890,11 +926,14 @@ public: if (line.empty()) return; - m_lines.push_back({line, m_times}); + if (m_write_type == EWriteType::ByTime) { + m_lines.push_back({line, m_times}); #ifndef NDEBUG - m_statistics.add_line(line.length()); + m_statistics.add_line(line.length()); #endif // NDEBUG - m_size += line.length(); + m_size += line.length(); + } else + m_writer.append(line); ++m_added_lines_counter; if (!ignore_from_move) { assert(!m_gcode_lines_map.empty()); @@ -960,65 +999,35 @@ public: } } - // write to file: - // m_write_type == EWriteType::ByTime - all lines older than m_time - backtrace_time - // m_write_type == EWriteType::BySize - all lines if current size is greater than 65535 bytes - void write(FilePtr& out, float backtrace_time, GCodeProcessorResult& result, const std::string& out_path) + // when writing by time, pass the cached lines older than m_times[Normal] - backtrace_time to the writer + void write(float backtrace_time) { - if (m_lines.empty()) + if (m_write_type != EWriteType::ByTime) return; - // collect lines to write into a single string - std::string out_string; - if (!m_lines.empty()) { - if (m_write_type == EWriteType::ByTime) { - while (m_lines.front().times[Normal] < m_times[Normal] - backtrace_time) { - const LineData& data = m_lines.front(); - out_string += data.line; - m_size -= data.line.length(); - m_lines.pop_front(); + while (!m_lines.empty() && m_lines.front().times[Normal] < m_times[Normal] - backtrace_time) { + const LineData& data = m_lines.front(); + m_writer.append(data.line); + m_size -= data.line.length(); + m_lines.pop_front(); #ifndef NDEBUG - m_statistics.remove_line(); + m_statistics.remove_line(); #endif // NDEBUG - } - } else { - if (m_size > 65535) { - while (!m_lines.empty()) { - out_string += m_lines.front().line; - m_lines.pop_front(); - } - m_size = 0; -#ifndef NDEBUG - m_statistics.remove_all_lines(); -#endif // NDEBUG - } - } - } - - { - write_to_file(out, out_string, result, out_path); - update_lines_ends_and_out_file_pos(out_string, result.lines_ends, &m_out_file_pos); } } - // flush the current content of the cache to file - void flush(FilePtr& out, GCodeProcessorResult& result, const std::string& out_path) + // flush the current content of the cache and the writer to file + void flush() { - // collect lines to flush into a single string - std::string out_string; while (!m_lines.empty()) { - out_string += m_lines.front().line; + m_writer.append(m_lines.front().line); m_lines.pop_front(); } m_size = 0; #ifndef NDEBUG m_statistics.remove_all_lines(); #endif // NDEBUG - - { - write_to_file(out, out_string, result, out_path); - update_lines_ends_and_out_file_pos(out_string, result.lines_ends, &m_out_file_pos); - } + m_writer.flush(); } void synchronize_moves(GCodeProcessorResult& result) const @@ -1051,20 +1060,7 @@ public: size_t get_size() const { return m_size; } -private: - void write_to_file(FilePtr& out, const std::string& out_string, GCodeProcessorResult& result, const std::string& out_path) - { - if (!out_string.empty()) { - if (true) { - fwrite((const void*) out_string.c_str(), 1, out_string.length(), out.f); - if (ferror(out.f)) { - out.close(); - boost::nowide::remove(out_path.c_str()); - throw Slic3r::RuntimeError("GCode processor post process export failed.\nIs the disk full?"); - } - } - } - } + void reserve(size_t lines_count) { m_gcode_lines_map.reserve(lines_count); } }; void GCodeProcessor::run_post_process() @@ -1160,8 +1156,13 @@ void GCodeProcessor::run_post_process() last_exported_stop[i] = time_in_minutes(m_time_processor.machines[i].time); } + m_result.lines_ends.clear(); + // m_result.lines_ends.emplace_back(std::vector()); + GCodeFileWriter writer(out, out_path, m_result.lines_ends, "GCode processor post process export failed.\nIs the disk full?"); ExportLines export_line(m_result.backtrace_enabled ? ExportLines::EWriteType::ByTime : ExportLines::EWriteType::BySize, - m_time_processor.machines); + m_time_processor.machines, writer); + // The line map holds an entry for each line of the file, and the first pass counted them + export_line.reserve(m_line_id); // replace placeholder lines with the proper final value // gcode_line is in/out parameter, to reduce expensive memory allocation @@ -1535,9 +1536,6 @@ void GCodeProcessor::run_post_process() } }; - m_result.lines_ends.clear(); - // m_result.lines_ends.emplace_back(std::vector()); - // Orca: freshly collect SKIPPABLE ranges each post-process pass. The ranges are stored on the // member (rather than a local) so the injection pass can consume them, hence the clear here to // avoid stale ranges on re-invocation. @@ -1802,7 +1800,7 @@ void GCodeProcessor::run_post_process() if (!gcode_line.empty()) export_line.append_line(gcode_line); - export_line.write(out, 1.1f * max_backtrace_time, m_result, out_path); + export_line.write(1.1f * max_backtrace_time); gcode_line.clear(); } } @@ -1844,7 +1842,7 @@ void GCodeProcessor::run_post_process() } } - export_line.flush(out, m_result, out_path); + export_line.flush(); out.close(); in.close(); @@ -1992,31 +1990,13 @@ void GCodeProcessor::run_second_pass_injection() // The rewrite may shift byte positions (once the injector inserts lines), so rebuild lines_ends from scratch. // With an empty map the scanned '\n' offsets reproduce the current lines_ends exactly. m_result.lines_ends.clear(); - size_t out_file_pos = 0; - - auto write_out = [&out, &out_path, this, &out_file_pos](std::string& str) { - if (str.empty()) - return; - fwrite((const void*) str.c_str(), 1, str.length(), out.f); - if (ferror(out.f)) { - out.close(); - boost::nowide::remove(out_path.c_str()); - throw Slic3r::RuntimeError(std::string("GCode processor pre-heat injection pass failed.\nIs the disk full?\n")); - } - for (size_t i = 0; i < str.size(); ++i) { - if (str[i] == '\n') - m_result.lines_ends.emplace_back(out_file_pos + i + 1); - } - out_file_pos += str.size(); - str.clear(); - }; + GCodeFileWriter writer(out, out_path, m_result.lines_ends, "GCode processor pre-heat injection pass failed.\nIs the disk full?\n"); // Orca: read/split lines with EOL-preserving semantics (keep the original \r and \n bytes, and // synthesize no trailing newline). This is required for the empty-map identity: normalizing every // line ending to "\n" would not be byte-identical if the finished file used \r\n or lacked a // final newline. std::string gcode_line; - std::string export_buffer; unsigned int line_id = 0; auto op_it = inserted_operation_lines.begin(); std::vector buffer(65536 * 10, 0); @@ -2058,16 +2038,14 @@ void GCodeProcessor::run_second_pass_injection() } ++op_it; } - export_buffer += gcode_line; + writer.append(gcode_line); gcode_line.clear(); - if (export_buffer.length() >= 65536) - write_out(export_buffer); } } if (eof) break; } - write_out(export_buffer); + writer.flush(); out.close(); in.close(); diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index a5c5ce7914..72e315c927 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -514,6 +514,9 @@ class Print; static const std::string VFlush_End_Tag; static const std::string External_Purge_Tag; public: + // Size of the blocks the post-processing passes write the G-code in + static constexpr size_t Output_Block_Size = 65536; + // Orca: SKIPPABLE region tags, stored as static strings (the FLUSH idiom above) rather than // a CustomETags/CustomTags array. Public so the emission sites (WipeTower / change_filament // path) can reference them single-sourced. diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 44d30aa789..41db0ed9db 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -61,6 +61,8 @@ public: bool is_smaller_width_perimeter; // Depth in the hierarchy. External perimeter has depth = 0. An external perimeter could be both a contour and a hole. unsigned short depth; + // ORCA: an external hole perimeter touching the next outer wall all around, with nothing between them. + bool is_thin_wall_hole = false; // Children contour, may be both CCW and CW oriented (outer contours or holes). std::vector children; @@ -118,7 +120,7 @@ static bool detect_steep_overhang(const PrintRegionConfig *config, } static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perimeter_generator, const PerimeterGeneratorLoops &loops, ThickPolylines &thin_walls, - bool &steep_overhang_contour, bool &steep_overhang_hole, bool reverse_thin_wall_hole) + bool &steep_overhang_contour, bool &steep_overhang_hole) { // loops is an arrayref of ::Loop objects // turn each one into an ExtrusionLoop object @@ -285,24 +287,17 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime } else { const PerimeterGeneratorLoop &loop = loops[idx.first]; assert(thin_walls.empty()); - const bool reverse_children_thin_wall_hole = loops.size() == 1 && loop.is_contour && loop.children.size() == 1 && - (!loop.children.front().is_contour) && loop.children.front().children.empty(); - ExtrusionEntityCollection children = traverse_loops(perimeter_generator, loop.children, thin_walls, steep_overhang_contour, - steep_overhang_hole, reverse_children_thin_wall_hole); + ExtrusionEntityCollection children = traverse_loops(perimeter_generator, loop.children, thin_walls, steep_overhang_contour, steep_overhang_hole); out.entities.reserve(out.entities.size() + children.entities.size() + 1); ExtrusionLoop *eloop = static_cast(coll.entities[idx.first]); coll.entities[idx.first] = nullptr; - if ((perimeter_generator.config->wall_direction == WallDirection::CounterClockwise) == (loop.is_contour || reverse_thin_wall_hole)) + // Orca: holes run against the contour, except thin wall holes, which run with it. + if ((perimeter_generator.config->wall_direction == WallDirection::CounterClockwise) == (loop.is_contour || loop.is_thin_wall_hole)) eloop->make_counter_clockwise(); else eloop->make_clockwise(); - // Orca: Reverse print order for thin wall holes. - if (reverse_thin_wall_hole) { - std::reverse(out.entities.begin(), out.entities.end()); - } - eloop->inset_idx = loop.depth; if (loop.is_contour) { out.append(std::move(children.entities)); @@ -759,6 +754,59 @@ static void clip_inner_walls_over_top(std::vector & } } +// ORCA: only_one_wall_top - widest bead of the given walls. +static coord_t widest_bead(const std::vector &walls) +{ + coord_t widest = 0; + for (const Arachne::VariableWidthLines &group : walls) + for (const Arachne::ExtrusionLine &el : group) + for (const Arachne::ExtrusionJunction &j : el.junctions) + widest = std::max(widest, j.w); + return widest; +} + +// ORCA: only_one_wall_top - length of the walls running further than tolerance from the reference walls, outside the +// excluded area. +static double length_off_reference(const std::vector &walls, const Arachne::VariableWidthLines &reference, + const ExPolygons &excluded, coord_t tolerance) +{ + auto append_centerlines = [](const Arachne::VariableWidthLines &lines, Polylines &out) { + for (const Arachne::ExtrusionLine &el : lines) { + if (el.junctions.size() < 2) + continue; + Polyline ¢erline = out.emplace_back(); + centerline.points.reserve(el.junctions.size()); + for (const Arachne::ExtrusionJunction &j : el.junctions) + centerline.points.emplace_back(j.p); + } + }; + Polylines wall_centerlines; + Polylines reference_centerlines; + for (const Arachne::VariableWidthLines &group : walls) + append_centerlines(group, wall_centerlines); + append_centerlines(reference, reference_centerlines); + + Polylines off_reference = diff_pl(wall_centerlines, offset(reference_centerlines, float(tolerance))); + if (! excluded.empty()) + off_reference = diff_pl(off_reference, excluded); + return total_length(off_reference); +} + +// ORCA: only_one_wall_top - area covered by the given walls at their local widths. +static Polygons walls_footprint(const Arachne::VariableWidthLines &walls) +{ + Polygons footprint; + for (const Arachne::ExtrusionLine &el : walls) + for (size_t i = 1; i < el.junctions.size(); ++ i) { + const Arachne::ExtrusionJunction &a = el.junctions[i - 1]; + const Arachne::ExtrusionJunction &b = el.junctions[i]; + const coord_t width = std::max(a.w, b.w); + if (width > 0) + append(footprint, offset(Polyline(a.p, b.p), float(width) / 2.f)); + } + return union_(footprint); +} + void PerimeterGenerator::split_top_surfaces(const ExPolygons &orig_polygons, ExPolygons &top_fills, ExPolygons &non_top_polygons, ExPolygons &fill_clip) const { // other perimeters @@ -1446,6 +1494,8 @@ void PerimeterGenerator::process_classic() coord_t min_spacing = coord_t(perimeter_spacing * (1 - INSET_OVERLAP_TOLERANCE)); coord_t ext_min_spacing = coord_t(ext_perimeter_spacing * (1 - INSET_OVERLAP_TOLERANCE)); bool has_gap_fill = this->config->gap_infill_speed.get_at(get_extruder_index(*print_config, this->config->outer_wall_filament_id - 1)) > 0; + // ORCA: Use the smaller width as the lower bound to avoid overestimating safe overlap + const double gap_fill_min_width = 0.2 * std::min(perimeter_width, ext_perimeter_width) * (1 - INSET_OVERLAP_TOLERANCE); // BBS: this flow is for smaller external perimeter for small area coord_t ext_min_spacing_smaller = coord_t(ext_perimeter_spacing * (1 - SMALLER_EXT_INSET_OVERLAP_TOLERANCE)); @@ -1640,6 +1690,15 @@ void PerimeterGenerator::process_classic() last = std::move(offsets); + // ORCA: a thin wall hole has no room for gap fill or an inner wall anywhere beside its outer wall. + if (i == 0 && ! holes[0].empty()) { + const float room = float(0.5 * (ext_perimeter_spacing2 + gap_fill_min_width)); + const Polygons reach = to_polygons(offset2_ex(last, -room, room + float(SCALED_EPSILON))); + for (PerimeterGeneratorLoop &hole : holes[0]) + hole.is_thin_wall_hole = intersection_pl(Polylines{ hole.polygon.split_at_first_point() }, + ClipperUtils::clip_clipper_polygons_with_subject_bbox(reach, get_extents(hole.polygon).inflated(SCALED_EPSILON))).empty(); + } + //BBS: refer to superslicer //store surface for top infill if only_one_wall_top if (i == 0 && i!=loop_number && only_one_wall_top && !surface.is_bridge() && this->upper_slices != NULL) { @@ -1766,7 +1825,7 @@ void PerimeterGenerator::process_classic() steep_overhang_contour = true; steep_overhang_hole = true; } - ExtrusionEntityCollection entities = traverse_loops(*this, contours.front(), thin_walls, steep_overhang_contour, steep_overhang_hole, false); + ExtrusionEntityCollection entities = traverse_loops(*this, contours.front(), thin_walls, steep_overhang_contour, steep_overhang_hole); // All walls are counter-clockwise initially, so we don't need to reorient it if that's what we want if (config->overhang_reverse) { reorient_perimeters(entities, steep_overhang_contour, steep_overhang_hole, @@ -1893,8 +1952,7 @@ void PerimeterGenerator::process_classic() // fill gaps if (! gaps.empty()) { // collapse - // ORCA: Use the smaller width as the lower bound to avoid overestimating safe overlap - double min = 0.2 * std::min(perimeter_width, ext_perimeter_width) * (1 - INSET_OVERLAP_TOLERANCE); + double min = gap_fill_min_width; double max = 2. * perimeter_spacing; ExPolygons gaps_ex = diff_ex( //FIXME offset2 would be enough and cheaper. @@ -2546,44 +2604,90 @@ void PerimeterGenerator::process_arachne() if (inner_loop_number >= 0) { assert(upper_slices != nullptr); - // Infill contour bounding box. - BoundingBox infill_contour_bbox = get_extents(infill_contour); - infill_contour_bbox.offset(SCALED_EPSILON); - coord_t perimeter_width = this->perimeter_flow.scaled_width(); - // Get top ExPolygons from current infill contour. - Polygons upper_slices_clipped; - if (object_config->interface_shells) { - auto upper_slicer_same_region = to_expolygons(this->upper_slices_same_region->surfaces); - upper_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(upper_slicer_same_region, infill_contour_bbox); - } else - upper_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*upper_slices, infill_contour_bbox); + // Filter out areas that are too thin and expand top surface polygons a bit to hide the wall line. + // ORCA: skip if the top surface area is smaller than "min_width_top_surface" + const float top_surface_min_width = std::max(float(ext_perimeter_spacing) / 4.f + scaled(0.00001), float(scale_(config->min_width_top_surface.get_abs_value(unscale_(perimeter_width)))) / 4.f); - top_expolygons = diff_ex(infill_contour, upper_slices_clipped); + // Get top ExPolygons from the given contour. uncovered reports whether the upper layer leaves any of the + // contour uncovered, before bridges and too thin areas are filtered out. + auto get_top_expolygons = [&](const ExPolygons &contour, bool &uncovered) { + // Contour bounding box. + BoundingBox contour_bbox = get_extents(contour); + contour_bbox.offset(SCALED_EPSILON); + + Polygons upper_slices_clipped; + if (object_config->interface_shells) { + auto upper_slicer_same_region = to_expolygons(this->upper_slices_same_region->surfaces); + upper_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(upper_slicer_same_region, contour_bbox); + } else + upper_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*upper_slices, contour_bbox); + + ExPolygons top = diff_ex(contour, upper_slices_clipped); + uncovered = !top.empty(); + if (top.empty()) + return top; - if (!top_expolygons.empty()) { if (lower_slices != nullptr) { const float bridge_offset = float(std::max(ext_perimeter_spacing, perimeter_width)); - const Polygons lower_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*lower_slices, infill_contour_bbox); - const ExPolygons current_slices_bridges = offset_ex(diff_ex(top_expolygons, lower_slices_clipped), bridge_offset); + const Polygons lower_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*lower_slices, contour_bbox); + const ExPolygons current_slices_bridges = offset_ex(diff_ex(top, lower_slices_clipped), bridge_offset); // Remove bridges from top surface polygons. - top_expolygons = diff_ex(top_expolygons, current_slices_bridges); + top = diff_ex(top, current_slices_bridges); } - // Filter out areas that are too thin and expand top surface polygons a bit to hide the wall line. - // ORCA: skip if the top surface area is smaller than "min_width_top_surface" - const float top_surface_min_width = std::max(float(ext_perimeter_spacing) / 4.f + scaled(0.00001), float(scale_(config->min_width_top_surface.get_abs_value(unscale_(perimeter_width)))) / 4.f); // Shrink the polygon to remove the small areas, then expand it back out plus a maragin to hide the wall line a little. // ORCA: Expand the polygon with half the perimeter width in addition to the contracted amount, // not the full perimeter width as PS does, to enable thin lettering to print on the top surface without nozzle collisions // due to thin lines being generated - top_expolygons = offset2_ex(top_expolygons, -top_surface_min_width, top_surface_min_width + float(perimeter_width * 0.85)); + top = offset2_ex(top, -top_surface_min_width, top_surface_min_width + float(perimeter_width * 0.85)); // Get final top ExPolygons (bridges were excluded above, so they stay walled). - top_expolygons = intersection_ex(top_expolygons, infill_contour); + return intersection_ex(top, contour); + }; + // Walls with the full count, as generated when the single perimeter feature is disabled. Generated on first use. + std::vector full_perimeters; + Polygons full_inner_contour; + bool full_perimeters_generated = false; + auto generate_full_perimeters = [&]() { + if (full_perimeters_generated) + return; + Arachne::WallToolPaths full_tool_paths(last_p, bead_width_0, perimeter_spacing, coord_t(inner_loop_number + 2), wall_0_inset, layer_height, input_params_tmp); + full_perimeters = full_tool_paths.getToolPaths(); + full_inner_contour = full_tool_paths.getInnerContour(); + full_perimeters_generated = true; + }; + + // ORCA: the single wall pass allows Arachne 2 beads across a wall, so it fills a wall narrower than 3 outer wall + // widths by widening both, where the full pass adds a middle bead. Over the top surface that is the intent; + // anywhere else it leaves no room for the inner walls. When the single wall pass's outer walls run away from + // the full pass's outside the top surface, take the full pass's outer walls and the area inside them instead. + // Walls closer than outer_wall_tolerance count as the same wall: a widened bead's centerline moves by half + // the width added, and only beads widened by more than twice the tolerance are looked for. + const coord_t outer_wall_tolerance = bead_width_0 / 10; + if (widest_bead(perimeters) > bead_width_0 + 2 * outer_wall_tolerance) { + // The single wall pass's inner contour where it widens no bead: inside nominal width outer walls. + const ExPolygons nominal_infill_contour = offset_ex(last, -float(bead_width_0 + wall_0_inset)); + bool nominal_uncovered = false; + // Grown by an outer wall width to take in the outer walls bordering the top surface. + const ExPolygons top_zone = offset_ex(get_top_expolygons(nominal_infill_contour, nominal_uncovered), float(bead_width_0)); + if (nominal_uncovered) { + generate_full_perimeters(); + if (! full_perimeters.empty() && ! full_perimeters.front().empty() && + length_off_reference(perimeters, full_perimeters.front(), top_zone, outer_wall_tolerance) > double(perimeter_width)) { + perimeters = { full_perimeters.front() }; + infill_contour = diff_ex(nominal_infill_contour, walls_footprint(full_perimeters.front()), ApplySafetyOffset::Yes); + } + } + } + + bool uncovered = false; + top_expolygons = get_top_expolygons(infill_contour, uncovered); + + if (uncovered) { // ORCA: onion the real region (inside the outer wall) so the remaining walls follow the actual // geometry, then cut away the parts over the top surface. Re-onioning the non-top complement // instead - the fallback when there is no top fill - walls the top/non-top interface and rings @@ -2612,11 +2716,11 @@ void PerimeterGenerator::process_arachne() perimeters.insert(perimeters.end(), inner_perimeters.begin(), inner_perimeters.end()); infill_contour = union_ex(top_expolygons, inner_wall_tool_paths.getInnerContour()); } else { - // There is no top surface ExPolygon, so we call Arachne again with parameters - // like when the single perimeter feature is disabled. - Arachne::WallToolPaths no_single_perimeter_tool_paths(last_p, bead_width_0, perimeter_spacing, coord_t(inner_loop_number + 2), wall_0_inset, layer_height, input_params_tmp); - perimeters = no_single_perimeter_tool_paths.getToolPaths(); - infill_contour = union_ex(no_single_perimeter_tool_paths.getInnerContour()); + // There is no top surface ExPolygon, so use the walls generated like when the single perimeter + // feature is disabled. + generate_full_perimeters(); + perimeters = std::move(full_perimeters); + infill_contour = union_ex(full_inner_contour); } } //PS diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index d55cbe2654..d53a7dc17d 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -310,6 +310,7 @@ GLVolume::GLVolume(float r, float g, float b, float a) , force_native_color(false) , force_neutral_color(false) , force_sinking_contours(false) + , depth_bias(false) , picking(false) , tverts_range(0, size_t(-1)) { @@ -1337,11 +1338,17 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, shader->set_uniform("projection_matrix", projection_matrix); const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose(); shader->set_uniform("view_normal_matrix", view_normal_matrix); + if (volume.first->depth_bias) { + glsafe(::glEnable(GL_POLYGON_OFFSET_FILL)); + glsafe(::glPolygonOffset(1.0f, 1.0f)); + } //BBS: add outline related logic if (volume.first->selected && shader_can_outline && GUI::wxGetApp().show_outline()) volume.first->render_with_outline(cnv_size); else volume.first->render(); + if (volume.first->depth_bias) + glsafe(::glDisable(GL_POLYGON_OFFSET_FILL)); #if ENABLE_ENVIRONMENT_MAP if (use_environment_texture) diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp index 663979690f..664cd109cf 100644 --- a/src/slic3r/GUI/3DScene.hpp +++ b/src/slic3r/GUI/3DScene.hpp @@ -232,6 +232,10 @@ public: bool force_neutral_color : 1; // Whether or not to force rendering of sinking contours bool force_sinking_contours : 1; + // Orca: draw this volume with a positive depth bias (glPolygonOffset, pushed away from the + // camera), so on a surface it shares with another volume the other volume wins the depth + // test instead of z-fighting it + bool depth_bias : 1; // Is render for picking bool picking : 1; // slice error diff --git a/src/slic3r/GUI/CAD/DesignCanvas.cpp b/src/slic3r/GUI/CAD/DesignCanvas.cpp index 0e7296ccd4..0489df35c1 100644 --- a/src/slic3r/GUI/CAD/DesignCanvas.cpp +++ b/src/slic3r/GUI/CAD/DesignCanvas.cpp @@ -8,6 +8,7 @@ #include "slic3r/GUI/Camera.hpp" // N: look down the sketch plane normal #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/Plater.hpp" +#include "slic3r/GUI/PartPlate.hpp" // the current plate's origin: the first view's offset #include "slic3r/GUI/ImGuiWrapper.hpp" #include "slic3r/GUI/GLToolbar.hpp" #include "slic3r/GUI/Event.hpp" @@ -58,6 +59,16 @@ extern wxPopupWindow* wxCurrentPopupWindow; namespace Slic3r { namespace GUI { +// The Design tab's iso view is the CAD one: a true isometric from the front-right corner, which +// shows the navigator's Front, Right and Top faces. Camera's own "iso" looks from the front-left +// at 45 degrees and stays Prepare's and the thumbnails'. +static void select_iso_view(Camera& camera) +{ + const Vec3d target = camera.get_target(); + camera.look_at(target + camera.get_distance() * Vec3d(1., -1., 1.).normalized(), target, Vec3d::UnitZ()); + camera.auto_type(Camera::EType::Perspective); +} + DesignCanvas::DesignCanvas(wxWindow* parent) : wxPanel() { @@ -91,7 +102,7 @@ DesignCanvas::DesignCanvas(wxWindow* parent) m_canvas->enable_plate_chrome(false); m_canvas->enable_labels(false); m_canvas->enable_sinking_contours(false); // they would be sliced from the plater's meshes - m_canvas->set_axes_at_bed_center(true); // triad at bed centre = modeling origin + m_canvas->set_design_canvas(true); // home-position bed, triad and CAD grid at the modeling origin m_canvas->set_design_sketch_tool(&m_sketch_tool); m_sketch_tool.on_commit = [this](const SketchProfile& prof, const SketchPlane& pl) { @@ -190,8 +201,13 @@ DesignCanvas::DesignCanvas(wxWindow* parent) refresh_bed(); // The view this canvas opens on. Built lazily, on the way into the Design tab, so this - // is the view the user is looking at right now. + // is the view the user is looking at right now — moved off the current plate onto the + // Design bed, which stays at the printer bed's home whichever plate is current — turned to + // the iso view Home returns to, keeping its target and zoom. m_parked_camera = wxGetApp().plater()->get_camera(); + if (PartPlate* plate = wxGetApp().plater()->get_partplate_list().get_curr_plate()) + m_parked_camera.translate_world(-plate->get_origin()); + select_iso_view(m_parked_camera); // Before any of this class's own Binds below: wx calls dynamically bound handlers in // reverse order of binding, and GLCanvas3D swallows several events without skipping them — @@ -345,7 +361,7 @@ void DesignCanvas::repaint_now() m_canvas_widget->Update(); // service the pending paint immediately (a modal popup owns the loop) } -void DesignCanvas::reload(bool keep_view) +void DesignCanvas::reload() { m_canvas->reset_volumes(); @@ -378,21 +394,19 @@ void DesignCanvas::reload(bool keep_view) v->set_color(c); } } else if (obj_idx == 1) { - // The ghost is normally a faint blue overlay on the visible body. In preview-only - // mode it IS the result (base bodies hidden), so render it opaque so it reads as a - // finished solid rather than a see-through hint. + // The ghost is the whole resulting model, normally drawn as a faint blue overlay on + // the visible bodies. Every face the feature leaves alone is in both, at the same + // depth, so the ghost is drawn with a depth bias: the bodies win on those faces instead + // of the two copies z-fighting, and the ghost shows only where the result reaches past + // the bodies. In preview-only mode it IS the result (base bodies hidden), so render it + // opaque so it reads as a finished solid rather than a see-through hint. v->set_color(m_body_hidden ? ColorRGBA(0.40f, 0.82f, 1.0f, 1.0f) : ghost); + v->depth_bias = true; } } - if (!keep_view) { - if (m_first_frame && !m_model.objects.empty()) { - m_canvas->select_view("iso"); - m_canvas->zoom_to_volumes(); - m_first_frame = false; - } - } - + // The camera stays where the user left it, even for the first body: Home and a double-click + // fit on demand. m_canvas->set_as_dirty(); if (m_canvas_widget) m_canvas_widget->Refresh(); @@ -406,18 +420,21 @@ void DesignCanvas::set_bodies(const std::vector* body_meshes, if (body_meshes == nullptr || body_meshes->empty()) { clear_mesh(); return; } m_body_meshes = body_meshes; + m_sketch_tool.refresh_body_edges(); // of the bodies set_solid_pick() pointed the tool at m_lit_faces = m_sketch_tool.selected_faces(); rebuild_bodies(); - reload(!m_first_frame); + reload(); } void DesignCanvas::clear_mesh() { m_body_meshes = nullptr; m_volumes.clear(); + // No solid, so no edge lines, pick or hover either, as after a rebuild that leaves no body. + m_sketch_tool.set_solid_pick(nullptr, nullptr, nullptr, nullptr); if (!m_model.objects.empty()) { m_model.delete_object((size_t)0); - reload(true); + reload(); } } @@ -431,14 +448,14 @@ void DesignCanvas::set_preview_mesh(const TriangleMesh& mesh) obj->add_volume(mesh); obj->add_instance(); - reload(true); + reload(); } void DesignCanvas::clear_preview() { if (m_model.objects.size() > 1) { m_model.delete_object((size_t)1); - reload(true); + reload(); } } @@ -452,10 +469,23 @@ void DesignCanvas::fit_view() } } +bool DesignCanvas::zoom_to_box(BoundingBoxf3 box) +{ + if (m_canvas == nullptr || !box.defined) + return false; + DesignSketchTool::pad_box(box); + m_canvas->zoom_to_box(box); + request_repaint(); + return true; +} + void DesignCanvas::set_view(const std::string& view_name) { if (m_canvas) { - m_canvas->select_view(view_name); + if (view_name == "iso") + select_iso_view(wxGetApp().plater()->get_camera()); // the Design camera while the tab is shown + else + m_canvas->select_view(view_name); m_canvas->zoom_to_volumes(); m_canvas->set_as_dirty(); if (m_canvas_widget) @@ -470,13 +500,6 @@ void DesignCanvas::begin_sketch(const SketchPlane& plane, DesignSketchTool::Mode if (m_canvas_widget) m_canvas_widget->Refresh(); } -void DesignCanvas::set_sketch_plane(const SketchPlane& plane) -{ - m_sketch_tool.set_plane(plane); // keeps the 2D entities; only the carrier plane changes - if (m_canvas) m_canvas->set_as_dirty(); - if (m_canvas_widget) m_canvas_widget->Refresh(); -} - void DesignCanvas::edit_sketch(const std::vector& entities, const std::vector& constraints, const SketchPlane& plane) @@ -550,6 +573,7 @@ void DesignCanvas::refresh_bed() double printable_height = 100.0; const auto* ph_opt = config->opt("printable_height"); if (ph_opt) printable_height = ph_opt->value; + // No position: the Design bed stays at the printer bed's home, whichever plate is current. m_bed.set_shape(bed_shape_opt->values, printable_height, {}, {}, "", false); // mainline added extruder_areas/heights params } @@ -731,8 +755,6 @@ void DesignCanvas::clear_move_gizmo() request_repaint(); } -bool DesignCanvas::moving_body() const { return m_sketch_tool.moving_body(); } - void DesignCanvas::set_on_body_move_changed(std::function cb) { m_sketch_tool.on_body_move_changed = std::move(cb); @@ -1025,6 +1047,11 @@ void DesignCanvas::set_on_datum_base_picked(std::function cb) m_sketch_tool.on_datum_base_picked = std::move(cb); } +void DesignCanvas::set_selected_base(std::function cb) +{ + m_sketch_tool.selected_base = std::move(cb); +} + void DesignCanvas::set_on_sketch_exit(std::function cb) { m_sketch_tool.on_exit = std::move(cb); @@ -1047,15 +1074,18 @@ void DesignCanvas::set_on_context_menu(std::function cb) return; m_ctx_bound = true; // Bound AFTER GLCanvas3D's own handlers, so this runs first and can consume the event. - // It only consumes when it actually opens the offer; every other right-click still falls - // through to the polyline-chain end and the move gizmo, which were there first. - // Right-drag pans. Without remembering where the press landed, every pan ended by popping - // the offer over wherever the camera stopped — the menu appearing as the reward for moving - // the view. The offer is the release of a STATIONARY right-click (kCadRightClickDriftPx). + // It only consumes when it actually opens the offer. + // Right-drag may pan or orbit (Preferences > Control). Without remembering where the press + // landed, every such drag ended by popping the offer over wherever the camera stopped — the + // menu appearing as the reward for moving the view. A right-click is the release of a + // STATIONARY press (kCadRightClickDriftPx); only that reaches the sketch tool or the offer. m_canvas_widget->Bind(wxEVT_RIGHT_DOWN, [this](wxMouseEvent& e) { m_ctx_press = e.GetPosition(); m_ctx_travelled = false; - e.Skip(); // the canvas still needs the press to seed the orbit + // Drop any press the tool still keeps (only a click's release takes it, so a pan's stays) + // before the canvas offers it this one, which ImGui may take instead. + m_sketch_tool.drop_right_click(); + e.Skip(); // the canvas still needs the press to seed a pan or an orbit }); m_canvas_widget->Bind(wxEVT_MOTION, [this](wxMouseEvent& e) { if (e.RightIsDown()) { @@ -1066,12 +1096,13 @@ void DesignCanvas::set_on_context_menu(std::function cb) }); m_canvas_widget->Bind(wxEVT_RIGHT_UP, [this](wxMouseEvent& e) { const wxPoint d = e.GetPosition() - m_ctx_press; - // Always read-and-clear, even when another guard already rules the offer out, or a - // terminator recorded under one condition would still be pending under the next. - const bool terminated = m_sketch_tool.take_right_consumed(); - // Click, or navigation? A press that travelled orbited; one that did not, did not. + // Click, or navigation? A press that travelled panned or orbited; one that did not, did not. const bool is_click = !m_ctx_travelled && std::max(std::abs(d.x), std::abs(d.y)) <= kCadRightClickDriftPx; - if (m_on_context_menu && !terminated && !inline_busy() && is_click) { + // Ending a chain or abandoning an anchor uses the click up. + const bool terminated = is_click && m_canvas && m_sketch_tool.take_right_click(*m_canvas); + if (terminated) + m_canvas->set_as_dirty(); // drawn by the canvas's own RightUp (e.Skip below) or at idle + else if (m_on_context_menu && !inline_busy() && is_click) { // The menu belongs to what you POINTED AT — and pointing happened at the PRESS, not // at the release, so the raycast uses the press position. Within a 3 px budget the // two are the same pixel in practice; using the press is what makes that a @@ -1167,9 +1198,6 @@ void DesignCanvas::set_readout(const std::string& text) if (m_canvas) m_canvas->set_as_dirty(); // drawn by the next frame (the tool feeds this from one) } -// Clear of the view cube and the two round view buttons, which own the bottom-left corner. -static constexpr float kStatusHudLeftInset = 190.f; - void DesignCanvas::set_status_text(const wxString& text, const wxColour& colour) { if (text == m_status_hud_last && colour == m_status_hud_colour) return; @@ -1204,8 +1232,11 @@ void DesignCanvas::render_hud() ImGuiWrapper::pop_common_window_style(); }; if (!m_status_hud_last.IsEmpty()) { + // Past the view cube and the round view buttons, which own the bottom-left corner. Asked + // of the canvas, which lays them out: they follow the monitor's DPI on Windows, where `em` + // does not, so a fixed inset in `em` let them cover the start of the line at 150%. // A sentence can be a sentence: it wraps to the room left of the readout chip. - const float left = kStatusHudLeftInset * em; + const float left = m_canvas->get_canvas_toolbar_right() + margin; const ImVec4 col = m_status_hud_colour.IsOk() ? ImVec4(m_status_hud_colour.Red() / 255.f, m_status_hud_colour.Green() / 255.f, m_status_hud_colour.Blue() / 255.f, 1.f) @@ -1241,7 +1272,7 @@ void DesignCanvas::sync_selected_faces() if (m_body_meshes == nullptr || m_model.objects.empty()) return; rebuild_bodies(); - reload(true); + reload(); }); } @@ -1293,7 +1324,7 @@ void DesignCanvas::set_operand_bodies(int target_body, int tool_body) if (m_hl_body_target == target_body && m_hl_body_tool == tool_body) return; m_hl_body_target = target_body; m_hl_body_tool = tool_body; - reload(true); // recolours the body volumes + reload(); // recolours the body volumes } void DesignCanvas::set_highlight_sketches(std::vector> hl) @@ -1306,7 +1337,7 @@ void DesignCanvas::set_body_translucent(bool on) { if (m_body_translucent == on) return; m_body_translucent = on; - reload(true); // re-applies object-0 alpha so the solid fades for the fillet preview + reload(); // re-applies object-0 alpha so the solid fades for the fillet preview } void DesignCanvas::set_xray_focus(int body) @@ -1314,7 +1345,7 @@ void DesignCanvas::set_xray_focus(int body) if (m_xray_focus == body) return; m_xray_focus = body; m_sketch_tool.set_pick_only_body(body); - reload(true); // re-applies per-body alpha so the non-focused bodies fade + reload(); // re-applies per-body alpha so the non-focused bodies fade } void DesignCanvas::set_body_hidden(bool on) @@ -1322,7 +1353,7 @@ void DesignCanvas::set_body_hidden(bool on) if (m_body_hidden == on) return; m_body_hidden = on; m_sketch_tool.set_body_edges_hidden(on); - reload(true); // hides/show base bodies + flips the ghost opaque/faint for preview-only mode + reload(); // hides/show base bodies + flips the ghost opaque/faint for preview-only mode } bool DesignCanvas::delete_selected_sketch_entities() diff --git a/src/slic3r/GUI/CAD/DesignCanvas.hpp b/src/slic3r/GUI/CAD/DesignCanvas.hpp index 9584550980..a7413dd370 100644 --- a/src/slic3r/GUI/CAD/DesignCanvas.hpp +++ b/src/slic3r/GUI/CAD/DesignCanvas.hpp @@ -3,6 +3,8 @@ #include #include "libslic3r/Point.hpp" +#include "libslic3r/BoundingBox.hpp" +#include "libslic3r/BuildVolume.hpp" #include "libslic3r/Color.hpp" #include #include @@ -48,16 +50,26 @@ public: // Multi-body display: one GLVolume per body, each coloured distinctly (per-body colour). // `visible` (optional, indexed by body) hides bodies whose flag is false. `body_meshes` is kept - // by address (a stable panel member) and read again whenever the selection changes. + // by address (a stable panel member) and read again whenever the selection changes. The + // bodies' edge lines are refreshed with them (DesignSketchTool::refresh_body_edges). void set_bodies(const std::vector* body_meshes, const std::vector& visible = {}); - void clear_mesh(); + void clear_mesh(); // no bodies: drops their volumes and the tool's edge lines, pick and selection void set_preview_mesh(const TriangleMesh& mesh); void clear_preview(); void fit_view(); void set_view(const std::string& view_name); + // Frame `box` along the current view direction, as the canvas's Fit button frames a selection. + // False, the camera left alone, when there is nothing to frame: an undefined box. + bool zoom_to_box(BoundingBoxf3 box); + // Boxes to hand zoom_to_box: the selection and body faces (see DesignSketchTool). + BoundingBoxf3 selection_box() const { return m_sketch_tool.selection_box(); } + BoundingBoxf3 faces_box(std::vector> faces) const + { + return m_sketch_tool.faces_box(std::move(faces)); + } void begin_sketch(const SketchPlane& plane, DesignSketchTool::Mode mode); // Re-open a committed entity sketch for full in-canvas editing (load geometry + @@ -66,7 +78,6 @@ public: const std::vector& constraints, const SketchPlane& plane); void set_sketch_tool(DesignSketchTool::Mode mode); - void set_sketch_plane(const SketchPlane& plane); // re-plane the live sketch when a reference plane is clicked in 3D void set_sketch_construction(bool c); // Flip the sketch selection between construction and real geometry; returns the // number of entities changed (0 = nothing selected, caller falls back to the mode). @@ -83,6 +94,8 @@ public: void finish_sketch(); bool is_sketching() const; void refresh_bed(); // re-sync the bed to the current printer (call on tab activation) + // Centre of the Design bed: the printer bed at its home position, whichever plate is current. + Vec2d bed_center() const { return m_bed.build_volume().bed_center(); } // The Camera is Plater-owned and shared with Prepare/Preview/Assemble; GLCanvas3D has no // per-canvas camera, so every orbit here would otherwise overwrite what the editor tabs // show. Exactly one of the two views is live at a time, so entering and leaving are the @@ -157,7 +170,6 @@ public: void begin_move_body(int body, const Vec3d& pivot, const Transform3d& base_xform, double body_radius); void clear_move_gizmo(); - bool moving_body() const; void set_on_body_move_changed(std::function cb); // Visual Fillet/Chamfer radius gizmo: when a solid edge is picked, anchor a radius arrow on // it; drag/edit fire the radius callback. Returns false if no edge is currently picked. @@ -234,6 +246,7 @@ public: std::vector labels = {}); // clickable labelled reference planes void clear_base_pick(); void set_on_datum_base_picked(std::function cb); + void set_selected_base(std::function cb); // the reference plane drawn selected, or -1 void set_on_sketch_exit(std::function cb); // Esc -> exit the tool void set_on_sketch_exit_refused(std::function cb); // Esc declined: sketch has work void set_on_sketch_notice(std::function cb); // tool refusals/side effects @@ -380,7 +393,7 @@ public: void repaint_now(); private: - void reload(bool keep_view); + void reload(); void swap_camera(); // enter_viewport / leave_viewport, in the one direction they share // Selected faces are filled by the canvas: each body's selected faces become a volume of their @@ -415,7 +428,6 @@ private: Camera m_parked_camera; bool m_camera_swapped{false}; // guards a leave without an enter, and the reverse Model m_model; - bool m_first_frame{true}; int m_hl_body_target{-1}; int m_hl_body_tool{-1}; bool m_body_translucent{false};// fillet/chamfer preview → render the body see-through diff --git a/src/slic3r/GUI/CAD/DesignOffer.hpp b/src/slic3r/GUI/CAD/DesignOffer.hpp index 846a55d72f..7c76f3e8a0 100644 --- a/src/slic3r/GUI/CAD/DesignOffer.hpp +++ b/src/slic3r/GUI/CAD/DesignOffer.hpp @@ -102,7 +102,7 @@ static const bool kOfferRowFlat[] = { }; static const OfferVerb kOfferVerbs[] = { - {"sketch", L_CONTEXT("Sketch", "Design"), 0, "Shift+S", "key:S+S", L("Click a face or a reference plane in the viewport, then a sketch tool"), 0x00000403u, 0, 0, false, false, nullptr, "design_sketch", L("Click a face or a reference plane, then pick a drawing tool")}, + {"sketch", L_CONTEXT("Sketch", "Design"), 0, "Shift+S", "key:S+S", L("Select a flat face or a reference plane to sketch on"), 0x00000403u, 0, 0, false, false, nullptr, "design_sketch", L("Sketch on the selected flat face or plane, or click one next")}, {"extrude", L_CONTEXT("Extrude", "Design"), 1, "Shift+E", "key:S+E", L("Create a sketch, or pick a solid face, first"), 0x00004002u, 0, 0, false, false, nullptr, "design_extrude", L("Extrude a sketch profile, or push/pull a picked face")}, {"revolve", L_CONTEXT("Revolve", "Design"), 1, "Shift+R", "key:S+R", L("Create a sketch profile to revolve first"), 0x00004000u, 0, 0, false, false, nullptr, "design_revolve", L("Revolve a profile about an axis")}, {"sweep", L_CONTEXT("Sweep", "Design"), 1, "Shift+W", "key:S+W", L("Create a profile sketch to sweep first"), 0x00004000u, 0, 2, false, false, nullptr, "design_sweep", L("Sweep a profile along a path")}, @@ -117,7 +117,7 @@ static const OfferVerb kOfferVerbs[] = { {"surf_loft", L_CONTEXT("Surface Loft", "Design"), 1, nullptr, "fly:surface#2", L("Create at least two profile sketches to loft"), 0x00004000u, 0, 2, false, false, nullptr, "design_loft", L("Loft (skin) between 2+ profiles, open (no end caps)")}, {"surf_fill", L_CONTEXT("Surface Fill", "Design"), 1, nullptr, "fly:surface#3", L("Create a closed sketch first"), 0x00004000u, 0, 0, false, false, nullptr, "design_surface", L("Fill a sketch boundary with a smooth face")}, {"thicken_surf", L_CONTEXT("Thicken Surface", "Design"), 1, nullptr, "fly:surface#5", L("Thicken Surface needs a surface body — make one with a Surface tool first"), 0x00000100u, 0, 0, true, false, nullptr, "design_thicken", L("Thicken a sheet body into a solid")}, - {"hole", L_CONTEXT("Hole", "Design"), 2, "Shift+H", "key:S+H", L("Pick a face or a plane to drill into"), 0x00000402u, 1, 0, false, false, nullptr, "design_hole", L("Drill a hole, centerd on a picked face or placed on a plane")}, + {"hole", L_CONTEXT("Hole", "Design"), 2, "Shift+H", "key:S+H", L("Pick a face or a plane to drill into"), 0x00000402u, 1, 0, false, false, nullptr, "design_hole", L("Drill a hole, centered on a picked face or placed on a plane")}, {"thread", L_CONTEXT("Thread", "Design"), 2, "Shift+T", "key:S+T", L("Pick a cylindrical surface (bore / outer) or a circular edge for a thread"), 0x00000024u, 1, 0, false, false, nullptr, "design_thread", L("Thread a cylindrical surface (inner bore / outer) or a circular edge")}, {"shell", L_CONTEXT("Shell", "Design"), 2, "Shift+K", "key:S+K", L("Shell needs a solid body — add or import one first"), 0x00000082u, 1, 0, false, false, nullptr, "design_shell", L("Hollow the body to a wall thickness, opening a picked face")}, {"cut", L_CONTEXT("Cut", "Design"), 2, "Shift+X", "key:S+X", L("Cut needs a solid body — add or import one first"), 0x000004feu, 1, 0, false, false, nullptr, "design_cut", L("Trim the body with a plane — drag the offset arrow; keep one half or both")}, @@ -145,6 +145,7 @@ static const OfferVerb kOfferVerbs[] = { {"rename", L_CONTEXT("Rename…", "Design"), 8, "F2", "btn:rename", L("Select a feature, or a body, to rename it"), 0x00004080u, 0, 0, false, false, nullptr, nullptr, L("Give this feature a name you will recognise in the tree (a body takes its name from the feature that makes it)")}, {"delete_face", L_CONTEXT("Delete Face", "Design"), 7, nullptr, "fly:dressup#3", L("Delete Face needs a body — add or import one first"), 0x0000000eu, 1, 0, false, false, nullptr, "design_delete", L("Remove faces from a body and heal the solid")}, {"colour", L_CONTEXT("Color", "Design"), 8, nullptr, "btn:colour", nullptr, 0x000001feu, 1, 0, false, false, nullptr, "color_palette", L("Set the selected body's display color")}, + {"zoom_to", L_CONTEXT("Zoom to selection", "Design"), 8, nullptr, "btn:zoom_to", nullptr, 0x000041feu, 0, 0, false, false, nullptr, "design_zoom", L("Frame the selection in the view, keeping the view direction")}, {"delete", L_CONTEXT("Delete", "Design"), 7, "Del", "btn:delete", nullptr, 0x000f7c00u, 0, 0, false, false, nullptr, "design_delete", L("Delete what is selected")}, {"delete_body", L_CONTEXT("Delete Body", "Design"), 7, nullptr, "btn:delete_body", nullptr, 0x000001feu, 1, 0, false, false, nullptr, "design_delete", L("Delete this whole body — removes the feature it was made from")}, {"sk_line_t", L_CONTEXT("Line", "Design"), 0, "L", "key:L", nullptr, 0x000f8000u, 0, 0, false, true, L("Line"), "design_line", L("Line — click start, then end")}, @@ -204,7 +205,7 @@ static const OfferVerb kOfferVerbs[] = { {"sk_radius", L_CONTEXT("Radius / diameter…", "Design"), 7, "V", "key:V", nullptr, 0x00020000u, 0, 0, false, true, nullptr, "design_dimension", L("Type the radius of this arc, or the diameter of this circle")}, {"sk_angdist", L_CONTEXT("Angle / distance…", "Design"), 7, "V", "key:V", nullptr, 0x00080000u, 0, 0, false, true, nullptr, "design_dimension", L("Type the angle between two lines, or the distance between the two picks")}, }; -static const int kOfferVerbCount = 92; +static const int kOfferVerbCount = 93; }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/CAD/DesignPanel.cpp b/src/slic3r/GUI/CAD/DesignPanel.cpp index e21fc18085..822c8f61b5 100644 --- a/src/slic3r/GUI/CAD/DesignPanel.cpp +++ b/src/slic3r/GUI/CAD/DesignPanel.cpp @@ -9,6 +9,7 @@ #include "slic3r/GUI/GUI_Utils.hpp" #include "slic3r/GUI/Widgets/Button.hpp" #include "libslic3r/CAD/GeometryEngine.hpp" // face_by_index for face-extrude gizmo anchor +#include "libslic3r/AppConfig.hpp" // design_* view preferences #include "libslic3r/TriangleMesh.hpp" // mesh import: STL/OBJ -> indexed_triangle_set #include "libslic3r/Format/OBJ.hpp" #include "libslic3r/Format/bbs_3mf.hpp" // put_other_changes: mark the project dirty outside the undo stack @@ -35,6 +36,7 @@ #include "libslic3r/Point.hpp" #include #include +#include #include "libslic3r/BoundingBox.hpp" #include "libslic3r/Color.hpp" #include "libslic3r/CAD/SketchSolver.hpp" @@ -104,7 +106,6 @@ #include "libslic3r/Model.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/Plater.hpp" -#include "libslic3r/BuildVolume.hpp" #include "slic3r/GUI/MainFrame.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" #include "slic3r/GUI/Shortcuts.hpp" @@ -275,7 +276,9 @@ static std::string commit_icon(bool bodies) } // The icons on each Feature tree and Bodies row (DesignRowList::Action::id). -enum RowAction { RowEdit, RowMove, RowVisibility, RowDelete }; +enum RowAction { RowEdit, RowMove, RowVisibility, RowDelete, RowZoom }; +// The rows of the Feature tree's pinned block, above the features. +static constexpr int kOriginRow = 0, kBedRow = 1; // A row's eye shows the state the row is in; its tip names what a click does. static DesignRowList::Action eye_action(bool shown) @@ -283,6 +286,25 @@ static DesignRowList::Action eye_action(bool shown) return { RowVisibility, shown ? "design_eye" : "design_eye_off", shown ? _L("Hide") : _L("Show") }; } +// What the Origin row's eye and its menu item do. +static wxString origin_toggle_text(bool shown) +{ + return shown ? _L("Hide reference planes and axes") : _L("Show reference planes and axes"); +} + +// What the Bed row's eye and its menu item do. +static wxString bed_toggle_text(bool shown) +{ + return shown ? _L("Hide the printer bed and its plate grid") + : _L("Show the printer bed and its plate grid"); +} + +// What Sketch asks for while it waits for a plane (DesignPanel::start_sketch). +static wxString sketch_plane_prompt() +{ + return _L("Click a reference plane or a flat face to sketch on it — Esc cancels"); +} + // Prepare outlines every numeric field (rounded, #4A4A51 on dark). wxSpinCtrlDouble is a // native GTK control that cannot draw that, and Orca's own SpinInput is int-only — it would // silently truncate a 2.5 mm radius. So the double spin keeps its arrows and validation and @@ -471,22 +493,11 @@ DesignPanel::DesignPanel(wxWindow* parent) m_construction->SetForegroundColour(dp_ctl_text()); auto select_tool = [this](DesignSketchTool::Mode mode, const wxString& hint) { if (!m_viewport) return; - if (!m_viewport->is_sketching()) { - wxString on; - const SketchPlane plane = sketch_plane_from_selection(on); - m_viewport->begin_sketch(plane, mode); - m_construction->SetValue(false); // a fresh session starts non-construction - m_sketch_on = on; // shown with the tool hint, so the target is visible - // The face has been CONSUMED as the sketch plane, so drop the pick. Leaving it live - // meant the next Extrude saw a selected face and push/pulled it instead of extruding - // the sketch just drawn — the same trap the imported-art path already guards against. - if (m_sel_solid_face >= 0 || m_pick_face >= 0) { - m_sel_solid_face = m_sel_solid_edge = m_sel_solid_body = -1; - m_pick_face = m_pick_face_body = -1; - } - } else { - m_viewport->set_sketch_tool(mode); - } + // Sketch mode opens with its session (start_sketch_on_target); this covers a mode a + // failed Constrain left without one. + if (!m_viewport->is_sketching()) + start_sketch_on_target(false); + m_viewport->set_sketch_tool(mode); m_viewport->set_sketch_construction(m_construction->GetValue()); set_status(StatusKind::Info, m_sketch_on.IsEmpty() ? hint : wxString::Format(_L("%s · plane: %s"), hint, m_sketch_on)); @@ -597,17 +608,19 @@ DesignPanel::DesignPanel(wxWindow* parent) set_status(_L("Axonometric view, fitted")); }; - // Commit to Plate and the bed toggle were mouse-only: a toolbar button and a checkbox with - // no accelerator between them, so neither could be reached from the keyboard at all, nor by - // anything driving the keyboard. Ctrl+Shift+P is Plate, Ctrl+Shift+B is Bed; neither - // collides with Orca's own Ctrl+Shift+S (Save as) or Ctrl+Shift+G (Print plate). + // Commit to Plate and the bed and origin toggles are mouse targets — a toolbar button and the + // Feature tree's Bed and Origin rows, which never take the focus — so without an accelerator + // none could be reached from the keyboard, nor by anything driving the keyboard. Ctrl+Shift+P + // is Plate, Ctrl+Shift+B is Bed, Ctrl+Shift+O is Origin; none collides with Orca's own + // Ctrl+Shift+S (Save as) or Ctrl+Shift+G (Print plate). m_keys_feature['P' | SC_SHIFT | SC_CTRL] = [this] { on_commit(); }; m_keys_feature['B' | SC_SHIFT | SC_CTRL] = [this] { - if (!m_show_bed) return; - const bool show = !m_show_bed->GetValue(); - m_show_bed->SetValue(show); - if (m_viewport) m_viewport->set_show_bed(show); - set_status(show ? _L("Bed shown") : _L("Bed hidden")); + toggle_bed(); + set_status(m_show_bed ? _L("Bed shown") : _L("Bed hidden")); + }; + m_keys_feature['O' | SC_SHIFT | SC_CTRL] = [this] { + toggle_origin(); + set_status(m_show_origin ? _L("Reference planes shown") : _L("Reference planes hidden")); }; // Flyout rows show the design_* glyphs as they are: drawn in Orca's icon grey (#949494), which @@ -625,14 +638,13 @@ DesignPanel::DesignPanel(wxWindow* parent) // the addresses are created inside the widget-building loops, so not building would silently // delete 42 verbs from the offer while they still rendered. 7ih records the cleanup // that lets the construction go away too. - // What stays: the two doc-row imports (consumed by add_doc below) and the view controls, - // which are chrome_only in the atlas and so have no offer row to fall back on. - static const std::set kBarKeep = { "step", "mesh", "place", "section", "flip" }; + // What stays: the view controls, which are chrome_only in the atlas and so have no offer row + // to fall back on, and Sketch, the group's lead. All four are built with the doc buttons. + static const std::set kBarKeep = { "place", "section", "flip" }; auto fadd = [&tb_slot](const char* id, wxWindow* w) { if (kBarKeep.count(id) == 0) { w->Hide(); return; } tb_slot[id].push_back(w); }; - m_tb_feature->Add(caption(_L("FEATURES")), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 8); { // Onshape-style FEATURE flyouts: same themed-DropDown pattern as the sketch toolbar // (tinted glyphs, Body_14 measure, content-width popup) but each entry runs an @@ -710,36 +722,10 @@ DesignPanel::DesignPanel(wxWindow* parent) fadd(id, chev); }; - auto* b_sketch = icon_btn("design_sketch", _L("Sketch")); - // Sketch means a tool. Pressing it used to set the mode and then ask, unconditionally, - // for the very thing the user had just done — click XZ, read "XZ plane selected, press - // Sketch", press Sketch, and be told to click a reference plane. The plane was never - // lost (m_ref_plane holds it and begin_sketch captures it when the first tool is armed); - // the sentence was simply false, and with right-click excluded in sketch mode there was - // no door to the tools at all, so the only way on was the toolbar this tab is retiring. - std::function act_sketch = [this] { - set_ui_mode(UiMode::Sketch); - wxString where; - const bool have_plane = sketch_plane_target(where); - set_status(StatusKind::Info, have_plane - ? wxString::Format(_L("Sketch plane: %s — pick a tool"), where) - : _L("Click a face or a reference plane in the viewport, then a sketch tool")); - if (m_sketch_hint) { // the card must agree with the status line, not argue with it - m_sketch_hint->SetLabel(have_plane - ? wxString::Format(_L("Sketch plane: %s.\nPick a tool, or press Menu for the list."), where) - : _L("Click a face or a reference plane, then a sketch tool.")); - m_sketch_hint->Refresh(); - m_cards->Layout(); - } - // Hand over the tools rather than naming them in a status line. CallAfter so the - // mode change has settled before a modal menu takes the loop; the menu carries each - // tool's shortcut, so pressing the key instead of picking a row costs nothing. - if (have_plane) - CallAfter([this] { show_offer_menu(offer_anchor()); }); - }; - b_sketch->Bind(wxEVT_BUTTON, [act_sketch](wxCommandEvent&) { act_sketch(); }); - m_keys_feature[SHIFT('S')] = act_sketch; - fadd("sketch", b_sketch); + // Sketch opens a sketch on the face or plane already picked, or asks for one first + // (start_sketch): sketch mode is never entered without a plane under it. Its button is + // built with the doc buttons below. + m_keys_feature[SHIFT('S')] = [this] { start_sketch(); }; // Add material: every feature that grows new solid material — from a profile // (extrude/revolve/sweep/loft), from a face (thicken) or from a line (rib). feat_dropdown("material", "design_extrude", _L("Add material (extrude / revolve / sweep / loft / thicken / rib)"), { @@ -1080,6 +1066,7 @@ DesignPanel::DesignPanel(wxWindow* parent) b_color->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_set_body_color(); }); fadd("color", b_color); m_verb_actions["btn:colour"] = [this] { on_set_body_color(); }; + m_verb_actions["btn:zoom_to"] = [this] { zoom_to_selection(); }; m_verb_actions["btn:delete"] = [this] { on_delete_feature(); }; // A row's double-click is Edit, so renaming needs a door of its own. The offer is this // tab's only tool vocabulary and the row IS the object, so rename sits in the offer, in @@ -1091,8 +1078,8 @@ DesignPanel::DesignPanel(wxWindow* parent) // is editable now (CadBody::user_name), so the verb opens the editor there. if (const int b = tree_body_selection(); b >= 0) m_parts->begin_rename(b); - else if (const int sel = tree_selection(); sel != wxNOT_FOUND) - m_tree->begin_rename(sel); + else if (tree_selection() != wxNOT_FOUND) + m_tree->begin_rename(m_tree->selection()); else set_status(_L("Select a feature, or a body, first — then rename it")); // not an error }; @@ -1240,18 +1227,7 @@ DesignPanel::DesignPanel(wxWindow* parent) }, SHIFT('T')}, }); // Text / SVG insert tools live in the SKETCH toolbar (they produce 2D profiles = - // sketches), not here. STEP stays in Features: it imports a whole B-rep solid. - // Import STEP — standalone: a STEP comes in as a whole editable B-rep body, not a profile. - auto* b_step = icon_btn("design_step", _L("Import STEP (editable B-rep solid)")); - b_step->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_import_step(); }); - m_keys_feature[SHIFT('I')] = [this] { on_import_step(); }; - fadd("step", b_step); - // Import mesh — same destination as STEP (an editable B-rep body), but the geometry has - // to be reconstructed from triangles first (GeometryEngine::mesh_to_brep). - auto* b_mesh = icon_btn("param_triangles", _L("Import mesh (STL/OBJ) as an editable B-rep solid")); - b_mesh->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_import_mesh(); }); - m_keys_feature[SHIFT('M')] = [this] { on_import_mesh(); }; - fadd("mesh", b_mesh); + // sketches), not here. Import STEP / mesh are document actions: see the doc row. auto* b_constrain = icon_btn("design_constrain", _L("Constrain selected sketch")); b_constrain->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_begin_constrain(); @@ -1398,12 +1374,11 @@ DesignPanel::DesignPanel(wxWindow* parent) // the sketch tools, not in the generic Features strip. Each places the art // in-canvas, then commits via the Insert card's Confirm. { - // In Sketch MODE the art must land in the sketch — but begin_sketch() does not run - // until the first tool is armed, so pressing Sketch and then Text would find no - // session and commit a separate feature. Arm Select first: it starts the session on - // the picked plane without drawing anything, so Text behaves the same whether or not - // you had already drawn a line. (MODE vs SESSION — the distinction that has bitten - // this panel before.) + // In Sketch MODE the art must land in the sketch. The mode opens with its session + // (start_sketch_on_target), but a failed Constrain can leave it without one, and Text + // would then find no session and commit a separate feature. Arm Select first: it + // starts the session without drawing anything. (MODE vs SESSION — the distinction + // that has bitten this panel before.) auto ensure_sketch = [this, select_tool] { if (m_ui_mode == UiMode::Sketch && m_viewport && !m_viewport->is_sketching()) select_tool(DesignSketchTool::Mode::Select, @@ -1540,10 +1515,10 @@ DesignPanel::DesignPanel(wxWindow* parent) } m_viewport->set_sketch_construction(m_construction->GetValue()); }); // STAYS on the bar. Construction is not a tool, it is a persistent MODE — the same kind - // of thing as the Bed checkbox — and the sketch bar is already shown only in Sketch mode, - // so it appears exactly while it can apply. Hiding it left Q and the offer's Construction - // row still toggling a checkbox nobody could see: you could not tell whether the next - // line would be construction geometry. A stateful toggle has to show its state. + // of thing as the Feature tree's Bed row — and the sketch bar is already shown only in + // Sketch mode, so it appears exactly while it can apply. Hiding it left Q and the offer's + // Construction row still toggling a checkbox nobody could see: you could not tell whether + // the next line would be construction geometry. A stateful toggle has to show its state. sadd_bar(m_construction); add_sep(m_tb_sketch); auto* b_del = icon_btn("design_delete", _L("Delete selected")); @@ -1633,31 +1608,29 @@ DesignPanel::DesignPanel(wxWindow* parent) auto add_doc = [this](ScalableButton* b) { m_tb_doc->Add(b, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); }; - auto* b_new = doc_btn("add", _L("New Design — clear the feature tree")); + auto* b_new = doc_btn("design_new", _L("New Design — clear the feature tree")); b_new->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_new_design(); }); add_doc(b_new); - add_doc(static_cast(tb_slot["step"][0])); // 2. Import STEP - add_doc(static_cast(tb_slot["mesh"][0])); // 3. Import mesh - auto* b_export = doc_btn("save", _L("Export STEP…")); + // Import STEP — a STEP comes in as a whole editable B-rep body, not a profile. + auto* b_step = doc_btn("design_step", _L("Import STEP (editable B-rep solid)")); + b_step->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_import_step(); }); + m_keys_feature[SHIFT('I')] = [this] { on_import_step(); }; + add_doc(b_step); + // Import mesh — same destination as STEP (an editable B-rep body), but the geometry has + // to be reconstructed from triangles first (GeometryEngine::mesh_to_brep). + auto* b_mesh = doc_btn("design_import_mesh", _L("Import mesh (STL/OBJ) as an editable B-rep solid")); + b_mesh->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_import_mesh(); }); + m_keys_feature[SHIFT('M')] = [this] { on_import_mesh(); }; + add_doc(b_mesh); + auto* b_export = doc_btn("design_export", _L("Export STEP…")); b_export->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_export_step(); }); add_doc(b_export); - // View option, not a document action: hide the printer bed to model without it. Lives in - // this row because it must stay reachable with no tool open — a card would come and go. - m_show_bed = new CheckBox(m_toolbar); - m_show_bed->SetValue(true); // bed visible by default, as the tab opens today - m_show_bed->SetToolTip(_L("Show the printer bed and its plate grid")); - // wxEVT_TOGGLEBUTTON, NOT wxEVT_CHECKBOX: Orca's CheckBox derives from - // wxBitmapToggleButton (Widgets/CheckBox.hpp), so a wxEVT_CHECKBOX handler never fires. - // Read the control rather than the event so the state cannot disagree with the glyph. - m_show_bed->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) { - if (m_viewport) m_viewport->set_show_bed(m_show_bed->GetValue()); - e.Skip(); - }); - auto* bed_lbl = new wxStaticText(m_toolbar, wxID_ANY, _L("Bed")); - bed_lbl->SetForegroundColour(dp_sec_text()); - m_tb_doc->Add(m_show_bed, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 6); - m_tb_doc->Add(bed_lbl, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 4); + // Sketch leads the feature group. Momentary like the imports: start_sketch() may only ask + // for a plane, or refuse, and a teal active-tool state would outlive either. + auto* b_sketch = doc_btn("design_new_sketch", _L("Create a new sketch")); + b_sketch->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { start_sketch(); }); + tb_slot["sketch"].push_back(b_sketch); // These act on bodies / the view, so they ride in the feature group, in the slots // the user assigned them (9, 11bis, 16). @@ -3111,11 +3084,9 @@ DesignPanel::DesignPanel(wxWindow* parent) // looking and pointing. A combo duplicated that decision somewhere the geometry could not // see it, and once a face could be picked it went further and displayed a stale row that // contradicted the real target. e1p. - // Kept as a member, not a local: the card has to be able to STOP saying this. It asked - // for a plane even when one had just been picked, directly contradicting the status line - // two inches below it, which by then read "Sketching on XZ". - m_sketch_hint = new wxStaticText(m_cards, wxID_ANY, - _L("Click a face or a reference plane, then a sketch tool.")); + // A member, not a local: it names the plane the session opened on, which is known only + // when it opens (start_sketch_on_target writes it), so the card and the status line agree. + m_sketch_hint = new wxStaticText(m_cards, wxID_ANY, _L("Pick a tool, or press Menu for the list.")); m_sketch_hint->SetForegroundColour(dp_sec_text()); m_box_sketch_session->Add(m_sketch_hint, 0, wxLEFT | wxRIGHT | wxTOP | wxBOTTOM, 12); } @@ -3159,11 +3130,34 @@ DesignPanel::DesignPanel(wxWindow* parent) FromDIP(SidebarProps::ContentMargin())); tree_inner->Add(new wxStaticLine(m_tree_box), 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, FromDIP(SidebarProps::TitlebarMargin())); - // Sized to its rows, so a short history wastes no block, and scrolling past 9. + // The Origin and Bed switches sit on the card itself, unframed, above the features' own framed + // list: view switches, not history. A list of their own so they stay put while the features + // scroll, and a non-selectable one because selecting them would do nothing: only their eyes + // answer. 13 = the feature list's margin plus its frame, so the two lists' icons line up. + m_pinned = new DesignRowList(m_tree_box, 2, false, wxBORDER_NONE); + m_pinned->SetBackgroundColour(dp_panel_bg()); + tree_inner->Add(m_pinned, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 13); + // Sized to its rows, so a short history wastes no block, and scrolling past 9 features. m_tree = new DesignRowList(m_tree_box, 9); m_tree->SetBackgroundColour(dp_panel_bg()); tree_inner->Add(m_tree, 0, wxEXPAND | wxALL, 12); + m_pinned->on_action = [this](int row, int) { + if (row == kBedRow) + toggle_bed(); + else if (row == kOriginRow) + toggle_origin(); + }; + // Exactly what the eye does, named. + m_pinned->on_menu = [this](int row, const wxPoint& screen) { + const bool bed = (row == kBedRow); + wxMenu menu; + const int id_toggle = wxWindow::NewControlId(); + menu.Append(id_toggle, bed ? bed_toggle_text(m_show_bed) : origin_toggle_text(m_show_origin)); + menu.Bind(wxEVT_MENU, [this, bed](wxCommandEvent&) { bed ? toggle_bed() : toggle_origin(); }, id_toggle); + m_pinned->PopupMenu(&menu, m_pinned->ScreenToClient(screen)); + }; + // Selecting a feature that leaves a body (Extrude, Fillet, Chamfer, Hole, ...) lights the // faces it made in the viewport — the fillet's round, not the whole part it sits on. m_tree->on_select = [this] { @@ -3172,7 +3166,7 @@ DesignPanel::DesignPanel(wxWindow* parent) // "the target" — but ONLY when this tree has a selection. Each list notifies on every // change, so clicking a body row runs apply_body_row, whose m_tree->unselect() fires // THIS handler, which would otherwise clear the body row the user had just clicked. - if (m_parts && tree_selection() != wxNOT_FOUND) m_parts->unselect(); + if (m_parts && m_tree->selection() != wxNOT_FOUND) m_parts->unselect(); const int sel = tree_selection(); // Likewise a viewport pick, which would be drawn just like the feature's faces. Not while // a card is open: the card reads that pick. @@ -3194,14 +3188,17 @@ DesignPanel::DesignPanel(wxWindow* parent) }; // Double-click a row = Edit, the same gesture that re-opens a committed sketch on the canvas. - m_tree->on_activate = [this] { on_edit_feature(); }; + m_tree->on_activate = [this] { + if (tree_selection() != wxNOT_FOUND) on_edit_feature(); + }; - // The row's own Edit / Show-hide / Delete, on the row the click selected. The body list is - // cleared here too, not left to on_select, which re-clicking the selected row does not run: - // a body row still selected would be what on_toggle_visibility acts on. - m_tree->on_action = [this](int, int id) { + // The row's own Zoom to selection / Edit / Show-hide / Delete, on the row the click selected. + // The body list is cleared here too, not left to on_select, which re-clicking the selected row + // does not run: a body row still selected would be what on_toggle_visibility acts on. + m_tree->on_action = [this](int row, int id) { if (m_parts) m_parts->unselect(); switch (id) { + case RowZoom: zoom_to_feature(row); break; case RowEdit: on_edit_feature(); break; case RowVisibility: on_toggle_visibility(); break; case RowDelete: on_delete_feature(); break; @@ -3222,6 +3219,7 @@ DesignPanel::DesignPanel(wxWindow* parent) const int id_up = wxWindow::NewControlId(); const int id_down = wxWindow::NewControlId(); const int id_vis = wxWindow::NewControlId(); + const int id_zoom = wxWindow::NewControlId(); const int id_art = wxWindow::NewControlId(); const int id_del = wxWindow::NewControlId(); menu.Append(id_rename, _L("Rename\tF2")); @@ -3236,6 +3234,9 @@ DesignPanel::DesignPanel(wxWindow* parent) menu.Append(id_up, _L("Move up")); menu.Append(id_down, _L("Move down")); menu.Append(id_vis, _L("Show / hide")); + // Offered where the row's own icon is: on a row with something to frame. + const bool zoom = can_zoom_to_feature(row); + if (zoom) menu.Append(id_zoom, _L("Zoom to selection")); menu.AppendSeparator(); menu.Append(id_del, _L("Delete")); menu.Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_verb_actions["btn:rename"](); }, id_rename); @@ -3246,6 +3247,8 @@ DesignPanel::DesignPanel(wxWindow* parent) menu.Bind(wxEVT_MENU, [this](wxCommandEvent&) { on_delete_feature(); }, id_del); if (art) menu.Bind(wxEVT_MENU, [this, row](wxCommandEvent&) { on_transform_imported(row); }, id_art); + if (zoom) + menu.Bind(wxEVT_MENU, [this, row](wxCommandEvent&) { zoom_to_feature(row); }, id_zoom); m_tree->PopupMenu(&menu, m_tree->ScreenToClient(screen)); }; @@ -3347,12 +3350,14 @@ DesignPanel::DesignPanel(wxWindow* parent) set_status(StatusKind::Info, wxString::Format(_L("Body %d selected — right-click for what applies to it"), b + 1)); }; m_parts->on_select = [this, apply_body_row] { apply_body_row(tree_body_selection()); }; - // The row's own Move / Show-hide / Delete. apply_body_row runs unconditionally, as for the - // menu below: a face picked in the viewport since the row was selected has moved - // m_sel_solid_body, which is the body on_move_body and on_delete_body act on. + // The row's own Zoom to selection / Move / Show-hide / Delete. apply_body_row runs + // unconditionally, as for the menu below: a face picked in the viewport since the row was + // selected has moved m_sel_solid_body, which is the body on_move_body and on_delete_body act + // on. m_parts->on_action = [this, apply_body_row](int row, int id) { apply_body_row(row); switch (id) { + case RowZoom: zoom_to_body(row); break; case RowMove: on_move_body(); break; case RowVisibility: on_toggle_visibility(); break; case RowDelete: on_delete_body(); break; @@ -3365,9 +3370,10 @@ DesignPanel::DesignPanel(wxWindow* parent) // been promising this right-click since before it existed. m_parts->on_menu = [this, apply_body_row](int row, const wxPoint& screen) { apply_body_row(row); // unconditional — see above - // Let the modal menu take the loop after this handler returns — same CallAfter as the - // sketch path, which learned it the hard way. - CallAfter([this, screen] { show_offer_menu(screen); }); + // From inside the event, as the feature rows do, never CallAfter'd: wxGTK sends the + // context menu on the right PRESS, and a menu GTK pops after that event has finished + // has no trigger time, so the button's release closes it the moment it opens. + show_offer_menu(screen); }; // Renaming a BODY names the body itself. It does NOT rename the feature that created it: // an Extrude, a Cut and a Fillet all land on one body, so source_feature is one operation in @@ -3699,8 +3705,6 @@ DesignPanel::DesignPanel(wxWindow* parent) // One selection at a time: a pick replaces the Feature tree row. Not while a card is open: // the feature being edited keeps its row while the card's picks are made. if (level >= 1 && m_active == Tool::None && m_tree) m_tree->unselect(); - // A pick that fell through the move gizmo (clicked off the arrows) exits move mode. - if (m_viewport->moving_body()) m_viewport->clear_move_gizmo(); // Remember which body + face/edge so Extrude / dress-up target the RIGHT body. m_sel_solid_body = (level >= 1) ? body : -1; m_sel_solid_face = (level == 2) ? face : -1; // 4 = Vertex: a corner is not its face @@ -3712,8 +3716,29 @@ DesignPanel::DesignPanel(wxWindow* parent) m_pick_face_body = (level >= 1) ? body : -1; m_pick_face = (level >= 1) ? face : -1; // Last pick wins: a leftover loop pick would block Extrude's face push/pull branch, so - // Extrude would extrude a sketch instead of push/pulling the clicked face. - if (level >= 1) m_viewport->clear_loop_pick(); + // Extrude would extrude a sketch instead of push/pulling the clicked face. And a reference + // plane picked before stops being the one chosen, as a plane pick drops a face: otherwise it + // would come back as the sketch plane, and be drawn selected, once this pick is let go. + if (level >= 1) { + m_viewport->clear_loop_pick(); + m_plane_picked = false; + } + // Sketch is waiting for a plane: a flat face is one. m_pick_face is the face the click + // landed on whether it took the face, one of its edges or a corner — the rule Sketch + // applies to a face picked beforehand. A curved face says why it was not taken; a swept + // body or a click that let go of the pick leaves the prompt up. + if (sketch_plane_pick_live()) { + wxString on; + if (level >= 1 && sketch_plane_target(on)) { + start_sketch_on_target(true); + return; + } + set_status(StatusKind::Info, level >= 1 && m_pick_face >= 0 + ? _L("That face is not flat — click a flat face or a reference plane") + : sketch_plane_prompt()); + m_status->Refresh(); + return; + } // Say what got picked. Without this the ONLY feedback is the viewport highlight, so a // pick that registers but draws faintly is indistinguishable from one that never // happened — which is precisely how this failure was reported and why it resisted @@ -3909,7 +3934,9 @@ DesignPanel::DesignPanel(wxWindow* parent) // A click on nothing drops a list row as it drops a pick. Not while a card is open: the // feature being edited keeps its row. m_viewport->set_on_empty_pick([this] { - if (m_active == Tool::None && deselect_rows()) + if (m_active != Tool::None) return; + const bool row = deselect_rows(); + if (drop_plane_pick() || row) set_status(StatusKind::Info, _L("Nothing selected")); }); @@ -3987,28 +4014,37 @@ DesignPanel::DesignPanel(wxWindow* parent) refresh_plane_labels(); refresh_preview(); // re-resolve the frame + move the gizmo/ghosts to the new base } else { - // Clicking a reference plane in 3D IS how a sketch plane is chosen now. Record it and, - // when a session is already live, re-plane it immediately: begin_sketch captures the - // plane at first-tool-pick, so without this the entities would stay on the old plane - // while the committed feature landed on the new one. + // Clicking a reference plane in 3D IS how a sketch plane is chosen. The planes are + // only pickable outside a session (DesignSketchTool hit-tests them while no session + // is live), and the canvas reports the click after clearing the solid selection on the + // same miss, so the face pick is already empty and the sketch falls back to this plane. if (base >= 0) { m_ref_plane = base; m_plane_picked = true; // chosen, not merely defaulted to m_pick_face = m_pick_face_body = -1; // last pick wins: a plane beats a stale face - if (m_viewport && m_viewport->is_sketching()) - m_viewport->set_sketch_plane(plane_from_choice(m_ref_plane)); + } + if (base >= 0 && sketch_plane_pick_live()) { + start_sketch_on_target(true); // Sketch was waiting for exactly this + return; } const wxString nm = ref_plane_name(base); - // Both halves named the TOOLBAR, which no longer carries either button: the tools - // moved to the offer. Name the gesture that actually works in each mode, and say - // what a plain click does, since the two are easy to confuse on a plane. - set_status(StatusKind::Ok, m_ui_mode == UiMode::Sketch - ? wxString::Format(_L("%s plane selected — right-click for the drawing tools"), nm) - : wxString::Format(_L("%s plane selected — right-click to sketch on it, " - "or click an object to select it"), nm)); + // Name the gesture that works, and what a plain click does, since the two are easy to + // confuse on a plane. + set_status(StatusKind::Ok, + wxString::Format(_L("%s plane selected — right-click to sketch on it, " + "or click an object to select it"), nm)); m_status->Refresh(); } }); + // The reference plane drawn selected: the Plane card's base, or else the plane a sketch would go + // on — chosen, and not overridden by a picked face (sketch_plane_target's test, without its + // per-face OCCT lookup, as this is asked every frame). + m_viewport->set_selected_base([this] { + if (m_active == Tool::Plane) + return m_plane_base != nullptr && m_pl_faceA < 0 ? m_plane_base->GetSelection() : -1; + const bool face = (m_sel_solid_face >= 0 && m_sel_solid_body >= 0) || (m_pick_face >= 0 && m_pick_face_body >= 0); + return m_plane_picked && !face ? m_ref_plane : -1; + }); // Move-body gizmo (M5): each drag/edit reports the body's new translation. Store it as a // display-only per-body transform and re-feed the moved meshes (the OCCT shape is untouched, @@ -4144,13 +4180,8 @@ DesignPanel::DesignPanel(wxWindow* parent) const int key = e.GetKeyCode(); const bool ctrl = e.ControlDown() || e.CmdDown(); const bool sketching = (m_ui_mode == UiMode::Sketch) && m_viewport && m_viewport->is_sketching(); - // Which key MAP applies is a question about the MODE, not about whether a session is - // already running. Gating the sketch map on is_sketching() made it unreachable by - // keyboard: is_sketching() only turns true inside select_tool()'s begin_sketch(), and - // select_tool() is what the sketch keys call — so the first letter after entering - // sketch mode fell through to the feature map, matched nothing (feature keys are - // Shift+letter), and did nothing. The mouse worked only because the toolbar flyout - // reaches select_tool() directly. That is why all 17 keys read as dead. 0ud. + // Which key MAP applies is a question about the MODE, not about the canvas tool: + // is_sketching() is true in Constrain too, which keeps the feature map. 0ud. const bool sketch_mode = (m_ui_mode == UiMode::Sketch); // Never steal editing keys from a focused text field or an open in-canvas value field — // Delete/Ctrl+Z there must edit the text, not the model. @@ -4416,7 +4447,13 @@ DesignPanel::DesignPanel(wxWindow* parent) assert(dead.empty()); // debug builds stop here; release ships the log line } + m_show_origin = wxGetApp().app_config->get_bool("design_show_origin"); + m_show_bed = wxGetApp().app_config->get_bool("design_show_bed"); + if (m_viewport) m_viewport->set_show_bed(m_show_bed); set_ui_mode(UiMode::Feature); + // The Origin and Bed rows from the first paint: nothing else builds them before the first + // edit, project load or theme switch. + refresh_pinned(); build_phase("wiring"); BOOST_LOG_TRIVIAL(info) << "Design tab build: total " << build_clock.Time() << " ms"; } @@ -4460,7 +4497,13 @@ void DesignPanel::apply_dof_status(int dof, bool ok, bool has_constraints) void DesignPanel::set_ui_mode(UiMode m) { + // A session's ✓/✗ and Esc are its own; a Move left open would answer them instead, unseen, + // since the gizmo is not drawn in a sketch. + if (m != UiMode::Feature) end_body_move(true); m_ui_mode = m; + // Any mode change ends a plane choice under way; the refreshes below put the planes and the + // ✓/✗ right for it. + m_choosing_sketch_plane = false; if (m != UiMode::Sketch) m_sketch_on.clear(); // no stale "on the picked face" on the next hint // A committed loop picked before the session means nothing to the sketch map, but it would // still count as a selection and swallow the first Esc. The double-click that opens a sketch @@ -4507,9 +4550,8 @@ void DesignPanel::set_ui_mode(UiMode m) m_form->FitInside(); } update_action_bar(); // Sketch/Constrain modes show the unified ✓/✗; Feature idle hides it - // The origin planes follow the mode: entering Sketch offers them even when a body exists, - // leaving it takes them back. Without this they would only refresh on the next tree - // rebuild, which is not an event that happens when you merely press Sketch. + // The reference planes follow the plane choice the mode change just ended + // (update_reference_planes); without this they would wait for the next tree rebuild. update_reference_planes(); // Say where you are, in words, across the top of the viewport. @@ -4519,8 +4561,8 @@ void DesignPanel::set_ui_mode(UiMode m) // Seen on the rig: pick XY, arm Line, and the viewport is an empty grey field — no bed, no // grid, no origin, nothing to judge a length or a direction against. The plate grid was // carrying the ground reference for the whole tab. The banner already says where you are; - // taking the floor away as well only made the sketch harder to draw. The Bed checkbox is the - // one thing that governs the bed, in every mode. + // taking the floor away as well only made the sketch harder to draw. The Feature tree's Bed + // row is the one thing that governs the bed, in every mode. if (m_sketch_banner != nullptr) { const bool sketching = (m == UiMode::Sketch); if (sketching && m_sketch_banner_txt != nullptr) @@ -4546,7 +4588,9 @@ void DesignPanel::set_status_ok() set_status(wxString::Format(_L("OK — %zu triangles"), m_doc.display_mesh.its.indices.size())); if (m_viewport != nullptr) { - m_viewport->clear_move_gizmo(); // a recompute invalidates the gizmo's body centroid + // A recompute invalidates the gizmo's body centroid; a Move ends with it, keeping its pose. + if (body_move_pending()) end_body_move(true); + else m_viewport->clear_move_gizmo(); // the Transform card's, if up rebuild_disp_meshes(); // apply per-body Move transforms to the display/pick meshes // Point the solid-pick at the fresh body + TRANSFORMED pick mesh (stable address) + the // per-body xform vector (for edge sampling). Resets the whole/face/edge selection, whose @@ -4657,6 +4701,8 @@ void DesignPanel::on_add_text() void DesignPanel::open_text_dialog(int feat) { if (m_text_dlg != nullptr) { m_text_dlg->Raise(); return; } + end_body_move(true); + end_sketch_plane_choice(); // the text goes on the plane picked before, not on the next click m_text_editing = feat >= 0 && feat < int(m_doc.features.size()) && m_doc.features[feat].is_text(); m_text_feat = m_text_editing ? feat : -1; m_text_face_body = -1; @@ -4759,7 +4805,7 @@ void DesignPanel::text_dialog_done(bool accepted) if (have) m_doc.undo(); // a new text leaves, an edited one gets its old outline back refresh_tree(); sync_sketch_display(); - set_status(StatusKind::Info, editing ? _L("Text unchanged") : _L("Text cancelled")); + set_status(StatusKind::Info, editing ? _L("Text unchanged") : _L("Text canceled")); return; } if (!have) return; @@ -5116,7 +5162,9 @@ void DesignPanel::add_imported_sketch( // Show the Insert Confirm/Cancel card while the imported art is being placed/sized. void DesignPanel::open_insert_card(const wxString& base_name) { + end_body_move(true); m_active = Tool::Insert; + end_sketch_plane_choice(); if (m_hdr_insert) m_hdr_insert->SetLabel(base_name); wxSizer* s = m_cards->GetSizer(); s->Show(m_box_insert, true, true); @@ -5161,6 +5209,8 @@ void DesignPanel::on_transform_imported(int feat_idx) const CadFeature& f = m_doc.features[feat_idx]; if (f.imported_regions.empty()) return; + end_body_move(true); // the art's placement gizmo and ✓/✗ take over from a Move left open + end_sketch_plane_choice(); // ...and from a plane choice: Scale artwork reaches here directly // In-canvas bbox handles (replaces the Move/Scale dialog): drag a corner to scale, // the centre to move. Values stream back via set_on_imported_transform. m_viewport->begin_imported_transform(feat_idx, f.imported_regions, f.plane, @@ -5688,7 +5738,6 @@ void DesignPanel::on_add_transform() // below does not — without this the body would keep showing the // dragged pose after a Transform that failed to build. m_xf_gizmo_body = -1; - m_move_body = -1; } if (m_doc.bodies.empty()) { set_status(StatusKind::Warning, _L("Transform needs a body — add or import one first")); @@ -7247,7 +7296,7 @@ wxString DesignPanel::idle_hint() const { return m_doc.features.empty() ? _L("Nothing yet — import a STEP or a mesh from the toolbar,\n" - "or click a reference plane and right-click it to start a sketch.") + "or press Sketch and click a reference plane to start a sketch.") : _L("No solid yet — select a sketch and right-click it to Extrude."); } @@ -7275,7 +7324,7 @@ void DesignPanel::on_tab_shown() if (m_viewport) m_viewport->refresh_bed(); hydrate_from_model(); - update_reference_planes(); // entering the Design tab: show the XY/XZ/YZ planes if no object yet + update_reference_planes(); // entering the Design tab if (show_clock.Time() > 100) // a slow first show is what users report; the usual one is not news BOOST_LOG_TRIVIAL(info) << "Design tab shown: bed, project recipe and planes in " << show_clock.Time() << " ms"; m_laid_out = true; @@ -7336,6 +7385,7 @@ void DesignPanel::on_sys_color_changed() wxGetApp().UpdateDarkUIWin(this); refresh_icons(); refresh_tree(); // the rows carry their own text colours + refresh_pinned(); Refresh(); } @@ -7354,8 +7404,12 @@ void DesignPanel::hydrate_from_model() // that has none yet. A design in progress keeps its origin: its sketches have it baked into // their planes, so moving it under them (a printer change between visits) would slide the // datum planes off the geometry. A loaded project brings its own (load_recipe). + // The centre of the Design bed, not the plater's: the plater moves its bed onto the current + // plate, so on plate 2+ the origin would land one plate stride away from the bed drawn here. + // Re-synced first because the control socket calls this without on_tab_shown(). if (!m_doc.origin_from_recipe) { - const Vec2d bc = plater->build_volume().bed_center(); + m_viewport->refresh_bed(); + const Vec2d bc = m_viewport->bed_center(); m_doc.modeling_origin = Vec3d(bc.x(), bc.y(), 0.0); // A document started here takes the weld rule from the preference; a loaded one // brings its own (load_recipe). @@ -7503,12 +7557,12 @@ void DesignPanel::refresh_tree() // Preserve the selected row across the rebuild — set_rows() drops the selection, which made // every edit/add feel like it "lost" the selection (and broke Edit/Move/Delete on the // just-touched feature). - const int keep = tree_selection(); + const int keep = m_tree->selection(); // Datum/reference planes carry no solid; feed them to the viewport so they render as // translucent rectangles (otherwise a Plane feature is invisible in the canvas). refresh_datum_planes(); - update_reference_planes(); // body added/removed -> show/hide the XY/XZ/YZ origin planes + update_reference_planes(); std::vector rows; rows.reserve(m_doc.features.size()); for (size_t fi = 0; fi < m_doc.features.size(); ++fi) { @@ -7529,7 +7583,9 @@ void DesignPanel::refresh_tree() row.colour = !f.enabled ? dp_item_dim() : mate_conflict_reason(int(fi)) != nullptr ? wxColour(235, 110, 110) : dp_item_text(); + // A row with nothing to frame keeps a blank cell, so the icons stay in their columns. row.actions = { + { RowZoom, can_zoom_to_feature(int(fi)) ? "design_zoom" : "", _L("Zoom to selection") }, { RowEdit, "design_edit", _L("Edit") }, eye_action(f.enabled), { RowDelete, "design_delete", _L("Delete") }, @@ -7573,6 +7629,7 @@ void DesignPanel::refresh_parts() // Hidden bodies are greyed and their eye is closed, so the state reads at a glance. row.colour = vis ? dp_item_text() : dp_item_dim(); row.actions = { + { RowZoom, "design_zoom", _L("Zoom to selection") }, { RowMove, "design_move", _L("Move") }, eye_action(vis), { RowDelete, "design_delete", _L("Delete") }, @@ -7605,12 +7662,22 @@ int DesignPanel::tree_body_selection() const // if a row was selected. bool DesignPanel::deselect_rows() { - const bool any = (m_tree && tree_selection() != wxNOT_FOUND) || tree_body_selection() >= 0; + const bool any = (m_tree && m_tree->selection() != wxNOT_FOUND) || tree_body_selection() >= 0; if (m_tree) m_tree->unselect(); if (m_parts) m_parts->unselect(); return any; } +// A picked reference plane is a selection like a face: the next Sketch opens on it, so letting go +// of everything has to let go of it too. The viewport asks for it every frame (set_selected_base). +bool DesignPanel::drop_plane_pick() +{ + if (!m_plane_picked) return false; + m_plane_picked = false; + if (m_viewport) m_viewport->request_repaint(); + return true; +} + void DesignPanel::update_section_flip_btn() { if (m_section_flip_btn) m_section_flip_btn->Enable(m_section_on); @@ -7725,23 +7792,108 @@ void DesignPanel::update_feature_highlight() const int sel = tree_selection(); // Hidden while a feature card is open: the card's ghost and picks are what the view is about. const bool wanted = sel >= 0 && sel < int(m_doc.features.size()) && m_active == Tool::None; - if (wanted && (sel != m_hl_feature || m_hl_generation != m_doc.topo_generation)) { + // Re-sending the same faces is cheap: the viewport reuses what it has. + m_viewport->set_highlight_faces(wanted ? feature_faces(sel) : std::vector>{}); +} + +const std::vector>& DesignPanel::feature_faces(int f) +{ + if (f < 0 || f >= int(m_doc.features.size())) { + static const std::vector> none; + return none; + } + if (f != m_hl_feature || m_hl_generation != m_doc.topo_generation) { std::vector> faces; - const CadFeature& f = m_doc.features[sel]; - if (f.enabled && CadDocument::produces_body(f.type)) // the rest make no faces - run_off_ui_thread(this, _L("Finding the feature's faces…"), [this, sel, &faces] { + const CadFeature& feat = m_doc.features[f]; + if (feat.enabled && CadDocument::produces_body(feat.type)) // the rest make no faces + run_off_ui_thread(this, _L("Finding the feature's faces…"), [this, f, &faces] { try { - faces = m_doc.faces_made_by(sel); + faces = m_doc.faces_made_by(f); } catch (...) { faces.clear(); // a highlight is not worth an escaped exception } }); m_hl_faces = std::move(faces); - m_hl_feature = sel; + m_hl_feature = f; m_hl_generation = m_doc.topo_generation; } - // Re-sending the same faces is cheap: the viewport reuses what it has. - m_viewport->set_highlight_faces(wanted ? m_hl_faces : std::vector>{}); + return m_hl_faces; +} + +bool DesignPanel::can_zoom_to_feature(int f) const +{ + if (f < 0 || f >= int(m_doc.features.size())) + return false; + const CadFeature& feat = m_doc.features[f]; + return feat.type == CadFeatureType::Sketch || (feat.enabled && CadDocument::produces_body(feat.type)); +} + +void DesignPanel::zoom_to_feature(int f) +{ + // A rebuild's busy loop runs queued clicks while its worker owns the document. + if (s_doc_worker_busy.load() > 0) { + set_status(StatusKind::Info, _L("The model is being rebuilt — zoom again when it finishes")); + return; + } + if (m_viewport == nullptr || !can_zoom_to_feature(f)) + return; + const CadFeature& feat = m_doc.features[f]; + const wxString name = wxString::FromUTF8(feat.name); // before finding faces runs the event loop + BoundingBoxf3 box; + if (feat.type == CadFeatureType::Sketch) { + // Whichever geometry the sketch keeps, drawn or not: a sketch an Extrude consumed is + // still where the Extrude starts. + const auto add = [&box, &feat](const Vec2d& p) { box.merge(feat.plane.to_world(p)); }; + if (!feat.entities.empty()) { + box = DesignSketchTool::sketch_box(feat.entities, feat.plane); + } else if (!feat.imported_regions.empty()) { + for (const auto& region : transform_regions(feat.imported_regions, feat.import_offset, + feat.import_scale_x, feat.import_scale_y)) + for (const auto& contour : region) + for (const Vec2d& p : contour) + add(p); + } else if (!feat.profile.points.empty()) { + for (const Vec2d& p : feat.profile.points) + add(p); + } else { + // The legacy shape, centred on the plane origin (CadDocument::build_sketch_wire). + const Vec2d h = feat.shape == SketchShape::Circle ? Vec2d(feat.radius, feat.radius) + : Vec2d(feat.width, feat.height) * 0.5; + for (const Vec2d& p : { Vec2d(-h.x(), -h.y()), Vec2d(h.x(), -h.y()), Vec2d(h.x(), h.y()), Vec2d(-h.x(), h.y()) }) + add(p); + } + } else { + box = m_viewport->faces_box(feature_faces(f)); + } + if (!m_viewport->zoom_to_box(box)) + set_status(StatusKind::Info, wxString::Format(_L("%s has nothing on show to zoom to"), name)); +} + +void DesignPanel::zoom_to_body(int b) +{ + if (m_viewport == nullptr) + return; + // From the body's display mesh, Move applied, rather than the selection: the viewport selects + // no hidden body (DesignSketchTool::select_body). An empty mesh's box still reads defined. + BoundingBoxf3 box; + if (b >= 0 && b < int(m_disp_body_meshes.size()) && !m_disp_body_meshes[b].empty()) + box = m_disp_body_meshes[b].bounding_box(); + if (!m_viewport->zoom_to_box(box)) + set_status(StatusKind::Error, _L("That body has no display mesh yet — recompute first")); +} + +void DesignPanel::zoom_to_selection() +{ + if (m_viewport == nullptr) + return; + // A body, as its row frames it; the kind has checked the index. + const OfferSel kind = OfferSel(offer_selection_kind()); + if (kind == OfferSel::BodySolid || kind == OfferSel::BodySheet) { + zoom_to_body(m_sel_solid_body); + return; + } + if (!m_viewport->zoom_to_box(m_viewport->selection_box())) + set_status(StatusKind::Info, _L("Select something to zoom to")); } // Boolean (combine bodies) — one gate for every door onto the tool. A body-body operation @@ -7761,6 +7913,12 @@ void DesignPanel::on_move_body() { const int b = m_sel_solid_body; if (m_viewport == nullptr) return; + // Whatever is open owns the canvas and the ✓/✗, so a Move armed under it could not be left. + // The Bodies list stays clickable meanwhile, hence the check here. + if (m_active != Tool::None || m_ui_mode != UiMode::Feature || m_text_dlg != nullptr) { + set_status(StatusKind::Info, _L("Finish or cancel what is open first")); + return; + } if (b < 0 || b >= int(m_doc.display_body_meshes.size())) { // Never fail silently here: the caller gates on bodies.size() while this needs a // tessellated per-body mesh, and when those disagreed the click did nothing at all. @@ -7768,6 +7926,14 @@ void DesignPanel::on_move_body() : _L("That body has no display mesh yet — recompute first")); return; } + const wxString hint = _L("Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)"); + // Already moving it: Cancel still goes back to where it began. Another body re-arms below, + // and the one being moved keeps its placement. + if (body_move_pending() && b == m_move_body) { + set_status(StatusKind::Info, hint); + return; + } + end_sketch_plane_choice(); // the gizmo takes the clicks a plane choice was waiting for sync_body_xform(); // Delta gizmo: pivot at the body's CURRENT world centroid; the tool composes the drag deltas // onto its current pose, so move + rotate both work (incl. on an already place-on-face'd body). @@ -7788,7 +7954,25 @@ void DesignPanel::on_move_body() if (m_move_angle) m_move_angle->SetValue(0.0); show_move_card(true); update_action_bar(); // surface the unified ✓/✗ while moving - set_status(StatusKind::Info, _L("Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)")); + set_status(StatusKind::Info, hint); +} + +// The one way out of the Move button's session, so the gizmo, the Move / Rotate card and the ✓/✗ +// go together. keep = true leaves the pose on screen, as starting another edit does; only Esc and +// Cancel put the body back. A no-op when no Move is up. +void DesignPanel::end_body_move(bool keep) +{ + if (!body_move_pending()) return; + if (!keep) { + sync_body_xform(); + if (m_move_body < int(m_body_xform.size())) + m_body_xform[m_move_body] = m_move_prev; + feed_bodies(); // re-render the reverted placement + } + m_viewport->clear_move_gizmo(); + m_move_body = -1; + show_move_card(false); + update_action_bar(); } // Transform card (add mode): arm the same move gizmo on the card's body so the geometry-first @@ -7809,8 +7993,6 @@ void DesignPanel::arm_transform_gizmo() if (m_viewport) m_viewport->begin_move_body(b, pivot, base, radius); m_xf_gizmo_body = b; m_xf_gizmo_base = base; - m_move_body = b; // the existing revert paths key off these two - m_move_prev = base; // Write the pivot into the card so the parametric feature reproduces what was dragged; // dx/dy/dz and angle start at zero (the gizmo reports deltas from this pose). if (m_xf_pivot_x) m_xf_pivot_x->SetValue(pivot.x()); @@ -7869,6 +8051,7 @@ bool DesignPanel::place_on_face() } const TopoDS_Face face = GeometryEngine::face_by_index(m_doc.bodies[b].shape, m_sel_solid_face); if (face.IsNull()) return false; + end_sketch_plane_choice(); // the body moves; a sketch was not started sync_body_xform(); const Transform3d old_x = m_body_xform[b]; // Outward face normal in the body's CURRENT displayed orientation. @@ -7902,8 +8085,7 @@ void DesignPanel::set_tree_selection(int row) // The selection (the solid pick, the hit face and the committed-loop pick) names bodies, faces and // features by index, so replacing or renumbering the feature list (undo/redo, New Design, load, -// delete, reorder) drops it, the viewport's highlights with it. The solid highlight too: a rebuild -// that leaves no body never reaches set_solid_pick. The callers repaint. +// delete, reorder) drops it, the viewport's highlights with it. The callers repaint. void DesignPanel::drop_selection() { if (m_viewport != nullptr) @@ -7930,7 +8112,7 @@ void DesignPanel::drop_solid_pick() bool DesignPanel::begin_renumber() { if (m_ui_mode != UiMode::Feature || m_text_dlg != nullptr || m_active == Tool::Insert - || (m_active == Tool::None && m_viewport != nullptr && m_viewport->moving_body())) { + || body_move_pending()) { set_status(StatusKind::Info, _L("Finish or cancel what is open first")); return false; } @@ -7942,6 +8124,9 @@ bool DesignPanel::begin_renumber() void DesignPanel::after_tree_edit(bool ok) { + // Any edit of the history (undo, delete, show/hide, a socket call...) writes the status line + // over the plane prompt, so it ends the choice rather than leave it waiting unannounced. + end_sketch_plane_choice(); update_undo_redo_buttons(); refresh_tree(); refresh_variables(); @@ -7993,13 +8178,12 @@ void DesignPanel::on_new_design() void DesignPanel::clear_document() { tool_cancel(); // leave any active tool / sketch / constrain cleanly + end_body_move(true); // ...and a Move, which tool_cancel leaves while a value is pending m_doc.clear(); // features + bodies + meshes + history m_doc.auto_close_loops = wxGetApp().is_auto_close_sketch_loops(); // a new design: today's preference Slic3r::set_sketch_auto_close(m_doc.auto_close_loops); drop_selection(); m_edit_index = -1; - m_move_body = -1; - show_move_card(false); m_body_xform.clear(); if (m_viewport) { m_viewport->clear_move_gizmo(); m_viewport->clear_mesh(); } after_tree_edit(true); // rebuild the (now empty) tree + clear the viewport @@ -8083,6 +8267,11 @@ void DesignPanel::on_toggle_visibility() return; } + // Hiding or showing a feature can renumber the bodies, and the Move holds a body index. + if (body_move_pending()) { + set_status(StatusKind::Info, _L("Finish or cancel what is open first")); + return; + } int sel = tree_selection(); if (sel == wxNOT_FOUND || sel >= int(m_doc.features.size())) { set_status(StatusKind::Error, _L("Select a feature in the tree first")); @@ -8099,8 +8288,18 @@ void DesignPanel::on_toggle_visibility() refresh_tree(); // greys the row set_tree_selection(sel); // keep the toggled feature selected if (m_viewport != nullptr) { - if (m_doc.display_mesh.its.indices.empty()) m_viewport->clear_mesh(); - else feed_bodies(); + if (m_doc.display_mesh.its.indices.empty()) { + m_viewport->clear_mesh(); + } else { + // Not set_status_ok(), which would take the gizmo from an open Transform card. + feed_bodies(); + // Hiding or showing a feature rebuilds the bodies and can renumber them, so the pick is + // re-pointed and its selection dropped. That also brings picking back for a body shown + // after everything was hidden (clear_mesh() dropped it). + m_viewport->set_solid_pick(&m_doc.bodies, &m_disp_pick_mesh, + &m_doc.display_tri_face, &m_doc.display_tri_body, + &m_body_visible, &m_body_xform); + } } sync_sketch_display(); // skips the hidden sketch + direct-renders set_status(StatusKind::Info, shown ? _L("Feature shown") : _L("Feature hidden")); @@ -10008,6 +10207,7 @@ void DesignPanel::on_commit() // is shown on screen, not the pre-feature solid. (confirm_tool() applies + closes.) if (m_active != Tool::None) confirm_tool(); + end_sketch_plane_choice(); // the bodies leave for the plate; a sketch was not started if (m_doc.display_mesh.its.indices.empty()) { set_status(_L("Nothing to commit — add a feature first")); @@ -10990,10 +11190,9 @@ void DesignPanel::update_rib_gizmo() m_rib_thickness ? m_rib_thickness->GetValue() : 0.0); } -// Onshape default planes: the XY/XZ/YZ reference planes are persistent, transparent, labelled, and -// larger than the bed — shown as the FALLBACK when there is no object yet. When the Plane tool is -// open they additionally surface existing datums so a base can be picked. Single authority for the -// reference-plane overlay (set/clear_base_pick). +// The XY/XZ/YZ reference planes and their axes. Single authority for the overlay +// (set/clear_base_pick): the Plane tool offers them with the datums as Offset bases; otherwise they +// are up while the Feature tree's Origin row shows them, and while a sketch plane is being chosen. void DesignPanel::update_reference_planes() { if (!m_viewport) return; @@ -11020,26 +11219,117 @@ void DesignPanel::update_reference_planes() } return; } - // Fallback (Onshape default planes): show the 3 reference planes while there is no SOLID body - // yet — so they persist through the 2D-sketch phase and reappear after a sketch is confirmed - // (a sketch creates no body). They no longer block selection: clicking existing geometry wins, - // a base-plane pick only fires on a click that hit nothing else (see on_mouse fall-through). - // Available while there is no solid yet OR while the user is actually choosing a sketch - // plane. The second half fixes a dead end: delete a sketch on a document that still has a - // body, press Sketch, and act_sketch says "click a face or a reference plane" — with the - // reference planes already taken away, because a body existed. The instruction was - // impossible to follow and there was no way to start a sketch at all short of finding a - // face to click. - // - // Not simply always-on: m_dbp_active both RENDERS and picks, so three translucent planes - // would otherwise float over every finished model. Tying them to Sketch mode shows them - // exactly when they are the thing being chosen, and hides them again on Finish. - if (m_doc.bodies.empty() || m_ui_mode == UiMode::Sketch) + // Up while Sketch waits for a plane to be picked (start_sketch), which the session it opens + // takes away; a live session would draw none anyway (DesignSketchTool::draws_reference_axes). + // They never block selection: clicking existing geometry wins, and a base-plane pick only + // fires on a click that hit nothing else (see on_mouse fall-through). + if (m_show_origin || m_choosing_sketch_plane) m_viewport->set_base_pick(std::move(bp), std::move(bi), std::move(bl)); else m_viewport->clear_base_pick(); } +void DesignPanel::toggle_origin() +{ + m_show_origin = !m_show_origin; + wxGetApp().app_config->set_bool("design_show_origin", m_show_origin); + // A plane picked while they were up is not a selection once nobody can see it. + if (!m_show_origin) drop_plane_pick(); + // Not an edit: a plane choice under way stays, and keeps its planes up. + update_reference_planes(); // repaints + refresh_pinned(); // the Origin row's eye +} + +void DesignPanel::toggle_bed() +{ + m_show_bed = !m_show_bed; + wxGetApp().app_config->set_bool("design_show_bed", m_show_bed); + if (m_viewport) m_viewport->set_show_bed(m_show_bed); // repaints + refresh_pinned(); // the Bed row's eye +} + +// View switches, not history: a view toggle rebuilds these two rows and leaves the features +// alone. The label dims while its thing is hidden, as a hidden body's does. +void DesignPanel::refresh_pinned() +{ + std::vector rows; + auto add = [&rows](const char* icon, const wxString& label, bool shown, const wxString& tip) { + DesignRowList::Action eye = eye_action(shown); + eye.tip = tip; + // A blank cell under the features' Delete, so the eye sits in the features' eye column. + rows.push_back({ icon, label, {}, shown ? dp_item_text() : dp_item_dim(), { eye, {} } }); + }; + // In kOriginRow / kBedRow order. + add("design_plane", _L("Origin"), m_show_origin, origin_toggle_text(m_show_origin)); + add("design_bed", _L("Bed"), m_show_bed, bed_toggle_text(m_show_bed)); + m_pinned->set_rows(std::move(rows)); +} + +void DesignPanel::start_sketch() +{ + if (m_ui_mode != UiMode::Feature) return; // already sketching or constraining + if (m_active != Tool::None || m_text_dlg != nullptr || body_move_pending()) { + set_status(StatusKind::Info, _L("Finish or cancel what is open first")); + return; + } + wxString where; + if (sketch_plane_target(where)) { + start_sketch_on_target(true); + return; + } + // Nothing to sketch on yet: offer the planes and stay in Feature mode until one is picked + // (set_on_datum_base_picked, set_on_solid_selection_changed). + m_choosing_sketch_plane = true; + update_reference_planes(); + update_action_bar(); // ✗ leaves the choice + set_status(StatusKind::Info, sketch_plane_prompt()); +} + +void DesignPanel::start_sketch_on_target(bool offer_tools) +{ + if (!m_viewport) return; + wxString on; + const SketchPlane plane = sketch_plane_from_selection(on); + m_viewport->begin_sketch(plane, DesignSketchTool::Mode::Select); + // The face or plane has been CONSUMED as the sketch plane, so drop the pick. A face left live + // meant the next Extrude saw a selected face and push/pulled it instead of extruding the + // sketch just drawn — the same trap the imported-art path already guards against — and a + // plane left picked would open the next sketch on it, unseen once the planes are hidden. + // The canvas's half goes too: left lit there, the next click on that face read as a second + // click on it and took the whole body, which has no plane to sketch on. + drop_solid_pick(); + m_plane_picked = false; + m_construction->SetValue(false); // a fresh session starts non-construction + set_ui_mode(UiMode::Sketch); // ends the plane choice, so the planes go + m_sketch_on = on; // shown with the tool hint, so the target is visible + set_status(StatusKind::Info, wxString::Format(_L("Sketch plane: %s — pick a tool"), on)); + if (m_sketch_hint) { // the card must agree with the status line, not argue with it + m_sketch_hint->SetLabel(wxString::Format(_L("Sketch plane: %s.\nPick a tool, or press Menu for the list."), on)); + m_sketch_hint->Refresh(); + m_cards->Layout(); + } + // Hand over the tools rather than naming them in a status line: the sketch bar carries none. + // CallAfter so the mode change has settled, and the pick that got here has returned, before a + // modal menu takes the loop; the menu carries each tool's shortcut, so pressing the key + // instead of picking a row costs nothing. + if (offer_tools) + CallAfter([this] { show_offer_menu(offer_anchor()); }); +} + +void DesignPanel::end_sketch_plane_choice() +{ + if (!m_choosing_sketch_plane) return; + m_choosing_sketch_plane = false; + update_reference_planes(); + update_action_bar(); +} + +bool DesignPanel::sketch_plane_pick_live() const +{ + return m_choosing_sketch_plane && m_ui_mode == UiMode::Feature && m_active == Tool::None + && m_text_dlg == nullptr && !body_move_pending(); +} + TriangleMesh DesignPanel::ghost_from_bodies(const std::vector& per_body) const { TriangleMesh out; @@ -11197,10 +11487,12 @@ void DesignPanel::refresh_preview() // Confirm so the user sees the gate before clicking; the red status says why. m_candidate_ok = ok; update_confirm_button(); - // Fillet/Chamfer/Draft: once the target edge/face yields a valid result, show ONLY the + // Fillet/Chamfer/Draft/Hole: once the target edge/face yields a valid result, show ONLY the // preview (hide the base bodies) so the user sees the finished shape, not the old solid - // doubled with the ghost. Before a valid pick the body stays visible so it can be picked. - m_viewport->set_body_hidden((m_active == Tool::Dressup || m_active == Tool::Draft) && ok); + // doubled with the ghost. A hole's cut lies inside the old solid, so without this the body + // would hide it entirely. Before a valid pick the body stays visible so it can be picked. + m_viewport->set_body_hidden((m_active == Tool::Dressup || m_active == Tool::Draft || + m_active == Tool::Hole) && ok); m_status->Refresh(); // Refresh the in-canvas Extrude depth arrow (self-gates: only while the Extrude card is open). @@ -11292,7 +11584,9 @@ void DesignPanel::push_polygon_params() void DesignPanel::open_tool(Tool t) { + end_body_move(true); // first: arm_transform_gizmo below takes over the same gizmo m_active = t; + end_sketch_plane_choice(); // after m_active: the Plane card keeps its planes m_candidate_ok = true; // a fresh card is confirmable until its preview says otherwise // Fillet/Chamfer/Draft no longer fade the body see-through; instead, once a valid target // is picked, refresh_preview hides the base bodies entirely (preview-only). Keep it opaque @@ -11590,7 +11884,6 @@ void DesignPanel::close_tool() if (m_viewport) m_viewport->clear_move_gizmo(); feed_bodies(); m_xf_gizmo_body = -1; - m_move_body = -1; } if (m_viewport) { m_viewport->set_body_translucent(false); m_viewport->set_body_hidden(false); m_viewport->set_xray_focus(-1); } // restore the opaque solid wxSizer* s = m_cards->GetSizer(); @@ -11639,7 +11932,7 @@ void DesignPanel::close_tool() m_viewport->clear_datum_gizmo(); m_viewport->set_operand_bodies(-1, -1); m_viewport->set_highlight_sketches({}); - update_reference_planes(); // back to no-tool: show the origin planes if there is no object yet + update_reference_planes(); // back to no-tool update_cards_frame(); m_form->Layout(); m_form->FitInside(); update_action_bar(); // no feature tool active -> hide the bar (unless a mode keeps it) @@ -11714,11 +12007,8 @@ void DesignPanel::cancel_tool() void DesignPanel::tool_confirm() { if (m_value_cont) { confirm_value(); return; } // value card owns ribbon ✓ while a value is pending - if (m_active == Tool::None && m_viewport && m_viewport->moving_body()) { // keep the placement, drop the gizmo - m_viewport->clear_move_gizmo(); - m_move_body = -1; - show_move_card(false); - update_action_bar(); + if (body_move_pending()) { // keep the placement, drop the gizmo + end_body_move(true); set_status_ok(); return; } @@ -11746,20 +12036,18 @@ void DesignPanel::tool_confirm() void DesignPanel::tool_cancel() { if (m_value_cont) { cancel_value(); return; } // value card owns ribbon ✗ while a value is pending - if (m_active == Tool::None && m_viewport && m_viewport->moving_body()) { // revert to the pose at move-start - sync_body_xform(); - if (m_move_body >= 0 && m_move_body < int(m_body_xform.size())) - m_body_xform[m_move_body] = m_move_prev; - m_viewport->clear_move_gizmo(); - m_move_body = -1; - show_move_card(false); - feed_bodies(); // re-render the reverted placement - update_action_bar(); + if (body_move_pending()) { // revert to the pose at move-start + end_body_move(false); set_status(StatusKind::Info, _L("Move canceled")); return; } if (m_active == Tool::Insert) { cancel_insert(); return; } if (m_active != Tool::None) { cancel_tool(); return; } + if (m_choosing_sketch_plane) { // Sketch was waiting for a plane: no sketch, planes away + end_sketch_plane_choice(); + set_status(StatusKind::Info, wxString()); + return; + } if (m_ui_mode == UiMode::Sketch) { // THE explicit discard. Esc no longer arrives here at all (it routes through escape(), // which cannot destroy anything), so this button is now the only way a drawn sketch is @@ -11795,8 +12083,7 @@ bool DesignPanel::confirm_enabled() const { if (m_value_cont) return true; if (m_active == Tool::None) - return (m_viewport && m_viewport->moving_body()) - || m_ui_mode == UiMode::Sketch || m_ui_mode == UiMode::Constrain; + return body_move_pending() || m_ui_mode == UiMode::Sketch || m_ui_mode == UiMode::Constrain; if (m_active == Tool::Insert) return true; return m_candidate_ok; } @@ -11820,12 +12107,12 @@ CadLevel DesignPanel::escape_level() const || (m_viewport && m_viewport->inline_busy()); // An uncommitted delta: clicks are down on an entity that does not exist yet, or a body is // being moved by a gizmo that has not been confirmed. - st.gesture_active = m_viewport - && (m_viewport->drawing_in_progress() - || (m_active == Tool::None && m_viewport->moving_body())); - // Something is armed and waiting for input: a feature card, a sketch draw tool, Constrain. - // A sketch SESSION is deliberately not in this list — see escape(). + st.gesture_active = body_move_pending() + || (m_viewport && m_viewport->drawing_in_progress()); + // Something is armed and waiting for input: a feature card, Sketch waiting for its plane, a + // sketch draw tool, Constrain. A sketch SESSION is deliberately not in this list — see escape(). st.tool_armed = (m_active != Tool::None) + || m_choosing_sketch_plane || m_ui_mode == UiMode::Constrain || (m_ui_mode == UiMode::Sketch && m_viewport && !m_viewport->sketch_is_selecting()); st.has_selection = m_viewport && m_viewport->has_any_selection(); @@ -11862,7 +12149,10 @@ void DesignPanel::escape() // CANDIDATE (never a committed feature — in edit mode reset_edit_state only forgets which // feature was being edited, the feature itself is untouched); an armed sketch tool falls // back to Select, leaving every entity already drawn exactly where it is. - if (m_active != Tool::None || m_ui_mode == UiMode::Constrain) { tool_cancel(); return; } + if (m_active != Tool::None || m_choosing_sketch_plane || m_ui_mode == UiMode::Constrain) { + tool_cancel(); + return; + } if (m_viewport && m_viewport->sketch_disarm_tool()) { set_status(StatusKind::Info, _L("Select")); } @@ -11873,7 +12163,8 @@ void DesignPanel::escape() // both of which say which one they are, and never through a key pressed on the way out of // something else. The Feature tree and Bodies rows count as selections too. const bool row = deselect_rows(); - if ((m_viewport && m_viewport->clear_any_selection()) || row) { + const bool plane = drop_plane_pick(); + if ((m_viewport && m_viewport->clear_any_selection()) || row || plane) { set_status(StatusKind::Info, wxString()); return; } @@ -11896,7 +12187,7 @@ bool DesignPanel::menu_can_undo_redo(bool redo) const { if (m_ui_mode == UiMode::Sketch && m_viewport && m_viewport->is_sketching()) return redo ? m_viewport->can_redo_sketch_entity() : m_viewport->can_undo_sketch_entity(); - if (m_ui_mode != UiMode::Feature || m_active != Tool::None) return false; + if (m_ui_mode != UiMode::Feature || m_active != Tool::None || body_move_pending()) return false; return redo ? m_doc.can_redo() : m_doc.can_undo(); } @@ -11916,9 +12207,10 @@ void DesignPanel::update_action_bar() wxSizer* s = m_toolbar->GetSizer(); if (s == nullptr) return; const bool active = (m_active != Tool::None) + || m_choosing_sketch_plane // ✗ only: ✓ has nothing to confirm || m_ui_mode == UiMode::Sketch || m_ui_mode == UiMode::Constrain - || (m_viewport && m_viewport->moving_body()); + || body_move_pending(); s->Show(m_tb_action, active, true); // HIDING THE BAR ORPHANS THE KEYBOARD, and that is the "app does not consent to sketch" // report. The ✓/✗ live in this bar, so the click that confirms a feature leaves focus on a @@ -11954,7 +12246,8 @@ void DesignPanel::do_undo_redo(bool redo) // v1: act only in Feature mode. While authoring/constraining a sketch (m_ui_mode) or // with a feature dialog open (m_active), Esc/Cancel is the way out — popping committed // history mid-tool would be ambiguous (and could orphan the tool's referenced feature). - if (m_ui_mode != UiMode::Feature || m_active != Tool::None) { + // A Move is not in the history at all, so an undo under it would keep it without asking. + if (m_ui_mode != UiMode::Feature || m_active != Tool::None || body_move_pending()) { set_status(StatusKind::Info, _L("Finish or cancel the current tool first (Esc)")); return; } diff --git a/src/slic3r/GUI/CAD/DesignPanel.hpp b/src/slic3r/GUI/CAD/DesignPanel.hpp index 5e39362fad..823282bb57 100644 --- a/src/slic3r/GUI/CAD/DesignPanel.hpp +++ b/src/slic3r/GUI/CAD/DesignPanel.hpp @@ -383,7 +383,16 @@ private: void update_rib_gizmo(); // in-plane slab footprint + thickness handles (Rib card) void refresh_datum_planes(); // push resolved datum frames + per-plane u/v extents to viewport void refresh_mate_connectors(); // push connector frames so verse + polarity are visible - void update_reference_planes(); // persistent XY/XZ/YZ reference planes (fallback when no object) + void update_reference_planes(); // the XY/XZ/YZ planes + axes: Origin row, plane choice, Plane tool + void toggle_origin(); // the Origin row's eye (and Ctrl+Shift+O): keep the reference planes up + void toggle_bed(); // the Bed row's eye (and Ctrl+Shift+B): draw the printer bed, or not + void refresh_pinned(); // rebuild the Origin and Bed rows (their eyes and label colours) + // Sketch: open a session on the picked face or plane, or with none picked, put the planes up + // and wait for one (m_choosing_sketch_plane). + void start_sketch(); + void start_sketch_on_target(bool offer_tools); // a session on sketch_plane_from_selection() + void end_sketch_plane_choice(); // leave the plane choice without a sketch; no-op outside it + bool sketch_plane_pick_live() const; // may a pick made now still open the sketch? CadDocument m_doc; @@ -413,7 +422,6 @@ private: ScalableButton* m_commit_btn{nullptr}; // main face: runs the current commit mode DropDown* m_commit_drop{nullptr}; // commit-mode choices, owned via m_flyout_keepalive wxSizer* m_tb_doc{nullptr}; // toolbar document/view actions (new, commit, export, section, place) - CheckBox* m_show_bed{nullptr}; // view option: draw the printer bed + plate grid, or not wxSizer* m_box_move{nullptr}; // Move/Rotate numeric options (distance, axis, angle) wxSizer* m_box_sketch{nullptr}; wxSizer* m_box_extrude{nullptr}; @@ -571,8 +579,20 @@ private: // deliberately no dropdown for it. e1p. int m_ref_plane{0}; // m_ref_plane is always a VALID plane, so it cannot itself distinguish "the user chose XY" - // from "nobody has chosen anything yet". This does. + // from "nobody has chosen anything yet". This does. A selection like a picked face: the sketch + // opened on it uses it up, and Esc or a click on nothing lets go of it. bool m_plane_picked{false}; + // Sketch was pressed with nothing to sketch on: the reference planes are up and the next + // reference plane or flat face clicked opens the sketch on it. Still Feature mode — sketch + // mode is entered only with the session (start_sketch_on_target). + bool m_choosing_sketch_plane{false}; + // The Feature tree's Origin row: keeps the reference planes and their axes up + // (update_reference_planes). A view preference (AppConfig "design_show_origin"), not part of + // the recipe. + bool m_show_origin{false}; + // The Feature tree's Bed row: draws the printer bed and its plate grid. A view preference + // (AppConfig "design_show_bed"), not part of the recipe. + bool m_show_bed{true}; ComboBox* m_shape{nullptr}; ComboBox* m_mode{nullptr}; wxSpinCtrlDouble* m_width{nullptr}; @@ -913,12 +933,16 @@ private: std::function m_value_cont; // deferred apply, run on Confirm std::function m_value_cancel; // optional action when the card is cancelled - // Feature tree: one row per feature, in feature order, with a per-type icon and the row's - // own Edit / Show-hide / Delete icons. Callers use row indices via - // tree_selection()/set_tree_selection(); refresh_tree() rebuilds the rows. + // Feature tree: the Origin and Bed rows, a fixed block of view switches that never scrolls + // and selects nothing, then, in a frame of its own below them, one row per feature, in feature + // order, with a per-type icon and the row's own Zoom to selection / Edit / Show-hide / Delete + // icons. Callers use row indices via tree_selection()/set_tree_selection(); refresh_tree() + // rebuilds the rows. + DesignRowList* m_pinned{nullptr}; DesignRowList* m_tree{nullptr}; - // The faces the selected feature row made (CadDocument::faces_made_by), drawn as selected. - // Finding them replays the history, so they are kept per row and topology generation. + // The faces the selected feature row made (CadDocument::faces_made_by), drawn as selected, and + // what Zoom to selection frames for a row. Finding them replays the history, so they are kept + // per row and topology generation (feature_faces). // request_feature_highlight() refreshes them after the current event; every change of row, // card or topology calls it. int m_hl_feature{-1}; // the row m_hl_faces were found for... @@ -927,7 +951,10 @@ private: bool m_hl_pending{false}; void request_feature_highlight(); void update_feature_highlight(); + // The faces feature `f` made, found again when the cached ones are another row's or topology's. + const std::vector>& feature_faces(int f); bool deselect_rows(); // Esc / a click on nothing: drop the tree and Bodies rows + bool drop_plane_pick(); // ...and a picked reference plane; true if one was picked // Bodies list under the feature tree: one row per body (parallel to m_doc.bodies). Selecting // one highlights that body and makes it the target for the next op. DesignRowList* m_parts{nullptr}; @@ -964,8 +991,17 @@ private: void rebuild_disp_meshes(); // recompute m_disp_* from m_doc + m_body_xform void feed_bodies(); // push m_disp_* + visibility/xform to the viewport void on_move_body(); // start the move gizmo on the selected body + bool body_move_pending() const { return m_move_body >= 0; } // the Move button's session is open + void end_body_move(bool keep); // leave it: keep the dragged pose, or put the body back void arm_transform_gizmo(); // arm the move gizmo on the Transform card's body (add mode only) void on_set_body_color(); // Color tool: pick a per-body display colour override + // Zoom to selection: frame one thing along the current view, as the canvas's Fit button frames + // a selection. A body is framed whole, hidden or not; a feature by its sketch or the faces it + // made; anything else the offer is opened on, by what the Fit button frames for it. + void zoom_to_body(int b); + void zoom_to_feature(int f); + void zoom_to_selection(); + bool can_zoom_to_feature(int f) const; // a sketch, or a shown feature that makes faces void on_boolean_tool(); // Boolean (combine bodies): needs two solids, then opens the tool int tree_selection() const; // selected feature row, or wxNOT_FOUND int tree_body_selection() const; // selected Parts-list body index, or -1 diff --git a/src/slic3r/GUI/CAD/DesignRowList.cpp b/src/slic3r/GUI/CAD/DesignRowList.cpp index facf0aa5ed..1c39009cd5 100644 --- a/src/slic3r/GUI/CAD/DesignRowList.cpp +++ b/src/slic3r/GUI/CAD/DesignRowList.cpp @@ -29,11 +29,19 @@ static constexpr int kCellDip = 20; // square action cell, hover chip included static constexpr int kPadDip = 4; // row edges, and the gap before the action cells static constexpr int kGapDip = 6; // type icon to label -DesignRowList::DesignRowList(wxWindow* parent, int max_visible) - // wxVListBox defaults to wxBORDER_THEME; the sidebar's lists take a simple frame. - : wxVListBox(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_SIMPLE) +DesignRowList::DesignRowList(wxWindow* parent, int max_visible, bool selectable, long style) + // wxVListBox defaults to wxBORDER_THEME; `style` defaults to the simple frame the sidebar's + // lists take, and a list meant to sit unframed on its card passes wxBORDER_NONE. + : wxVListBox(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, style) , m_max_visible(std::max(max_visible, 1)) + , m_selectable(selectable) { + // A non-selectable list takes no focus: from the mouse because it consumes the presses that + // would focus it, below, and from the keyboard through AcceptsFocus(). wxGTK reads that once, + // while the base class is being built, before the override exists, so it is told here. + if (!m_selectable) + SetCanFocus(false); + Bind(wxEVT_LISTBOX, [this](wxCommandEvent&) { if (on_select) on_select(); }); Bind(wxEVT_LISTBOX_DCLICK, [this](wxCommandEvent&) { if (on_activate) on_activate(); }); @@ -46,18 +54,20 @@ DesignRowList::DesignRowList(wxWindow* parent, int max_visible) m_pressed = Hit{}; e.Skip(); }); - // A press on an action cell is remembered and skipped, so the list still selects the row. + // A press on an action cell is remembered and skipped, so the list still selects the row. A + // non-selectable list keeps every press from wxVListBox, which would select the row and take + // the focus. Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { const Hit h = hit_test(e.GetPosition()); m_pressed = h.cell >= 0 ? h : Hit{}; - e.Skip(); + if (m_selectable) e.Skip(); }); // The second press of a double-click on a cell is a press too, and is not skipped: the list // would otherwise turn it into a row double-click, so a quick double toggle of the eye would // also open the feature for editing. Bind(wxEVT_LEFT_DCLICK, [this](wxMouseEvent& e) { const Hit h = hit_test(e.GetPosition()); - if (h.cell < 0) { m_pressed = Hit{}; e.Skip(); return; } + if (h.cell < 0) { m_pressed = Hit{}; if (m_selectable) e.Skip(); return; } m_pressed = h; }); Bind(wxEVT_LEFT_UP, [this](wxMouseEvent& e) { @@ -69,9 +79,9 @@ DesignRowList::DesignRowList(wxWindow* parent, int max_visible) const int id = m_rows[pressed.row].actions[pressed.cell].id; // After the click has finished dispatching: the action may rebuild these rows. The row // must still exist and still be the selected one, or the click is dropped rather than - // applied to whatever row took its place. + // applied to whatever row took its place. A non-selectable list has no selected row. CallAfter([this, row = pressed.row, id] { - if (row < int(GetItemCount()) && row == GetSelection() && on_action) + if (row < int(GetItemCount()) && (!m_selectable || row == GetSelection()) && on_action) on_action(row, id); }); }); @@ -79,7 +89,7 @@ DesignRowList::DesignRowList(wxWindow* parent, int max_visible) // press suppresses the wxEVT_CONTEXT_MENU that follows it. Bind(wxEVT_RIGHT_DOWN, [this](wxMouseEvent& e) { const Hit h = hit_test(e.GetPosition()); - if (h.row != wxNOT_FOUND) select(h.row); + if (m_selectable && h.row != wxNOT_FOUND) select(h.row); e.Skip(); }); Bind(wxEVT_CONTEXT_MENU, [this](wxContextMenuEvent& e) { @@ -95,7 +105,7 @@ DesignRowList::DesignRowList(wxWindow* parent, int max_visible) return; // On MSW the menu comes with the button's release, and the pointer may have moved to // another row since the press selected one: the menu is for the row it opens over. - select(row); + if (m_selectable) select(row); if (on_menu) on_menu(row, screen); }); // wxVListBox takes every wheel event, even with nothing to scroll, so a short list would stop @@ -254,7 +264,7 @@ void DesignRowList::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) con wxColour bg; if (IsSelected(n)) bg = StateColor::darkModeColorFor(wxColour("#BFE1DE")); - else if (int(n) == m_hover.row) + else if (m_selectable && int(n) == m_hover.row) // a non-selectable row lights only its icons bg = StateColor::darkModeColorFor(wxColour("#E5F0EE")); if (!bg.IsOk()) return; // the list already cleared to its background colour @@ -314,7 +324,7 @@ DesignRowList::Hit DesignRowList::hit_test(const wxPoint& pt) const const wxRect rect = GetItemRect(h.row); const auto& acts = m_rows[h.row].actions; for (size_t i = 0; i < acts.size(); ++i) - if (cell_rect(rect, acts.size(), i).Contains(pt)) { + if (!acts[i].icon.empty() && cell_rect(rect, acts.size(), i).Contains(pt)) { h.cell = int(i); break; } diff --git a/src/slic3r/GUI/CAD/DesignRowList.hpp b/src/slic3r/GUI/CAD/DesignRowList.hpp index ff1ecc482a..7c2c524691 100644 --- a/src/slic3r/GUI/CAD/DesignRowList.hpp +++ b/src/slic3r/GUI/CAD/DesignRowList.hpp @@ -29,12 +29,16 @@ namespace Slic3r { namespace GUI { // Selection follows wxTreeCtrl's contract, which DesignPanel's mutual exclusion between the two // lists relies on: on_select runs on every change, whether the user or select() made it, and // selecting the row that is already selected changes nothing and notifies nobody. +// +// A list built non-selectable is a row of switches, not of objects: a click never selects a row, +// the pointer highlights only the action icon under it, and the list never takes the focus. Its +// action icons and its context menu are the only things that answer. class DesignRowList : public wxVListBox { public: struct Action { int id; // the owner's code for it, handed back to on_action - std::string icon; // icon name, e.g. "design_eye" + std::string icon; // icon name, e.g. "design_eye"; empty for a blank cell that only holds a column wxString tip; }; struct Row { @@ -50,7 +54,8 @@ public: static constexpr const char* hover_chip = "#D4D4D4"; // The list is as tall as its rows, at least one and at most `max_visible`; past that it scrolls. - DesignRowList(wxWindow* parent, int max_visible); + // `style` is its frame: wxBORDER_NONE for a list that sits unframed on its card. + DesignRowList(wxWindow* parent, int max_visible, bool selectable = true, long style = wxBORDER_SIMPLE); // Replace every row. Clears the selection without notifying and cancels a rename in progress; // the owner re-selects the row it keeps, which notifies. @@ -67,15 +72,20 @@ public: std::function on_select; // the selection changed std::function on_activate; // the selected row was double-clicked - // A row's action icon was clicked. Runs after the click has finished dispatching, and only - // while that row is still the selected one; the click itself selected it. + // A row's action icon was clicked. Runs after the click has finished dispatching, while the + // row still exists and — in a selectable list, where the click itself selected it — is still + // the selected one. std::function on_action; - // Context menu on a row, at a screen position; the row under the pointer is selected first. + // Context menu on a row, at a screen position; the row under the pointer is selected first, + // unless the list is non-selectable. Pop the menu from inside the call: wxGTK sends it on the + // right press, and a menu deferred past that event closes on the button's release. std::function on_menu; // The editor committed `name` for `row`, trimmed and never empty (an empty commit cancels). // Runs after the editor's own events have finished, so the owner may rebuild the rows here. std::function on_rename; + bool AcceptsFocus() const override { return m_selectable && wxVListBox::AcceptsFocus(); } + protected: void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const override; void OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const override; @@ -103,6 +113,7 @@ private: std::vector m_rows; std::map m_icons; int m_max_visible; + bool m_selectable; int m_row_h{0}; // every row's height, from measure_row() Hit m_hover; Hit m_pressed; // action cell under the last left press diff --git a/src/slic3r/GUI/CAD/DesignSketchTool.cpp b/src/slic3r/GUI/CAD/DesignSketchTool.cpp index 4d6851b473..d5007239c1 100644 --- a/src/slic3r/GUI/CAD/DesignSketchTool.cpp +++ b/src/slic3r/GUI/CAD/DesignSketchTool.cpp @@ -30,7 +30,7 @@ #include #include "libslic3r/TriangleMesh.hpp" -#include +#include #include "libslic3r/CAD/SketchEngine.hpp" #include "libslic3r/Point.hpp" #include @@ -53,6 +53,7 @@ #include #include #include +#include #include "libslic3r/AppConfig.hpp" #include "libslic3r/Color.hpp" #include "slic3r/GUI/GLSelectionRectangle.hpp" @@ -77,6 +78,7 @@ static bool point_in_poly(const Vec2d& q, const std::vector& poly); static bool ray_triangle(const Vec3d& ro, const Vec3d& rd, const Vec3d& v0, const Vec3d& v1, const Vec3d& v2, double& t); static double ray_segment_dist3(const Vec3d& ro, const Vec3d& rd, const Vec3d& a, const Vec3d& b); +static double ray_axis_proj(const Linef3& ray, const Vec3d& anchor, const Vec3d& dir); // Project a world-space point to canvas screen pixels (device px, GL viewport units; // origin top-left after the GL y-flip). Mirrors GLCanvas3D's world->screen pattern: @@ -3287,7 +3289,7 @@ std::vector DesignSketchTool::make_bspline(const std::vector DesignSketchTool::entity_polyline(const SketchEntity& e, bool& closed) const +std::vector DesignSketchTool::entity_polyline(const SketchEntity& e, bool& closed) { closed = false; switch (e.type) { @@ -3474,18 +3476,19 @@ static double display_edge_tol(const TopoDS_Shape& shape) void DesignSketchTool::refresh_body_edges() { const size_t n = m_solid_bodies != nullptr ? m_solid_bodies->size() : 0; + bool rebuilt = n < m_body_edges_shape.size(); // a body went away m_body_edges.resize(n); - m_body_edges_key.resize(n, nullptr); + m_body_edges_shape.resize(n); m_body_edges_tol.resize(n, 0.0); for (size_t b = 0; b < n; ++b) { - const void* key = body_key(int(b)); - if (key == m_body_edges_key[b] && key != nullptr) - continue; - m_body_edges_key[b] = key; - m_body_edges[b].clear(); - if (key == nullptr) + if (is_current_shape(int(b), m_body_edges_shape[b])) continue; + rebuilt = rebuilt || !m_body_edges_shape[b].IsNull(); // a body sampled before was rebuilt const TopoDS_Shape& shape = (*m_solid_bodies)[b].shape; + m_body_edges_shape[b] = shape; + m_body_edges[b].clear(); + if (shape.IsNull()) + continue; m_body_edges_tol[b] = display_edge_tol(shape); try { m_body_edges[b] = GeometryEngine::display_edges(shape, m_body_edges_tol[b]); @@ -3493,15 +3496,36 @@ void DesignSketchTool::refresh_body_edges() m_body_edges[b].clear(); // an unsampleable edge costs its body the lines, nothing else } } + // A pick expires once the body it was taken on is rebuilt, which renumbers its faces and + // edges. Judged by that body's shape, not by these lines: a recompute that refreshed no lines + // (adding a datum, say) may come before a pick on the bodies it built, and that pick holds. + // The hover is resolved again on the next mouse move, so any rebuild just drops it. + if (m_solid_sel != SolidSel::None && !is_current_shape(m_sel_body, m_sel_shape)) + clear_solid_selection(); + else if (rebuilt) + m_pre = SolidPick{}; + // The face outlines of a rebuilt body let go of its shape, which may be a large import. + const auto stale = [this](const FaceHighlight& h) { return !is_current_shape(h.body, h.shape); }; + if (stale(m_sel_hl)) m_sel_hl = FaceHighlight{}; + if (stale(m_pre_hl)) m_pre_hl = FaceHighlight{}; + m_hl_faces.erase(std::remove_if(m_hl_faces.begin(), m_hl_faces.end(), stale), m_hl_faces.end()); } -// The identity of a body's current shape. Face ids and sampled edges hold while it does. -const void* DesignSketchTool::body_key(int body) const +const TopoDS_Shape* DesignSketchTool::body_shape(int body) const { if (m_solid_bodies == nullptr || body < 0 || body >= int(m_solid_bodies->size())) return nullptr; const TopoDS_Shape& shape = (*m_solid_bodies)[body].shape; - return shape.IsNull() ? nullptr : shape.TShape().get(); + return shape.IsNull() ? nullptr : &shape; +} + +// Whether `sampled` is still the body's shape. The caches hold the shape itself rather than its +// address, so the sampled TShape stays alive and no rebuilt body can be allocated in its place. +// IsSame also compares the Location, which the sampled lines are in. +bool DesignSketchTool::is_current_shape(int body, const TopoDS_Shape& sampled) const +{ + const TopoDS_Shape* shape = body_shape(body); + return shape != nullptr && sampled.IsSame(*shape); } // View-facing ribbons along a body's polylines (shape coordinates), `hw` either side of the line @@ -3604,6 +3628,7 @@ void DesignSketchTool::clear_solid_selection() { m_solid_sel = SolidSel::None; m_sel_body = m_sel_face = m_sel_edge = -1; + m_sel_shape = TopoDS_Shape(); m_sel_edge_pts.clear(); m_sel_edges_more.clear(); m_sel_edges_more_pts.clear(); @@ -3631,6 +3656,7 @@ void DesignSketchTool::select_body(int body) return; } m_sel_body = body; + m_sel_shape = (*m_solid_bodies)[body].shape; m_sel_face = m_sel_edge = -1; m_sel_edge_pts.clear(); m_sel_edges_more.clear(); @@ -3642,7 +3668,7 @@ void DesignSketchTool::set_highlight_faces(const std::vector { std::map> by_body; for (const auto& [b, f] : faces) - if (body_key(b) != nullptr) + if (body_shape(b) != nullptr) by_body[b].push_back(f); // Reuse each body's entry, so re-sending the same faces resamples nothing. std::vector next; @@ -3664,13 +3690,16 @@ DesignSketchTool::FaceHighlight DesignSketchTool::make_face_highlight(int body, std::sort(faces.begin(), faces.end()); faces.erase(std::unique(faces.begin(), faces.end()), faces.end()); h.faces = std::move(faces); - h.key = body_key(body); - if (h.key == nullptr || h.faces.empty()) + const TopoDS_Shape* shape = body_shape(body); + if (shape == nullptr) + return h; + h.shape = *shape; + if (h.faces.empty()) return h; // Sampled at the body edges' tolerance; a whole body reuses its body edges. - const TopoDS_Shape& shape = (*m_solid_bodies)[body].shape; - const std::vector all = GeometryEngine::faces_of(shape); - const bool cached = body < int(m_body_edges_key.size()) && m_body_edges_key[body] == h.key; + const std::vector all = GeometryEngine::faces_of(*shape); + const bool cached = body < int(m_body_edges_shape.size()) + && is_current_shape(body, m_body_edges_shape[body]); if (cached && h.faces.size() == all.size() && h.faces.front() == 0 && h.faces.back() == int(all.size()) - 1) { h.edges = m_body_edges[body]; return h; @@ -3682,7 +3711,7 @@ DesignSketchTool::FaceHighlight DesignSketchTool::make_face_highlight(int body, if (f >= 0 && f < int(all.size())) builder.Add(picked, all[f]); try { - h.edges = GeometryEngine::display_edges(picked, cached ? m_body_edges_tol[body] : display_edge_tol(shape)); + h.edges = GeometryEngine::display_edges(picked, cached ? m_body_edges_tol[body] : display_edge_tol(*shape)); } catch (const Standard_Failure&) { h.edges.clear(); // an edge that cannot be sampled costs the outline, never the fill } @@ -3692,12 +3721,13 @@ DesignSketchTool::FaceHighlight DesignSketchTool::make_face_highlight(int body, std::vector> DesignSketchTool::picked_faces() const { std::vector> out; - if (body_key(m_sel_body) == nullptr) + const TopoDS_Shape* shape = body_shape(m_sel_body); + if (shape == nullptr) return out; if (m_solid_sel == SolidSel::Face && m_sel_face >= 0) out.emplace_back(m_sel_body, m_sel_face); else if (m_solid_sel == SolidSel::Whole) - for (int f = 0, n = GeometryEngine::face_count((*m_solid_bodies)[m_sel_body].shape); f < n; ++f) + for (int f = 0, n = GeometryEngine::face_count(*shape); f < n; ++f) out.emplace_back(m_sel_body, f); return out; } @@ -3706,7 +3736,7 @@ std::vector> DesignSketchTool::selected_faces() const { std::vector> out = picked_faces(); for (const FaceHighlight& h : m_hl_faces) - if (h.key != nullptr && h.key == body_key(h.body)) + if (is_current_shape(h.body, h.shape)) for (int f : h.faces) out.emplace_back(h.body, f); std::sort(out.begin(), out.end()); @@ -3714,12 +3744,99 @@ std::vector> DesignSketchTool::selected_faces() const return out; } +BoundingBoxf3 DesignSketchTool::faces_box(std::vector> faces) const +{ + // From the pick mesh: it is in world coordinates already, moved bodies and all. + BoundingBoxf3 box; + if (faces.empty() || m_solid_mesh == nullptr || m_solid_tri_face == nullptr || m_solid_tri_body == nullptr) + return box; + std::sort(faces.begin(), faces.end()); + const indexed_triangle_set& its = m_solid_mesh->its; + const size_t n = std::min({ its.indices.size(), m_solid_tri_face->size(), m_solid_tri_body->size() }); + for (size_t t = 0; t < n; ++t) + if (std::binary_search(faces.begin(), faces.end(), std::make_pair((*m_solid_tri_body)[t], (*m_solid_tri_face)[t]))) + for (int i = 0; i < 3; ++i) + box.merge(its.vertices[its.indices[t][i]].cast()); + return box; +} + +BoundingBoxf3 DesignSketchTool::sketch_box(const std::vector& entities, const SketchPlane& plane) +{ + BoundingBoxf3 box; + for (const SketchEntity& e : entities) { + bool closed = false; + for (const Vec2d& p : entity_polyline(e, closed)) + box.merge(plane.to_world(p)); + } + return box; +} + +BoundingBoxf3 DesignSketchTool::selection_box() const +{ + // The selected faces, a whole body's included. + BoundingBoxf3 box = faces_box(selected_faces()); + if (m_solid_sel == SolidSel::Edge) { + for (const Vec3d& p : m_sel_edge_pts) + box.merge(p); + for (const std::vector& pts : m_sel_edges_more_pts) + for (const Vec3d& p : pts) + box.merge(p); + } else if (m_solid_sel == SolidSel::Vertex) + box.merge(m_sel_vertex_pt); + // A committed sketch's picked region with its holes; a stroke outside any region, the sketch. + if (m_display_pick >= 0) + for (const DisplaySketch& d : m_display_sketches) + if (d.feature == m_display_pick) + box.merge(sketch_box(m_display_pick_region >= 0 ? selected_loop_entities() : d.entities, d.plane)); + if (m_active) { + for (int i : m_selection) + if (i >= 0 && i < int(m_entities.size())) + box.merge(sketch_box({ m_entities[i] }, m_plane)); + for (const auto& [i, role] : m_point_sel) + if (i >= 0 && i < int(m_entities.size())) { + const SketchEntity& e = m_entities[i]; + box.merge(m_plane.to_world(role == SketchPointRole::Center ? e.center : + role == SketchPointRole::P1 ? e.p1 : e.p0)); + } + } + return box; +} + +BoundingBoxf3 DesignSketchTool::fit_box(const GLVolumeCollection& volumes) const +{ + BoundingBoxf3 box = selection_box(); + // Nothing selected: everything on show. A hidden body's volume is inactive. + if (!box.defined) { + for (const GLVolume* v : volumes.volumes) + if (v->is_active) + box.merge(v->transformed_bounding_box()); + for (const DisplaySketch& d : m_display_sketches) + box.merge(sketch_box(d.entities, d.plane)); + if (m_active) + box.merge(sketch_box(m_entities, m_plane)); + } + pad_box(box); + return box; +} + +void DesignSketchTool::pad_box(BoundingBoxf3& box) +{ + // A vertex has no size, nor has a sketch along its normal, and the camera cannot frame an + // extent it does not see. Every axis gets at least a small neighbourhood. + if (!box.defined) + return; + constexpr double min_extent = 10.; // mm + const Vec3d grow = (Vec3d::Constant(min_extent) - box.size()).cwiseMax(0.) * 0.5; + box.min -= grow; + box.max += grow; +} + const DesignSketchTool::FaceHighlight& DesignSketchTool::cached_face_highlight(FaceHighlight& cache, int body, std::vector faces) const { std::sort(faces.begin(), faces.end()); faces.erase(std::unique(faces.begin(), faces.end()), faces.end()); - if (cache.body != body || cache.faces != faces || cache.key != body_key(body)) + if (cache.body != body || cache.faces != faces || !is_current_shape(body, cache.shape)) cache = make_face_highlight(body, std::move(faces)); return cache; } @@ -3730,7 +3847,7 @@ const DesignSketchTool::FaceHighlight& DesignSketchTool::cached_face_highlight(F // version: the line alone, thinner and fainter. void DesignSketchTool::render_face_outline(const FaceHighlight& h, bool quiet) { - if (m_body_edges_hidden || h.key == nullptr || h.key != body_key(h.body) || !body_pickable(h.body)) + if (m_body_edges_hidden || !is_current_shape(h.body, h.shape) || !body_pickable(h.body)) return; // hidden, or the body was rebuilt and these face ids are stale const Camera& cam = wxGetApp().plater()->get_camera(); @@ -4007,6 +4124,7 @@ bool DesignSketchTool::handle_solid_click(GLCanvas3D& canvas, const wxMouseEvent m_sel_edges_more_pts.clear(); m_sel_body = p.body; + m_sel_shape = (*m_solid_bodies)[p.body].shape; // resolve_solid_pick checked p.body m_sel_face = p.face; m_sel_edge = p.edge; m_sel_edge_pts = std::move(p.edge_pts); @@ -5284,7 +5402,148 @@ void DesignSketchTool::drag_rib_handle(GLCanvas3D& canvas, const wxMouseEvent& e if (on_rib_thickness_changed) on_rib_thickness_changed(m_rb_thickness); } -// ---- Reference/base planes (Onshape-style default planes) ----------------------------- +// ---- Reference/base planes ------------------------------------------------------------- +namespace { +// `text` in the stroke font, `height` tall and centred on the origin; `size` is its extent. With the +// font, further down. +std::vector> text_strokes(const std::string& text, double height, Vec2d& size); + +// One level of a BSP tree whose splitters are the planes themselves, in order: the painter's +// algorithm made exact for polygons that cross. Pieces of plane k (and of any plane lying in it) +// are in the splitter; every other piece is wholly on one side or is cut in two. Far side, then the +// splitter's own pieces, then the near side is back to front. A piece is only cut when it has +// corners strictly on both sides, so neither half can be degenerate. +void paint_back_to_front(std::vector&& in, size_t k, const std::vector& planes, double eps, + const Vec3d& eye, const Vec3d& forward, bool perspective, std::vector& out) +{ + if (in.empty()) + return; + if (k == planes.size()) { // not reached: every piece is in the splitter at its own plane's level + std::move(in.begin(), in.end(), std::back_inserter(out)); + return; + } + // The square's own normal: SketchPlane::normal is reversed on XZ, and the side tests only need + // one consistent choice. + const Vec3d n = planes[k].x_axis.cross(planes[k].y_axis).normalized(); + const double d = n.dot(planes[k].origin); + std::vector front, back, on; + for (PlanePiece& piece : in) { + if (piece.plane == int(k)) { + on.push_back(std::move(piece)); + continue; + } + std::vector s; + int sides = 0; + for (const Vec3d& c : piece.corners) { + s.push_back(n.dot(c) - d); + sides |= s.back() > eps ? 1 : s.back() < -eps ? 2 : 0; + } + if (sides == 0) + on.push_back(std::move(piece)); + else if (sides == 1) + front.push_back(std::move(piece)); + else if (sides == 2) + back.push_back(std::move(piece)); + else { + PlanePiece f{ piece.plane, {} }, b{ piece.plane, {} }; + const size_t m = piece.corners.size(); + for (size_t i = 0; i < m; ++i) { + const size_t j = (i + 1) % m; + const Vec3d& a = piece.corners[i]; + if (s[i] >= -eps) f.corners.push_back(a); + if (s[i] <= eps) b.corners.push_back(a); + if ((s[i] > eps && s[j] < -eps) || (s[i] < -eps && s[j] > eps)) { + const Vec3d x = a + (piece.corners[j] - a) * (s[i] / (s[i] - s[j])); + f.corners.push_back(x); + b.corners.push_back(x); + } + } + front.push_back(std::move(f)); + back.push_back(std::move(b)); + } + } + // An orthographic eye is at infinity behind the view direction. Camera::get_position() is a + // finite point there and can sit on the wrong side of a plane, so only the direction counts. + const bool eye_in_front = perspective ? n.dot(eye) - d > 0. : n.dot(forward) < 0.; + paint_back_to_front(std::move(eye_in_front ? back : front), k + 1, planes, eps, eye, forward, perspective, out); + std::move(on.begin(), on.end(), std::back_inserter(out)); + paint_back_to_front(std::move(eye_in_front ? front : back), k + 1, planes, eps, eye, forward, perspective, out); +} + +// A base square's name: its cap height, and where the text is centred in the square's frame — inset +// from the frame's (+x, +y) corner, which lies by an axis toward its far end or at the outer corner, +// away from the other two names. +double label_height(double half) { return 0.30 * half; } +Vec2d label_centre(double half, const Vec2d& size) { return Vec2d::Constant(0.88 * half) - 0.5 * size; } + +// A datum's name is not in the stroke font: it is an ImGui chip anchored at this point of its square. +Vec2d datum_label_anchor(double half) { return Vec2d(-0.8 * half, 0.84 * half); } + +bool is_base_plane(int base) { return base >= 0 && base < 3; } + +// The octant the base squares sit in. Each name is written facing x_axis x y_axis, which is +Z for +// XY, -Y for XZ and +X for YZ: all three point into it, so a camera there looks into the corner the +// squares form and reads every name, and from the front XY lies below the X axis rather than behind XZ. +Vec3d reference_octant() { return Vec3d(1., -1., 1.); } +} // namespace + +std::vector planes_back_to_front(const std::vector& planes, double half, + const Vec3d& eye, const Vec3d& forward, bool perspective) +{ + std::vector squares; + for (int i = 0; i < int(planes.size()); ++i) { + const SketchPlane& p = planes[i]; + squares.push_back({ i, { p.to_world(Vec2d(-half, -half)), p.to_world(Vec2d(half, -half)), + p.to_world(Vec2d(half, half)), p.to_world(Vec2d(-half, half)) } }); + } + std::vector out; + paint_back_to_front(std::move(squares), 0, planes, 1e-6 * std::max(half, 1.), eye, forward, perspective, out); + return out; +} + +SketchPlane reference_square(const SketchPlane& plane, int base, double half) +{ + SketchPlane square = plane; + if (is_base_plane(base)) { + const Vec3d o = reference_octant(); + square.origin += (reference_square_gap(half) + half) * (plane.x_axis.dot(o) * plane.x_axis + plane.y_axis.dot(o) * plane.y_axis); + } + return square; +} + +std::array reference_label_box(const SketchPlane& square, double half, const std::string& text) +{ + const double th = label_height(half); + Vec2d size; + text_strokes(text, th, size); + const Vec2d c = label_centre(half, size); + const Vec2d r = 0.5 * size + Vec2d::Constant(0.15 * th); // a margin round the strokes, to aim at + return { square.to_world(c + Vec2d(-r.x(), -r.y())), square.to_world(c + Vec2d(r.x(), -r.y())), + square.to_world(c + Vec2d(r.x(), r.y())), square.to_world(c + Vec2d(-r.x(), r.y())) }; +} + +int pick_reference_square(const std::vector& squares, double half, const Vec3d& from, const Vec3d& dir) +{ + int best = -1; + double best_t = std::numeric_limits::max(); + for (int i = 0; i < int(squares.size()); ++i) { + const SketchPlane& s = squares[i]; + const Vec3d n = s.x_axis.cross(s.y_axis); + const double dn = n.dot(dir); + if (std::abs(dn) < 1e-12) + continue; // the ray runs along the square + const double t = n.dot(s.origin - from) / dn; + if (t <= 0. || t >= best_t) + continue; // behind the eye, or no nearer than one already hit + const Vec3d d = from + dir * t - s.origin; + if (std::abs(d.dot(s.x_axis)) <= half && std::abs(d.dot(s.y_axis)) <= half) { + best = i; + best_t = t; + } + } + return best; +} + void DesignSketchTool::set_base_pick(std::vector planes, std::vector bases, std::vector labels) { @@ -5304,117 +5563,237 @@ void DesignSketchTool::clear_base_pick() m_dbp_hover = -1; } -// Reference planes sit INSIDE the bed. They used to be 0.6 * the bed's larger side, i.e. a square -// 1.2x the plate, and three of them are drawn with depth testing off — so they painted over the -// plate grid from edge to edge and the bed simply was not readable any more. "The planes hide the -// bed", reported exactly that way. Small enough to leave the grid legible around them is also the -// Onshape look this was reaching for: a modest square at the origin, not a tablecloth. +// Sized from the bed, so the squares keep their size against the plate on screen: each is 0.16 of +// the bed's larger side, about the share of the view Fusion's origin planes take at the default zoom. +// Larger squares were reported as hiding the bed. double DesignSketchTool::dbp_half_extent() const { - double half = 75.0; + double half = 20.0; if (auto* pl = wxGetApp().plater()) { const BoundingBoxf bb = pl->build_volume().bounding_volume2d(); const double w = bb.max.x() - bb.min.x(), d = bb.max.y() - bb.min.y(); - if (w > 1.0 && d > 1.0) half = 0.3 * std::max(w, d); + if (w > 1.0 && d > 1.0) half = 0.08 * std::max(w, d); } return half; } -// Draw the reference planes as large translucent labelled squares; the hovered one brightens. +std::vector DesignSketchTool::dbp_squares(double half) const +{ + std::vector squares; + for (size_t i = 0; i < m_dbp_planes.size(); ++i) + squares.push_back(reference_square(m_dbp_planes[i], i < m_dbp_base.size() ? m_dbp_base[i] : -1, half)); + return squares; +} + +// Dash-dot half-axes from the origin into the squares' octant, out past them along the gaps between +// them, and a disc on the origin. Both face the camera at a constant width on screen. +void DesignSketchTool::render_reference_axes(const Vec3d& origin, double half) +{ + using EPT = GLModel::Geometry::EPrimitiveType; + using EVL = GLModel::Geometry::EVertexLayout; + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d vd = cam.get_dir_forward(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); // world units per screen pixel + const double len = 1.2 * (reference_square_gap(half) + 2.0 * half); + // A dash, then a dot, every kPeriod of the axis. + constexpr double kDash = 0.07, kDotFrom = 0.10, kDotTo = 0.115, kPeriod = 0.145; + const ColorRGBA colours[3] = { ColorRGBA(0.92f, 0.28f, 0.28f, 1.0f), ColorRGBA(0.30f, 0.80f, 0.34f, 1.0f), + ColorRGBA(0.32f, 0.55f, 0.95f, 1.0f) }; + for (int k = 0; k < 3; ++k) { + const Vec3d axis = Vec3d::Unit(k) * (len * reference_octant()[k]); + std::vector> strokes; + for (double t = 0.; t < 1.; t += kPeriod) { + strokes.push_back({ origin + axis * t, origin + axis * std::min(t + kDash, 1.) }); + if (t + kDotFrom < 1.) + strokes.push_back({ origin + axis * (t + kDotFrom), origin + axis * std::min(t + kDotTo, 1.) }); + } + GLModel::Geometry g; + append_ribbons(g, -1, strokes, vd, Vec3d::Zero(), 1.5 * upp); // body -1: already world coordinates + if (g.is_empty()) + continue; // seen end-on + GLModel m; + m.init_from(std::move(g)); + m.set_color(colours[k]); + m.render(); + } + + const Vec3d right = cam.get_dir_right(), up = cam.get_dir_up(); + auto disc = [&](double radius_px, const ColorRGBA& colour) { + constexpr int kSides = 24; + GLModel::Geometry g; + g.format = { EPT::Triangles, EVL::P3 }; + g.add_vertex((Vec3f) origin.cast()); + for (int i = 0; i < kSides; ++i) { + const double a = 2. * M_PI * i / kSides; + g.add_vertex((Vec3f) (origin + (right * std::cos(a) + up * std::sin(a)) * (radius_px * upp)).cast()); + } + for (int i = 0; i < kSides; ++i) + g.add_triangle(0, 1 + i, 1 + (i + 1) % kSides); + GLModel m; + m.init_from(std::move(g)); + m.set_color(colour); + m.render(); + }; + disc(6.0, ColorRGBA(0.30f, 0.30f, 0.32f, 1.0f)); // a dark ring round + disc(4.5, ColorRGBA(0.92f, 0.92f, 0.92f, 1.0f)); // a light centre +} + +// The reference planes, as in Fusion: translucent squares with the hovered one grey and the selected +// one solid, each base plane's name written in it, and the half-axes and origin under them. Depth +// testing is off (they overlay the bed and any bodies), so draw order is the blend order: back to +// front, piece by piece. void DesignSketchTool::render_base_pick() { if (!m_dbp_active || m_dbp_planes.empty()) return; using EPT = GLModel::Geometry::EPrimitiveType; using EVL = GLModel::Geometry::EVertexLayout; - const double H = dbp_half_extent(); - // Onshape-ish per-plane tints: XY blue, XZ green, YZ red (keyed by base index 0/1/2; datums grey). - auto tint = [](int base, bool hot) -> ColorRGBA { - float a = hot ? 0.10f : 0.047f; // base planes kept faint (reduced ~2/3 from 0.30/0.14) - if (base == 0) return ColorRGBA(0.30f, 0.55f, 0.95f, a); - if (base == 1) return ColorRGBA(0.35f, 0.80f, 0.45f, a); - if (base == 2) return ColorRGBA(0.92f, 0.42f, 0.42f, a); - return ColorRGBA(0.70f, 0.72f, 0.78f, a); + const double H = dbp_half_extent(); + const std::vector squares = dbp_squares(H); + const int selected = selected_base ? selected_base() : -1; + auto base_of = [this](size_t i) { return i < m_dbp_base.size() ? m_dbp_base[i] : -1; }; + enum class Look { Idle, Hover, Selected }; + auto look = [&](size_t i) { + return base_of(i) >= 0 && base_of(i) == selected ? Look::Selected : int(i) == m_dbp_hover ? Look::Hover : Look::Idle; }; + // Each base plane in the colour of the axis it is normal to: XY blue, XZ green, YZ red. A datum the + // Plane card offers as a base keeps a slate of its own, clear of the grey hover. + auto hue = [&](size_t i) { + switch (base_of(i)) { + case 0: return ColorRGBA(0.30f, 0.55f, 0.95f, 1.0f); + case 1: return ColorRGBA(0.35f, 0.80f, 0.45f, 1.0f); + case 2: return ColorRGBA(0.92f, 0.42f, 0.42f, 1.0f); + default: return ColorRGBA(0.55f, 0.60f, 0.72f, 1.0f); + } + }; + // Where squares overlap on screen, two layers of alpha a blended in either order differ by only + // a^2 of their colour difference, so much fainter fills would hide which one is in front however + // well the pieces are sorted. The selected plane goes near solid in its own colour: a fixed + // selection colour would match one of the three. + auto fill = [&](size_t i) { + ColorRGBA c = look(i) == Look::Hover ? ColorRGBA(0.80f, 0.80f, 0.80f, 1.0f) : hue(i); + c.a(look(i) == Look::Selected ? 0.85f : look(i) == Look::Hover ? 0.45f : 0.50f); + return c; + }; + auto ink = [&](size_t i) { + switch (look(i)) { + case Look::Selected: return ColorRGBA(0.20f, 0.25f, 0.35f, 1.0f); + case Look::Hover: return ColorRGBA(0.62f, 0.62f, 0.62f, 1.0f); + default: return hue(i); + } + }; + const Camera& cam = wxGetApp().plater()->get_camera(); glsafe(::glDisable(GL_DEPTH_TEST)); glsafe(::glDisable(GL_CULL_FACE)); - glsafe(::glEnable(GL_BLEND)); // alpha is ignored without this - glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); - const SketchPlane saved_plane = m_plane; - for (size_t i = 0; i < m_dbp_planes.size(); ++i) { - const SketchPlane& p = m_dbp_planes[i]; - const Vec3d q0 = p.to_world(Vec2d(-H, -H)), q1 = p.to_world(Vec2d(H, -H)), - q2 = p.to_world(Vec2d(H, H)), q3 = p.to_world(Vec2d(-H, H)); - GLModel::Geometry quad; quad.format = { EPT::Triangles, EVL::P3 }; - quad.add_vertex((Vec3f)q0.cast()); quad.add_vertex((Vec3f)q1.cast()); - quad.add_vertex((Vec3f)q2.cast()); quad.add_vertex((Vec3f)q3.cast()); - quad.add_triangle(0, 1, 2); quad.add_triangle(0, 2, 3); - GLModel m; m.init_from(std::move(quad)); - const bool hot = (int(i) == m_dbp_hover); - const int base = (i < m_dbp_base.size()) ? m_dbp_base[i] : -1; - m.set_color(tint(base, hot)); + glsafe(::glEnable(GL_BLEND)); // alpha is ignored without this; destination alpha stays 1 + glsafe(::glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)); + + for (size_t i = 0; i < m_dbp_planes.size(); ++i) + if (is_base_plane(base_of(i))) { // the base planes all pass through the modeling origin + render_reference_axes(m_dbp_planes[i].origin, H); + break; + } + + const std::vector pieces = planes_back_to_front(squares, H, cam.get_position(), cam.get_dir_forward(), + cam.get_type() == Camera::EType::Perspective); + const SketchPlane saved_plane = m_plane; + for (size_t k = 0; k < pieces.size(); ++k) { + const PlanePiece& piece = pieces[k]; + const size_t i = size_t(piece.plane); + GLModel::Geometry g; + g.format = { EPT::Triangles, EVL::P3 }; + for (const Vec3d& q : piece.corners) g.add_vertex((Vec3f)q.cast()); + for (unsigned int c = 1; c + 1 < piece.corners.size(); ++c) g.add_triangle(0, c, c + 1); // convex: a fan + GLModel m; + m.init_from(std::move(g)); + m.set_color(fill(i)); m.render(); - // Label near the top-left corner, drawn in the plane (draw_text lifts through m_plane). - if (i < m_dbp_labels.size() && !m_dbp_labels[i].empty()) { - m_plane = p; - const double th = H * 0.10; - const ColorRGBA lc = tint(base, true); ColorRGBA lcs(lc.r(), lc.g(), lc.b(), 1.0f); - draw_text(m_line_model, m_dbp_labels[i], Vec2d(-H + th * 2.0, H - th * 1.6), th, lcs); + // A base plane's name goes down with its last piece, so a square in front tints it as it + // tints the fill. + if (!is_base_plane(base_of(i)) || i >= m_dbp_labels.size() || m_dbp_labels[i].empty() + || std::any_of(pieces.begin() + k + 1, pieces.end(), [&](const PlanePiece& p) { return p.plane == piece.plane; })) + continue; + const double th = label_height(H); + Vec2d size; + std::vector> strokes = text_strokes(m_dbp_labels[i], th, size); + const Vec2d c = label_centre(H, size); + for (auto& [a, b] : strokes) { + a += c; + b += c; } + m_plane = squares[i]; // draw_strokes lifts plane coordinates through m_plane + draw_strokes(m_line_model, strokes, 0.07 * th, ink(i)); } - m_plane = saved_plane; // draw_text renders each label immediately (draw_strokes self-renders) + for (size_t i = 0; i < m_dbp_planes.size() && i < m_dbp_labels.size(); ++i) + if (!is_base_plane(base_of(i)) && !m_dbp_labels[i].empty()) { + m_plane = squares[i]; // draw_text anchors through m_plane too + draw_text(m_line_model, m_dbp_labels[i], datum_label_anchor(H), H * 0.10, ink(i)); + } + m_plane = saved_plane; glsafe(::glDisable(GL_BLEND)); } -// Ray-pick the reference planes: intersect the mouse ray with each plane, keep hits inside the -// square, return the index of the nearest by |t|. -1 on miss. +// The reference plane under the cursor, or -1. A plane's name wins over the squares: it is the part +// of a plane a user aims at deliberately, and from the back the XZ square stands between the eye and +// the XY name, so a ray pick alone reports "XZ plane selected" for a click on the word XY. int DesignSketchTool::hit_test_base_pick(GLCanvas3D& canvas, const wxMouseEvent& evt) const { if (!m_dbp_active) return -1; - const double H = dbp_half_extent(); - - // THE LABEL WINS, and it has to. Each plane's name is a screen-space chip centred on its - // own in-plane anchor, and it is the one part of a base plane a user aims at deliberately — - // the quads are near-transparent and overlap everywhere. Ray-casting the quads alone made - // the labels pure decoration: on a fresh document at 1920x1060, clicking "XY" reported - // "XZ plane selected", because the XZ quad happens to sit in front at that pixel. Nothing - // about the click was ambiguous to the user; they clicked the word XY. - // Anchor and text height must track render_base_pick's, which is where they are drawn. - const Camera& cam = wxGetApp().plater()->get_camera(); - const double th = H * 0.10; - const Vec2d anchor(-H + th * 2.0, H - th * 1.6); - int lbest = -1; double lbest_d = 1e30; - for (size_t i = 0; i < m_dbp_planes.size(); ++i) { - if (i >= m_dbp_labels.size() || m_dbp_labels[i].empty()) continue; - const wxPoint sp = world_to_screen_px(cam, m_dbp_planes[i].to_world(anchor)); - if (sp.x < 0 && sp.y < 0) continue; // behind the camera - const double dx = std::abs(double(evt.GetX() - sp.x)); - const double dy = std::abs(double(evt.GetY() - sp.y)); - // Chip half-extents in px, scaled like the label itself. Generous rather than tight: - // missing the text and silently selecting a different plane is the failure being fixed. - const double hw = (9.0 + 5.0 * double(m_dbp_labels[i].size())) * double(m_render_scale); - const double hh = 11.0 * double(m_render_scale); - if (dx > hw || dy > hh) continue; - const double d = dx * dx + dy * dy; // nearest label if chips overlap + const double H = dbp_half_extent(); + const std::vector squares = dbp_squares(H); + const Camera& cam = wxGetApp().plater()->get_camera(); + // As world_to_screen_px, but refusing a point behind the eye, which would come back mirrored. + const Eigen::Matrix4d to_clip = cam.get_projection_matrix().matrix() * cam.get_view_matrix().matrix(); + const std::array& vp = cam.get_viewport(); + auto to_screen = [&](const Vec3d& x, Vec2d& out) { + const Eigen::Vector4d clip = to_clip * x.homogeneous(); + if (clip.w() <= 1e-9) + return false; + const Vec3d ndc = clip.head<3>() / clip.w(); + out = Vec2d(vp[0] + (ndc.x() * 0.5 + 0.5) * vp[2], vp[1] + (1.0 - (ndc.y() * 0.5 + 0.5)) * vp[3]); + return true; + }; + const Vec2d mouse(evt.GetX(), evt.GetY()); + int lbest = -1; + double lbest_d = std::numeric_limits::max(); + for (size_t i = 0; i < squares.size() && i < m_dbp_labels.size(); ++i) { + if (m_dbp_labels[i].empty()) continue; + Vec2d centre; + if (is_base_plane(i < m_dbp_base.size() ? m_dbp_base[i] : -1)) { + // The name lies in its square, so its box is hit as projected, turning with the plane. + const std::array box = reference_label_box(squares[i], H, m_dbp_labels[i]); + std::array q; + bool seen = true; + for (size_t c = 0; c < 4 && seen; ++c) seen = to_screen(box[c], q[c]); + if (!seen) continue; + double area = 0.; + bool left = true, right = true; // the cursor on one side of every edge: inside + for (size_t c = 0; c < 4; ++c) { + const Vec2d& a = q[c]; + const Vec2d& b = q[(c + 1) % 4]; + const double s = (b.x() - a.x()) * (mouse.y() - a.y()) - (b.y() - a.y()) * (mouse.x() - a.x()); + left = left && s >= 0.; + right = right && s <= 0.; + area += a.x() * b.y() - b.x() * a.y(); + } + if (std::abs(area) < 8. || !(left || right)) + continue; // edge-on, or outside + centre = 0.25 * (q[0] + q[1] + q[2] + q[3]); + } else { + // A datum's name is a screen chip. Generous rather than tight: missing the text and + // silently selecting a different plane is the failure this guards against. + if (!to_screen(squares[i].to_world(datum_label_anchor(H)), centre)) continue; + const double hw = (9.0 + 5.0 * double(m_dbp_labels[i].size())) * double(m_render_scale); + const double hh = 11.0 * double(m_render_scale); + if (std::abs(mouse.x() - centre.x()) > hw || std::abs(mouse.y() - centre.y()) > hh) continue; + } + const double d = (mouse - centre).squaredNorm(); // the nearest name if several hold the cursor if (d < lbest_d) { lbest_d = d; lbest = int(i); } } if (lbest >= 0) return lbest; const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); - const Vec3d ro = r.a, rd = r.b - r.a; - int best = -1; double best_t = 1e30; - for (size_t i = 0; i < m_dbp_planes.size(); ++i) { - const SketchPlane& p = m_dbp_planes[i]; - const double dn = rd.dot(p.normal); - if (std::abs(dn) < 1e-9) continue; // ray parallel to plane - const double t = (p.origin - ro).dot(p.normal) / dn; - if (t < 0) continue; // behind the camera - const Vec3d hit = ro + rd * t; - const Vec3d d = hit - p.origin; - if (std::abs(d.dot(p.x_axis)) > H || std::abs(d.dot(p.y_axis)) > H) continue; - if (t < best_t) { best_t = t; best = int(i); } - } - return best; + return pick_reference_square(squares, H, r.a, r.b - r.a); } // ---- Move-body gizmo (M5) ------------------------------------------------------------- @@ -5429,6 +5808,10 @@ void DesignSketchTool::set_move_gizmo(int body, const Vec3d& pivot, const Transf m_mv_rot = Eigen::Matrix3d::Identity(); m_mv_drag = -1; m_mv_radius = std::max(body_radius, 0.0); + // The selection is held while the gizmo is up (see on_mouse_impl): no press half-way to a + // pick, and no hover outline promising a click that will not be taken. + m_pick_pending = false; + m_pre = SolidPick{}; } // Gizmo arm length in world mm. Orca's Prepare gizmos size themselves from the selection's @@ -5558,19 +5941,22 @@ bool DesignSketchTool::hit_test_move_arrow(GLCanvas3D& canvas, const wxMouseEven axis = best; return true; } -// Skew-line closest point of the mouse ray to the axis line through the ORIGINAL centroid -// -> signed offset along that axis (no clamp; a body can move either way). -void DesignSketchTool::drag_move_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt, int axis) +// Record how far along the arrow it was grabbed (NaN while the camera looks down the axis; the +// first drag sample that projects stands in), so the body's centre does not snap to the grab. +void DesignSketchTool::grab_move_arrow(int axis, const Linef3& ray) { - const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); - const Vec3d ro = r.a, rd = r.b - r.a; - const Vec3d axes[3] = { Vec3d::UnitX(), Vec3d::UnitY(), Vec3d::UnitZ() }; - const Vec3d e = axes[axis]; - const Vec3d w0 = m_mv_base - ro; - const double a = e.dot(e), b = e.dot(rd), c = rd.dot(rd), dd = e.dot(w0), ee = rd.dot(w0); - const double denom = a * c - b * b; - if (std::abs(denom) < 1e-7) return; // camera ∥ axis: leave offset as-is - m_mv_offset[axis] = (b * ee - c * dd) / denom; + m_mv_drag = axis; + m_mv_grab_along = ray_axis_proj(ray, m_mv_base + m_mv_offset, Vec3d::Unit(axis)); +} + +// Slide the body along the grabbed axis by the cursor's travel (no clamp; it can move either way). +void DesignSketchTool::drag_move_arrow(const Linef3& ray) +{ + if (m_mv_drag < 0 || m_mv_drag > 2) return; + const double proj = ray_axis_proj(ray, m_mv_base + m_mv_offset, Vec3d::Unit(m_mv_drag)); + if (std::isnan(proj)) return; // camera ∥ axis: leave offset as-is + if (std::isnan(m_mv_grab_along)) { m_mv_grab_along = proj; return; } + m_mv_offset[m_mv_drag] += proj - m_mv_grab_along; if (on_body_move_changed) on_body_move_changed(m_mv_body, compose_move_xform()); } @@ -5940,21 +6326,10 @@ int DesignSketchTool::hit_test_hole_handle(GLCanvas3D& canvas, const wxMouseEven return best; } -// Skew-line closest point of the mouse ray to an axis (anchor + t*dir) -> signed distance along -// dir. NaN when the camera is ~parallel to the axis (no meaningful projection). double DesignSketchTool::hole_axis_proj(GLCanvas3D& canvas, const wxMouseEvent& evt, const Vec3d& anchor, const Vec3d& dir) const { - const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); - const Vec3d ro = r.a, rd = r.b - r.a; - const Vec3d e = dir; - const Vec3d w0 = anchor - ro; - const double a = e.dot(e), b = e.dot(rd), c = rd.dot(rd), dd = e.dot(w0), ee = rd.dot(w0); - const double denom = a * c - b * b; - // Relative near-parallel guard: when the camera ray is ~along the axis (e.g. the depth axis in - // top view) denom collapses; a tiny absolute floor lets a huge, unstable projection through. - if (std::abs(denom) < 1e-4 * std::max(a * c, 1e-12)) return std::nan(""); - return (b * ee - c * dd) / denom; + return ray_axis_proj(canvas.mouse_ray(Point(evt.GetX(), evt.GetY())), anchor, dir); } void DesignSketchTool::start_hole_drag(GLCanvas3D& canvas, const wxMouseEvent& evt, int which) @@ -7361,9 +7736,9 @@ void DesignSketchTool::draw_strokes(GLModel& model, const std::vector>& out, double& ad break; } } + +std::vector> text_strokes(const std::string& text, double height, Vec2d& size) +{ + std::vector> out; + double pen = 0.; + for (char c : text) { + std::vector> glyph; + double advance = 0.; + glyph_strokes(c, glyph, advance); + for (const auto& [a, b] : glyph) + out.emplace_back((a + Vec2d(pen, 0.)) * height, (b + Vec2d(pen, 0.)) * height); + pen += advance; + } + BoundingBoxf box; + for (const auto& [a, b] : out) { + box.merge(a); + box.merge(b); + } + if (!box.defined) { + size = Vec2d::Zero(); + return out; + } + const Vec2d mid = box.center(); + for (auto& [a, b] : out) { + a -= mid; + b -= mid; + } + size = box.size(); + return out; +} } // namespace void DesignSketchTool::draw_dim_label(const std::string& txt, const Vec2d& plane_center) @@ -7533,8 +7938,9 @@ void DesignSketchTool::draw_text(GLModel& /*model*/, const std::string& s, const double /*height*/, const ColorRGBA& /*color*/) { // ponytail: all sketch labels now render as Measure-gizmo-style ImGui labels for visual - // parity with the Prepare/Preview tabs; the old vector-font path (glyph_strokes/draw_strokes - // for text) is retired. Leader lines/arrows still draw via draw_strokes at the call sites. + // parity with the Prepare/Preview tabs; the vector font (glyph_strokes/draw_strokes) is kept + // only for text lying in a plane, the reference planes' names. Leader lines/arrows still draw + // via draw_strokes at the call sites. // // The one label we do NOT draw is the one under an OPEN value field: the field is anchored // over it and carries the same number plus its title, so leaving the label in place shows @@ -9097,7 +9503,10 @@ const ColorRGBA* DesignSketchTool::sketch_hl_color(int feature) const // forgotten by the next one. Cheap: three ints compared per frame. void DesignSketchTool::emit_step_hint() { - if (!on_step_changed) return; + // No session, no step. render() also runs while only the reference planes are up, and m_mode + // then holds the last session's tool (Polyline before the first), whose prompt used to replace + // the panel's own line — "click a reference plane" while Sketch waits for one. + if (!on_step_changed || !m_active) return; int step = 0, picks = 0; if (is_edit_op_mode()) { picks = (m_mode == Mode::Mirror) ? int(m_mirror_targets.size()) @@ -9271,7 +9680,7 @@ void DesignSketchTool::render(GLCanvas3D& canvas) render_datum_planes(); render_mate_connectors(); render_solid_highlight(); - if (m_dbp_active) render_base_pick(); + if (draws_reference_axes()) render_base_pick(); // the canvas drops the bed's triad on the same test if (m_dz_active) render_datum_gizmo(); if (m_hx_active) render_helix_gizmo(); if (m_rb_active) render_rib_gizmo(); @@ -9918,6 +10327,21 @@ static double ray_segment_dist3(const Vec3d& ro, const Vec3d& rd, const Vec3d& a return (pr - ps).norm(); } +// Skew-line closest point of the mouse ray to an axis (anchor + t*dir) -> signed distance along +// dir. NaN when the camera is ~parallel to the axis (no meaningful projection). +static double ray_axis_proj(const Linef3& ray, const Vec3d& anchor, const Vec3d& dir) +{ + const Vec3d ro = ray.a, rd = ray.vector(); + const Vec3d e = dir; + const Vec3d w0 = anchor - ro; + const double a = e.dot(e), b = e.dot(rd), c = rd.dot(rd), dd = e.dot(w0), ee = rd.dot(w0); + const double denom = a * c - b * b; + // Relative near-parallel guard: when the camera ray is ~along the axis (e.g. the depth axis in + // top view) denom collapses; a tiny absolute floor lets a huge, unstable projection through. + if (std::abs(denom) < 1e-4 * std::max(a * c, 1e-12)) return std::nan(""); + return (b * ee - c * dd) / denom; +} + // Screen-plane distance from p to a sketch entity, for click picking in Constrain // mode. Circles/arcs measure distance to the ring; points to their position. static double entity_pick_dist(const Vec2d& p, const SketchEntity& e) @@ -10316,14 +10740,14 @@ std::vector DesignSketchTool::connected_loop(int seed) const // the offer was excluded in sketch mode wholesale so a right-click could end a polyline chain, // abandon an anchor or exit a tool. That made every sketch row in the atlas unreachable. // The honest test is not "which mode are we in" but "did the tool actually USE this right-click", -// and only the tool knows. Wrapping on_mouse records that once, for every terminator, instead of -// threading a flag through the twenty-odd sites that consume a RightDown. +// and only the tool knows: take_right_click returns it for every terminator, from the +// twenty-odd sites that consume a RightDown. // Right-click abandons the anchor a draw tool has down. With NOTHING down there is nothing to // abandon — and consuming the click anyway made the offer unreachable from every armed draw tool: -// on_mouse records the consumption in m_right_consumed and DesignCanvas's RIGHT_UP handler -// suppresses the menu whenever it is set, so right-click became a no-op that also hid the one door -// to half the vocabulary (47 of 86 verbs have no shortcut). Measured on the rig: with Line armed, -// two right-clicks in a row produced no menu and no tool change; only Escape freed it. +// DesignCanvas's RIGHT_UP handler suppresses the menu whenever the tool used the click, so +// right-click became a no-op that also hid the one door to half the vocabulary (47 of 86 verbs +// have no shortcut). Measured on the rig: with Line armed, two right-clicks in a row produced no +// menu and no tool change; only Escape freed it. // Same rule as xmh6, which said it for the selection: clearing nothing is not a gesture // terminator. ghcz. bool DesignSketchTool::right_abandon() @@ -10335,12 +10759,24 @@ bool DesignSketchTool::right_abandon() return true; } +// The camera follows Preferences > Control here as in Prepare, so no tool may take a gesture the +// camera owns. A right press may start whatever drag action the right button is given, and +// whether it did is known only at the release: ending a chain on the press made every pan or +// orbit started there end the chain too. The press goes to the camera and is kept; +// DesignCanvas's RIGHT_UP handler replays it through take_right_click when it was a click. bool DesignSketchTool::on_mouse(wxMouseEvent& evt, GLCanvas3D& canvas) { - const bool consumed = on_mouse_impl(evt, canvas); - if (evt.RightDown()) - m_right_consumed = consumed; - return consumed; + if (evt.RightDown()) { + m_right_press = evt; + return false; + } + return on_mouse_impl(evt, canvas); +} + +bool DesignSketchTool::take_right_click(GLCanvas3D& canvas) +{ + auto press = std::exchange(m_right_press, {}); + return press && on_mouse_impl(*press, canvas); } bool DesignSketchTool::on_mouse_impl(wxMouseEvent& evt, GLCanvas3D& canvas) @@ -10405,16 +10841,12 @@ bool DesignSketchTool::on_mouse_impl(wxMouseEvent& evt, GLCanvas3D& canvas) canvas.zoom_to_volumes(); return true; } - // Visual Extrude gizmo (C5b): while the Extrude card is open the depth arrow is - // grabbable — drag changes the depth live; a click (no drag) on the arrow opens the - // inline depth editor. Intercept before the early no-LeftDown bailout so Dragging/ - // LeftUp reach us; a LeftDown that misses the arrow falls through to solid/loop pick. // Move-body gizmo (M5): three world-axis arrows on the selected body. Drag an arrow to // translate live; a stationary click on it opens the inline offset editor; a right click - // exits move mode. A LeftDown that misses the arrows falls through to solid re-pick. + // opens the offer. Anything else is the camera's: see the end of this block. if (m_mv_active) { if (m_mv_drag >= 0 && evt.Dragging() && evt.LeftIsDown()) { - if (m_mv_drag < 3) drag_move_arrow(canvas, evt, m_mv_drag); + if (m_mv_drag < 3) drag_move_arrow(canvas.mouse_ray(Point(evt.GetX(), evt.GetY()))); else drag_move_arc(canvas, evt, m_mv_drag - 3); return true; } @@ -10432,7 +10864,8 @@ bool DesignSketchTool::on_mouse_impl(wxMouseEvent& evt, GLCanvas3D& canvas) if (evt.LeftDown()) { int axis = -1; if (hit_test_move_arrow(canvas, evt, axis)) { // translate arrows win over rings - m_mv_drag = axis; m_mv_press_x = evt.GetX(); m_mv_press_y = evt.GetY(); + grab_move_arrow(axis, canvas.mouse_ray(Point(evt.GetX(), evt.GetY()))); + m_mv_press_x = evt.GetX(); m_mv_press_y = evt.GetY(); return true; } if (hit_test_move_arc(canvas, evt, axis)) { @@ -10441,7 +10874,11 @@ bool DesignSketchTool::on_mouse_impl(wxMouseEvent& evt, GLCanvas3D& canvas) double a0; if (arc_mouse_angle(canvas, evt, axis, a0)) m_mv_arc_a0 = a0; return true; } + // Off the gizmo a press only steers the camera: no pick, so the selection the + // Move acts on is held until it ends. + return false; } + if (evt.Moving()) return false; // no hover outline: see set_move_gizmo } // Datum-plane resize gizmo (C3): while the Plane card is open the 4 edge handles are // grabbable — drag changes the u/v extent live. A LeftDown that misses falls through. @@ -10500,6 +10937,10 @@ bool DesignSketchTool::on_mouse_impl(wxMouseEvent& evt, GLCanvas3D& canvas) if (h >= 0) return true; // caller render()s on true -> hover repaints on software GL } } + // Visual Extrude gizmo (C5b): while the Extrude card is open the depth arrow is + // grabbable — drag changes the depth live; a click (no drag) on the arrow opens the + // inline depth editor. Intercept before the early no-LeftDown bailout so Dragging/ + // LeftUp reach us; a LeftDown that misses the arrow falls through to solid/loop pick. if (m_ex_active) { if (m_ex_drag >= 0 && evt.Dragging() && evt.LeftIsDown()) { drag_extrude_arrow(canvas, evt, m_ex_drag); @@ -11289,9 +11730,9 @@ bool DesignSketchTool::on_mouse_impl(wxMouseEvent& evt, GLCanvas3D& canvas) return true; } if (evt.RightDown()) { - // Hand the click back (return false) so the offer opens: the m_right_consumed flag - // this return value feeds means "the tool USED this right-click", and a plain - // right-click in Select mode is not a gesture terminator. + // Hand the click back (return false) so the offer opens: take_right_click returns + // this value as "the tool USED this right-click", and a plain right-click in Select + // mode is not a gesture terminator. // // But do NOT drop the selection on the way out. The offer menu describes WHAT IS // SELECTED, so clearing first guaranteed it could only ever describe nothing: select diff --git a/src/slic3r/GUI/CAD/DesignSketchTool.hpp b/src/slic3r/GUI/CAD/DesignSketchTool.hpp index 7e1c4a629d..70d76cb9eb 100644 --- a/src/slic3r/GUI/CAD/DesignSketchTool.hpp +++ b/src/slic3r/GUI/CAD/DesignSketchTool.hpp @@ -2,26 +2,32 @@ #define slic3r_DesignSketchTool_hpp_ #include "libslic3r/Point.hpp" +#include "libslic3r/BoundingBox.hpp" +#include "libslic3r/Line.hpp" #include "libslic3r/CAD/SketchEngine.hpp" #include "libslic3r/CAD/CadDocument.hpp" // CadBody for per-body solid picking +#include #include "libslic3r/CAD/SketchInference.hpp" #include "slic3r/GUI/GLModel.hpp" #include "slic3r/GUI/GLSelectionRectangle.hpp" // left-drag rubber band over the committed bodies #include +#include #include +#include #include +#include #include "libslic3r/Color.hpp" #include #include #include #include -class wxMouseEvent; class wxPoint; namespace Slic3r { class TriangleMesh; // fwd (libslic3r) — solid-pick mesh, non-owning pointer +class GLVolumeCollection; namespace GUI { @@ -50,6 +56,36 @@ inline ColorRGBA design_idle_face_color() { return ColorRGBA(0.72f, 0.76f, 0.80f, 0.14f); } + +// A convex piece of the square drawn on planes[plane]. +struct PlanePiece +{ + int plane; + std::vector corners; +}; +// The squares of half-extent `half` centred on `planes`' origins, cut where they cross one another +// and ordered back to front for an eye at `eye` (perspective) or looking along `forward` +// (orthographic). Translucent planes that cross cannot be drawn in any per-plane order: each is +// partly in front of and partly behind the others. Drawn piece by piece in this order, each one +// tints only what is behind it. +std::vector planes_back_to_front(const std::vector& planes, double half, + const Vec3d& eye, const Vec3d& forward, bool perspective); + +// The square a reference plane is drawn as, given as the frame at its centre, half-extent `half`. +// The base planes XY, XZ and YZ (`base` 0, 1, 2) sit in the octant (+X, -Y, +Z), the one all three +// names face, reference_square_gap(half) clear of the two axes bounding each, so the three never cross +// and the axes run between them. Any other base (a datum) stays centred on its own origin. The frame is the same +// plane moved within itself, so planes_back_to_front and pick_reference_square take it unchanged. +SketchPlane reference_square(const SketchPlane& plane, int base, double half); +inline double reference_square_gap(double half) { return 0.25 * half; } +// The corners of the box around a base square's label, in the square: inset from its (+x, +y) corner and +// written along the square's x axis with its y axis up, so it turns with the plane. The box the hit +// test takes for the label: round the strokes render_base_pick draws, from the same layout, with a +// margin to aim at. +std::array reference_label_box(const SketchPlane& square, double half, const std::string& text); +// The nearest of `squares` (half-extent `half`) the ray from `from` along `dir` crosses, or -1. +int pick_reference_square(const std::vector& squares, double half, const Vec3d& from, const Vec3d& dir); + class DesignSketchTool { public: enum class Mode { Select, Dimension, Polyline, Line, CornerRect, CenterRect, ObliqueRect, @@ -137,7 +173,6 @@ public: // Returns false when no session is live, so the caller can fall back to a new feature. bool add_imported_regions(const std::vector>>& regions); void set_tool(Mode mode); // switch tool, keep accumulated entities - void set_plane(const SketchPlane& plane) { m_plane = plane; } // re-plane a live sketch (a reference plane was clicked mid-session); entities are 2D, re-lifted through the new plane void set_construction(bool c) { m_construction = c; } void set_polygon_sides(int n) { m_polygon_sides = (n < 3 ? 3 : n); } void set_polygon_circumscribed(bool c) { m_polygon_circumscribed = c; } @@ -149,10 +184,10 @@ public: // Right-click on a draw tool: true when an in-progress anchor was abandoned, false when // there was nothing to abandon — and false is what lets the offer menu open. ghcz. bool right_abandon(); - // True if the LAST right-press was consumed as a gesture terminator (end a polyline chain, - // abandon an anchor, exit a tool). Read-and-clear: the canvas asks on the matching release to - // decide whether that right-click was the user's, in which case it opens the offer. - bool take_right_consumed() { const bool b = m_right_consumed; m_right_consumed = false; return b; } + // Replays and clears the right press on_mouse kept for the camera: true if the tool used it as + // a gesture terminator (end a polyline chain, abandon an anchor), so no offer opens. + bool take_right_click(GLCanvas3D& canvas); + void drop_right_click() { m_right_press.reset(); } void render(GLCanvas3D& canvas); // The in-canvas value field, drawn by render() before any early return. Owned by // DesignCanvas; null until it sets it. Not a window — see SketchInlineEditor.hpp. @@ -207,6 +242,9 @@ public: // their edges do not float over the preview. void set_body_edges_hidden(bool h) { m_body_edges_hidden = h; } void clear_solid_selection(); + // Resample the edges of each body whose shape changed and drop those of bodies that are gone. + // Also expires a pick or hover on a rebuilt body. The canvas calls it whenever it gets the bodies. + void refresh_body_edges(); bool has_solid_selection() const { return m_solid_sel != SolidSel::None; } // Every picked edge when the selection is an edge set (Shift/Ctrl+click adds and removes // edges of the same body): the earlier picks first, the last-clicked edge at the end. @@ -221,6 +259,20 @@ public: void set_highlight_faces(const std::vector>& faces); // Every face drawn as selected, sorted: the committed pick's and the still-valid ones above. std::vector> selected_faces() const; + // What the canvas's Fit button frames: the selection — faces (the Feature tree's included), a + // body, edges, a vertex, a sketch region, the live sketch's picked entities — else everything + // on show: the visible bodies, the preview of the feature being edited and every sketch. + // Undefined when the tab shows none of it. `volumes` are the canvas's: bodies and preview. + BoundingBoxf3 fit_box(const GLVolumeCollection& volumes) const; + // The selection fit_box frames, with no fallback: undefined when nothing is selected. + BoundingBoxf3 selection_box() const; + // World box of (body, face id) faces on the pick mesh, hidden bodies included. + BoundingBoxf3 faces_box(std::vector> faces) const; + // World box of sketch entities drawn on `plane`. + static BoundingBoxf3 sketch_box(const std::vector& entities, const SketchPlane& plane); + // Grow a box the camera is to frame to at least a small extent on every axis: a vertex has no + // size, nor has a sketch along its normal. + static void pad_box(BoundingBoxf3& box); // Move-body gizmo (M5): translate a whole body with three world-axis drag arrows // (X red / Y green / Z blue) anchored at the body centroid. Display-only — the host @@ -230,8 +282,10 @@ public: void set_move_gizmo(int body, const Vec3d& pivot, const Transform3d& base_xform, double body_radius = 0.0); void clear_move_gizmo(); - bool moving_body() const { return m_mv_active; } int move_body_index() const { return m_mv_body; } + // Press, then drag, translate arrow `axis` (0..2 = X/Y/Z) with the mouse ray under the cursor. + void grab_move_arrow(int axis, const Linef3& ray); + void drag_move_arrow(const Linef3& ray); std::function on_body_move_changed; // Fired on each cycle change: (level 0=None/1=Whole/2=Face/3=Edge, body index, face id, edge id). std::function on_solid_selection_changed; @@ -316,6 +370,12 @@ public: std::vector labels = {}); void clear_base_pick(); std::function on_datum_base_picked; + // The base drawn as selected, or -1. Asked once a frame rather than set, because what decides it + // (the panel's chosen sketch plane, a picked face, the Plane card's base) changes in many places. + std::function selected_base; + // The reference planes are drawn this frame, with their own half-axes and origin mark: the canvas + // leaves out the bed's axes triad, which would sit on top of them. + bool draws_reference_axes() const { return m_dbp_active && !m_active; } // Visual Fillet/Chamfer gizmo. The Dressup tool is a DesignPanel docked card, so the sketch // tool is NOT active during it; when a solid EDGE is picked the panel passes the body centroid @@ -971,7 +1031,7 @@ private: bool op_ready() const; // required entities picked -> arrow/ghost live // Sample an entity into a 2D polyline for the overlay renderer. - std::vector entity_polyline(const SketchEntity& e, bool& closed) const; + static std::vector entity_polyline(const SketchEntity& e, bool& closed); // Closed regions formed by the current (non-construction) entities: each a CCW- // ordered boundary polygon on the plane. A circle is its own region; line/arc @@ -1225,19 +1285,20 @@ private: Vec3d body_xform_pt(int body, const Vec3d& p) const; // map an OCCT-shape point through the body xform // The bodies' B-rep edges, drawn as dark lines over the solids so faces and features read // apart. One polyline set per body in its own shape coordinates, resampled only for a body - // whose shape changed (keyed by the TShape), since set_solid_pick runs on every recompute. + // whose shape changed (see is_current_shape). std::vector>> m_body_edges; - std::vector m_body_edges_key; + std::vector m_body_edges_shape; // the shape each set was sampled from std::vector m_body_edges_tol; // the chord tolerance they were sampled at bool m_body_edges_hidden{false}; - void refresh_body_edges(); void render_body_edges(); - const void* body_key(int body) const; // the body's TShape, nullptr when there is none + const TopoDS_Shape* body_shape(int body) const; // nullptr when there is no such body or it has no shape + bool is_current_shape(int body, const TopoDS_Shape& sampled) const; // `sampled` is still the body's shape void append_ribbons(GLModel::Geometry& g, int body, const std::vector>& polylines, const Vec3d& vd, const Vec3d& pull, double hw) const; bool body_pickable(int b) const; // false when the body is explicitly hidden SolidSel m_solid_sel{SolidSel::None}; int m_sel_body{-1}; // which body the face/edge selection is on + TopoDS_Shape m_sel_shape; // that body's shape when picked: the ids index into it int m_sel_face{-1}; int m_sel_edge{-1}; std::vector m_sel_edge_pts; @@ -1274,7 +1335,7 @@ private: void hit_display_sketch(const DisplaySketch& d, const Vec2d& p, double tol, int& edge_feat, int& edge_reg, int& edge_ent, double& edge_d, int& face_feat, int& face_reg) const; - bool m_right_consumed{false}; // last RightDown was a gesture terminator, not a menu + std::optional m_right_press; // right press not yet known to be a click bool m_escalate_repick{true}; // re-picking the same sub-element takes the whole body void render_solid_highlight(); // The above's edge and vertex highlight, from explicit arguments, so the committed selection @@ -1282,11 +1343,11 @@ private: void render_solid_sel(SolidSel kind, const std::vector& edge_pts, const Vec3d& vertex_pt, const ColorRGBA& rgb); // A set of selected faces of one body, with their edges sampled once, keyed by the body's - // TShape so a recompute that rebuilt the body retires it. + // shape so a recompute that rebuilt the body retires it. struct FaceHighlight { int body{-1}; std::vector faces; // sorted - const void* key{nullptr}; + TopoDS_Shape shape; std::vector> edges; // in the body's shape coordinates }; FaceHighlight make_face_highlight(int body, std::vector faces) const; @@ -1385,7 +1446,9 @@ private: std::vector m_dbp_base; std::vector m_dbp_labels; int m_dbp_hover{-1}; - double dbp_half_extent() const; // bed-derived: reference planes are larger than the bed + double dbp_half_extent() const; // bed-derived square size + std::vector dbp_squares(double half) const; // reference_square of each entry + void render_reference_axes(const Vec3d& origin, double half); void render_base_pick(); int hit_test_base_pick(GLCanvas3D& canvas, const wxMouseEvent& evt) const; @@ -1403,6 +1466,7 @@ private: int m_mv_drag{-1}; // 0..2 = X/Y/Z arrow, 3..5 = X/Y/Z ring, -1 none double m_mv_radius{0.0}; // body bounding-sphere radius (mm); 0 = unknown int m_mv_press_x{0}, m_mv_press_y{0}; + double m_mv_grab_along{0.0}; // arrow grab point's distance from the anchor; NaN = unknown Transform3d compose_move_xform() const; // T(offset)*T(pivot)*rot*T(-pivot)*base_xform void ring_basis(int axis, Vec3d& e, Vec3d& u, Vec3d& v) const; // world axis + in-plane basis void render_move_gizmo(); @@ -1410,7 +1474,6 @@ private: double move_gizmo_arm(const Camera& cam) const; bool hit_test_move_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt, int& axis) const; bool hit_test_move_arc(GLCanvas3D& canvas, const wxMouseEvent& evt, int& axis) const; - void drag_move_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt, int axis); void drag_move_arc(GLCanvas3D& canvas, const wxMouseEvent& evt, int axis); bool arc_mouse_angle(GLCanvas3D& canvas, const wxMouseEvent& evt, int axis, double& ang) const; void open_move_editor(int axis); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 6a7cc39079..d6d7371c20 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1875,7 +1875,7 @@ BoundingBoxf3 GLCanvas3D::volumes_bounding_box(bool current_plate_only) const bool is_limit = m_canvas_type != ECanvasType::CanvasAssembleView; if (is_limit) { if (current_plate_only) { - expand_part_plate_list_box = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_bounding_box(); + expand_part_plate_list_box = _current_plate_box(); } else { auto plate_list_box = wxGetApp().plater()->get_partplate_list().get_bounding_box(); auto horizontal_radius = 0.5 * sqrt(std::pow(plate_list_box.min[0] - plate_list_box.max[0], 2) + std::pow(plate_list_box.min[1] - plate_list_box.max[1], 2)); @@ -2088,6 +2088,25 @@ float GLCanvas3D::get_collapse_toolbar_height() const return collapse_side() != CollapseSide::None ? collapse_toolbar().get_height() : 0; } +// The bottom-left corner: the 3D navigator, then the column of round canvas buttons beside it, in +// units of the toolbar scale. Shared by _render_3d_navigator, _render_canvas_toolbar and +// get_canvas_toolbar_right, so an overlay kept clear of the corner follows its layout. +static constexpr float NAVIGATOR_SIZE = 128.f; +static constexpr float CANVAS_TOOLBAR_MARGIN = 10.f; // off the canvas edge, when there is no navigator +static constexpr float CANVAS_TOOLBAR_PADDING = 2.f; +static constexpr float CANVAS_TOOLBAR_BUTTON = 36.f; + +float GLCanvas3D::get_canvas_toolbar_right() const +{ + // The toolbar scale, which on Windows follows the monitor's DPI where the ImGui style does not. + float sc = get_scale(); +#ifdef WIN32 + sc *= (float) get_dpi_for_window(wxGetApp().GetTopWindow()) / (float) DPI_DEFAULT; +#endif // WIN32 + const float left = wxGetApp().show_3d_navigator() ? NAVIGATOR_SIZE : CANVAS_TOOLBAR_MARGIN; + return (left + 2.f * CANVAS_TOOLBAR_PADDING + CANVAS_TOOLBAR_BUTTON) * sc; +} + GLToolbar& GLCanvas3D::collapse_toolbar() const { return m_collapse_toolbar != nullptr ? *m_collapse_toolbar : wxGetApp().plater()->get_collapse_toolbar(); @@ -2395,7 +2414,7 @@ void GLCanvas3D::_render_scene(const Camera& camera, const Size& cnv_size) } else if (gizmo_type == GLGizmosManager::BrimEars && !camera.is_looking_downward()) show_grid = false; - if (m_axes_at_bed_center) + if (m_design_canvas) // Design tab: the plate grid is generated from the plate's front-left corner, so it // floats mid-cell under the modeling-origin triad. Suppress it here; a CAD grid centred // on the origin is rendered in its place (see _render_cad_grid). @@ -2406,12 +2425,15 @@ void GLCanvas3D::_render_scene(const Camera& camera, const Size& cnv_size) if (m_canvas_type == ECanvasType::CanvasView3D) { // m_show_bed gates the plate list too: hiding the bed but leaving its grid and outline // floating would read as a rendering fault rather than a deliberate view option. + // Design tab: while its reference planes are up they draw their own axes from the modeling + // origin, where the bed's triad would otherwise sit on top of them. if (show_bed) - _render_bed(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), m_show_world_axes); + _render_bed(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), + m_show_world_axes && !(m_design_sketch_tool != nullptr && m_design_sketch_tool->draws_reference_axes())); m_frame_profiler.mark("bed"); if (show_bed) //BBS: add outline logic _render_platelist(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), only_current, only_body, hover_id, true, show_grid); - if (m_axes_at_bed_center && show_bed) + if (m_design_canvas && show_bed) // Design tab: replace the plate's corner-origin grid with the origin-centred CAD grid. _render_cad_grid(camera.get_view_matrix(), camera.get_projection_matrix()); m_frame_profiler.mark("plates"); @@ -4349,7 +4371,10 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } if (evt.LeftDown() && m_canvas != nullptr) m_canvas->SetFocus(); // grab keyboard focus so Delete/keys reach this canvas - if (m_design_sketch_tool->on_mouse(evt, *this)) { + // A Touchpad-style orbit or pan (a plain move with Alt or Shift held) is the camera's, + // whatever the tool would make of the move. Only a drag consults the button mappings. + const bool camera_move = evt.Moving() && (is_camera_rotate(evt, {}) || is_camera_pan(evt, {})); + if (!camera_move && m_design_sketch_tool->on_mouse(evt, *this)) { m_dirty = true; render(); // force an immediate redraw so the sketch overlay updates live return; @@ -6393,7 +6418,7 @@ void GLCanvas3D::_render_3d_navigator() } } - const float size = 128 * sc; + const float size = NAVIGATOR_SIZE * sc; m_canvas_toolbar_pos[0] = size; const auto result = ImGuizmo::ViewManipulate(cameraView, cameraProjection, ImGuizmo::OPERATION::ROTATE, ImGuizmo::MODE::WORLD, nullptr, camDistance, ImVec2(viewManipulateLeft, viewManipulateTop - size), ImVec2(size, size), @@ -8008,9 +8033,16 @@ void GLCanvas3D::_render_fps_overlay(int fps) const const float margin = 10.0f * get_scale(); const ImVec2 display_size = ImGui::GetIO().DisplaySize; ImVec2 pos(display_size.x - margin, margin); + // Last frame's size; zero until the overlay has been shown once. + const ImGuiWindow* self = ImGui::FindWindowByName("###fps_overlay"); + const float left = pos.x - (self != nullptr ? self->Size.x : 0.0f); // The Preview legend takes the top-right corner. if (const ImGuiWindow* legend = ImGui::FindWindowByName("Legend"); m_canvas_type == ECanvasType::CanvasPreview && legend != nullptr && legend->Active) pos = ImVec2(legend->Pos.x - margin, legend->Pos.y); + // The toolbar row can reach the corner on a narrow canvas; stack the overlay below it then. + else if (m_main_toolbar.is_enabled() && + get_main_toolbar_offset() + m_main_toolbar.get_width() + m_separator_toolbar.get_width() + m_gizmos.get_scaled_total_width() + m_assemble_view_toolbar.get_width() > left) + pos.y = std::max(m_main_toolbar.get_height(), m_gizmos.get_scaled_total_height()) + margin; ImGui::SetNextWindowPos(pos, ImGuiCond_Always, ImVec2(1.0f, 0.0f)); ImGui::SetNextWindowBgAlpha(0.35f); ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 8.0f * get_scale()); @@ -8289,7 +8321,7 @@ void GLCanvas3D::_render_bed(const Transform3d& view_matrix, const Transform3d& */ //bool show_texture = true; //BBS set axes mode - if (m_axes_at_bed_center) { + if (m_design_canvas) { // Design tab: triad at the bed centre = modeling origin (set every frame because // set_shape/set_axes_mode otherwise reset it to the bed corner). const Vec2d bc = m_bed.build_volume().bed_center(); @@ -8302,7 +8334,30 @@ void GLCanvas3D::_render_bed(const Transform3d& view_matrix, const Transform3d& void GLCanvas3D::_render_platelist(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_current, bool only_body, int hover_id, bool render_cali, bool show_grid) { - wxGetApp().plater()->get_partplate_list().render(view_matrix, projection_matrix, bottom, only_current, only_body, hover_id, render_cali, show_grid, !m_plate_chrome_enabled); + PartPlateList& plate_list = wxGetApp().plater()->get_partplate_list(); + // Design tab: its bed stays at the printer bed's home whichever plate is current, so the + // current plate's exclude areas are moved from that plate onto it. + PartPlate* curr_plate = plate_list.get_curr_plate(); + const Transform3d plate_view_matrix = m_design_canvas && curr_plate != nullptr ? + Transform3d(view_matrix * Geometry::translation_transform(-curr_plate->get_origin())) : view_matrix; + plate_list.render(plate_view_matrix, projection_matrix, bottom, only_current, only_body, hover_id, render_cali, show_grid, !m_plate_chrome_enabled); +} + +BoundingBoxf3 GLCanvas3D::_current_plate_box() const +{ + // Design tab: its own bed stands in for the current plate (see _render_platelist). + const BuildVolume& build_volume = m_bed.build_volume(); + if (m_design_canvas && build_volume.valid()) { + // Flat at z = 0 like the plate's own box. Merged, as PartPlate builds it: the min/max + // constructor leaves a flat box undefined. + const BoundingBoxf bb = build_volume.bounding_volume2d(); + BoundingBoxf3 box; + box.merge(Vec3d(bb.min.x(), bb.min.y(), 0.)); + box.merge(Vec3d(bb.max.x(), bb.max.y(), 0.)); + return box; + } + PartPlate* curr_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + return curr_plate != nullptr ? curr_plate->get_bounding_box() : BoundingBoxf3(); } // Design tab: CAD grid on the bed plane, drawn in place of the plate's corner-origin grid. @@ -10076,10 +10131,10 @@ void GLCanvas3D::_render_canvas_toolbar() sc *= (float) dpi / (float) DPI_DEFAULT; #endif // WIN32 - ImVec2 btn_size = ImVec2(36.f, 36.f) * sc; - ImVec2 margin = ImVec2(m_canvas_toolbar_pos[0] > 0 ? 0.f : (10.f * sc), 10.f * sc); + ImVec2 btn_size = ImVec2(CANVAS_TOOLBAR_BUTTON, CANVAS_TOOLBAR_BUTTON) * sc; + ImVec2 margin = ImVec2(m_canvas_toolbar_pos[0] > 0 ? 0.f : (CANVAS_TOOLBAR_MARGIN * sc), CANVAS_TOOLBAR_MARGIN * sc); ImVec2 spacing = ImVec2(6.f, 6.f) * sc; - ImVec2 padding = ImVec2(2.f, 2.f) * sc; + ImVec2 padding = ImVec2(CANVAS_TOOLBAR_PADDING, CANVAS_TOOLBAR_PADDING) * sc; Vec2i32 pos = { m_canvas_toolbar_pos[0] + margin.x, get_canvas_size().get_height() - margin.y @@ -10137,14 +10192,25 @@ void GLCanvas3D::_render_canvas_toolbar() ImTextureID z_hover_id = m_gizmos.get_icon_texture_id(m_is_dark ? GLGizmosManager::MENU_ICON_NAME::IC_CANVAS_ZOOM_DARK_HOVER : GLGizmosManager::MENU_ICON_NAME::IC_CANVAS_ZOOM_HOVER); if (ImGui::ImageButton3(z_normal_id, z_hover_id, btn_size)) { - select_view("plate"); - if (m_selection.is_empty()) { - if (m_canvas_type == ECanvasType::CanvasAssembleView) - zoom_to_volumes(); - else - zoom_to_bed(); - } else { - zoom_to_selection(); +#ifdef SLIC3R_CAD + // The Design tab selects and sketches outside the canvas's selection and volumes, so + // it names what to frame. Framed along the current view, which is often square to a + // sketch plane; an empty tab falls through to the bed. + const BoundingBoxf3 design_box = m_design_sketch_tool != nullptr ? m_design_sketch_tool->fit_box(m_volumes) : BoundingBoxf3(); + if (design_box.defined) + _zoom_to_box(design_box); + else +#endif + { + select_view("plate"); + if (m_selection.is_empty()) { + if (m_canvas_type == ECanvasType::CanvasAssembleView) + zoom_to_volumes(); + else + zoom_to_bed(); + } else { + zoom_to_selection(); + } } } else if (ImGui::IsItemHovered()) { auto tooltip_str_wx = _L("Fit camera to scene or selected object."); @@ -11112,10 +11178,9 @@ std::optional GLCanvas3D::get_camera_orbit_target(ECameraNavigationType n { // Orca: Centralize the pre-existing pivot rules so orbiting and pan fallback cannot // choose different reference depths for the same canvas and active tool. - PartPlate* current_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + const BoundingBoxf3 plate_box = _current_plate_box(); if (navigation_type == ECameraNavigationType::Gesture) - return current_plate == nullptr ? std::nullopt : - std::make_optional(current_plate->get_bounding_box().center()); + return plate_box.defined ? std::make_optional(plate_box.center()) : std::nullopt; const GLGizmosManager::EType gizmo_type = m_gizmos.get_current_type(); const bool use_scene_target = m_canvas_type == ECanvasType::CanvasAssembleView || @@ -11135,15 +11200,15 @@ std::optional GLCanvas3D::get_camera_orbit_target(ECameraNavigationType n Vec3d target = Vec3d::Zero(); if (m_canvas_type == ECanvasType::CanvasPreview) { - if (current_plate != nullptr) - target = current_plate->get_bounding_box().center(); + if (plate_box.defined) + target = plate_box.center(); } else if (!m_selection.is_empty()) { target = m_selection.get_bounding_box().center(); } else { // Orca: Match regular mouse orbit: objects on the active plate, then the plate itself. BoundingBoxf3 bbox = volumes_bounding_box(true); - if (!bbox.defined && current_plate != nullptr) - bbox = current_plate->get_bounding_box(); + if (!bbox.defined) + bbox = plate_box; if (bbox.defined) target = bbox.center(); } diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index e53a9d6aba..faf826ed7c 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -604,9 +604,11 @@ private: GLToolbar* m_collapse_toolbar{nullptr}; std::function m_collapse_side; bool m_plate_chrome_enabled{true}; - // Design tab: render the world-axis triad at the bed centre (= modeling origin) instead of - // the bed corner. Default false preserves the main editor's corner triad. - bool m_axes_at_bed_center{false}; + // This canvas is the Design tab's. Its bed stays at the printer bed's home whichever plate is + // current, with the world-axis triad and a CAD grid at the bed centre (= modeling origin) in + // place of the corner triad and the plate grid, and the plate data it reads (exclude areas, + // the current plate's box) moved onto that bed. Default false leaves the editor tabs untouched. + bool m_design_canvas{false}; // Design tab: draw the printer bed and its plate grid at all. Default true, so the // main editor is untouched; the Design tab lets the user hide it to model without a bed. bool m_show_bed{true}; @@ -1025,13 +1027,15 @@ public: // initialized, which loads the toolbar's background. void set_collapse_toolbar(GLToolbar* toolbar, std::function side); void enable_plate_chrome(bool enable); - void set_axes_at_bed_center(bool b) { m_axes_at_bed_center = b; } + void set_design_canvas(bool b) { m_design_canvas = b; } void set_show_bed(bool b) { m_show_bed = b; } bool get_show_bed() const { return m_show_bed; } void enable_sinking_contours(bool enable) { m_sinking_contours_enabled = enable; } #ifdef SLIC3R_CAD void set_design_sketch_tool(DesignSketchTool* tool) { m_design_sketch_tool = tool; } DesignSketchTool* get_design_sketch_tool() const { return m_design_sketch_tool; } + // The Design tab frames what it selects itself (DesignCanvas::zoom_to_box), as the Fit button does. + void zoom_to_box(const BoundingBoxf3& box) { _zoom_to_box(box); } #endif void enable_dynamic_background(bool enable) { m_dynamic_background_enabled = enable; } void enable_labels(bool enable) { m_labels.enable(enable); } @@ -1059,6 +1063,9 @@ public: bool is_collapse_toolbar_on_left() const; float get_collapse_toolbar_width() const; float get_collapse_toolbar_height() const; + // Right edge, in canvas pixels, of the bottom-left corner the 3D navigator and the round + // canvas buttons own. An overlay along the bottom edge starts past it. + float get_canvas_toolbar_right() const; void update_volumes_colors_by_extruder(); @@ -1441,9 +1448,11 @@ private: void _render_shadows(const Transform3d& view_matrix, const Transform3d& projection_matrix); //BBS: add part plate related logic void _render_platelist(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_current, bool only_body = false, int hover_id = -1, bool render_cali = false, bool show_grid = true); + // The current plate's box (XY, at z = 0); in the Design tab, its own bed's. + BoundingBoxf3 _current_plate_box() const; // Design tab: draw the CAD grid (minor 10 mm + major 50 mm) in place of the plate's - // corner-origin grid when the axes sit at the bed centre (modeling origin). Rebuilds its - // GLModels lazily, only when the bed shape changed. + // corner-origin grid, centred on the modeling origin. Rebuilds its GLModels lazily, only + // when the bed shape changed. void _render_cad_grid(const Transform3d& view_matrix, const Transform3d& projection_matrix); //BBS: add outline drawing logic void _render_objects(GLVolumeCollection::ERenderType type, bool with_outline = true); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index e0a5f7143d..8fe5e97c51 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3114,8 +3114,11 @@ bool GUI_App::on_init_inner() // A quit request from the Dock, a logout or a restart ends with AppKit calling exit() right after this event, so // OnExit() and ~GUI_App() never run. Shut the plugins and Python down here as ~GUI_App() does. Left to // PluginManager's static destructor, the shutdown locks hook state that has already been destroyed and aborts. - wxGetApp().Bind(wxEVT_END_SESSION, [](wxCloseEvent &e) { + // Unload the Bambu network plugin too. Its static destructors abort if its agent's threads are still running. + wxGetApp().Bind(wxEVT_END_SESSION, [this](wxCloseEvent &e) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "received wxEVT_END_SESSION"; + stop_sync_user_preset(); + Slic3r::NetworkAgent::unload_network_module(); Slic3r::PluginManager::instance().shutdown(); Slic3r::PythonInterpreter::instance().shutdown(); e.Skip(); diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp index 1bf8d9106f..384c2837e8 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.cpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp @@ -41,19 +41,20 @@ namespace GUI ObjectLayers::ObjectLayers(wxWindow* parent) : OG_Settings(parent, true) { - m_grid_sizer = new wxFlexGridSizer(5, 0, wxGetApp().em_unit()); // Title, Min Z, "to", Max Z, unit & buttons sizer + m_grid_sizer = new wxFlexGridSizer(5, parent ? parent->FromDIP(2) : 2, wxGetApp().em_unit()); // Title, Min Z, "to", Max Z, buttons sizer m_grid_sizer->SetFlexibleDirection(wxHORIZONTAL); m_grid_sizer->AddGrowableCol(1); m_grid_sizer->AddGrowableCol(3); m_og->activate(); m_og->sizer->Clear(true); - m_og->sizer->Add(m_grid_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, 5); + m_og->sizer->Add(m_grid_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, parent ? parent->FromDIP(2) : 2); if (auto stb = dynamic_cast(m_og->stb)) stb->SetCornerRadius(0); m_bmp_delete = ScalableBitmap(parent, "delete"); m_bmp_add = ScalableBitmap(parent, "add"); + m_bmp_layer = ScalableBitmap(parent, "height_range_layer"); } void ObjectLayers::select_editor(LayerRangeEditor* editor, const bool is_last_edited_range) @@ -95,10 +96,14 @@ wxSizer* ObjectLayers::create_layer(const t_layer_height_range& range, PlusMinus }; // Add text - auto head_text = new wxStaticText(m_og->ctrl_parent(), wxID_ANY, _L("Height Range"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + auto title_sizer = new wxBoxSizer(wxHORIZONTAL); + auto head_text = new wxStaticText(m_og->ctrl_parent(), wxID_ANY, _L("Range")); head_text->SetBackgroundStyle(wxBG_STYLE_PAINT); head_text->SetFont(wxGetApp().normal_font()); - m_grid_sizer->Add(head_text, 0, wxALIGN_CENTER_VERTICAL); + auto icon = new wxStaticBitmap(m_og->ctrl_parent(), wxID_ANY, m_bmp_layer.bmp()); + title_sizer->Add(icon, 0, wxALIGN_CENTER_VERTICAL); + title_sizer->Add(head_text, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, m_og->ctrl_parent()->FromDIP(5)); + m_grid_sizer->Add(title_sizer, 0, wxALIGN_CENTER_VERTICAL); // Add control for the "Min Z" @@ -126,7 +131,7 @@ wxSizer* ObjectLayers::create_layer(const t_layer_height_range& range, PlusMinus m_grid_sizer->Add(editor, 1, wxEXPAND); - auto middle_text = new wxStaticText(m_og->ctrl_parent(), wxID_ANY, _L("to"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + auto middle_text = new wxStaticText(m_og->ctrl_parent(), wxID_ANY, "-"); middle_text->SetBackgroundStyle(wxBG_STYLE_PAINT); middle_text->SetFont(wxGetApp().normal_font()); m_grid_sizer->Add(middle_text, 0, wxALIGN_CENTER_VERTICAL); @@ -156,11 +161,6 @@ wxSizer* ObjectLayers::create_layer(const t_layer_height_range& range, PlusMinus m_grid_sizer->Add(editor, 1, wxEXPAND); auto sizer2 = new wxBoxSizer(wxHORIZONTAL); - auto unit_text = new wxStaticText(m_og->ctrl_parent(), wxID_ANY, _L("mm"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); - unit_text->SetBackgroundStyle(wxBG_STYLE_PAINT); - unit_text->SetFont(wxGetApp().normal_font()); - sizer2->Add(unit_text, 0, wxALIGN_CENTER_VERTICAL); - m_grid_sizer->Add(sizer2, 0, wxALIGN_CENTER_VERTICAL); // BBS @@ -205,8 +205,9 @@ void ObjectLayers::create_layers_list() auto sizer = create_layer(range, del_btn, add_btn); auto b_sizer = new wxBoxSizer(wxHORIZONTAL); - b_sizer->Add(del_btn, 0, wxRIGHT | wxLEFT, em_unit(m_parent)); - b_sizer->Add(add_btn); + b_sizer->Add(del_btn, 0, wxLEFT, m_og->ctrl_parent()->FromDIP(5)); + b_sizer->AddSpacer(m_og->ctrl_parent()->FromDIP(15)); + b_sizer->Add(add_btn, 0, wxRIGHT, m_og->ctrl_parent()->FromDIP(5)); sizer->Add(b_sizer, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, m_parent->FromDIP(1)); // aligns +/- buttons vertically since we got 1px gap on bottom of icons del_btn->Bind(wxEVT_BUTTON, [del_btn](wxEvent &) { @@ -277,6 +278,7 @@ void ObjectLayers::msw_rescale() { m_bmp_delete.msw_rescale(); m_bmp_add.msw_rescale(); + m_bmp_layer.msw_rescale(); m_grid_sizer->SetHGap(wxGetApp().em_unit()); @@ -367,20 +369,17 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* parent, m_valid_value(value), m_type(type), m_set_focus_data(set_focus_data_fn), - wxTextCtrl(parent->m_og->ctrl_parent(), wxID_ANY, value, wxDefaultPosition, - wxSize(em_unit(parent->m_parent), wxDefaultCoord), wxTE_PROCESS_ENTER -#ifdef _WIN32 - | wxBORDER_SIMPLE -#endif - ) + TextInput(parent->m_og->ctrl_parent(), value, _L("mm"), "", wxDefaultPosition, wxSize(em_unit(parent->m_parent), wxDefaultCoord), wxTE_PROCESS_ENTER) { this->SetFont(wxGetApp().normal_font()); wxGetApp().UpdateDarkUI(this); + wxTextCtrl* ctrl = GetTextCtrl(); + // Reset m_enter_pressed flag to _false_, when value is editing - this->Bind(wxEVT_TEXT, [this](wxEvent&) { m_enter_pressed = false; }, this->GetId()); + ctrl->Bind(wxEVT_TEXT, [this](wxEvent&) { m_enter_pressed = false; }, ctrl->GetId()); - this->Bind(wxEVT_TEXT_ENTER, [this, edit_fn](wxEvent&) + ctrl->Bind(wxEVT_TEXT_ENTER, [this, edit_fn](wxCommandEvent& e) { m_enter_pressed = true; // If LayersList wasn't updated/recreated, we can call wxEVT_KILL_FOCUS.Skip() @@ -395,9 +394,9 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* parent, SetValue(m_valid_value); m_call_kill_focus = true; } - }, this->GetId()); + }, ctrl->GetId()); - this->Bind(wxEVT_KILL_FOCUS, [this, edit_fn](wxFocusEvent& e) + ctrl->Bind(wxEVT_KILL_FOCUS, [this, edit_fn](wxFocusEvent& e) { if (!m_enter_pressed) { #ifndef __WXGTK__ @@ -426,14 +425,14 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* parent, m_call_kill_focus = false; e.Skip(); } - }, this->GetId()); + }, ctrl->GetId()); - this->Bind(wxEVT_SET_FOCUS, [this, parent](wxFocusEvent& e) + ctrl->Bind(wxEVT_SET_FOCUS, [this, parent](wxFocusEvent& e) { set_focus_data(); parent->update_scene_from_editor_selection(); e.Skip(); - }, this->GetId()); + }, ctrl->GetId()); #ifdef __WXGTK__ // Workaround! To take information about selectable range this->Bind(wxEVT_LEFT_DOWN, [this](wxEvent& e) @@ -447,7 +446,7 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* parent, { // select all text using Ctrl+A if (wxGetKeyState(wxKeyCode('A')) && wxGetKeyState(WXK_CONTROL)) - this->SetSelection(-1, -1); //select all + GetTextCtrl()->SetSelection(-1, -1); //select all event.Skip(); })); } @@ -477,7 +476,7 @@ coordf_t LayerRangeEditor::get_value() void LayerRangeEditor::msw_rescale() { - SetMinSize(wxSize(wxGetApp().em_unit(), wxDefaultCoord)); + Rescale(); } } //namespace GUI diff --git a/src/slic3r/GUI/GUI_ObjectLayers.hpp b/src/slic3r/GUI/GUI_ObjectLayers.hpp index d161ef1e2b..165466b4bf 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.hpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.hpp @@ -9,6 +9,8 @@ #include #include +#include + #ifdef __WXOSX__ #include "libslic3r/PrintConfig.hpp" #endif @@ -34,7 +36,7 @@ enum EditorType etLayerHeight = 4, }; -class LayerRangeEditor : public wxTextCtrl +class LayerRangeEditor : public TextInput { bool m_enter_pressed { false }; bool m_call_kill_focus { false }; @@ -55,6 +57,8 @@ public: EditorType type() const {return m_type;} void set_focus_data() const { m_set_focus_data(m_type);} + void SetValue(const wxString& value) {GetTextCtrl()->SetValue(value);} + wxString GetValue() {return GetTextCtrl()->GetValue();} void msw_rescale(); private: @@ -65,6 +69,7 @@ class ObjectLayers : public OG_Settings { ScalableBitmap m_bmp_delete; ScalableBitmap m_bmp_add; + ScalableBitmap m_bmp_layer; ModelObject* m_object {nullptr}; wxFlexGridSizer* m_grid_sizer; diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 9a0bc54b6e..67dc80ca6d 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -1816,7 +1816,10 @@ void InputIpAddressDialog::set_machine_obj(MachineObject* obj) m_input_printer_name->GetTextCtrl()->SetLabelText(m_obj->get_dev_name()); std::string img_str = DevPrinterConfigUtil::get_printer_connect_help_img(m_obj->printer_type); - auto diagram_bmp = create_scaled_bitmap(img_str + "_en", this, 198); + if (img_str.empty()) { img_str = "input_access_code_x1"; } + + std::string language = wxGetApp().app_config->get("language"); + auto diagram_bmp = create_scaled_bitmap(img_str + (language == "zh_CN" ? "_cn" : "_en"), this, 198); m_img_help->SetBitmap(diagram_bmp); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index c64b4c8807..28a9fb0456 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2936,7 +2936,7 @@ void TabPrint::build() optgroup->append_single_option_line("skin_infill_line_width", "strength_settings_patterns#locked-zag"); optgroup->append_single_option_line("skeleton_infill_line_width", "strength_settings_patterns#locked-zag"); optgroup->append_single_option_line("symmetric_infill_y_axis", "strength_settings_infill#symmetric-infill-y-axis"); - optgroup->append_single_option_line("infill_complete_top", "strength_settings_infill#infill-complete-top"); + optgroup->append_single_option_line("infill_complete_top", "strength_settings_patterns#fill-pattern-tops"); optgroup->append_single_option_line("infill_shift_step", "strength_settings_patterns#cross-hatch"); optgroup->append_single_option_line("lateral_lattice_angle_1", "strength_settings_patterns#lateral-lattice"); optgroup->append_single_option_line("lateral_lattice_angle_2", "strength_settings_patterns#lateral-lattice"); diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index 5d38e87f4d..5babf843bc 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -456,6 +456,13 @@ wxBitmap create_scaled_bitmap( const std::string& bmp_name_in, const vector& array_new_color/* = vector*/)//used for semi transparent material) { static Slic3r::GUI::BitmapCache cache; + + // An empty name means the caller's icon lookup failed + if (bmp_name_in.empty() || bmp_name_in == ".png") { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": empty bitmap name"; + return wxNullBitmap; + } + if (bitmap2) { return create_scaled_bitmap2(bmp_name_in, cache, win, px_cnt, grayscale, resize, array_new_color); } diff --git a/tests/fff_print/test_gcodeprocessor.cpp b/tests/fff_print/test_gcodeprocessor.cpp index b512753c01..2d6bafd0a9 100644 --- a/tests/fff_print/test_gcodeprocessor.cpp +++ b/tests/fff_print/test_gcodeprocessor.cpp @@ -1,15 +1,20 @@ #include +#include #include #include #include #include #include "libslic3r/libslic3r.h" +#include "libslic3r/Config.hpp" #include "libslic3r/GCode/GCodeProcessor.hpp" +#include "libslic3r/Model.hpp" #include "libslic3r/Utils.hpp" +#include "test_helpers.hpp" #include "test_utils.hpp" +#include #include #include #include "libslic3r/PrintConfig.hpp" @@ -177,3 +182,42 @@ TEST_CASE("A seam takes the actual speed of the move it follows", "[GCodeProcess } REQUIRE(seams > 0); } + +TEST_CASE("Line ends of the exported G-code mark every newline in the file", "[GCodeProcessor]") +{ + struct Case + { + const char* name; + bool preheat_backtrace; + bool pre_heating; + }; + const auto test_case = GENERATE(values({ + { "written by size", false, false }, + { "written by time for the preheat backtrace", true, false }, + { "rewritten by the pre-heating pass", false, true }, + })); + INFO(test_case.name); + DynamicPrintConfig config = Test::multifilament_config(2, { + { "single_extruder_multi_material", 0 }, + { "ooze_prevention", test_case.preheat_backtrace }, + { "preheat_time", 30 }, + { "enable_pre_heating", test_case.pre_heating }, + }); + Print print; + Model model; + const std::vector> overrides{ { { "extruder", 1 } }, { { "extruder", 2 } } }; + Test::init_print({ Test::cube(20), Test::cube(20) }, print, model, config, &overrides); + GCodeProcessorResult result; + const std::string gcode = Test::gcode(print, &result); + REQUIRE((gcode.find("preheat T") != std::string::npos) == test_case.preheat_backtrace); + REQUIRE((gcode.find(GCodeProcessor::Machine_Start_GCode_End_Tag) != std::string::npos) == test_case.pre_heating); + REQUIRE(gcode.size() > GCodeProcessor::Output_Block_Size); + + std::vector newline_ends; + for (size_t i = gcode.find('\n'); i != std::string::npos; i = gcode.find('\n', i + 1)) + newline_ends.push_back(i + 1); + REQUIRE(result.lines_ends.size() == newline_ends.size()); + const auto difference = std::mismatch(result.lines_ends.begin(), result.lines_ends.end(), newline_ends.begin()); + INFO("first difference at line " << difference.first - result.lines_ends.begin() + 1); + CHECK(difference.first == result.lines_ends.end()); +} diff --git a/tests/fff_print/test_helpers.cpp b/tests/fff_print/test_helpers.cpp index 268feda5ef..913641e256 100644 --- a/tests/fff_print/test_helpers.cpp +++ b/tests/fff_print/test_helpers.cpp @@ -14,6 +14,7 @@ #include #include "libslic3r/Point.hpp" #include +#include #include #include #include @@ -330,13 +331,13 @@ void init_and_process_print(std::initializer_list meshes, Slic3r:: print.process(); } -std::string gcode(Print & print) +std::string gcode(Print & print, GCodeProcessorResult* result) { ScopedTemporaryFile temp(".gcode"); print.set_status_silent(); print.process(); - print.export_gcode(temp.string(), nullptr, nullptr); - std::ifstream t(temp.string()); + print.export_gcode(temp.string(), result, nullptr); + std::ifstream t(temp.string(), std::ios::binary); std::string str((std::istreambuf_iterator(t)), std::istreambuf_iterator()); return str; } diff --git a/tests/fff_print/test_helpers.hpp b/tests/fff_print/test_helpers.hpp index 1ffc08c64e..c603007a7c 100644 --- a/tests/fff_print/test_helpers.hpp +++ b/tests/fff_print/test_helpers.hpp @@ -17,7 +17,9 @@ #include #include -namespace Slic3r { namespace Test { +namespace Slic3r { +struct GCodeProcessorResult; +namespace Test { constexpr double MM_PER_MIN = 60.0; @@ -92,8 +94,8 @@ void init_and_process_print(std::initializer_list meshes, Slic3r:: void init_and_process_print(std::initializer_list meshes, Slic3r::Print &print, std::initializer_list config_items); void init_and_process_print(std::initializer_list meshes, Slic3r::Print &print, std::initializer_list config_items); -// Process `print` and return its exported G-code. -std::string gcode(Print& print); +// Process `print` and return its exported G-code, filling `result` when one is given. +std::string gcode(Print& print, GCodeProcessorResult* result = nullptr); // Build, slice, and return the G-code for `meshes` under the given config. std::string slice(std::initializer_list meshes, const DynamicPrintConfig &config); diff --git a/tests/fff_print/test_perimeters.cpp b/tests/fff_print/test_perimeters.cpp index 6ab3473e3c..070912c307 100644 --- a/tests/fff_print/test_perimeters.cpp +++ b/tests/fff_print/test_perimeters.cpp @@ -19,8 +19,10 @@ #include #include "libslic3r/libslic3r.h" #include "libslic3r/BoundingBox.hpp" +#include "libslic3r/ClipperUtils.hpp" #include "libslic3r/ExPolygon.hpp" #include "libslic3r/Point.hpp" +#include "libslic3r/Polyline.hpp" #include #include #include @@ -275,6 +277,124 @@ TEST_CASE("Only one wall on the first layer needs a bottom shell", "[Perimeters] namespace { +// The last layer of the tab, whose top surface shares an island with the tube walls rising past it. +const double tab_top_z = 5.0; + +// With the widths below the tube walls are 1.10mm wide once the precise outer wall offset (0.043mm a side) is +// taken off. That is narrower than 3 outer wall spacings (3 x 0.377 = 1.131mm), so an Arachne pass limited to a +// single wall fills it by widening its 2 beads, yet wide enough for the full 2 wall pass to add a middle wall +// (from 1.062mm). +const double narrow_wall = 1.186; + +// A 20x30x10 tube with narrow_wall thick walls, and a 20x8x5 tab against its -Y side. +Print &tube_with_tab(Print &print, Model &model, const DynamicPrintConfig &config) +{ + ModelObject *object = model.add_object(); + object->name = "tube_with_tab.stl"; + object->add_volume(make_cube(20., 30., 10.), ModelVolumeType::MODEL_PART, false); + // Overlaps the tube wall by 0.5mm so the two parts slice as one island. + TriangleMesh tab = make_cube(20., 8.5, 5.); + tab.translate(0.f, -8.f, 0.f); + object->add_volume(std::move(tab), ModelVolumeType::MODEL_PART, false); + TriangleMesh bore = make_cube(20. - 2. * narrow_wall, 30. - 2. * narrow_wall, 12.); + bore.translate(float(narrow_wall), float(narrow_wall), -1.f); + object->add_volume(std::move(bore), ModelVolumeType::NEGATIVE_VOLUME, false); + object->add_instance(); + object->ensure_on_bed(); + + print.auto_assign_extruders(object); + print.apply(model, config); + print.validate(); + print.set_status_silent(); + return print; +} + +// Every width the narrow_wall arithmetic depends on, so none of them rests on a default. +DynamicPrintConfig narrow_wall_config(bool only_one_wall_top, double top_surface_expansion) +{ + DynamicPrintConfig config = base_config("arachne"); + config.set_deserialize_strict({ + { "wall_loops", 2 }, + { "nozzle_diameter", "0.4" }, + { "line_width", 0.42 }, + { "outer_wall_line_width", 0.42 }, + { "inner_wall_line_width", 0.45 }, + { "min_bead_width", "85%" }, + { "precise_outer_wall", true }, + { "wall_sequence", "inner wall/outer wall" }, + { "only_one_wall_top", only_one_wall_top }, + { "top_surface_expansion", top_surface_expansion }, + }); + return config; +} + +// Inner wall length the layer at print_z extrudes within 3mm of its +Y edge: the tube wall facing away from the tab. +double far_wall_inner_wall_length(const Print &print, double print_z) +{ + for (const Layer *layer : print.objects().front()->layers()) { + if (std::abs(layer->print_z - print_z) > EPSILON) + continue; + BoundingBox band = get_extents(layer->lslices); + band.min.y() = band.max.y() - scaled(3.); + + Polylines inner_walls; + auto collect = [&inner_walls](const ExtrusionPaths &paths) { + for (const ExtrusionPath &path : paths) + if (path.role() == erPerimeter) + inner_walls.emplace_back(path.as_polyline()); + }; + for (const LayerRegion *region : layer->regions()) { + const ExtrusionEntityCollection walls = region->perimeters.flatten(); + for (const ExtrusionEntity *entity : walls.entities) { + if (const auto *loop = dynamic_cast(entity)) + collect(loop->paths); + else if (const auto *multi_path = dynamic_cast(entity)) + collect(multi_path->paths); + else if (const auto *path = dynamic_cast(entity)) + collect({ *path }); + } + } + return unscaled(total_length(intersection_pl(inner_walls, band.polygon()))); + } + return 0.; +} + +} // namespace + +// only_one_wall_top first lays out an island with a single Arachne wall and generates the inner walls inside it. +// On a wall narrower than 3 outer wall spacings that single wall pass widens its 2 beads to fill the wall and leaves +// no room for the middle wall, which is only intended over the top surface. The tube walls away from the tab are not +// under the tab's top surface, so on the tab's last layer they keep the inner wall they get with the option off. +TEST_CASE("Only one wall on top surfaces keeps the inner walls of narrow walls away from the top surface", "[Perimeters]") +{ + // 0 re-onions the region beside the top surface, 2 clips the inner walls over it. + const double top_surface_expansion = GENERATE(0.0, 2.0); + CAPTURE(top_surface_expansion); + + struct TabTopLayer { + double perimeters; + double far_wall_inner_walls; + }; + auto tab_top_layer_for = [top_surface_expansion](bool only_one_wall_top) { + Print print; + Model model; + tube_with_tab(print, model, narrow_wall_config(only_one_wall_top, top_surface_expansion)); + print.process(); + REQUIRE_FALSE(print.objects().empty()); + return TabTopLayer{ perimeter_length_at(print, tab_top_z), far_wall_inner_wall_length(print, tab_top_z) }; + }; + + const TabTopLayer plain = tab_top_layer_for(false); + const TabTopLayer one_wall = tab_top_layer_for(true); + + // The option acts on this layer: the inner walls under the tab's top surface are gone. + REQUIRE(plain.far_wall_inner_walls > 10.); + CHECK(one_wall.perimeters < plain.perimeters); + CHECK_THAT(one_wall.far_wall_inner_walls, Catch::Matchers::WithinAbs(plain.far_wall_inner_walls, 1.0)); +} + +namespace { + // The layer that closes the cavity of box_over_cavity(), the first one printed over air. const double cavity_ceiling_z = 6.2; @@ -736,3 +856,141 @@ TEST_CASE("Fuzzy skin leaves the walls over an empty layer smooth", "[Perimeters CHECK(floating_first_layer >= 0.); CHECK(floating_first_layer < 0.001); } + +namespace { + +// A 20x20x5mm square tube whose walls are `wall` mm thick, except the far one at `far_wall` mm. +Print &square_tube(Print &print, Model &model, const DynamicPrintConfig &config, double wall, double far_wall) +{ + ModelObject *object = model.add_object(); + object->name = "square_tube.stl"; + object->add_volume(make_cube(20., 20., 5.), ModelVolumeType::MODEL_PART, false); + TriangleMesh cavity = make_cube(20. - 2. * wall, 20. - wall - far_wall, 5.); + cavity.translate(float(wall), float(wall), 0.f); + object->add_volume(std::move(cavity), ModelVolumeType::NEGATIVE_VOLUME, false); + object->add_instance(); + object->ensure_on_bed(); + + print.auto_assign_extruders(object); + print.apply(model, config); + print.validate(); + print.set_status_silent(); + print.process(); + return print; +} + +// Every setting the wall thicknesses below are measured against. With these widths the two outer walls of +// a 0.8mm wall touch, a 1mm wall leaves a gap between them for gap fill, and an inner wall needs about 1.5mm. +// Both one wall options are on, so the first and the last layer have a single wall whatever wall_loops asks. +DynamicPrintConfig hole_direction_config(int wall_loops, const char *wall_direction) +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({ + { "wall_generator", "classic" }, + { "wall_direction", wall_direction }, + { "wall_loops", wall_loops }, + { "layer_height", 0.2 }, + { "initial_layer_print_height", 0.2 }, + { "outer_wall_line_width", 0.42 }, + { "inner_wall_line_width", 0.45 }, + { "detect_thin_wall", false }, + { "filter_out_gap_fill", 0 }, + { "top_shell_layers", 3 }, + { "bottom_shell_layers", 3 }, + { "only_one_wall_top", true }, + { "only_one_wall_first_layer", true }, + { "overhang_reverse", false }, + { "sparse_infill_density", "15%" }, + }); + return config; +} + +// The outer walls of a layer, contours and holes apart, and how many inner walls and gap fills it has. +struct WallDirections { + std::vector contours_ccw; + std::vector holes_ccw; + int inner_walls = 0; + size_t gap_fills = 0; +}; + +std::vector wall_directions(const Print &print) +{ + std::vector out; + for (const Layer *layer : print.objects().front()->layers()) { + WallDirections &walls = out.emplace_back(); + for (const LayerRegion *region : layer->regions()) { + walls.gap_fills += region->thin_fills.flatten().entities.size(); + for (const ExtrusionEntity *entity : region->perimeters.flatten().entities) { + if (! entity->is_loop()) + continue; + const ExtrusionLoop *loop = static_cast(entity); + if (loop->inset_idx > 0) + ++ walls.inner_walls; + else + (loop->loop_role() == elrHole ? walls.holes_ccw : walls.contours_ccw).push_back(loop->polygon().is_counter_clockwise()); + } + } + } + return out; +} + +} // namespace + +// Holes run against the wall direction, so the inside of a hole keeps its direction on the layers where the +// hole opens into the contour. That holds on every layer, the single wall ones included, as soon as anything +// fits beside the outer wall of the hole: infill, an inner wall, or only gap fill. The 1mm tube with a 3mm far +// side is the shape that used to flip, where the far side has an inner wall on most layers and gap fill runs +// around the rest. +TEST_CASE("Holes run against the wall direction", "[Perimeters]") +{ + const auto [wall, far_wall] = GENERATE(std::make_pair(7., 7.), std::make_pair(1., 1.), std::make_pair(1., 3.)); + const int wall_loops = GENERATE(1, 2); + const char *wall_direction = GENERATE("ccw", "cw"); + CAPTURE(wall, far_wall, wall_loops, wall_direction); + + Print print; + Model model; + square_tube(print, model, hole_direction_config(wall_loops, wall_direction), wall, far_wall); + const std::vector layers = wall_directions(print); + // 5mm at 0.2mm layers. + REQUIRE(layers.size() == 25); + // Without gap fill between the outer walls the thin tubes would test the case below instead. + if (wall < 2.) + REQUIRE(layers[layers.size() / 2].gap_fills > 0); + + const bool ccw = std::string(wall_direction) == "ccw"; + for (size_t i = 0; i < layers.size(); ++ i) { + CAPTURE(i); + REQUIRE(layers[i].contours_ccw.size() == 1); + REQUIRE(layers[i].holes_ccw.size() == 1); + CHECK(layers[i].contours_ccw.front() == ccw); + CHECK(layers[i].holes_ccw.front() == ! ccw); + } +} + +// A hole whose outer wall touches the contour's all around, with nothing between them, runs with the contour +// on every layer, so the two walls of a thin tube are laid side by side in the same direction. +TEST_CASE("A hole whose outer wall touches the contour's runs with it", "[Perimeters]") +{ + const int wall_loops = GENERATE(1, 2); + const char *wall_direction = GENERATE("ccw", "cw"); + CAPTURE(wall_loops, wall_direction); + + Print print; + Model model; + square_tube(print, model, hole_direction_config(wall_loops, wall_direction), 0.8, 0.8); + const std::vector layers = wall_directions(print); + REQUIRE(layers.size() == 25); + // Nothing fits between the two outer walls. + REQUIRE(layers[layers.size() / 2].gap_fills == 0); + REQUIRE(layers[layers.size() / 2].inner_walls == 0); + + const bool ccw = std::string(wall_direction) == "ccw"; + for (size_t i = 0; i < layers.size(); ++ i) { + CAPTURE(i); + REQUIRE(layers[i].contours_ccw.size() == 1); + REQUIRE(layers[i].holes_ccw.size() == 1); + CHECK(layers[i].contours_ccw.front() == ccw); + CHECK(layers[i].holes_ccw.front() == ccw); + } +} diff --git a/tests/slic3rutils/CMakeLists.txt b/tests/slic3rutils/CMakeLists.txt index b495f35526..97a282825b 100644 --- a/tests/slic3rutils/CMakeLists.txt +++ b/tests/slic3rutils/CMakeLists.txt @@ -40,6 +40,10 @@ add_executable(${_TEST_NAME}_tests ../fff_print/test_helpers.cpp ) +if (SLIC3R_CAD) + target_sources(${_TEST_NAME}_tests PRIVATE test_design_sketch_tool.cpp) +endif () + if (MSVC) target_link_libraries(${_TEST_NAME}_tests Setupapi.lib) endif () diff --git a/tests/slic3rutils/test_design_sketch_tool.cpp b/tests/slic3rutils/test_design_sketch_tool.cpp new file mode 100644 index 0000000000..36daf628f1 --- /dev/null +++ b/tests/slic3rutils/test_design_sketch_tool.cpp @@ -0,0 +1,466 @@ +// Orca: This suite links libslic3r_gui; the Design tab's sketch tool needs no wx application or GL +// context until it renders. +#ifdef WIN32 + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #ifndef NOMINMAX + #define NOMINMAX + #endif + #include + // Match the GUI precompiled header: wx/msw/wrapcctl.h needs HDITEM from CommCtrl.h. + #include +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "libslic3r/BoundingBox.hpp" +#include "libslic3r/CAD/SketchEngine.hpp" +#include "libslic3r/Line.hpp" +#include "libslic3r/Point.hpp" +#include "libslic3r/TriangleMesh.hpp" +#include "libslic3r/CAD/CadDocument.hpp" +#include "slic3r/GUI/3DScene.hpp" +#include "slic3r/GUI/CAD/DesignSketchTool.hpp" + +using namespace Slic3r; +using namespace Slic3r::GUI; +using Catch::Matchers::WithinAbs; +using Catch::Matchers::WithinRel; + +namespace { + +SketchEntity circle(const Vec2d& c, double r) +{ + SketchEntity e; + e.type = SketchEntity::Type::Circle; + e.center = e.p0 = c; + e.radius = r; + return e; +} + +// Two committed sketches on XY: feature 1 a 10 mm circle at (50, 20), feature 2 a 5 mm one at (-60, 0). +void show_two_sketches(DesignSketchTool& tool) +{ + tool.set_display_sketches({ { { circle({ 50., 20. }, 10.) }, SketchPlane::XY(), 1 }, + { { circle({ -60., 0. }, 5.) }, SketchPlane::XY(), 2 } }); +} + +// The Design tab's base planes, all through one origin, as DesignPanel shows them. +std::vector base_planes() { return { SketchPlane::XY(), SketchPlane::XZ(), SketchPlane::YZ() }; } + +// The squares the base planes are drawn as, through a modeling origin at `origin`. +std::vector reference_squares(const Vec3d& origin, double half) +{ + std::vector squares; + for (SketchPlane plane : base_planes()) { + plane.origin += origin; + squares.push_back(reference_square(plane, int(squares.size()), half)); + } + return squares; +} + +struct View +{ + Vec3d eye; + Vec3d forward; + bool perspective; +}; + +// Eyes in four octants, off every plane, plus two orthographic directions. +const View kViews[] = { + { Vec3d(300., -400., 250.), Vec3d(-300., 400., -250.).normalized(), true }, + { Vec3d(-350., -200., 300.), Vec3d(350., 200., -300.).normalized(), true }, + { Vec3d(250., 300., -200.), Vec3d(-250., -300., 200.).normalized(), true }, + { Vec3d(-300., 350., -250.), Vec3d(300., -350., 250.).normalized(), true }, + { Vec3d::Zero(), Vec3d(-0.5, 0.7, -0.5).normalized(), false }, + { Vec3d::Zero(), Vec3d(0.3, 0.4, 0.85).normalized(), false }, +}; + +double area(const PlanePiece& piece, const SketchPlane& plane) +{ + Vec3d sum = Vec3d::Zero(); + for (size_t i = 0; i < piece.corners.size(); ++i) + sum += piece.corners[i].cross(piece.corners[(i + 1) % piece.corners.size()]); + return 0.5 * std::abs(sum.dot(plane.x_axis.cross(plane.y_axis))); +} + +// How far along the ray (from, unit dir) it crosses `piece`, or nothing if it misses. +std::optional hit_distance(const PlanePiece& piece, const SketchPlane& plane, const Vec3d& from, const Vec3d& dir) +{ + const Vec3d n = plane.x_axis.cross(plane.y_axis); + const double dn = n.dot(dir); + if (std::abs(dn) < 1e-9) + return std::nullopt; + const double t = n.dot(piece.corners.front() - from) / dn; + if (t <= 0.) + return std::nullopt; + const Vec3d x = from + dir * t; + double lo = 0., hi = 0.; + for (size_t i = 0; i < piece.corners.size(); ++i) { + const Vec3d& a = piece.corners[i]; + const Vec3d& b = piece.corners[(i + 1) % piece.corners.size()]; + const double s = (b - a).cross(x - a).dot(n); + lo = std::min(lo, s); + hi = std::max(hi, s); + } + if (lo < 0. && hi > 0.) + return std::nullopt; // outside one of the edges + return t; +} + +struct SightLines +{ + int overlapping = 0; // sight lines through two or more pieces, where draw order matters + int out_of_order = 0; // ...of which meet a nearer piece before a farther one +}; + +// Translucent pieces blend correctly only if, along every line of sight, each piece is drawn after +// every piece behind it. The lines of sight aim at points of the box [lo, hi]. +SightLines sight_lines(const std::vector& planes, double half, const View& view, const Vec3d& lo, const Vec3d& hi) +{ + const std::vector pieces = planes_back_to_front(planes, half, view.eye, view.forward, view.perspective); + std::mt19937 rng(7); + std::uniform_real_distribution unit(0., 1.); + SightLines seen; + for (int r = 0; r < 500; ++r) { + const Vec3d target = lo + (hi - lo).cwiseProduct(Vec3d(unit(rng), unit(rng), unit(rng))); + const Vec3d from = view.perspective ? view.eye : Vec3d(target - view.forward * (10. * half)); + const Vec3d dir = (target - from).normalized(); + double last = std::numeric_limits::max(); + int hits = 0; + bool ok = true; + for (const PlanePiece& piece : pieces) + if (const std::optional t = hit_distance(piece, planes[piece.plane], from, dir)) { + ok = ok && *t <= last + 1e-6 * half; + last = *t; + ++hits; + } + if (hits >= 2) { + ++seen.overlapping; + seen.out_of_order += ok ? 0 : 1; + } + } + return seen; +} + +} // namespace + +TEST_CASE("Fit frames the picked sketch region, not the other sketches", "[DesignSketchTool]") +{ + DesignSketchTool tool; + GLVolumeCollection no_bodies; + show_two_sketches(tool); + tool.set_display_pick(1, 0); + + const BoundingBoxf3 box = tool.fit_box(no_bodies); + REQUIRE(box.defined); + CHECK_THAT(box.min.x(), WithinAbs(40., 0.5)); + CHECK_THAT(box.max.x(), WithinAbs(60., 0.5)); + CHECK_THAT(box.min.y(), WithinAbs(10., 0.5)); + CHECK_THAT(box.max.y(), WithinAbs(30., 0.5)); + // Zoom to selection frames the same region, the padding left to the canvas. + CHECK_THAT(tool.selection_box().min.x(), WithinAbs(40., 0.5)); + CHECK_THAT(tool.selection_box().size().z(), WithinAbs(0., 1e-9)); +} + +TEST_CASE("Fit frames every sketch when nothing is picked", "[DesignSketchTool]") +{ + DesignSketchTool tool; + GLVolumeCollection no_bodies; + show_two_sketches(tool); + + const BoundingBoxf3 box = tool.fit_box(no_bodies); + REQUIRE(box.defined); + CHECK_THAT(box.min.x(), WithinAbs(-65., 0.5)); + CHECK_THAT(box.max.x(), WithinAbs(60., 0.5)); + // Zoom to selection has no such fallback. + CHECK_FALSE(tool.selection_box().defined); +} + +TEST_CASE("Fit frames the sketch being drawn along with the committed ones", "[DesignSketchTool]") +{ + DesignSketchTool tool; + GLVolumeCollection no_bodies; + show_two_sketches(tool); + // A 100 mm line up the XZ plane, whose y axis is world Z. + SketchEntity line; + line.p0 = { 0., 0. }; + line.p1 = { 0., 100. }; + tool.begin_edit({ line }, {}, SketchPlane::XZ()); + + const BoundingBoxf3 box = tool.fit_box(no_bodies); + REQUIRE(box.defined); + CHECK_THAT(box.max.z(), WithinAbs(100., 1e-6)); + CHECK_THAT(box.min.x(), WithinAbs(-65., 0.5)); +} + +TEST_CASE("Fit gives a flat sketch depth, so it can be framed edge-on", "[DesignSketchTool]") +{ + DesignSketchTool tool; + GLVolumeCollection no_bodies; + show_two_sketches(tool); + tool.set_display_pick(2, 0); + + const BoundingBoxf3 box = tool.fit_box(no_bodies); + REQUIRE(box.defined); + CHECK(box.size().z() > 0.); + CHECK_THAT(box.center().z(), WithinAbs(0., 1e-9)); +} + +TEST_CASE("Fit frames nothing when the Design tab shows nothing", "[DesignSketchTool]") +{ + DesignSketchTool tool; + GLVolumeCollection no_bodies; + CHECK_FALSE(tool.fit_box(no_bodies).defined); +} + +TEST_CASE("A sketch's box lies on its own plane", "[DesignSketchTool]") +{ + // A 5 mm circle at (10, 20) on XZ, whose y axis is world Z. + const BoundingBoxf3 box = DesignSketchTool::sketch_box({ circle({ 10., 20. }, 5.) }, SketchPlane::XZ()); + REQUIRE(box.defined); + CHECK_THAT(box.min.x(), WithinAbs(5., 0.05)); + CHECK_THAT(box.max.x(), WithinAbs(15., 0.05)); + CHECK_THAT(box.min.z(), WithinAbs(15., 0.05)); + CHECK_THAT(box.max.z(), WithinAbs(25., 0.05)); + CHECK_THAT(box.size().y(), WithinAbs(0., 1e-9)); + CHECK_FALSE(DesignSketchTool::sketch_box({}, SketchPlane::XY()).defined); + + SketchEntity point; + point.type = SketchEntity::Type::Point; + point.p0 = { 3., 4. }; + const BoundingBoxf3 dot = DesignSketchTool::sketch_box({ point }, SketchPlane::XY()); + REQUIRE(dot.defined); + CHECK_THAT(dot.min.x(), WithinAbs(3., 1e-9)); + CHECK_THAT(dot.min.y(), WithinAbs(4., 1e-9)); +} + +TEST_CASE("A face's box comes from the pick mesh, on a hidden body too", "[DesignSketchTool]") +{ + // One triangle per body: body 0 near the origin, body 1, hidden, 100 mm along X. + indexed_triangle_set its; + its.vertices = { { 0.f, 0.f, 0.f }, { 10.f, 0.f, 0.f }, { 0.f, 10.f, 5.f }, + { 100.f, 0.f, 0.f }, { 110.f, 0.f, 0.f }, { 100.f, 10.f, 5.f } }; + its.indices = { { 0, 1, 2 }, { 3, 4, 5 } }; + const TriangleMesh mesh(its); + const std::vector bodies(2); + const std::vector tri_face{ 0, 0 }; + const std::vector tri_body{ 0, 1 }; + const std::vector visible{ true, false }; + DesignSketchTool tool; + tool.set_solid_pick(&bodies, &mesh, &tri_face, &tri_body, &visible); + + const BoundingBoxf3 box = tool.faces_box({ { 1, 0 } }); + REQUIRE(box.defined); + CHECK_THAT(box.min.x(), WithinAbs(100., 1e-6)); + CHECK_THAT(box.max.x(), WithinAbs(110., 1e-6)); + CHECK_THAT(box.max.z(), WithinAbs(5., 1e-6)); + CHECK_FALSE(tool.faces_box({}).defined); + + // CadDocument::faces_made_by may list a body's faces after a later body's. + const BoundingBoxf3 both = tool.faces_box({ { 1, 0 }, { 0, 0 } }); + REQUIRE(both.defined); + CHECK_THAT(both.min.x(), WithinAbs(0., 1e-6)); + CHECK_THAT(both.max.x(), WithinAbs(110., 1e-6)); +} + +TEST_CASE("Padding a box to frame gives every axis a small extent and leaves a long one alone", "[DesignSketchTool]") +{ + BoundingBoxf3 box; + box.merge(Vec3d(0., 0., 3.)); + box.merge(Vec3d(100., 4., 3.)); + DesignSketchTool::pad_box(box); + CHECK_THAT(box.size().x(), WithinAbs(100., 1e-9)); + CHECK_THAT(box.size().y(), WithinAbs(10., 1e-9)); + CHECK_THAT(box.size().z(), WithinAbs(10., 1e-9)); + CHECK_THAT(box.center().z(), WithinAbs(3., 1e-9)); + + BoundingBoxf3 none; + DesignSketchTool::pad_box(none); + CHECK_FALSE(none.defined); +} + +TEST_CASE("Crossing base planes are drawn back to front from any viewpoint", "[DesignSketchTool]") +{ + const View& view = kViews[GENERATE(range(0, int(std::size(kViews))))]; + const SightLines seen = sight_lines(base_planes(), 75., view, Vec3d::Constant(-0.95 * 75.), Vec3d::Constant(0.95 * 75.)); + CHECK(seen.overlapping >= 200); // of the 500: most lines of sight into the planes cross two + CHECK(seen.out_of_order == 0); +} + +TEST_CASE("Datum planes are drawn back to front among the base planes", "[DesignSketchTool]") +{ + // A datum parallel to XY 30 mm up, and one tilted 30 degrees about X through (0, 0, 10). + std::vector planes = base_planes(); + SketchPlane raised = SketchPlane::XY(); + raised.origin = Vec3d(0., 0., 30.); + SketchPlane tilted; + tilted.origin = Vec3d(0., 0., 10.); + tilted.y_axis = Vec3d(0., std::cos(M_PI / 6.), std::sin(M_PI / 6.)); + tilted.normal = tilted.x_axis.cross(tilted.y_axis); + planes.push_back(raised); + planes.push_back(tilted); + + const View& view = kViews[GENERATE(range(0, int(std::size(kViews))))]; + const SightLines seen = sight_lines(planes, 75., view, Vec3d::Constant(-0.95 * 75.), Vec3d::Constant(0.95 * 75.)); + CHECK(seen.overlapping >= 200); + CHECK(seen.out_of_order == 0); +} + +TEST_CASE("Cutting the base planes along each other keeps every plane whole", "[DesignSketchTool]") +{ + const std::vector planes = base_planes(); + const double half = 75.; + const View& view = kViews[0]; + std::vector covered(planes.size(), 0.); + for (const PlanePiece& piece : planes_back_to_front(planes, half, view.eye, view.forward, view.perspective)) + covered[piece.plane] += area(piece, planes[piece.plane]); + for (double a : covered) + CHECK_THAT(a, WithinRel(4. * half * half, 1e-9)); +} + +TEST_CASE("Base reference planes sit in the octant their names face, clear of the axes", "[DesignSketchTool]") +{ + // Each square is flat in one coordinate and at least `gap` out along the other two, toward + // (+X, -Y, +Z), so no two of them meet: a point of XY has z = 0, every point of XZ and YZ has + // z >= gap. + const Vec3d origin(128., 128., 0.), octant(1., -1., 1.); + const double half = 32., gap = reference_square_gap(half); + const std::vector squares = reference_squares(origin, half); + const int flat[] = { 2, 1, 0 }; // XY in z, XZ in y, YZ in x + for (int i = 0; i < 3; ++i) { + // The side a name reads from faces into the same octant. + CHECK(squares[i].x_axis.cross(squares[i].y_axis).dot(octant) > 0.); + for (const Vec2d& corner : { Vec2d(-half, -half), Vec2d(half, -half), Vec2d(half, half), Vec2d(-half, half) }) { + const Vec3d x = squares[i].to_world(corner) - origin; + for (int k = 0; k < 3; ++k) + if (k == flat[i]) + CHECK_THAT(x[k], WithinAbs(0., 1e-9)); + else { + CHECK(octant[k] * x[k] >= gap - 1e-9); + CHECK(octant[k] * x[k] <= gap + 2. * half + 1e-9); + } + } + } +} + +TEST_CASE("From the front no base reference plane stands behind another", "[DesignSketchTool]") +{ + // Looking from the front and above, as the Design tab opens: XY lies below the X axis on screen + // and XZ above it, and YZ is seen edge-on, so no line of sight crosses two squares. + const double half = 32., e = reference_square_gap(half) + 2. * half; + const std::vector squares = reference_squares(Vec3d::Zero(), half); + const double elevation = M_PI / 180. * GENERATE(20., 45., 70.); + const View front{ Vec3d::Zero(), Vec3d(0., std::cos(elevation), -std::sin(elevation)), false }; + CHECK(sight_lines(squares, half, front, Vec3d(0., -e, 0.), Vec3d(e, 0., e)).overlapping == 0); +} + +TEST_CASE("A datum's reference square stays centred on its origin", "[DesignSketchTool]") +{ + SketchPlane datum = SketchPlane::XY(); + datum.origin = Vec3d(10., 20., 30.); + CHECK((reference_square(datum, 3, 32.).origin - datum.origin).norm() < 1e-12); +} + +TEST_CASE("Base reference planes are drawn back to front without being cut", "[DesignSketchTool]") +{ + const double half = 32.; + const std::vector squares = reference_squares(Vec3d::Zero(), half); + int overlapping = 0; + for (const View& view : kViews) { + const std::vector pieces = planes_back_to_front(squares, half, view.eye, view.forward, view.perspective); + CHECK(pieces.size() == 3); + for (const PlanePiece& piece : pieces) + CHECK(piece.corners.size() == 4); + const double e = reference_square_gap(half) + 2. * half; + const SightLines seen = sight_lines(squares, half, view, Vec3d(0., -e, 0.), Vec3d(e, 0., e)); + CHECK(seen.out_of_order == 0); + overlapping += seen.overlapping; + } + // These views do see squares behind one another, so the order is actually put to the test. + CHECK(overlapping >= 50); +} + +TEST_CASE("A click takes the nearest reference square along the ray", "[DesignSketchTool]") +{ + const double half = 32.; // the squares span 8..72 out along both their axes + const std::vector squares = reference_squares(Vec3d::Zero(), half); + // From the front left through YZ (x = 0) at (0, -20, 40), then on through XZ (y = 0) at (20, 0, 40). + const Vec3d along(1., 1., 0.); + CHECK(pick_reference_square(squares, half, Vec3d(-40., -60., 40.), along) == 2); + // The same line walked the other way meets XZ first. + CHECK(pick_reference_square(squares, half, Vec3d(60., 40., 40.), -along) == 1); + // Straight down onto XY, and down the gap beside it, which holds nothing. + CHECK(pick_reference_square(squares, half, Vec3d(40., -40., 100.), Vec3d(0., 0., -1.)) == 0); + CHECK(pick_reference_square(squares, half, Vec3d(4., -40., 100.), Vec3d(0., 0., -1.)) == -1); + // Looking away from the squares. + CHECK(pick_reference_square(squares, half, Vec3d(40., -40., 100.), Vec3d(0., 0., 1.)) == -1); +} + +TEST_CASE("A base plane's name lies inside its own square", "[DesignSketchTool]") +{ + const double half = 32.; + const std::vector squares = reference_squares(Vec3d(128., 128., 0.), half); + const char* names[] = { "XY", "XZ", "YZ" }; + for (int i = 0; i < 3; ++i) + for (const Vec3d& corner : reference_label_box(squares[i], half, names[i])) { + const Vec3d d = corner - squares[i].origin; + CHECK_THAT(d.dot(squares[i].x_axis.cross(squares[i].y_axis)), WithinAbs(0., 1e-9)); + CHECK(std::abs(d.dot(squares[i].x_axis)) < half); + CHECK(std::abs(d.dot(squares[i].y_axis)) < half); + } +} + +TEST_CASE("A move arrow drag moves the body by the cursor's travel, wherever the arrow is grabbed", "[DesignSketchTool]") +{ + DesignSketchTool tool; + Transform3d moved = Transform3d::Identity(); + tool.on_body_move_changed = [&moved](int, const Transform3d& xform) { moved = xform; }; + tool.set_move_gizmo(0, Vec3d::Zero(), Transform3d::Identity(), 10.); + // Looking straight down onto the X arrow, the cursor over x = `x` on it. + const auto ray_at = [](double x) { return Linef3(Vec3d(x, 0., 100.), Vec3d(x, 0., 0.)); }; + + // Grabbed 12 mm out from the body centre: a 1 mm move moves the body 1 mm, not 13. + tool.grab_move_arrow(0, ray_at(12.)); + tool.drag_move_arrow(ray_at(13.)); + CHECK_THAT(moved.translation().x(), WithinAbs(1., 1e-9)); + tool.drag_move_arrow(ray_at(17.)); + CHECK_THAT(moved.translation().x(), WithinAbs(5., 1e-9)); + + // The next drag carries on from where the body was left: grabbed 3 mm past it, moved 2 mm. + tool.grab_move_arrow(0, ray_at(8.)); + tool.drag_move_arrow(ray_at(10.)); + CHECK_THAT(moved.translation().x(), WithinAbs(7., 1e-9)); +} + +TEST_CASE("A move arrow pressed while looking down its axis does not jump on the first move", "[DesignSketchTool]") +{ + DesignSketchTool tool; + Transform3d moved = Transform3d::Identity(); + tool.on_body_move_changed = [&moved](int, const Transform3d& xform) { moved = xform; }; + tool.set_move_gizmo(0, Vec3d::Zero(), Transform3d::Identity(), 10.); + const auto ray_at = [](double x) { return Linef3(Vec3d(x, 0., 100.), Vec3d(x, 0., 0.)); }; + + // The press projects nowhere on the X axis, so the first move only finds where it was grabbed. + tool.grab_move_arrow(0, Linef3(Vec3d(100., 0., 0.), Vec3d::Zero())); + tool.drag_move_arrow(ray_at(13.)); + CHECK_THAT(moved.translation().x(), WithinAbs(0., 1e-9)); + tool.drag_move_arrow(ray_at(15.)); + CHECK_THAT(moved.translation().x(), WithinAbs(2., 1e-9)); +}