Compare commits

..
Author SHA1 Message Date
peachismomo 0bf0901a95 fix: use WEBKIT_DISABLE_DMABUF_RENDERER 1 when using WebKitGTK >= 2.46 2026-10-09 03:31:44 +08:00
Error404JoyNotFound 9d32c1c545 docs: correct layer_num index tooltip to 0-based (fixes #10340) (#15984) 2026-10-08 15:44:03 -03:00
Ian Chua 67a16dabca fix: prompt for permission when plugin tries to create a thread (#16248)
* fix: prompt for permission when plugin tries to create a thread

* fix: request permission on main thread
2026-10-08 23:49:33 +08:00
Ian Bassi 59fc97fb28 Extend Separated Infills (#16274) 2026-10-08 09:43:46 -03:00
LixNix 7d44b60ae4 H2D X2D Multi Nozzle Size Printing Support (#14125) 2026-10-08 20:28:32 +08:00
ExPikaPakaandExPikaPaka 776ca6a3e4 build_linux.sh: add -J to build several dependencies at once (#16282)
* build_linux.sh: add -J to build several dependencies at once

The top-level deps build is fixed at -j1, so one dependency compiles at a
time while the small ones leave most cores idle. -J N raises that level.

-j still applies in full to each dependency, so the worst case is -J times
-j compile jobs: ninja has no job server to share a pool across the nested
builds. Without -J nothing changes.

* Quote the job count for shellcheck (SC2086)

---------

Co-authored-by: ExPikaPaka <mrfsfyt@gmail.com>
2026-10-08 18:56:02 +08:00
SoftFeverandxxxsam ee26e94170 Fix H2D prints rejected for a missing Filament Track Switch
Fixes #15927

Co-authored-by: xxxsam <31843242+xxxsam92123@users.noreply.github.com>
2026-10-08 17:49:04 +08:00
Ian Chua d401d4f837 revert: profile changes made for OTA testing (#16280) 2026-10-08 16:13:12 +08:00
HanifKoh 18b70844d1 Defer Plugin Dock Panes Until the Plater Is Shown (#16257)
A plugin enabled at startup loads before the main frame exists, so a
dock panel it opens from on_load was dropped by the one-shot CallAfter
that found no plater. Opened a moment later, before the frame was laid
out, the pane was sized against the unsized frame and track_docked_size
kept that width. Poll until the plater is shown on screen, then build
the pane; release the reserved id instead when the app is closing.
2026-10-08 14:18:51 +08:00
HanifKoh c8f2498681 Keep GLCanvas3D Building With SLIC3R_CAD Off (#16256)
The bed-axes toggle added for the Design tab's reference planes reads
m_design_sketch_tool, which only exists under SLIC3R_CAD. Compute the
flag once and read the sketch tool inside the same guard as its other
uses.
2026-10-08 14:02:34 +08:00
HanifKoh 30902561c0 Stop Exporting Names Through Usings in the Remaining Headers (#16250)
The last headers with a using or namespace alias at namespace scope:

- TCPConsole.hpp imported boost::asio::ip::tcp into Slic3r::Utils for
  two member declarations. The alias is now a private member of the
  class.
- WebSocketClient.hpp declared four namespace aliases and a tcp alias
  at global scope, each used only by the header. The names are spelled
  out.
- Repair.hpp aliased CGAL::Polygon_mesh_processing as PMP in
  Slic3r::tex2color. The three functions that use it declare the alias
  themselves.
- PreciseSeam.hpp, Thumbnails.hpp and MarchingSquares.hpp used a
  using-declaration or directive for one or two spots each; those spots
  are qualified. Thumbnails.hpp's "PNG"sv default argument becomes
  "PNG", which converts to the std::string_view parameter the same way.
- tests/sla_print/sla_test_utils.hpp had "using namespace Slic3r;" and
  tests/filament_group/fg_test_serialization.hpp "using json =
  nlohmann::json;" at global scope. The headers qualify their own names;
  the two SLA test sources get the directive themselves.

Also removed: twelve type aliases in headers that nothing references
(ConflictObjName, CircleSqf, CircleSqd, TRawBuffer, DistanceFunction,
SamePair, ExtruderNozzleInfos, Vec2dEvent, Vec2dsEvent, Vec3dEvent,
t_option, t_optgroups, Plater::fs_path) and a duplicate
fn_ft_job_msg_destroy alias in FileTransferUtils.hpp.
2026-10-08 13:59:12 +08:00
HanifKoh 3fc515f48d Prompt for Permission When a Plugin Calls os.exec (#16254)
* Prompt for Permission When a Plugin Calls os.exec

* Add a ProcessReplace Audit Category for os.exec
2026-10-08 13:52:09 +08:00
HanifKoh 6cd5feed79 Remove Duplicate Includes and the Dead GCodeSender Sources (#16249)
46 files include the same header twice at file scope, outside any #if,
66 times in all:
Model.cpp included Model.hpp twice, Utils.hpp <algorithm> and
<string_view> twice, seven GUI headers <wx/dataview.h> and
<wx/artprov.h> twice. The second include of each is removed.

GCodeSender.cpp and GCodeSender.hpp have been commented out of
libslic3r/CMakeLists.txt since 2022 and their only two includes are
commented out as well. Both files go, with the commented lines, and
the CMake entry for SLA/SupportTreeIGL.cpp, a file that no longer
exists.
2026-10-08 13:51:50 +08:00
HanifKoh 09530ef7c4 Size a Project's Mixed-Colour Metadata to the Filaments in the CLI (#16247)
The mixed-colour metadata options are parallel per-slot arrays in the project
config. A project saved before they were sized per slot stores a single value
for the gradient ones, and one saved before they existed stores none. The GUI
sizes all seven to the filament count when it opens a project; the CLI kept
the stored arrays and exported one-element defaults for absent ones, so a
project it exported carried one-element arrays where the GUI writes one entry
per filament. Slicing is unaffected, every reader treats a missing entry as
not mixed / no gradient, but the GUI-vs-CLI comparison reported the four
gradient keys on every mixed-filament project.

The resize helper moves from PresetBundle.cpp, where it was file-local, to
PrintConfig.cpp next to set_filament_dev_options(). It creates an option the
config lacks before sizing it, a no-op for the bundle's project config where
all seven always exist. The CLI calls it with its filament count once the
project and loaded filaments are merged, after the check that every mixed
slot has a filament of its own.
2026-10-08 13:40:36 +08:00
199 changed files with 6428 additions and 15019 deletions
@@ -61,8 +61,10 @@ available; GTK2/WebKit1 is an opt-out configuration the GUI does not support.
11. A web host that re-themes in place handles `EVT_WEBVIEW_RECREATED` without `Skip()`; one that
needs a reload lets it through. §[Orca wrapper](#orca-webview-wrapper-widgetswebview)
12. Keep `WebViewWebKit`'s destructor removing the `"wx"` handler. §[Orca wrapper](#orca-webview-wrapper-widgetswebview)
13. Do not widen `WEBKIT_DISABLE_COMPOSITING_MODE` beyond Orca's default-path XWayland case, and never
make a page's progress depend only on a C++→JS callback. §[WebKitGTK on Linux](#webkitgtk-on-linux-sessions)
13. Do not widen `WEBKIT_DISABLE_COMPOSITING_MODE` beyond Orca's default-path XWayland case. Disable the
WebKit DMA-BUF renderer only for the NVIDIA proprietary driver on native Wayland (GNOME/gtk#8056), and
never make a page's progress depend only on a C++→JS callback.
§[WebKitGTK on Linux](#webkitgtk-on-linux-sessions)
14. GL attribute lists: legacy `int[]` lists end with `0` and spell out `WX_GL_RGBA` and
`WX_GL_DOUBLEBUFFER`; `wxGLAttributes`/`wxGLContextAttrs` end with `EndList()`; MSAA is requested
explicitly. §[wxGLCanvas](#wxglcanvas-and-wxglcontext)
@@ -599,6 +601,25 @@ Runtime backend detection elsewhere uses Orca's `is_running_on_wayland()` / `is_
Cite: c12912e0df (`src/OrcaSlicer.cpp`; `resources/web/guide/0/load.js` `OnInit`
`setTimeout("JumpToTarget()", …)`), 9446030079 (the `GDK_BACKEND=x11` opt-in branch).
**DMA-BUF renderer / explicit sync (NVIDIA + Wayland).**
- **Rule:** On the Wayland default path, set `WEBKIT_DISABLE_DMABUF_RENDERER=1` non-replacing, gated to
`__linux__` + native Wayland (not the forced-X11 fallback) + `/proc/driver/nvidia/version` +
`WebView::WebKitAtLeast(2, 46)`. The version gate uses the runtime `webkit_get_major_version()` /
`webkit_get_minor_version()` getters (no GTK init needed), not a compile-time macro, and 2.46 is the
oldest release with a confirmed crash report — narrower gates (e.g. 2.54) would miss 2.46–2.52 victims.
**Why:** WebKitGTK's DMA-BUF renderer arms `linux-drm-syncobj-v1` on the toplevel surface; GTK3 then
commits its first shared-memory frame without an acquire point, and KWin/Mutter reject the commit with
`Error 71 (Protocol error)` — GDK turns that into `_exit(1)` before Orca logs anything. The defect is
GTK3's `gdk_wayland_window_attach_image()` (GNOME/gtk#8056); WebKit only triggers it, the NVIDIA
proprietary driver has no implicit-sync fallback (Mesa tolerates it), and no upstream fix or PR exists.
This is a different variable from `WEBKIT_DISABLE_COMPOSITING_MODE` and does not replace it.
```cpp
// Wayland default path, before GTK init
if (!x11_backend && wayland && ::access("/proc/driver/nvidia/version", F_OK) == 0 &&
WebView::WebKitAtLeast(2, 46))
::setenv("WEBKIT_DISABLE_DMABUF_RENDERER", "1", /* replace */ false);
```
## wxGLCanvas and wxGLContext
**Attributes.**
+36 -3
View File
@@ -8,9 +8,10 @@ SCRIPT_PATH=$(dirname "$(readlink -f "${0}")")
pushd "${SCRIPT_PATH}" > /dev/null
function usage() {
echo "Usage: ./${SCRIPT_NAME} [-1][-b][-c][-d][-D][-e][-F][-g][-h][-i][-j N][-p][-r][-s][-t][-u][-l][-L]"
echo "Usage: ./${SCRIPT_NAME} [-1][-b][-c][-d][-D][-e][-F][-g][-h][-i][-j N][-J N][-p][-r][-s][-t][-u][-l][-L]"
echo " -1: limit builds to one core (where possible)"
echo " -j N: limit builds to N cores (where possible)"
echo " -J N: build up to N dependencies at a time, each still using -j jobs (default: 1)"
echo " -b: build in Debug mode"
echo " -c: force a clean build"
echo " -C: enable ANSI-colored compile output (GNU/Clang only)"
@@ -36,12 +37,13 @@ function usage() {
}
SLIC3R_PRECOMPILED_HEADERS="ON"
DEPS_PARALLEL=""
unset name
BUILD_DIR=build
BUILD_CONFIG=Release
FORWARDED_ARGS=()
while getopts ":1j:bcCdDeFghiprstulL" opt ; do
while getopts ":1j:J:bcCdDeFghiprstulL" opt ; do
case ${opt} in
1 )
export CMAKE_BUILD_PARALLEL_LEVEL=1
@@ -51,6 +53,10 @@ while getopts ":1j:bcCdDeFghiprstulL" opt ; do
export CMAKE_BUILD_PARALLEL_LEVEL=$OPTARG
FORWARDED_ARGS+=("-j" "$OPTARG")
;;
J )
DEPS_PARALLEL=$OPTARG
FORWARDED_ARGS+=("-J" "$OPTARG")
;;
b )
BUILD_DIR=build-dbg
BUILD_CONFIG=Debug
@@ -135,6 +141,11 @@ if [[ -n "${CLEAN_DOCKER_IMAGE}" ]] && [[ -z "${USE_DOCKER}" ]] ; then
exit 1
fi
if [[ -n "${DEPS_PARALLEL}" ]] && ! [[ "${DEPS_PARALLEL}" =~ ^[1-9][0-9]*$ ]] ; then
echo "Error: -J expects a positive integer."
exit 1
fi
function check_available_memory_and_disk() {
FREE_MEM_GB=$(free --gibi --total | grep 'Mem' | rev | cut --delimiter=" " --fields=1 | rev)
MIN_MEM_GB=10
@@ -537,7 +548,29 @@ if [[ -n "${BUILD_DEPS}" ]] ; then
fi
print_and_run cmake -S deps -B deps/$BUILD_DIR "${CMAKE_C_CXX_COMPILER_CLANG[@]}" "${CMAKE_LLD_LINKER_ARGS[@]}" "${CMAKE_CCACHE_ARGS[@]}" -G Ninja "${COLORED_OUTPUT}" "${BUILD_ARGS[@]}"
print_and_run cmake --build deps/$BUILD_DIR -j1
# The top-level build runs one dependency at a time by default, which keeps the console
# output readable and lets that dependency's own build use all of CMAKE_BUILD_PARALLEL_LEVEL.
# -J raises the top level instead, and -j still applies in full to every dependency, so the
# worst case is -J times -j compile jobs at once. Ninja has no job server to share a pool
# across the nested builds, so that ceiling is not enforced anywhere: pick -J to suit the RAM.
DEPS_JOBS=1
if [[ -n "${DEPS_PARALLEL}" ]] ; then
DEPS_JOBS=${DEPS_PARALLEL}
SAVED_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL-}
export CMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL:-$(nproc)}
echo "Building up to ${DEPS_JOBS} dependencies at a time, ${CMAKE_BUILD_PARALLEL_LEVEL} jobs each: up to $(( DEPS_JOBS * CMAKE_BUILD_PARALLEL_LEVEL )) compile jobs at once."
fi
print_and_run cmake --build deps/$BUILD_DIR -j"${DEPS_JOBS}"
if [[ -n "${DEPS_PARALLEL}" ]] ; then
# Give the whole -j back to the OrcaSlicer build below.
if [[ -n "${SAVED_PARALLEL_LEVEL}" ]] ; then
export CMAKE_BUILD_PARALLEL_LEVEL=${SAVED_PARALLEL_LEVEL}
else
unset CMAKE_BUILD_PARALLEL_LEVEL
fi
fi
fi
if [[ -n "${BUILD_ORCA}" ]] || [[ -n "${BUILD_TESTS}" ]] ; then
-7
View File
@@ -131,13 +131,6 @@
<true/>
<key>NSHumanReadableCopyright</key>
<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
<key>NSLocalNetworkUsageDescription</key>
<string>OrcaSlicer uses your local network to discover and connect to printers.</string>
<key>NSBonjourServices</key>
<array>
<string>_octoprint._tcp</string>
<string>_http._tcp</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<!-- Disable App Transport Security. Resolves https://github.com/OrcaSlicer/OrcaSlicer/issues/791 -->
+90
View File
@@ -0,0 +1,90 @@
# Separated infills — High Level Design
## Purpose and scope
An object's infill patterns are laid out from one reference point, the center
of the object. When an object groups several parts that do not touch, every
part cuts the same object-wide pattern at a different place, so equal parts get
different infill. `separated_infills` lays the infill of every connected body
out from the center of that body instead, as if the body were sliced on its own.
The option covers sparse infill, internal solid infill and bridges. Top and
bottom surfaces are left to `center_of_surface_pattern`, which centers the
Archimedean Chords and Octagram Spiral surface patterns. The option is off by
default; with it off, or for an object made of a single body, no fill changes.
Adaptive Cubic and Support Cubic do not depend on the option: they always fill
each body on its own (see Octree infill).
## Bodies
`PrintObject::prepare_infill()` groups the islands of every layer (`lslices`)
into 3D connected bodies before bridges are detected, so bridge anchors and
printed infill share one origin. Islands on adjacent layers belong to one body
when their slices overlap. Parts that touch or overlap form one body. Separate
parts, disconnected islands of one mesh, and interleaved parts that never touch,
such as chain links, each form their own. Every island stores the index of its
body in `Layer::lslices_separated_component_ids`, and
`PrintObject::separated_body_bboxes()` holds the bounding box of each body over
all its layers.
The pass runs when a region uses separated infills, per-model surface centering
or an octree infill pattern. It is skipped when the object has one model part
that cannot be split, since a single body already shares the object center.
## Centering a fill
`infill_body()` matches each fill region to the island it overlaps most, among
the islands whose bounding boxes overlap it, and the filler takes the bounding
box of that island's body instead of the object's. The box covers every layer
of the body, which is the box the body gets when sliced alone, so patterns that
depend on its extent as well as its center come out the same too. Bridge
anchoring (`Layer::generate_sparse_infill_polylines_for_anchoring()`) makes the
same choice, so the anchors match the printed infill.
The patterns follow the body's box in one of two ways:
- Rectilinear and its variants, Line, Grid, Triangles, Tri-hexagon, Cubic,
Quarter Cubic, Lateral Lattice, Lateral Honeycomb and the plane-path patterns
(Hilbert Curve, Archimedean Chords, Octagram Spiral) are laid out from the
box: they phase their lines through its center, and Hilbert Curve and the Zig
Zag links start from its corner. `Fill::extended_object_bounding_box()`
extends the box about its center, so it also serves a box that is not
centered on the origin.
- Honeycomb, 3D Honeycomb, Cross Hatch, Gyroid, TPMS-D and TPMS-FK are laid out
from the coordinate origin, which is the object center. They return true from
`Fill::aligned_to_origin()`, and `Fill::fill_surface()` moves each region so
that the box center lands on the origin, fills it, and moves the paths back.
With the default box the center is the origin, so nothing moves.
`is_separable_infill_pattern()` lists these patterns. The settings show the
option only when the sparse infill pattern is one of them.
## Octree infill
Adaptive Cubic and Support Cubic take their lines from an octree, laid out from
the center of the mesh it is built from and refined near its surfaces. An
octree of the whole object would lay every part out from the object's center
and refine it near the other parts, so these patterns
(`is_octree_infill_pattern()`) always fill each body on its own, and the
settings hide the option for them.
For an object of several bodies, `PrintObject::prepare_adaptive_infill_data()`
builds one octree per body (`FillAdaptive::Octrees`) from the triangles of that
body only, which is the octree the body gets when sliced alone. Each connected
component of the mesh goes to the body that most of a few sampled triangles lie
on. A sample is taken a layer height inside the solid, behind the triangle, and
looked up in the islands of the nearest layer. Each internal bridge surface goes
to the body of its island. The fill takes the octree of the region's body, from
the same `infill_body()`. The octree of the whole object is built only for an
object of a single body, or when some body received no triangles, which then
uses it.
## Patterns left out
Lightning grows its trees over the whole object, so moving a reference point
cannot center it on one body. Concentric and Spiral Inset follow the outline of
each region and need no centering.
Solid infill at full density spaces its lines over the extent of each region,
so it is already independent of the other bodies. Only bridges, which keep
their line spacing, and the plane-path solid patterns depend on the center.
+161 -30
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -4046,9 +4046,6 @@ msgstr ""
msgid "You need to select the material type and color first."
msgstr ""
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, possible-c-format, possible-boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr ""
@@ -5782,7 +5779,7 @@ msgstr ""
msgid "Size:"
msgstr ""
#, possible-boost-format
#, possible-c-format, possible-boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr ""
@@ -6621,22 +6618,6 @@ msgstr ""
msgid "File '%s' was lost! Please download it again."
msgstr ""
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, possible-c-format, possible-boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, possible-c-format, possible-boost-format
msgid ""
"File: %s\n"
@@ -10207,12 +10188,6 @@ msgstr ""
msgid "Clean Up"
msgstr ""
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr ""
@@ -23619,6 +23594,165 @@ msgstr ""
msgid "Size: %.1f × %.1f mm"
msgstr ""
msgid "Primitive"
msgstr ""
msgid "Empty mesh generated"
msgstr ""
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr ""
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr ""
msgid "Width (X)"
msgstr ""
msgid "Depth (Y)"
msgstr ""
msgid "Height (Z)"
msgstr ""
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr ""
msgid "Top R"
msgstr ""
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr ""
msgid "Minor R"
msgstr ""
msgid "All edges"
msgstr ""
msgid "Top edges"
msgstr ""
msgid "Bottom edges"
msgstr ""
msgid "Lateral edges"
msgstr ""
msgid "Mesh resolution"
msgstr ""
msgid "Add Shape"
msgstr ""
msgid "No outer profile"
msgstr ""
msgid "Failed to make outer face"
msgstr ""
msgid "Failed to build face with holes"
msgstr ""
msgid "Revolve failed"
msgstr ""
msgid "Profile"
msgstr ""
msgid "Start new profile (for holes)"
msgstr ""
msgid "Segments"
msgstr ""
msgid "Sides"
msgstr ""
msgid "Click on canvas to draw"
msgstr ""
msgid "Snap to grid"
msgstr ""
msgid "Grid step"
msgstr ""
msgid "Outer"
msgstr ""
msgid "closed"
msgstr ""
#. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing
#, possible-boost-format
msgid "%1% %2%: %3% points %4%"
msgstr ""
msgid "XY (Top)"
msgstr ""
msgid "XZ (Front)"
msgstr ""
msgid "YZ (Side)"
msgstr ""
msgid "Revolve deg"
msgstr ""
msgid "Set to 0 for extrude, >0 for revolve"
msgstr ""
msgid "Pocket (cut)"
msgstr ""
#, possible-c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] ""
msgstr[1] ""
msgid "Draw a closed profile to enable"
msgstr ""
msgid "Clear all"
msgstr ""
msgid "Empty result"
msgstr ""
#, possible-boost-format
msgid "Extrude: %1%"
msgstr ""
#, possible-boost-format
msgid "Revolve: %1%"
msgstr ""
msgid "No object selected"
msgstr ""
msgid "Face failed"
msgstr ""
msgid "Face with holes failed"
msgstr ""
msgid "Tool mesh empty"
msgstr ""
msgid "Pocket added (negative volume)"
msgstr ""
#, possible-boost-format
msgid "Pocket: %1%"
msgstr ""
msgctxt "Keyboard Shortcut"
msgid "Ins"
msgstr ""
@@ -26206,9 +26340,6 @@ msgstr ""
msgid "An error occurred loading %s"
msgstr ""
msgid "/"
msgstr ""
#, possible-boost-format
msgid "Load %1% to %2%"
msgstr ""
+213 -233
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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"
@@ -4426,9 +4426,6 @@ msgstr "Estàs segur que vols esborrar la informació del filament?"
msgid "You need to select the material type and color first."
msgstr "Primer heu de seleccionar el tipus de material i el color."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Introduïu un valor vàlid (K a %.1f~%.1f)"
@@ -6300,7 +6297,7 @@ msgid "Size:"
msgstr "Mida:"
# AI Translated
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "S'han trobat conflictes de rutes de G-code a la capa %d, Z = %.2lfmm. Si us plau, separeu els objectes conflictius més lluny ( %s <-> %s )."
@@ -7180,22 +7177,6 @@ msgstr "El fitxer .gcode.3mf no conté dades de G-code. Lamineu-lo amb Orca Slic
msgid "File '%s' was lost! Please download it again."
msgstr "L'arxiu '%s' s'ha perdut! Si us plau, descarregueu-lo de nou."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11284,12 +11265,6 @@ msgstr "Cancel·lar el timelapse i imprimir"
msgid "Clean Up"
msgstr "Netejar"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Preparant el treball d'impressió"
@@ -27152,6 +27127,214 @@ msgstr "Aquest tipus de lletra no té contorn per a aquest text"
msgid "Size: %.1f × %.1f mm"
msgstr "Mida: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Primitiva"
# AI Translated
msgid "Empty mesh generated"
msgstr "S'ha generat una malla buida"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Caixa"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Ràpid:"
# AI Translated
msgid "Width (X)"
msgstr "Amplada (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Profunditat (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Alçada (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "R inferior"
# AI Translated
msgid "Top R"
msgstr "R superior"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "R major"
# AI Translated
msgid "Minor R"
msgstr "R menor"
# AI Translated
msgid "All edges"
msgstr "Totes les arestes"
# AI Translated
msgid "Top edges"
msgstr "Arestes superiors"
# AI Translated
msgid "Bottom edges"
msgstr "Arestes inferiors"
# AI Translated
msgid "Lateral edges"
msgstr "Arestes laterals"
# AI Translated
msgid "Mesh resolution"
msgstr "Resolució de la malla"
# AI Translated
msgid "Add Shape"
msgstr "Afegir forma"
# AI Translated
msgid "No outer profile"
msgstr "No hi ha cap perfil exterior"
# AI Translated
msgid "Failed to make outer face"
msgstr "No s'ha pogut crear la cara exterior"
# AI Translated
msgid "Failed to build face with holes"
msgstr "No s'ha pogut construir la cara amb forats"
# AI Translated
msgid "Revolve failed"
msgstr "La revolució ha fallat"
# AI Translated
msgid "Profile"
msgstr "Perfil"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Començar un perfil nou (per a forats)"
# AI Translated
msgid "Segments"
msgstr "Segments"
# AI Translated
msgid "Sides"
msgstr "Costats"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Feu clic al llenç per dibuixar"
# AI Translated
msgid "Snap to grid"
msgstr "Ajustar a la graella"
# AI Translated
msgid "Grid step"
msgstr "Pas de la graella"
# AI Translated
msgid "Outer"
msgstr "Exterior"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% punts %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (Superior)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (Frontal)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (Lateral)"
# AI Translated
msgid "Revolve deg"
msgstr "Graus de revolució"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "Establiu 0 per a extrusió, >0 per a revolució"
# AI Translated
msgid "Pocket (cut)"
msgstr "Cavitat (tall)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu perfil tancat"
msgstr[1] "%zu perfils tancats"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Dibuixeu un perfil tancat per activar-ho"
# AI Translated
msgid "Clear all"
msgstr "Esborrar-ho tot"
# AI Translated
msgid "Empty result"
msgstr "Resultat buit"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Extrusió: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Revolució: %1%"
# AI Translated
msgid "No object selected"
msgstr "No hi ha cap objecte seleccionat"
# AI Translated
msgid "Face failed"
msgstr "No s'ha pogut crear la cara"
# AI Translated
msgid "Face with holes failed"
msgstr "No s'ha pogut crear la cara amb forats"
# AI Translated
msgid "Tool mesh empty"
msgstr "La malla de l'eina és buida"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Cavitat afegida (volum negatiu)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Cavitat: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -30544,9 +30727,6 @@ msgstr "Activar les eines de desenvolupament"
msgid "An error occurred loading %s"
msgstr "S'ha produït un error en carregar %s"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -31227,209 +31407,6 @@ 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 "Primitive"
#~ msgstr "Primitiva"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "S'ha generat una malla buida"
# AI Translated
#~ msgid "Box"
#~ msgstr "Caixa"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Ràpid:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Amplada (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Profunditat (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Alçada (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "R inferior"
# AI Translated
#~ msgid "Top R"
#~ msgstr "R superior"
# AI Translated
#~ msgid "Major R"
#~ msgstr "R major"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "R menor"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Totes les arestes"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Arestes superiors"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Arestes inferiors"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Arestes laterals"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Resolució de la malla"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Afegir forma"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "No hi ha cap perfil exterior"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "No s'ha pogut crear la cara exterior"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "No s'ha pogut construir la cara amb forats"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "La revolució ha fallat"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Perfil"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Començar un perfil nou (per a forats)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segments"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Costats"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Feu clic al llenç per dibuixar"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Ajustar a la graella"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Pas de la graella"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Exterior"
# AI Translated
#~ msgid "closed"
#~ msgstr "tancat"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% punts %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (Superior)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (Frontal)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (Lateral)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Graus de revolució"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "Establiu 0 per a extrusió, >0 per a revolució"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Cavitat (tall)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu perfil tancat"
#~ msgstr[1] "%zu perfils tancats"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Dibuixeu un perfil tancat per activar-ho"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Esborrar-ho tot"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Resultat buit"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Extrusió: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Revolució: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "No hi ha cap objecte seleccionat"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "No s'ha pogut crear la cara"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "No s'ha pogut crear la cara amb forats"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "La malla de l'eina és buida"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Cavitat afegida (volum negatiu)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Cavitat: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Experimental) Utilitza agents d'impressora en lloc d'amfitrions d'impressió"
@@ -32486,6 +32463,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "S'ha produït un error en carregar "
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+215 -235
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\n"
"POT-Creation-Date: 2026-10-06 15:16-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: Jakub Hencl\n"
"Language-Team: \n"
@@ -4384,9 +4384,6 @@ msgstr "Opravdu chcete vymazat informace o filamentu?"
msgid "You need to select the material type and color first."
msgstr "Nejprve musíte vybrat typ materiálu a barvu."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Zadejte platnou hodnotu (K v rozsahu %.1f~%.1f)"
@@ -6269,7 +6266,7 @@ msgid "Size:"
msgstr "Velikost:"
# AI Translated
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "Byly nalezeny konflikty drah G-code ve vrstvě %d, Z = %.2lf mm. Oddělte prosím konfliktní objekty více od sebe (%s <-> %s)."
@@ -7159,22 +7156,6 @@ msgstr "Soubor .gcode.3mf neobsahuje žádná G-code data. Prosím, rozřežte m
msgid "File '%s' was lost! Please download it again."
msgstr "Soubor '%s' byl ztracen! Stáhněte jej prosím znovu."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11248,12 +11229,6 @@ msgstr "Zrušit časosběr a tisknout"
msgid "Clean Up"
msgstr "Vyčistit"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Příprava tiskové úlohy"
@@ -27160,6 +27135,215 @@ msgstr "Toto písmo nemá pro tento text žádný obrys"
msgid "Size: %.1f × %.1f mm"
msgstr "Velikost: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Primitiv"
# AI Translated
msgid "Empty mesh generated"
msgstr "Byla vygenerována prázdná síť"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Kvádr"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Rychle:"
# AI Translated
msgid "Width (X)"
msgstr "Šířka (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Hloubka (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Výška (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "Spodní R"
# AI Translated
msgid "Top R"
msgstr "Horní R"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "Hlavní R"
# AI Translated
msgid "Minor R"
msgstr "Vedlejší R"
# AI Translated
msgid "All edges"
msgstr "Všechny hrany"
# AI Translated
msgid "Top edges"
msgstr "Horní hrany"
# AI Translated
msgid "Bottom edges"
msgstr "Spodní hrany"
# AI Translated
msgid "Lateral edges"
msgstr "Boční hrany"
# AI Translated
msgid "Mesh resolution"
msgstr "Rozlišení sítě"
# AI Translated
msgid "Add Shape"
msgstr "Přidat tvar"
# AI Translated
msgid "No outer profile"
msgstr "Chybí vnější profil"
# AI Translated
msgid "Failed to make outer face"
msgstr "Nepodařilo se vytvořit vnější plochu"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Nepodařilo se vytvořit plochu s otvory"
# AI Translated
msgid "Revolve failed"
msgstr "Rotace selhala"
# AI Translated
msgid "Profile"
msgstr "Profil"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Začít nový profil (pro otvory)"
# AI Translated
msgid "Segments"
msgstr "Segmenty"
# AI Translated
msgid "Sides"
msgstr "Strany"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Kreslete kliknutím na plátno"
# AI Translated
msgid "Snap to grid"
msgstr "Přichytit k mřížce"
# AI Translated
msgid "Grid step"
msgstr "Krok mřížky"
# AI Translated
msgid "Outer"
msgstr "Vnější"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% b. %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (horní)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (přední)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (boční)"
# AI Translated
msgid "Revolve deg"
msgstr "Rotace (°)"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "0 = vysunutí, >0 = rotace"
# AI Translated
msgid "Pocket (cut)"
msgstr "Kapsa (řez)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu uzavřený profil"
msgstr[1] "%zu uzavřené profily"
msgstr[2] "%zu uzavřených profilů"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Pro aktivaci nakreslete uzavřený profil"
# AI Translated
msgid "Clear all"
msgstr "Vymazat vše"
# AI Translated
msgid "Empty result"
msgstr "Prázdný výsledek"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Vysunutí: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Rotace: %1%"
# AI Translated
msgid "No object selected"
msgstr "Není vybrán žádný objekt"
# AI Translated
msgid "Face failed"
msgstr "Vytvoření plochy selhalo"
# AI Translated
msgid "Face with holes failed"
msgstr "Vytvoření plochy s otvory selhalo"
# AI Translated
msgid "Tool mesh empty"
msgstr "Síť nástroje je prázdná"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Kapsa přidána (záporný objem)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Kapsa: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -30553,10 +30737,6 @@ msgstr "Povolit vývojářské nástroje"
msgid "An error occurred loading %s"
msgstr "Při načítání %s došlo k chybě"
# AI Translated
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -31238,210 +31418,6 @@ 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 "Primitive"
#~ msgstr "Primitiv"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Byla vygenerována prázdná síť"
# AI Translated
#~ msgid "Box"
#~ msgstr "Kvádr"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Rychle:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Šířka (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Hloubka (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Výška (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "Spodní R"
# AI Translated
#~ msgid "Top R"
#~ msgstr "Horní R"
# AI Translated
#~ msgid "Major R"
#~ msgstr "Hlavní R"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "Vedlejší R"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Všechny hrany"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Horní hrany"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Spodní hrany"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Boční hrany"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Rozlišení sítě"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Přidat tvar"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Chybí vnější profil"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Nepodařilo se vytvořit vnější plochu"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Nepodařilo se vytvořit plochu s otvory"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Rotace selhala"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Profil"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Začít nový profil (pro otvory)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segmenty"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Strany"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Kreslete kliknutím na plátno"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Přichytit k mřížce"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Krok mřížky"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Vnější"
# AI Translated
#~ msgid "closed"
#~ msgstr "uzavřený"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% b. %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (horní)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (přední)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (boční)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Rotace (°)"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "0 = vysunutí, >0 = rotace"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Kapsa (řez)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu uzavřený profil"
#~ msgstr[1] "%zu uzavřené profily"
#~ msgstr[2] "%zu uzavřených profilů"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Pro aktivaci nakreslete uzavřený profil"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Vymazat vše"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Prázdný výsledek"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Vysunutí: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Rotace: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Není vybrán žádný objekt"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Vytvoření plochy selhalo"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Vytvoření plochy s otvory selhalo"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Síť nástroje je prázdná"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Kapsa přidána (záporný objem)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Kapsa: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Experimentální) Používat agenty tiskárny místo tiskových hostů"
@@ -32503,6 +32479,10 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Při načítání došlo k chybě: "
# AI Translated
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+213 -233
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\n"
"POT-Creation-Date: 2026-10-06 15:16-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: Heiko Liebscher <hliebschergmail.com>\n"
"Language-Team: \n"
@@ -4297,9 +4297,6 @@ msgstr "Sind Sie sicher, dass Sie die Filamentinformationen löschen möchten?"
msgid "You need to select the material type and color first."
msgstr "Sie müssen zuerst den Materialtyp und die Farbe auswählen."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Bitte geben Sie einen gültigen Wert ein (K in %.1f~%.1f)"
@@ -6159,7 +6156,7 @@ msgstr "Volumen:"
msgid "Size:"
msgstr "Größe:"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "Konflikte von G-Code-Pfaden wurden bei Layer %d, Z = %.2lf mm gefunden.Bitte trennen Sie die konfliktbehafteten Objekte weiter voneinander (%s <-> %s)."
@@ -7027,22 +7024,6 @@ msgstr "Die .gcode.3mf-Datei enthält keine G-Code-Daten. Bitte slicen Sie sie m
msgid "File '%s' was lost! Please download it again."
msgstr "Die Datei '%s' ist verloren gegangen! Bitte laden Sie diese erneut herunter."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11067,12 +11048,6 @@ msgstr "Zeitraffer abbrechen & Drucken"
msgid "Clean Up"
msgstr "Bereinigen"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Druckauftrag vorbereiten"
@@ -26557,6 +26532,214 @@ msgstr "Diese Schriftart hat keinen Umriss für diesen Text"
msgid "Size: %.1f × %.1f mm"
msgstr "Größe: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Primitiv"
# AI Translated
msgid "Empty mesh generated"
msgstr "Leeres Netz erzeugt"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Quader"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Schnell:"
# AI Translated
msgid "Width (X)"
msgstr "Breite (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Tiefe (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Höhe (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "R unten"
# AI Translated
msgid "Top R"
msgstr "R oben"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "R groß"
# AI Translated
msgid "Minor R"
msgstr "R klein"
# AI Translated
msgid "All edges"
msgstr "Alle Kanten"
# AI Translated
msgid "Top edges"
msgstr "Obere Kanten"
# AI Translated
msgid "Bottom edges"
msgstr "Untere Kanten"
# AI Translated
msgid "Lateral edges"
msgstr "Seitliche Kanten"
# AI Translated
msgid "Mesh resolution"
msgstr "Netzauflösung"
# AI Translated
msgid "Add Shape"
msgstr "Form hinzufügen"
# AI Translated
msgid "No outer profile"
msgstr "Kein Außenprofil"
# AI Translated
msgid "Failed to make outer face"
msgstr "Außenfläche konnte nicht erstellt werden"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Fläche mit Löchern konnte nicht erstellt werden"
# AI Translated
msgid "Revolve failed"
msgstr "Rotieren fehlgeschlagen"
# AI Translated
msgid "Profile"
msgstr "Profil"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Neues Profil beginnen (für Löcher)"
# AI Translated
msgid "Segments"
msgstr "Segmente"
# AI Translated
msgid "Sides"
msgstr "Seiten"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Zum Zeichnen in die Ansicht klicken"
# AI Translated
msgid "Snap to grid"
msgstr "Am Raster einrasten"
# AI Translated
msgid "Grid step"
msgstr "Rasterabstand"
# AI Translated
msgid "Outer"
msgstr "Außen"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% Punkte %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (Oben)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (Vorne)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (Seite)"
# AI Translated
msgid "Revolve deg"
msgstr "Rotieren (Grad)"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "0 zum Extrudieren, >0 zum Rotieren"
# AI Translated
msgid "Pocket (cut)"
msgstr "Tasche (Ausschnitt)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu geschlossenes Profil"
msgstr[1] "%zu geschlossene Profile"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Zum Aktivieren ein geschlossenes Profil zeichnen"
# AI Translated
msgid "Clear all"
msgstr "Alle löschen"
# AI Translated
msgid "Empty result"
msgstr "Leeres Ergebnis"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Extrudieren: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Rotieren: %1%"
# AI Translated
msgid "No object selected"
msgstr "Kein Objekt ausgewählt"
# AI Translated
msgid "Face failed"
msgstr "Fläche fehlgeschlagen"
# AI Translated
msgid "Face with holes failed"
msgstr "Fläche mit Löchern fehlgeschlagen"
# AI Translated
msgid "Tool mesh empty"
msgstr "Werkzeugnetz ist leer"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Tasche hinzugefügt (negatives Volumen)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Tasche: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -29940,9 +30123,6 @@ msgstr "Entwicklertools aktivieren"
msgid "An error occurred loading %s"
msgstr "Fehler beim Laden von %s"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -30622,209 +30802,6 @@ 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 "Primitive"
#~ msgstr "Primitiv"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Leeres Netz erzeugt"
# AI Translated
#~ msgid "Box"
#~ msgstr "Quader"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Schnell:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Breite (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Tiefe (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Höhe (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "R unten"
# AI Translated
#~ msgid "Top R"
#~ msgstr "R oben"
# AI Translated
#~ msgid "Major R"
#~ msgstr "R groß"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "R klein"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Alle Kanten"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Obere Kanten"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Untere Kanten"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Seitliche Kanten"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Netzauflösung"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Form hinzufügen"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Kein Außenprofil"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Außenfläche konnte nicht erstellt werden"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Fläche mit Löchern konnte nicht erstellt werden"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Rotieren fehlgeschlagen"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Profil"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Neues Profil beginnen (für Löcher)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segmente"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Seiten"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Zum Zeichnen in die Ansicht klicken"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Am Raster einrasten"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Rasterabstand"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Außen"
# AI Translated
#~ msgid "closed"
#~ msgstr "geschlossen"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% Punkte %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (Oben)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (Vorne)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (Seite)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Rotieren (Grad)"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "0 zum Extrudieren, >0 zum Rotieren"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Tasche (Ausschnitt)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu geschlossenes Profil"
#~ msgstr[1] "%zu geschlossene Profile"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Zum Aktivieren ein geschlossenes Profil zeichnen"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Alle löschen"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Leeres Ergebnis"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Extrudieren: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Rotieren: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Kein Objekt ausgewählt"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Fläche fehlgeschlagen"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Fläche mit Löchern fehlgeschlagen"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Werkzeugnetz ist leer"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Tasche hinzugefügt (negatives Volumen)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Tasche: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Experimentell) Drucker-Agenten anstelle von Druck-Hosts verwenden"
@@ -31880,6 +31857,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Fehler beim Laden von "
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+161 -30
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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"
@@ -4042,9 +4042,6 @@ msgstr ""
msgid "You need to select the material type and color first."
msgstr ""
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr ""
@@ -5778,7 +5775,7 @@ msgstr ""
msgid "Size:"
msgstr ""
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr ""
@@ -6617,22 +6614,6 @@ msgstr ""
msgid "File '%s' was lost! Please download it again."
msgstr ""
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -10203,12 +10184,6 @@ msgstr ""
msgid "Clean Up"
msgstr ""
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr ""
@@ -23615,6 +23590,165 @@ msgstr ""
msgid "Size: %.1f × %.1f mm"
msgstr ""
msgid "Primitive"
msgstr ""
msgid "Empty mesh generated"
msgstr ""
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr ""
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr ""
msgid "Width (X)"
msgstr ""
msgid "Depth (Y)"
msgstr ""
msgid "Height (Z)"
msgstr ""
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr ""
msgid "Top R"
msgstr ""
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr ""
msgid "Minor R"
msgstr ""
msgid "All edges"
msgstr ""
msgid "Top edges"
msgstr ""
msgid "Bottom edges"
msgstr ""
msgid "Lateral edges"
msgstr ""
msgid "Mesh resolution"
msgstr ""
msgid "Add Shape"
msgstr ""
msgid "No outer profile"
msgstr ""
msgid "Failed to make outer face"
msgstr ""
msgid "Failed to build face with holes"
msgstr ""
msgid "Revolve failed"
msgstr ""
msgid "Profile"
msgstr ""
msgid "Start new profile (for holes)"
msgstr ""
msgid "Segments"
msgstr ""
msgid "Sides"
msgstr ""
msgid "Click on canvas to draw"
msgstr ""
msgid "Snap to grid"
msgstr ""
msgid "Grid step"
msgstr ""
msgid "Outer"
msgstr ""
msgid "closed"
msgstr ""
#. TRN Sketch gizmo profile list: "Outer" or "Hole", profile number, point count, "closed" or nothing
#, boost-format
msgid "%1% %2%: %3% points %4%"
msgstr ""
msgid "XY (Top)"
msgstr ""
msgid "XZ (Front)"
msgstr ""
msgid "YZ (Side)"
msgstr ""
msgid "Revolve deg"
msgstr ""
msgid "Set to 0 for extrude, >0 for revolve"
msgstr ""
msgid "Pocket (cut)"
msgstr ""
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] ""
msgstr[1] ""
msgid "Draw a closed profile to enable"
msgstr ""
msgid "Clear all"
msgstr ""
msgid "Empty result"
msgstr ""
#, boost-format
msgid "Extrude: %1%"
msgstr ""
#, boost-format
msgid "Revolve: %1%"
msgstr ""
msgid "No object selected"
msgstr ""
msgid "Face failed"
msgstr ""
msgid "Face with holes failed"
msgstr ""
msgid "Tool mesh empty"
msgstr ""
msgid "Pocket added (negative volume)"
msgstr ""
#, boost-format
msgid "Pocket: %1%"
msgstr ""
msgctxt "Keyboard Shortcut"
msgid "Ins"
msgstr ""
@@ -26202,9 +26336,6 @@ msgstr ""
msgid "An error occurred loading %s"
msgstr ""
msgid "/"
msgstr ""
#, boost-format
msgid "Load %1% to %2%"
msgstr ""
+212 -232
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\n"
"POT-Creation-Date: 2026-10-06 15:16-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: Ian A. Bassi <>\n"
"Language-Team: \n"
@@ -4175,9 +4175,6 @@ msgstr "¿Estás seguro que quieres limpiar la información de filamento?"
msgid "You need to select the material type and color first."
msgstr "Necesitas seleccionar el tipo y el color del material primero."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Por favor, introduzca un valor válido (K in %.1f~%.1f)"
@@ -6012,7 +6009,7 @@ msgstr "Volumen:"
msgid "Size:"
msgstr "Tamaño:"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "Se han encontrado conflictos de rutas G-Code en la capa %d, Z = %.2lfmm. Por favor, separe más los objetos en conflicto (%s <-> %s)."
@@ -6879,22 +6876,6 @@ msgstr "El archivo .gcode .3mf no contiene datos de G-Code. Por favor, lamine co
msgid "File '%s' was lost! Please download it again."
msgstr "¡El archivo '%s' se perdió!\" Por favor, vuelva a descargárlo."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -10799,12 +10780,6 @@ msgstr "Cancelar timelapse e imprimir"
msgid "Clean Up"
msgstr "Limpiar"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Preparando el trabajo de impresión"
@@ -26120,6 +26095,213 @@ msgstr "Esta fuente no tiene contorno para este texto"
msgid "Size: %.1f × %.1f mm"
msgstr "Tamaño: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Primitivo"
# AI Translated
msgid "Empty mesh generated"
msgstr "Se generó una malla vacía"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Caja"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Rápido:"
# AI Translated
msgid "Width (X)"
msgstr "Ancho (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Profundidad (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Altura (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "R inferior"
# AI Translated
msgid "Top R"
msgstr "R superior"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "R mayor"
# AI Translated
msgid "Minor R"
msgstr "R menor"
# AI Translated
msgid "All edges"
msgstr "Todas las aristas"
# AI Translated
msgid "Top edges"
msgstr "Aristas superiores"
# AI Translated
msgid "Bottom edges"
msgstr "Aristas inferiores"
# AI Translated
msgid "Lateral edges"
msgstr "Aristas laterales"
# AI Translated
msgid "Mesh resolution"
msgstr "Resolución de la malla"
# AI Translated
msgid "Add Shape"
msgstr "Añadir forma"
# AI Translated
msgid "No outer profile"
msgstr "No hay perfil exterior"
# AI Translated
msgid "Failed to make outer face"
msgstr "No se pudo crear la cara exterior"
# AI Translated
msgid "Failed to build face with holes"
msgstr "No se pudo crear la cara con agujeros"
# AI Translated
msgid "Revolve failed"
msgstr "Falló la revolución"
# AI Translated
msgid "Profile"
msgstr "Perfil"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Iniciar un nuevo perfil (para agujeros)"
# AI Translated
msgid "Segments"
msgstr "Segmentos"
# AI Translated
msgid "Sides"
msgstr "Lados"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Haga clic en el lienzo para dibujar"
# AI Translated
msgid "Snap to grid"
msgstr "Ajustar a la cuadrícula"
# AI Translated
msgid "Grid step"
msgstr "Paso de cuadrícula"
# AI Translated
msgid "Outer"
msgstr "Exterior"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% puntos %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (superior)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (frontal)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (lateral)"
# AI Translated
msgid "Revolve deg"
msgstr "Grados de revolución"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "Establezca 0 para extruir y >0 para revolución"
# AI Translated
msgid "Pocket (cut)"
msgstr "Cajera (corte)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu perfil cerrado"
msgstr[1] "%zu perfiles cerrados"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Dibuje un perfil cerrado para activarlo"
msgid "Clear all"
msgstr "Borrar todo"
# AI Translated
msgid "Empty result"
msgstr "Resultado vacío"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Extruir: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Revolución: %1%"
# AI Translated
msgid "No object selected"
msgstr "No hay ningún objeto seleccionado"
# AI Translated
msgid "Face failed"
msgstr "Falló la cara"
# AI Translated
msgid "Face with holes failed"
msgstr "Falló la cara con agujeros"
# AI Translated
msgid "Tool mesh empty"
msgstr "Malla de la herramienta vacía"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Cajera añadida (volumen negativo)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Cajera: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -29496,9 +29678,6 @@ msgstr "Activar herramientas de desarrollo"
msgid "An error occurred loading %s"
msgstr "Se produjo un error al cargar %s"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -30178,208 +30357,6 @@ 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 "Primitive"
#~ msgstr "Primitivo"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Se generó una malla vacía"
# AI Translated
#~ msgid "Box"
#~ msgstr "Caja"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Rápido:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Ancho (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Profundidad (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Altura (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "R inferior"
# AI Translated
#~ msgid "Top R"
#~ msgstr "R superior"
# AI Translated
#~ msgid "Major R"
#~ msgstr "R mayor"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "R menor"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Todas las aristas"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Aristas superiores"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Aristas inferiores"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Aristas laterales"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Resolución de la malla"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Añadir forma"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "No hay perfil exterior"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "No se pudo crear la cara exterior"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "No se pudo crear la cara con agujeros"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Falló la revolución"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Perfil"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Iniciar un nuevo perfil (para agujeros)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segmentos"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Lados"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Haga clic en el lienzo para dibujar"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Ajustar a la cuadrícula"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Paso de cuadrícula"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Exterior"
# AI Translated
#~ msgid "closed"
#~ msgstr "cerrado"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% puntos %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (superior)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (frontal)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (lateral)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Grados de revolución"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "Establezca 0 para extruir y >0 para revolución"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Cajera (corte)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu perfil cerrado"
#~ msgstr[1] "%zu perfiles cerrados"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Dibuje un perfil cerrado para activarlo"
#~ msgid "Clear all"
#~ msgstr "Borrar todo"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Resultado vacío"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Extruir: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Revolución: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "No hay ningún objeto seleccionado"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Falló la cara"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Falló la cara con agujeros"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Malla de la herramienta vacía"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Cajera añadida (volumen negativo)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Cajera: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Experimental) Usar agentes de impresora en lugar de hosts de impresión"
@@ -31435,6 +31412,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Se produjo un error al cargar "
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+213 -233
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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 <mgoiogana@gmail.com>\n"
"Language-Team: \n"
@@ -4218,9 +4218,6 @@ msgstr "Ziur zaude filamentuaren informazioa garbitu nahi duzula?"
msgid "You need to select the material type and color first."
msgstr "Lehenik eta behin, material-mota eta kolorea hautatu behar dituzu."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Mesedez, sartu baliozko balio bat (K in %.1f~%.1f)"
@@ -6066,7 +6063,7 @@ msgstr "Bolumena:"
msgid "Size:"
msgstr "Tamaina:"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "G-code ibilbideen gatazkak aurkitu dira %d geruzan, Z = %.2lf mm. Urrundu gehiago gatazkan dauden objektuak (%s <-> %s)."
@@ -6930,22 +6927,6 @@ msgstr ".gcode.3mf fitxategiak ez du G-code daturik. Mesedez, xerratu OrcaSlicer
msgid "File '%s' was lost! Please download it again."
msgstr "'%s' fitxategia galdu da! Deskargatu berriro."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -10905,12 +10886,6 @@ msgstr "Utzi timelapsea eta inprimatu"
msgid "Clean Up"
msgstr "Garbitu"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Inprimatze-lana prestatzen"
@@ -26294,6 +26269,214 @@ msgstr "Letra-tipo honek ez du ingeradarik testu honetarako"
msgid "Size: %.1f × %.1f mm"
msgstr "Tamaina: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Oinarrizko geometria"
# AI Translated
msgid "Empty mesh generated"
msgstr "Sare hutsa sortu da"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Kutxa"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Azkar:"
# AI Translated
msgid "Width (X)"
msgstr "Zabalera (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Sakonera (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Altuera (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "Beheko R"
# AI Translated
msgid "Top R"
msgstr "Goiko R"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "R nagusia"
# AI Translated
msgid "Minor R"
msgstr "R txikia"
# AI Translated
msgid "All edges"
msgstr "Ertz guztiak"
# AI Translated
msgid "Top edges"
msgstr "Goiko ertzak"
# AI Translated
msgid "Bottom edges"
msgstr "Beheko ertzak"
# AI Translated
msgid "Lateral edges"
msgstr "Alboko ertzak"
# AI Translated
msgid "Mesh resolution"
msgstr "Sarearen bereizmena"
# AI Translated
msgid "Add Shape"
msgstr "Gehitu forma"
# AI Translated
msgid "No outer profile"
msgstr "Ez dago kanpoko profilik"
# AI Translated
msgid "Failed to make outer face"
msgstr "Ezin izan da kanpoko aurpegia sortu"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Ezin izan da zuloak dituen aurpegia eraiki"
# AI Translated
msgid "Revolve failed"
msgstr "Erreboluzioak huts egin du"
# AI Translated
msgid "Profile"
msgstr "Profila"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Hasi profil berri bat (zuloetarako)"
# AI Translated
msgid "Segments"
msgstr "Segmentuak"
# AI Translated
msgid "Sides"
msgstr "Aldeak"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Egin klik mihisean marrazteko"
# AI Translated
msgid "Snap to grid"
msgstr "Atxiki saretara"
# AI Translated
msgid "Grid step"
msgstr "Sareta-urratsa"
# AI Translated
msgid "Outer"
msgstr "Kanpokoa"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% puntu %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (Goikoa)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (Aurrekoa)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (Albokoa)"
# AI Translated
msgid "Revolve deg"
msgstr "Erreboluzio-graduak"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "Ezarri 0 estruitzeko, >0 erreboluzionatzeko"
# AI Translated
msgid "Pocket (cut)"
msgstr "Poltsa (ebaki)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu profil itxi"
msgstr[1] "%zu profil itxi"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Marraztu profil itxi bat gaitzeko"
# AI Translated
msgid "Clear all"
msgstr "Garbitu dena"
# AI Translated
msgid "Empty result"
msgstr "Emaitza hutsa"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Estrusioa: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Erreboluzioa: %1%"
# AI Translated
msgid "No object selected"
msgstr "Ez dago objekturik hautatuta"
# AI Translated
msgid "Face failed"
msgstr "Aurpegiak huts egin du"
# AI Translated
msgid "Face with holes failed"
msgstr "Zuloak dituen aurpegiak huts egin du"
# AI Translated
msgid "Tool mesh empty"
msgstr "Tresnaren sarea hutsik dago"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Poltsa gehitu da (bolumen negatiboa)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Poltsa: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -29687,9 +29870,6 @@ msgstr "Gaitu garapen-tresnak"
msgid "An error occurred loading %s"
msgstr "Errore bat gertatu da %s kargatzean"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -30369,209 +30549,6 @@ 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 "Primitive"
#~ msgstr "Oinarrizko geometria"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Sare hutsa sortu da"
# AI Translated
#~ msgid "Box"
#~ msgstr "Kutxa"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Azkar:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Zabalera (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Sakonera (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Altuera (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "Beheko R"
# AI Translated
#~ msgid "Top R"
#~ msgstr "Goiko R"
# AI Translated
#~ msgid "Major R"
#~ msgstr "R nagusia"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "R txikia"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Ertz guztiak"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Goiko ertzak"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Beheko ertzak"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Alboko ertzak"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Sarearen bereizmena"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Gehitu forma"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Ez dago kanpoko profilik"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Ezin izan da kanpoko aurpegia sortu"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Ezin izan da zuloak dituen aurpegia eraiki"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Erreboluzioak huts egin du"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Profila"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Hasi profil berri bat (zuloetarako)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segmentuak"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Aldeak"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Egin klik mihisean marrazteko"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Atxiki saretara"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Sareta-urratsa"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Kanpokoa"
# AI Translated
#~ msgid "closed"
#~ msgstr "itxita"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% puntu %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (Goikoa)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (Aurrekoa)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (Albokoa)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Erreboluzio-graduak"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "Ezarri 0 estruitzeko, >0 erreboluzionatzeko"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Poltsa (ebaki)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu profil itxi"
#~ msgstr[1] "%zu profil itxi"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Marraztu profil itxi bat gaitzeko"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Garbitu dena"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Emaitza hutsa"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Estrusioa: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Erreboluzioa: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Ez dago objekturik hautatuta"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Aurpegiak huts egin du"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Zuloak dituen aurpegiak huts egin du"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Tresnaren sarea hutsik dago"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Poltsa gehitu da (bolumen negatiboa)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Poltsa: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Esperimentala) Erabili inprimagailu-agenteak inprimatze-hostenen ordez"
@@ -31631,6 +31608,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Errore bat gertatu da hau kargatzean: "
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+213 -233
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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"
@@ -4247,9 +4247,6 @@ msgstr "Voulez-vous vraiment effacer les informations du filament ?"
msgid "You need to select the material type and color first."
msgstr "Vous devez d'abord sélectionner le type de matériau et sa couleur."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Veuillez saisir une valeur valide (K entre %.1f~%.1f)"
@@ -6101,7 +6098,7 @@ msgstr "Volume :"
msgid "Size:"
msgstr "Taille :"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "Des conflits de chemins G-code ont été trouvés au niveau de la couche %d, z = %.2lfmm. Veuillez séparer davantage les objets en conflit (%s <-> %s)."
@@ -6969,22 +6966,6 @@ msgstr "Le fichier G-code .3mf ne contient pas de données G-code. Veuillez le d
msgid "File '%s' was lost! Please download it again."
msgstr "Le fichier « %s » a été perdu ! Veuillez le télécharger à nouveau."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -10921,12 +10902,6 @@ msgstr "Annuler le timelapse et imprimer"
msgid "Clean Up"
msgstr "Nettoyer"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Préparation du travail d'impression"
@@ -26060,6 +26035,214 @@ msgstr "Cette police n’a pas de contour pour ce texte"
msgid "Size: %.1f × %.1f mm"
msgstr "Taille : %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Primitive"
# AI Translated
msgid "Empty mesh generated"
msgstr "Maillage vide généré"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Boîte"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Rapide :"
# AI Translated
msgid "Width (X)"
msgstr "Largeur (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Profondeur (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Hauteur (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "R inférieur"
# AI Translated
msgid "Top R"
msgstr "R supérieur"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "Grand R"
# AI Translated
msgid "Minor R"
msgstr "Petit R"
# AI Translated
msgid "All edges"
msgstr "Toutes les arêtes"
# AI Translated
msgid "Top edges"
msgstr "Arêtes supérieures"
# AI Translated
msgid "Bottom edges"
msgstr "Arêtes inférieures"
# AI Translated
msgid "Lateral edges"
msgstr "Arêtes latérales"
# AI Translated
msgid "Mesh resolution"
msgstr "Résolution du maillage"
# AI Translated
msgid "Add Shape"
msgstr "Ajouter la forme"
# AI Translated
msgid "No outer profile"
msgstr "Aucun profil extérieur"
# AI Translated
msgid "Failed to make outer face"
msgstr "Échec de la création de la face extérieure"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Échec de la création de la face avec trous"
# AI Translated
msgid "Revolve failed"
msgstr "Échec de la révolution"
# AI Translated
msgid "Profile"
msgstr "Profil"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Commencer un nouveau profil (pour les trous)"
# AI Translated
msgid "Segments"
msgstr "Segments"
# AI Translated
msgid "Sides"
msgstr "Côtés"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Cliquez dans la vue pour dessiner"
# AI Translated
msgid "Snap to grid"
msgstr "Aimanter à la grille"
# AI Translated
msgid "Grid step"
msgstr "Pas de la grille"
# AI Translated
msgid "Outer"
msgstr "Extérieur"
# AI Translated
msgid "closed"
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 "%1% %2% : %3% points %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (Haut)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (Avant)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (Côté)"
# AI Translated
msgid "Revolve deg"
msgstr "Révolution (°)"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "0 pour une extrusion, >0 pour une révolution"
# AI Translated
msgid "Pocket (cut)"
msgstr "Poche (enlèvement)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu profil fermé"
msgstr[1] "%zu profils fermés"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Dessinez un profil fermé pour activer"
# AI Translated
msgid "Clear all"
msgstr "Tout effacer"
# AI Translated
msgid "Empty result"
msgstr "Résultat vide"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Extrusion : %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Révolution : %1%"
# AI Translated
msgid "No object selected"
msgstr "Aucun objet sélectionné"
# AI Translated
msgid "Face failed"
msgstr "Échec de la face"
# AI Translated
msgid "Face with holes failed"
msgstr "Échec de la face avec trous"
# AI Translated
msgid "Tool mesh empty"
msgstr "Maillage de l’outil vide"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Poche ajoutée (volume négatif)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Poche : %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -29433,9 +29616,6 @@ msgstr "Activer les outils de développement"
msgid "An error occurred loading %s"
msgstr "Une erreur s’est produite lors du chargement de %s"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -30115,209 +30295,6 @@ 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 "Primitive"
#~ msgstr "Primitive"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Maillage vide généré"
# AI Translated
#~ msgid "Box"
#~ msgstr "Boîte"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Rapide :"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Largeur (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Profondeur (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Hauteur (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "R inférieur"
# AI Translated
#~ msgid "Top R"
#~ msgstr "R supérieur"
# AI Translated
#~ msgid "Major R"
#~ msgstr "Grand R"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "Petit R"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Toutes les arêtes"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Arêtes supérieures"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Arêtes inférieures"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Arêtes latérales"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Résolution du maillage"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Ajouter la forme"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Aucun profil extérieur"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Échec de la création de la face extérieure"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Échec de la création de la face avec trous"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Échec de la révolution"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Profil"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Commencer un nouveau profil (pour les trous)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segments"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Côtés"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Cliquez dans la vue pour dessiner"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Aimanter à la grille"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Pas de la grille"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Extérieur"
# AI Translated
#~ msgid "closed"
#~ msgstr "fermé"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2% : %3% points %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (Haut)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (Avant)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (Côté)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Révolution (°)"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "0 pour une extrusion, >0 pour une révolution"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Poche (enlèvement)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu profil fermé"
#~ msgstr[1] "%zu profils fermés"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Dessinez un profil fermé pour activer"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Tout effacer"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Résultat vide"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Extrusion : %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Révolution : %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Aucun objet sélectionné"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Échec de la face"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Échec de la face avec trous"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Maillage de l’outil vide"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Poche ajoutée (volume négatif)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Poche : %1%"
# 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"
@@ -31366,6 +31343,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Une erreur s’est produite lors du chargement de "
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+214 -234
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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"
@@ -4357,9 +4357,6 @@ msgstr "Biztosan törölni szeretnéd a filament adatait?"
msgid "You need to select the material type and color first."
msgstr "Először ki kell választanod az anyagtípust és a színt."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Adj meg érvényes értéket (K tartomány: %.1f~%.1f)"
@@ -6236,7 +6233,7 @@ msgid "Size:"
msgstr "Méret:"
# AI Translated
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "G-code útvonalütközés található a(z) %d. rétegen, Z = %.2lfmm. Helyezd távolabb egymástól az ütköző objektumokat (%s <-> %s)."
@@ -7122,22 +7119,6 @@ msgstr "A .gcode.3mf fájl nem tartalmaz G-code adatot. Szeleteld újra Orca Sli
msgid "File '%s' was lost! Please download it again."
msgstr "A(z) '%s' fájl elveszett! Kérlek, töltsd le újra."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11198,12 +11179,6 @@ msgstr "Timelapse megszakítása és nyomtatás"
msgid "Clean Up"
msgstr "Tisztítás"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Nyomtatási feladat előkészítése"
@@ -27025,6 +27000,214 @@ msgstr "Ennek a betűtípusnak nincs körvonala ehhez a szöveghez"
msgid "Size: %.1f × %.1f mm"
msgstr "Méret: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Primitív"
# AI Translated
msgid "Empty mesh generated"
msgstr "Üres háló jött létre"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Téglatest"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Gyors:"
# AI Translated
msgid "Width (X)"
msgstr "Szélesség (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Mélység (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Magasság (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "Alsó R"
# AI Translated
msgid "Top R"
msgstr "Felső R"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "Fő R"
# AI Translated
msgid "Minor R"
msgstr "Cső R"
# AI Translated
msgid "All edges"
msgstr "Minden él"
# AI Translated
msgid "Top edges"
msgstr "Felső élek"
# AI Translated
msgid "Bottom edges"
msgstr "Alsó élek"
# AI Translated
msgid "Lateral edges"
msgstr "Oldalélek"
# AI Translated
msgid "Mesh resolution"
msgstr "Hálófelbontás"
# AI Translated
msgid "Add Shape"
msgstr "Alakzat hozzáadása"
# AI Translated
msgid "No outer profile"
msgstr "Nincs külső profil"
# AI Translated
msgid "Failed to make outer face"
msgstr "Nem sikerült létrehozni a külső lapot"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Nem sikerült létrehozni a lyukas lapot"
# AI Translated
msgid "Revolve failed"
msgstr "A körbeforgatás sikertelen"
# AI Translated
msgid "Profile"
msgstr "Profil"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Új profil kezdése (lyukakhoz)"
# AI Translated
msgid "Segments"
msgstr "Szakaszok"
# AI Translated
msgid "Sides"
msgstr "Oldalak"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Kattints a vászonra a rajzoláshoz"
# AI Translated
msgid "Snap to grid"
msgstr "Rácshoz illesztés"
# AI Translated
msgid "Grid step"
msgstr "Rács lépésköze"
# AI Translated
msgid "Outer"
msgstr "Külső"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% pont %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (felülnézet)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (elölnézet)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (oldalnézet)"
# AI Translated
msgid "Revolve deg"
msgstr "Körbeforgatás (°)"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "0: extrudálás, >0: körbeforgatás"
# AI Translated
msgid "Pocket (cut)"
msgstr "Zseb (vágás)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu zárt profil"
msgstr[1] "%zu zárt profil"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Az engedélyezéshez rajzolj egy zárt profilt"
# AI Translated
msgid "Clear all"
msgstr "Összes törlése"
# AI Translated
msgid "Empty result"
msgstr "Üres eredmény"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Extrudálás: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Körbeforgatás: %1%"
# AI Translated
msgid "No object selected"
msgstr "Nincs kijelölt objektum"
# AI Translated
msgid "Face failed"
msgstr "A lap létrehozása sikertelen"
# AI Translated
msgid "Face with holes failed"
msgstr "A lyukas lap létrehozása sikertelen"
# AI Translated
msgid "Tool mesh empty"
msgstr "A szerszámháló üres"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Zseb hozzáadva (negatív térfogat)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Zseb: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -30417,10 +30600,6 @@ msgstr "Fejlesztői eszközök engedélyezése"
msgid "An error occurred loading %s"
msgstr "Hiba történt a(z) %s betöltésekor"
# AI Translated
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -31102,209 +31281,6 @@ 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 "Primitive"
#~ msgstr "Primitív"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Üres háló jött létre"
# AI Translated
#~ msgid "Box"
#~ msgstr "Téglatest"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Gyors:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Szélesség (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Mélység (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Magasság (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "Alsó R"
# AI Translated
#~ msgid "Top R"
#~ msgstr "Felső R"
# AI Translated
#~ msgid "Major R"
#~ msgstr "Fő R"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "Cső R"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Minden él"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Felső élek"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Alsó élek"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Oldalélek"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Hálófelbontás"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Alakzat hozzáadása"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Nincs külső profil"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Nem sikerült létrehozni a külső lapot"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Nem sikerült létrehozni a lyukas lapot"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "A körbeforgatás sikertelen"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Profil"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Új profil kezdése (lyukakhoz)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Szakaszok"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Oldalak"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Kattints a vászonra a rajzoláshoz"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Rácshoz illesztés"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Rács lépésköze"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Külső"
# AI Translated
#~ msgid "closed"
#~ msgstr "zárt"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% pont %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (felülnézet)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (elölnézet)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (oldalnézet)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Körbeforgatás (°)"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "0: extrudálás, >0: körbeforgatás"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Zseb (vágás)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu zárt profil"
#~ msgstr[1] "%zu zárt profil"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Az engedélyezéshez rajzolj egy zárt profilt"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Összes törlése"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Üres eredmény"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Extrudálás: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Körbeforgatás: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Nincs kijelölt objektum"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "A lap létrehozása sikertelen"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "A lyukas lap létrehozása sikertelen"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "A szerszámháló üres"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Zseb hozzáadva (negatív térfogat)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Zseb: %1%"
# 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"
@@ -32360,6 +32336,10 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Hiba történt a betöltés során: "
# AI Translated
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+213 -233
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\n"
"POT-Creation-Date: 2026-10-06 15:16-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -4350,9 +4350,6 @@ msgstr "Sei sicuro di voler cancellare le informazioni del filamento?"
msgid "You need to select the material type and color first."
msgstr "Devi prima selezionare il tipo e il colore del materiale."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Si prega di immettere un valore valido (K in %.1f~%.1f)"
@@ -6209,7 +6206,7 @@ msgstr "Volume:"
msgid "Size:"
msgstr "Dimensione:"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "Sono stati trovati conflitti di percorsi nel G-code sullo strato %d, Z = %.2lfmm. Si prega di separare gli oggetti in conflitto (%s <-> %s)."
@@ -7086,22 +7083,6 @@ msgstr "Il file .gcode.3mf non contiene dati G-code. Elaboralo con OrcaSlicer ed
msgid "File '%s' was lost! Please download it again."
msgstr "Il file '%s' è stato perso! Si prega di scaricarlo di nuovo."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11157,12 +11138,6 @@ msgstr "Annulla timelapse e stampa"
msgid "Clean Up"
msgstr "Pulisci"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Preparazione della stampa"
@@ -26899,6 +26874,214 @@ msgstr "Questo carattere non ha un contorno per questo testo"
msgid "Size: %.1f × %.1f mm"
msgstr "Dimensioni: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Primitiva"
# AI Translated
msgid "Empty mesh generated"
msgstr "Generata una mesh vuota"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Parallelepipedo"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Rapido:"
# AI Translated
msgid "Width (X)"
msgstr "Larghezza (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Profondità (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Altezza (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "R inferiore"
# AI Translated
msgid "Top R"
msgstr "R superiore"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "R maggiore"
# AI Translated
msgid "Minor R"
msgstr "R minore"
# AI Translated
msgid "All edges"
msgstr "Tutti gli spigoli"
# AI Translated
msgid "Top edges"
msgstr "Spigoli superiori"
# AI Translated
msgid "Bottom edges"
msgstr "Spigoli inferiori"
# AI Translated
msgid "Lateral edges"
msgstr "Spigoli laterali"
# AI Translated
msgid "Mesh resolution"
msgstr "Risoluzione mesh"
# AI Translated
msgid "Add Shape"
msgstr "Aggiungi forma"
# AI Translated
msgid "No outer profile"
msgstr "Nessun profilo esterno"
# AI Translated
msgid "Failed to make outer face"
msgstr "Impossibile creare la faccia esterna"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Impossibile creare la faccia con i fori"
# AI Translated
msgid "Revolve failed"
msgstr "Rivoluzione non riuscita"
# AI Translated
msgid "Profile"
msgstr "Profilo"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Inizia un nuovo profilo (per i fori)"
# AI Translated
msgid "Segments"
msgstr "Segmenti"
# AI Translated
msgid "Sides"
msgstr "Lati"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Clicca nell'area di disegno per disegnare"
# AI Translated
msgid "Snap to grid"
msgstr "Aggancia alla griglia"
# AI Translated
msgid "Grid step"
msgstr "Passo griglia"
# AI Translated
msgid "Outer"
msgstr "Esterno"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% punti %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (Superiore)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (Frontale)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (Laterale)"
# AI Translated
msgid "Revolve deg"
msgstr "Gradi rivoluzione"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "Imposta 0 per estrudere, >0 per rivoluzionare"
# AI Translated
msgid "Pocket (cut)"
msgstr "Tasca (taglio)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu profilo chiuso"
msgstr[1] "%zu profili chiusi"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Disegna un profilo chiuso per abilitare"
# AI Translated
msgid "Clear all"
msgstr "Cancella tutto"
# AI Translated
msgid "Empty result"
msgstr "Risultato vuoto"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Estrusione: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Rivoluzione: %1%"
# AI Translated
msgid "No object selected"
msgstr "Nessun oggetto selezionato"
# AI Translated
msgid "Face failed"
msgstr "Creazione della faccia non riuscita"
# AI Translated
msgid "Face with holes failed"
msgstr "Creazione della faccia con fori non riuscita"
# AI Translated
msgid "Tool mesh empty"
msgstr "Mesh dell'utensile vuota"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Tasca aggiunta (volume negativo)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Tasca: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -30281,9 +30464,6 @@ msgstr "Abilita strumenti per sviluppatori"
msgid "An error occurred loading %s"
msgstr "Si è verificato un errore durante il caricamento di %s"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -30964,209 +31144,6 @@ 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 "Primitive"
#~ msgstr "Primitiva"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Generata una mesh vuota"
# AI Translated
#~ msgid "Box"
#~ msgstr "Parallelepipedo"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Rapido:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Larghezza (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Profondità (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Altezza (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "R inferiore"
# AI Translated
#~ msgid "Top R"
#~ msgstr "R superiore"
# AI Translated
#~ msgid "Major R"
#~ msgstr "R maggiore"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "R minore"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Tutti gli spigoli"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Spigoli superiori"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Spigoli inferiori"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Spigoli laterali"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Risoluzione mesh"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Aggiungi forma"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Nessun profilo esterno"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Impossibile creare la faccia esterna"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Impossibile creare la faccia con i fori"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Rivoluzione non riuscita"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Profilo"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Inizia un nuovo profilo (per i fori)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segmenti"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Lati"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Clicca nell'area di disegno per disegnare"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Aggancia alla griglia"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Passo griglia"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Esterno"
# AI Translated
#~ msgid "closed"
#~ msgstr "chiuso"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% punti %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (Superiore)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (Frontale)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (Laterale)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Gradi rivoluzione"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "Imposta 0 per estrudere, >0 per rivoluzionare"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Tasca (taglio)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu profilo chiuso"
#~ msgstr[1] "%zu profili chiusi"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Disegna un profilo chiuso per abilitare"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Cancella tutto"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Risultato vuoto"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Estrusione: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Rivoluzione: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Nessun oggetto selezionato"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Creazione della faccia non riuscita"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Creazione della faccia con fori non riuscita"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Mesh dell'utensile vuota"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Tasca aggiunta (volume negativo)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Tasca: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Sperimentale) Usa gli agenti stampante invece degli host di stampa"
@@ -32223,6 +32200,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Si è verificato un errore durante il caricamento di "
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+212 -232
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\n"
"POT-Creation-Date: 2026-10-06 15:16-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -4352,9 +4352,6 @@ msgstr "フィラメント情報をクリアしてもよろしいですか?"
msgid "You need to select the material type and color first."
msgstr "まず材料タイプと色を選択してください。"
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "有効な値を入力してください(Kは%.1f~%.1f)"
@@ -6233,7 +6230,7 @@ msgstr "ボリューム"
msgid "Size:"
msgstr "サイズ:"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "レイヤー%d、Z = %.2lfmmでG-codeパスの衝突が検出されました。衝突するオブジェクトをもっと離してください(%s <-> %s)。"
@@ -7102,22 +7099,6 @@ msgstr ".gcode.3mfファイルにG-codeデータが含まれていません。Or
msgid "File '%s' was lost! Please download it again."
msgstr "ファイル %s が見つかりませんでした、もう一度ダウンロードしてください。"
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11190,12 +11171,6 @@ msgstr "タイムラプスを中止して印刷"
msgid "Clean Up"
msgstr "整理する"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "造形タスクを準備"
@@ -27420,6 +27395,213 @@ msgstr "このフォントにはこのテキストのアウトラインがあり
msgid "Size: %.1f × %.1f mm"
msgstr "サイズ: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "プリミティブ"
# AI Translated
msgid "Empty mesh generated"
msgstr "空のメッシュが生成されました"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "ボックス"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "クイック:"
# AI Translated
msgid "Width (X)"
msgstr "幅 (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "奥行き (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "高さ (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "底面半径"
# AI Translated
msgid "Top R"
msgstr "上面半径"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "大半径"
# AI Translated
msgid "Minor R"
msgstr "小半径"
# AI Translated
msgid "All edges"
msgstr "すべてのエッジ"
# AI Translated
msgid "Top edges"
msgstr "上面のエッジ"
# AI Translated
msgid "Bottom edges"
msgstr "底面のエッジ"
# AI Translated
msgid "Lateral edges"
msgstr "側面のエッジ"
# AI Translated
msgid "Mesh resolution"
msgstr "メッシュ分解能"
# AI Translated
msgid "Add Shape"
msgstr "形状を追加"
# AI Translated
msgid "No outer profile"
msgstr "外側のプロファイルがありません"
# AI Translated
msgid "Failed to make outer face"
msgstr "外側の面を作成できませんでした"
# AI Translated
msgid "Failed to build face with holes"
msgstr "穴のある面を作成できませんでした"
# AI Translated
msgid "Revolve failed"
msgstr "回転押し出しに失敗しました"
# AI Translated
msgid "Profile"
msgstr "プロファイル"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "新しいプロファイルを開始 (穴用)"
# AI Translated
msgid "Segments"
msgstr "セグメント数"
# AI Translated
msgid "Sides"
msgstr "辺数"
# AI Translated
msgid "Click on canvas to draw"
msgstr "キャンバスをクリックして描画"
# AI Translated
msgid "Snap to grid"
msgstr "グリッドにスナップ"
# AI Translated
msgid "Grid step"
msgstr "グリッド間隔"
# AI Translated
msgid "Outer"
msgstr "外側"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% 点 %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (上面)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (正面)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (側面)"
# AI Translated
msgid "Revolve deg"
msgstr "回転押し出し角度"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "0で押し出し、0より大きい値で回転押し出し"
# AI Translated
msgid "Pocket (cut)"
msgstr "ポケット (カット)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu個の閉じたプロファイル"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "有効にするには閉じたプロファイルを描画してください"
# AI Translated
msgid "Clear all"
msgstr "すべてクリア"
# AI Translated
msgid "Empty result"
msgstr "結果が空です"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "押し出し: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "回転押し出し: %1%"
# AI Translated
msgid "No object selected"
msgstr "オブジェクトが選択されていません"
# AI Translated
msgid "Face failed"
msgstr "面の作成に失敗しました"
# AI Translated
msgid "Face with holes failed"
msgstr "穴のある面の作成に失敗しました"
# AI Translated
msgid "Tool mesh empty"
msgstr "ツールメッシュが空です"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "ポケットを追加しました (マイナスボリューム)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "ポケット: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -30804,9 +30986,6 @@ msgstr "開発者ツールを有効化"
msgid "An error occurred loading %s"
msgstr "%s の読み込み中にエラーが発生しました"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -31498,208 +31677,6 @@ msgstr ""
"反りを避ける\n"
"ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?"
# AI Translated
#~ msgid "Primitive"
#~ msgstr "プリミティブ"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "空のメッシュが生成されました"
# AI Translated
#~ msgid "Box"
#~ msgstr "ボックス"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "クイック:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "幅 (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "奥行き (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "高さ (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "底面半径"
# AI Translated
#~ msgid "Top R"
#~ msgstr "上面半径"
# AI Translated
#~ msgid "Major R"
#~ msgstr "大半径"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "小半径"
# AI Translated
#~ msgid "All edges"
#~ msgstr "すべてのエッジ"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "上面のエッジ"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "底面のエッジ"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "側面のエッジ"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "メッシュ分解能"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "形状を追加"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "外側のプロファイルがありません"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "外側の面を作成できませんでした"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "穴のある面を作成できませんでした"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "回転押し出しに失敗しました"
# AI Translated
#~ msgid "Profile"
#~ msgstr "プロファイル"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "新しいプロファイルを開始 (穴用)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "セグメント数"
# AI Translated
#~ msgid "Sides"
#~ msgstr "辺数"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "キャンバスをクリックして描画"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "グリッドにスナップ"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "グリッド間隔"
# AI Translated
#~ msgid "Outer"
#~ msgstr "外側"
# AI Translated
#~ msgid "closed"
#~ msgstr "閉じています"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% 点 %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (上面)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (正面)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (側面)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "回転押し出し角度"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "0で押し出し、0より大きい値で回転押し出し"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "ポケット (カット)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu個の閉じたプロファイル"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "有効にするには閉じたプロファイルを描画してください"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "すべてクリア"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "結果が空です"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "押し出し: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "回転押し出し: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "オブジェクトが選択されていません"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "面の作成に失敗しました"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "穴のある面の作成に失敗しました"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "ツールメッシュが空です"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "ポケットを追加しました (マイナスボリューム)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "ポケット: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(実験的) プリントホストの代わりにプリンターエージェントを使用"
@@ -32782,6 +32759,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "読み込み中にエラーが発生しました: "
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+212 -232
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\n"
"POT-Creation-Date: 2026-10-06 15:16-0300\n"
"PO-Revision-Date: 2025-06-02 17:12+0900\n"
"Last-Translator: crwusiz <crwusiz@gmail.com>\n"
"Language-Team: \n"
@@ -4377,9 +4377,6 @@ msgstr "정말 필라멘트 정보를 삭제하시겠습니까?"
msgid "You need to select the material type and color first."
msgstr "재료 유형과 색상을 먼저 선택해야 합니다."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "유효한 값을 입력하세요 (%.1f~%.1f 사이의 K)"
@@ -6267,7 +6264,7 @@ msgid "Size:"
msgstr "크기:"
# AI Translated
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "레이어 %d, Z = %.2lf mm에서 G-code 경로 충돌이 발견되었습니다. 충돌하는 객체를 더 멀리 분리하세요 (%s <-> %s)."
@@ -7147,22 +7144,6 @@ msgstr ".gcode.3mf 파일에는 G-code 데이터가 없습니다. OrcaSlicer에
msgid "File '%s' was lost! Please download it again."
msgstr "'%s' 파일이 손실되었습니다! 다시 다운로드하세요."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11332,12 +11313,6 @@ msgstr "타임랩스 취소 후 출력"
msgid "Clean Up"
msgstr "정리"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "출력 작업 준비 중"
@@ -27437,6 +27412,213 @@ msgstr "이 글꼴에는 이 텍스트의 외곽선이 없습니다"
msgid "Size: %.1f × %.1f mm"
msgstr "크기: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "기본 모델"
# AI Translated
msgid "Empty mesh generated"
msgstr "빈 메시가 생성되었습니다"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "상자"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "빠른 선택:"
# AI Translated
msgid "Width (X)"
msgstr "너비 (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "깊이 (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "높이 (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "하단 R"
# AI Translated
msgid "Top R"
msgstr "상단 R"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "주 R"
# AI Translated
msgid "Minor R"
msgstr "부 R"
# AI Translated
msgid "All edges"
msgstr "모든 모서리"
# AI Translated
msgid "Top edges"
msgstr "상단 모서리"
# AI Translated
msgid "Bottom edges"
msgstr "하단 모서리"
# AI Translated
msgid "Lateral edges"
msgstr "측면 모서리"
# AI Translated
msgid "Mesh resolution"
msgstr "메시 해상도"
# AI Translated
msgid "Add Shape"
msgstr "형상 추가"
# AI Translated
msgid "No outer profile"
msgstr "외곽 프로파일 없음"
# AI Translated
msgid "Failed to make outer face"
msgstr "외곽 면을 만들지 못했습니다"
# AI Translated
msgid "Failed to build face with holes"
msgstr "구멍이 있는 면을 만들지 못했습니다"
# AI Translated
msgid "Revolve failed"
msgstr "회전 실패"
# AI Translated
msgid "Profile"
msgstr "프로파일"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "새 프로파일 시작(구멍용)"
# AI Translated
msgid "Segments"
msgstr "세그먼트 수"
# AI Translated
msgid "Sides"
msgstr "변 수"
# AI Translated
msgid "Click on canvas to draw"
msgstr "캔버스를 클릭하여 그리기"
# AI Translated
msgid "Snap to grid"
msgstr "격자에 스냅"
# AI Translated
msgid "Grid step"
msgstr "격자 간격"
# AI Translated
msgid "Outer"
msgstr "외곽"
# AI Translated
msgid "closed"
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 "%1% %2%: 점 %3%개 %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (위)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (앞)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (측면)"
# AI Translated
msgid "Revolve deg"
msgstr "회전 각도"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "돌출은 0, 회전은 0보다 큰 값으로 설정"
# AI Translated
msgid "Pocket (cut)"
msgstr "포켓(잘라내기)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu개의 닫힌 프로파일"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "활성화하려면 닫힌 프로파일을 그리십시오"
# AI Translated
msgid "Clear all"
msgstr "모두 지우기"
# AI Translated
msgid "Empty result"
msgstr "결과가 비어 있음"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "돌출: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "회전: %1%"
# AI Translated
msgid "No object selected"
msgstr "선택한 객체 없음"
# AI Translated
msgid "Face failed"
msgstr "면 생성 실패"
# AI Translated
msgid "Face with holes failed"
msgstr "구멍이 있는 면 생성 실패"
# AI Translated
msgid "Tool mesh empty"
msgstr "도구 메시가 비어 있음"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "포켓 추가됨(비우기 부품)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "포켓: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -30822,9 +31004,6 @@ msgstr "개발자 도구 사용"
msgid "An error occurred loading %s"
msgstr "%s 로드 중 오류가 발생했습니다"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -31507,208 +31686,6 @@ msgstr ""
"뒤틀림 방지\n"
"ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?"
# AI Translated
#~ msgid "Primitive"
#~ msgstr "기본 모델"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "빈 메시가 생성되었습니다"
# AI Translated
#~ msgid "Box"
#~ msgstr "상자"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "빠른 선택:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "너비 (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "깊이 (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "높이 (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "하단 R"
# AI Translated
#~ msgid "Top R"
#~ msgstr "상단 R"
# AI Translated
#~ msgid "Major R"
#~ msgstr "주 R"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "부 R"
# AI Translated
#~ msgid "All edges"
#~ msgstr "모든 모서리"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "상단 모서리"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "하단 모서리"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "측면 모서리"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "메시 해상도"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "형상 추가"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "외곽 프로파일 없음"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "외곽 면을 만들지 못했습니다"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "구멍이 있는 면을 만들지 못했습니다"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "회전 실패"
# AI Translated
#~ msgid "Profile"
#~ msgstr "프로파일"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "새 프로파일 시작(구멍용)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "세그먼트 수"
# AI Translated
#~ msgid "Sides"
#~ msgstr "변 수"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "캔버스를 클릭하여 그리기"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "격자에 스냅"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "격자 간격"
# AI Translated
#~ msgid "Outer"
#~ msgstr "외곽"
# AI Translated
#~ msgid "closed"
#~ msgstr "닫힘"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: 점 %3%개 %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (위)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (앞)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (측면)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "회전 각도"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "돌출은 0, 회전은 0보다 큰 값으로 설정"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "포켓(잘라내기)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu개의 닫힌 프로파일"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "활성화하려면 닫힌 프로파일을 그리십시오"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "모두 지우기"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "결과가 비어 있음"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "돌출: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "회전: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "선택한 객체 없음"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "면 생성 실패"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "구멍이 있는 면 생성 실패"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "도구 메시가 비어 있음"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "포켓 추가됨(비우기 부품)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "포켓: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(실험적) 출력 호스트 대신 프린터 에이전트 사용"
@@ -32772,6 +32749,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "로드 중 오류가 발생했습니다: "
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
-1
View File
@@ -147,7 +147,6 @@ src/slic3r/GUI/HMSPanel.cpp
src/slic3r/GUI/MainFrame.cpp
src/slic3r/GUI/MediaPlayCtrl.cpp
src/slic3r/GUI/MediaFilePanel.cpp
src/slic3r/GUI/OrcaFilesPanel.cpp
src/slic3r/GUI/ImageGrid.cpp
src/slic3r/GUI/Widgets/ImageSwitchButton.cpp
src/slic3r/GUI/Printer/PrinterFileSystem.cpp
+215 -235
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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 <sharanchius@gmail.com>\n"
"Language-Team: \n"
@@ -4343,9 +4343,6 @@ msgstr "Ar jūs tikrai norite išvalyti gijos informaciją?"
msgid "You need to select the material type and color first."
msgstr "Pradžioje jums reikia pasirinkti medžiagos tipą ir spalvą."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Įveskite tinkamą reikšmę (K %.1f~%.1f)"
@@ -6222,7 +6219,7 @@ msgid "Size:"
msgstr "Dydis:"
# AI Translated
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "Rasta G-code trajektorijų konfliktų %d sluoksnyje, Z = %.2lfmm. Prašome labiau atskirti konfliktuojančius objektus (%s <-> %s)."
@@ -7107,22 +7104,6 @@ msgstr "Failas „.gcode.3mf“ neturi G-code duomenų. Supjaustykite jį su „
msgid "File '%s' was lost! Please download it again."
msgstr "Failas „%s“ nerastas! Atsisiųskite jį iš naujo."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11153,12 +11134,6 @@ msgstr "Atšaukti intervalinį fotografavimą ir spausdinti"
msgid "Clean Up"
msgstr "Išvalyti"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Spausdinimo užduoties rengimas"
@@ -26758,6 +26733,215 @@ msgstr "Šis šriftas neturi šio teksto kontūro"
msgid "Size: %.1f × %.1f mm"
msgstr "Dydis: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Primityvas"
# AI Translated
msgid "Empty mesh generated"
msgstr "Sugeneruotas tuščias poligoninis tinklas"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Dėžė"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Greitai:"
# AI Translated
msgid "Width (X)"
msgstr "Plotis (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Gylis (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Aukštis (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "Apat. R"
# AI Translated
msgid "Top R"
msgstr "Viršut. R"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "Didysis R"
# AI Translated
msgid "Minor R"
msgstr "Mažasis R"
# AI Translated
msgid "All edges"
msgstr "Visos briaunos"
# AI Translated
msgid "Top edges"
msgstr "Viršutinės briaunos"
# AI Translated
msgid "Bottom edges"
msgstr "Apatinės briaunos"
# AI Translated
msgid "Lateral edges"
msgstr "Šoninės briaunos"
# AI Translated
msgid "Mesh resolution"
msgstr "Tinklelio raiška"
# AI Translated
msgid "Add Shape"
msgstr "Pridėti formą"
# AI Translated
msgid "No outer profile"
msgstr "Nėra išorinio profilio"
# AI Translated
msgid "Failed to make outer face"
msgstr "Nepavyko sukurti išorinio paviršiaus"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Nepavyko sukurti paviršiaus su skylėmis"
# AI Translated
msgid "Revolve failed"
msgstr "Apsukimas nepavyko"
# AI Translated
msgid "Profile"
msgstr "Profilis"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Pradėti naują profilį (skylėms)"
# AI Translated
msgid "Segments"
msgstr "Segmentai"
# AI Translated
msgid "Sides"
msgstr "Kraštinės"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Spustelėkite drobėje, kad pieštumėte"
# AI Translated
msgid "Snap to grid"
msgstr "Pritraukti prie tinklelio"
# AI Translated
msgid "Grid step"
msgstr "Tinklelio žingsnis"
# AI Translated
msgid "Outer"
msgstr "Išorinis"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% tšk. %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (viršus)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (priekis)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (šonas)"
# AI Translated
msgid "Revolve deg"
msgstr "Apsukimo kampas"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "0 – išspaudimas, >0 – apsukimas"
# AI Translated
msgid "Pocket (cut)"
msgstr "Įduba (pjūvis)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu uždaras profilis"
msgstr[1] "%zu uždari profiliai"
msgstr[2] "%zu uždarų profilių"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Nubrėžkite uždarą profilį, kad įjungtumėte"
# AI Translated
msgid "Clear all"
msgstr "Išvalyti viską"
# AI Translated
msgid "Empty result"
msgstr "Tuščias rezultatas"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Išspaudimas: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Apsukimas: %1%"
# AI Translated
msgid "No object selected"
msgstr "Nepasirinktas joks objektas"
# AI Translated
msgid "Face failed"
msgstr "Nepavyko sukurti paviršiaus"
# AI Translated
msgid "Face with holes failed"
msgstr "Nepavyko sukurti paviršiaus su skylėmis"
# AI Translated
msgid "Tool mesh empty"
msgstr "Įrankio tinklelis tuščias"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Įduba pridėta (neigiamas tūris)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Įduba: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -30152,10 +30336,6 @@ msgstr "Įjungti kūrėjo įrankius"
msgid "An error occurred loading %s"
msgstr "Įvyko klaida įkeliant %s"
# AI Translated
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -30836,210 +31016,6 @@ 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 "Primitive"
#~ msgstr "Primityvas"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Sugeneruotas tuščias poligoninis tinklas"
# AI Translated
#~ msgid "Box"
#~ msgstr "Dėžė"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Greitai:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Plotis (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Gylis (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Aukštis (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "Apat. R"
# AI Translated
#~ msgid "Top R"
#~ msgstr "Viršut. R"
# AI Translated
#~ msgid "Major R"
#~ msgstr "Didysis R"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "Mažasis R"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Visos briaunos"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Viršutinės briaunos"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Apatinės briaunos"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Šoninės briaunos"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Tinklelio raiška"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Pridėti formą"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Nėra išorinio profilio"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Nepavyko sukurti išorinio paviršiaus"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Nepavyko sukurti paviršiaus su skylėmis"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Apsukimas nepavyko"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Profilis"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Pradėti naują profilį (skylėms)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segmentai"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Kraštinės"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Spustelėkite drobėje, kad pieštumėte"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Pritraukti prie tinklelio"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Tinklelio žingsnis"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Išorinis"
# AI Translated
#~ msgid "closed"
#~ msgstr "uždaras"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% tšk. %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (viršus)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (priekis)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (šonas)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Apsukimo kampas"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "0 – išspaudimas, >0 – apsukimas"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Įduba (pjūvis)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu uždaras profilis"
#~ msgstr[1] "%zu uždari profiliai"
#~ msgstr[2] "%zu uždarų profilių"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Nubrėžkite uždarą profilį, kad įjungtumėte"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Išvalyti viską"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Tuščias rezultatas"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Išspaudimas: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Apsukimas: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Nepasirinktas joks objektas"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Nepavyko sukurti paviršiaus"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Nepavyko sukurti paviršiaus su skylėmis"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Įrankio tinklelis tuščias"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Įduba pridėta (neigiamas tūris)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Įduba: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Eksperimentinė) Naudoti spausdintuvo agentus vietoj spausdinimo serverių"
@@ -32101,6 +32077,10 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Įvyko klaida įkeliant "
# AI Translated
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+213 -233
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\n"
"POT-Creation-Date: 2026-10-06 15:16-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -4719,9 +4719,6 @@ msgstr "Weet u zeker dat u de filamentinformatie wilt wissen?"
msgid "You need to select the material type and color first."
msgstr "U moet eerst het materiaaltype en de kleur selecteren."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
# AI Translated
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
@@ -6746,7 +6743,7 @@ msgid "Size:"
msgstr "Maat:"
# AI Translated
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "Er zijn conflicten tussen G-code-paden gevonden op laag %d, Z = %.2lfmm. Plaats de conflicterende objecten verder uit elkaar (%s <-> %s)."
@@ -7686,22 +7683,6 @@ msgstr "Het .gcode.3mf-bestand bevat geen G-code-gegevens. Slice het met Orca Sl
msgid "File '%s' was lost! Please download it again."
msgstr "Bestand '%s' is verloren gegaan! Download het opnieuw."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -12047,12 +12028,6 @@ msgstr "Timelapse annuleren en printen"
msgid "Clean Up"
msgstr "Opruimen"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Print opdracht voorbereiden"
@@ -28953,6 +28928,214 @@ msgstr "Dit lettertype heeft geen omtrek voor deze tekst"
msgid "Size: %.1f × %.1f mm"
msgstr "Grootte: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Primitief"
# AI Translated
msgid "Empty mesh generated"
msgstr "Lege mesh gegenereerd"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Blok"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Snel:"
# AI Translated
msgid "Width (X)"
msgstr "Breedte (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Diepte (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Hoogte (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "R onder"
# AI Translated
msgid "Top R"
msgstr "R boven"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "Grote R"
# AI Translated
msgid "Minor R"
msgstr "Kleine R"
# AI Translated
msgid "All edges"
msgstr "Alle randen"
# AI Translated
msgid "Top edges"
msgstr "Bovenranden"
# AI Translated
msgid "Bottom edges"
msgstr "Onderranden"
# AI Translated
msgid "Lateral edges"
msgstr "Zijranden"
# AI Translated
msgid "Mesh resolution"
msgstr "Meshresolutie"
# AI Translated
msgid "Add Shape"
msgstr "Vorm toevoegen"
# AI Translated
msgid "No outer profile"
msgstr "Geen buitenprofiel"
# AI Translated
msgid "Failed to make outer face"
msgstr "Kan het buitenvlak niet maken"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Kan het vlak met gaten niet opbouwen"
# AI Translated
msgid "Revolve failed"
msgstr "Wentelen mislukt"
# AI Translated
msgid "Profile"
msgstr "Profiel"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Nieuw profiel beginnen (voor gaten)"
# AI Translated
msgid "Segments"
msgstr "Segmenten"
# AI Translated
msgid "Sides"
msgstr "Zijden"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Klik op het canvas om te tekenen"
# AI Translated
msgid "Snap to grid"
msgstr "Uitlijnen op raster"
# AI Translated
msgid "Grid step"
msgstr "Rasterstap"
# AI Translated
msgid "Outer"
msgstr "Buiten"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% punten %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (boven)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (voor)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (zijkant)"
# AI Translated
msgid "Revolve deg"
msgstr "Wentelhoek (°)"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "Zet op 0 om te extruderen, >0 om te wentelen"
# AI Translated
msgid "Pocket (cut)"
msgstr "Uitsparing (snijden)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu gesloten profiel"
msgstr[1] "%zu gesloten profielen"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Teken een gesloten profiel om dit in te schakelen"
# AI Translated
msgid "Clear all"
msgstr "Alles wissen"
# AI Translated
msgid "Empty result"
msgstr "Leeg resultaat"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Extruderen: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Wentelen: %1%"
# AI Translated
msgid "No object selected"
msgstr "Geen object geselecteerd"
# AI Translated
msgid "Face failed"
msgstr "Vlak mislukt"
# AI Translated
msgid "Face with holes failed"
msgstr "Vlak met gaten mislukt"
# AI Translated
msgid "Tool mesh empty"
msgstr "Gereedschapsmesh leeg"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Uitsparing toegevoegd (negatief volume)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Uitsparing: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -32351,9 +32534,6 @@ msgstr "Ontwikkelaarstools inschakelen"
msgid "An error occurred loading %s"
msgstr "Er is een fout opgetreden bij het laden van %s"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -33034,209 +33214,6 @@ 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 "Primitive"
#~ msgstr "Primitief"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Lege mesh gegenereerd"
# AI Translated
#~ msgid "Box"
#~ msgstr "Blok"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Snel:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Breedte (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Diepte (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Hoogte (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "R onder"
# AI Translated
#~ msgid "Top R"
#~ msgstr "R boven"
# AI Translated
#~ msgid "Major R"
#~ msgstr "Grote R"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "Kleine R"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Alle randen"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Bovenranden"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Onderranden"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Zijranden"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Meshresolutie"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Vorm toevoegen"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Geen buitenprofiel"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Kan het buitenvlak niet maken"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Kan het vlak met gaten niet opbouwen"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Wentelen mislukt"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Profiel"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Nieuw profiel beginnen (voor gaten)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segmenten"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Zijden"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Klik op het canvas om te tekenen"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Uitlijnen op raster"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Rasterstap"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Buiten"
# AI Translated
#~ msgid "closed"
#~ msgstr "gesloten"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% punten %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (boven)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (voor)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (zijkant)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Wentelhoek (°)"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "Zet op 0 om te extruderen, >0 om te wentelen"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Uitsparing (snijden)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu gesloten profiel"
#~ msgstr[1] "%zu gesloten profielen"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Teken een gesloten profiel om dit in te schakelen"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Alles wissen"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Leeg resultaat"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Extruderen: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Wentelen: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Geen object geselecteerd"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Vlak mislukt"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Vlak met gaten mislukt"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Gereedschapsmesh leeg"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Uitsparing toegevoegd (negatief volume)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Uitsparing: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Experimenteel) Printeragents gebruiken in plaats van printhosts"
@@ -34356,6 +34333,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Er is een fout opgetreden bij het laden van "
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+214 -234
View File
@@ -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-08 11:08+0800\n"
"POT-Creation-Date: 2026-10-06 15:16-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: Krzysztof Morga <<tlumaczeniebs@gmail.com>>\n"
"Language-Team: \n"
@@ -4438,9 +4438,6 @@ msgstr "Czy na pewno usunąć informacje o filamentach?"
msgid "You need to select the material type and color first."
msgstr "Najpierw należy wybrać rodzaj i kolor filamentu."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Proszę podać prawidłową wartość (K w zakresie %.1f~%.1f)"
@@ -6341,7 +6338,7 @@ msgstr "Objętość:"
msgid "Size:"
msgstr "Rozmiar:"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "Wykryto konflikty ścieżek G-code na warstwie %d, Z = %.2lfmm. Proszę oddalić od siebie obiekty będące w konflikcie (%s <-> %s)."
@@ -7238,22 +7235,6 @@ msgstr "Plik .gcode.3mf nie zawiera danych G-code. Proszę poddać go obróbce w
msgid "File '%s' was lost! Please download it again."
msgstr "Plik „%s” został utracony! Proszę pobrać go ponownie."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11432,12 +11413,6 @@ msgstr "Anuluj timelapse i drukuj"
msgid "Clean Up"
msgstr "Wyczyść"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Przygotowywanie zadania do druku"
@@ -27505,6 +27480,215 @@ msgstr "Ta czcionka nie ma konturu dla tego tekstu"
msgid "Size: %.1f × %.1f mm"
msgstr "Rozmiar: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Prymityw"
# AI Translated
msgid "Empty mesh generated"
msgstr "Wygenerowano pustą siatkę"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Prostopadłościan"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Szybki wybór:"
# AI Translated
msgid "Width (X)"
msgstr "Szerokość (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Głębokość (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Wysokość (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "R dolny"
# AI Translated
msgid "Top R"
msgstr "R górny"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "R większy"
# AI Translated
msgid "Minor R"
msgstr "R mniejszy"
# AI Translated
msgid "All edges"
msgstr "Wszystkie krawędzie"
# AI Translated
msgid "Top edges"
msgstr "Górne krawędzie"
# AI Translated
msgid "Bottom edges"
msgstr "Dolne krawędzie"
# AI Translated
msgid "Lateral edges"
msgstr "Boczne krawędzie"
# AI Translated
msgid "Mesh resolution"
msgstr "Rozdzielczość siatki"
# AI Translated
msgid "Add Shape"
msgstr "Dodaj kształt"
# AI Translated
msgid "No outer profile"
msgstr "Brak profilu zewnętrznego"
# AI Translated
msgid "Failed to make outer face"
msgstr "Nie udało się utworzyć powierzchni zewnętrznej"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Nie udało się zbudować powierzchni z otworami"
# AI Translated
msgid "Revolve failed"
msgstr "Obrót nie powiódł się"
# AI Translated
msgid "Profile"
msgstr "Profil"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Rozpocznij nowy profil (dla otworów)"
# AI Translated
msgid "Segments"
msgstr "Segmenty"
# AI Translated
msgid "Sides"
msgstr "Boki"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Kliknij w widoku, aby rysować"
# AI Translated
msgid "Snap to grid"
msgstr "Przyciągaj do siatki"
# AI Translated
msgid "Grid step"
msgstr "Krok siatki"
# AI Translated
msgid "Outer"
msgstr "Zewnętrzny"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% pkt %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (góra)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (przód)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (bok)"
# AI Translated
msgid "Revolve deg"
msgstr "Obrót (°)"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "Ustaw 0 dla wyciągnięcia, >0 dla obrotu"
# AI Translated
msgid "Pocket (cut)"
msgstr "Kieszeń (wycięcie)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu zamknięty profil"
msgstr[1] "%zu zamknięte profile"
msgstr[2] "%zu zamkniętych profili"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Narysuj zamknięty profil, aby włączyć"
# AI Translated
msgid "Clear all"
msgstr "Wyczyść wszystko"
# AI Translated
msgid "Empty result"
msgstr "Pusty wynik"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Wyciągnięcie: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Obrót: %1%"
# AI Translated
msgid "No object selected"
msgstr "Nie wybrano obiektu"
# AI Translated
msgid "Face failed"
msgstr "Nie udało się utworzyć powierzchni"
# AI Translated
msgid "Face with holes failed"
msgstr "Nie udało się utworzyć powierzchni z otworami"
# AI Translated
msgid "Tool mesh empty"
msgstr "Siatka narzędzia jest pusta"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Dodano kieszeń (objętość ujemna)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Kieszeń: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -30804,9 +30988,6 @@ msgstr "Włącz narzędzia deweloperskie"
msgid "An error occurred loading %s"
msgstr "Wystąpił błąd podczas ładowania %s"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -31486,210 +31667,6 @@ 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 "Primitive"
#~ msgstr "Prymityw"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Wygenerowano pustą siatkę"
# AI Translated
#~ msgid "Box"
#~ msgstr "Prostopadłościan"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Szybki wybór:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Szerokość (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Głębokość (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Wysokość (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "R dolny"
# AI Translated
#~ msgid "Top R"
#~ msgstr "R górny"
# AI Translated
#~ msgid "Major R"
#~ msgstr "R większy"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "R mniejszy"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Wszystkie krawędzie"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Górne krawędzie"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Dolne krawędzie"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Boczne krawędzie"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Rozdzielczość siatki"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Dodaj kształt"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Brak profilu zewnętrznego"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Nie udało się utworzyć powierzchni zewnętrznej"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Nie udało się zbudować powierzchni z otworami"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Obrót nie powiódł się"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Profil"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Rozpocznij nowy profil (dla otworów)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segmenty"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Boki"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Kliknij w widoku, aby rysować"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Przyciągaj do siatki"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Krok siatki"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Zewnętrzny"
# AI Translated
#~ msgid "closed"
#~ msgstr "zamknięty"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% pkt %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (góra)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (przód)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (bok)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Obrót (°)"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "Ustaw 0 dla wyciągnięcia, >0 dla obrotu"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Kieszeń (wycięcie)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu zamknięty profil"
#~ msgstr[1] "%zu zamknięte profile"
#~ msgstr[2] "%zu zamkniętych profili"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Narysuj zamknięty profil, aby włączyć"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Wyczyść wszystko"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Pusty wynik"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Wyciągnięcie: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Obrót: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Nie wybrano obiektu"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Nie udało się utworzyć powierzchni"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Nie udało się utworzyć powierzchni z otworami"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Siatka narzędzia jest pusta"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Dodano kieszeń (objętość ujemna)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Kieszeń: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Eksperymentalne) Używaj agentów drukarki zamiast serwerów druku"
@@ -32721,6 +32698,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Wystąpił błąd podczas ładowania"
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+214 -234
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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"
@@ -4184,9 +4184,6 @@ msgstr "Tem certeza de que deseja limpar as informações do filamento?"
msgid "You need to select the material type and color first."
msgstr "Você precisa selecionar o tipo e a cor do material primeiro."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Por favor insira um valor válido (K entre %.1f~%.1f)"
@@ -6015,7 +6012,7 @@ msgstr "Volume:"
msgid "Size:"
msgstr "Tamanho:"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "Foram encontrados conflitos de caminhos de G-code na camada %d, Z = %.2lfmm. Por favor, separe mais os objetos em conflito (%s <-> %s)."
@@ -6878,22 +6875,6 @@ msgstr "O arquivo .gcode.3mf não contém dados de G-code. Por favor, fatie com
msgid "File '%s' was lost! Please download it again."
msgstr "O arquivo '%s' foi perdido! Por favor, baixe-o novamente."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -10741,12 +10722,6 @@ msgstr "Cancelar Timelapse e Imprimir"
msgid "Clean Up"
msgstr "Limpar"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Preparando trabalho de impressão"
@@ -25993,6 +25968,214 @@ msgstr "Esta fonte não tem contorno para este texto"
msgid "Size: %.1f × %.1f mm"
msgstr "Tamanho: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Primitivo"
# AI Translated
msgid "Empty mesh generated"
msgstr "Malha vazia gerada"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Caixa"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Rápido:"
# AI Translated
msgid "Width (X)"
msgstr "Largura (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Profundidade (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Altura (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "R inferior"
# AI Translated
msgid "Top R"
msgstr "R superior"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "R maior"
# AI Translated
msgid "Minor R"
msgstr "R menor"
# AI Translated
msgid "All edges"
msgstr "Todas as arestas"
# AI Translated
msgid "Top edges"
msgstr "Arestas superiores"
# AI Translated
msgid "Bottom edges"
msgstr "Arestas inferiores"
# AI Translated
msgid "Lateral edges"
msgstr "Arestas laterais"
# AI Translated
msgid "Mesh resolution"
msgstr "Resolução da malha"
# AI Translated
msgid "Add Shape"
msgstr "Adicionar forma"
# AI Translated
msgid "No outer profile"
msgstr "Nenhum perfil externo"
# AI Translated
msgid "Failed to make outer face"
msgstr "Falha ao criar a face externa"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Falha ao construir a face com furos"
# AI Translated
msgid "Revolve failed"
msgstr "Falha na revolução"
# AI Translated
msgid "Profile"
msgstr "Perfil"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Iniciar novo perfil (para furos)"
# AI Translated
msgid "Segments"
msgstr "Segmentos"
# AI Translated
msgid "Sides"
msgstr "Lados"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Clique na tela para desenhar"
# AI Translated
msgid "Snap to grid"
msgstr "Ajustar à grade"
# AI Translated
msgid "Grid step"
msgstr "Passo da grade"
# AI Translated
msgid "Outer"
msgstr "Externo"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% pontos %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (Topo)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (Frente)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (Lateral)"
# AI Translated
msgid "Revolve deg"
msgstr "Revolução (graus)"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "Defina como 0 para extrusão, >0 para revolução"
# AI Translated
msgid "Pocket (cut)"
msgstr "Cavidade (corte)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu perfil fechado"
msgstr[1] "%zu perfis fechados"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Desenhe um perfil fechado para ativar"
# AI Translated
msgid "Clear all"
msgstr "Limpar tudo"
# AI Translated
msgid "Empty result"
msgstr "Resultado vazio"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Extrusão: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Revolução: %1%"
# AI Translated
msgid "No object selected"
msgstr "Nenhum objeto selecionado"
# AI Translated
msgid "Face failed"
msgstr "Falha na face"
# AI Translated
msgid "Face with holes failed"
msgstr "Falha na face com furos"
# AI Translated
msgid "Tool mesh empty"
msgstr "Malha da ferramenta vazia"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Cavidade adicionada (volume negativo)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Cavidade: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -29377,10 +29560,6 @@ msgstr "Ativar Ferramentas de Desenvolvedor"
msgid "An error occurred loading %s"
msgstr "Ocorreu um erro ao carregar %s"
# AI Translated
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -30060,209 +30239,6 @@ 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?"
# AI Translated
#~ msgid "Primitive"
#~ msgstr "Primitivo"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Malha vazia gerada"
# AI Translated
#~ msgid "Box"
#~ msgstr "Caixa"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Rápido:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Largura (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Profundidade (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Altura (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "R inferior"
# AI Translated
#~ msgid "Top R"
#~ msgstr "R superior"
# AI Translated
#~ msgid "Major R"
#~ msgstr "R maior"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "R menor"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Todas as arestas"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Arestas superiores"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Arestas inferiores"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Arestas laterais"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Resolução da malha"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Adicionar forma"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Nenhum perfil externo"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Falha ao criar a face externa"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Falha ao construir a face com furos"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Falha na revolução"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Perfil"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Iniciar novo perfil (para furos)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segmentos"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Lados"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Clique na tela para desenhar"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Ajustar à grade"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Passo da grade"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Externo"
# AI Translated
#~ msgid "closed"
#~ msgstr "fechado"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% pontos %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (Topo)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (Frente)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (Lateral)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Revolução (graus)"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "Defina como 0 para extrusão, >0 para revolução"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Cavidade (corte)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu perfil fechado"
#~ msgstr[1] "%zu perfis fechados"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Desenhe um perfil fechado para ativar"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Limpar tudo"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Resultado vazio"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Extrusão: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Revolução: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Nenhum objeto selecionado"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Falha na face"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Falha na face com furos"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Malha da ferramenta vazia"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Cavidade adicionada (volume negativo)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Cavidade: %1%"
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Experimental) Usar agentes de impressora em vez de hosts de impressão"
@@ -31316,6 +31292,10 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Ocorreu um erro ao carregar "
# AI Translated
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+214 -234
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: OrcaSlicer V2.5.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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 <andylg@yandex.ru>\n"
@@ -4319,9 +4319,6 @@ msgstr "Вы действительно хотите удалить информ
msgid "You need to select the material type and color first."
msgstr "Сначала нужно выбрать тип материала и цвет."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Пожалуйста, введите допустимое значение (K в диапазоне %.1f~%.1f)"
@@ -6233,7 +6230,7 @@ msgstr "Объём:"
msgid "Size:"
msgstr "Размер:"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "В G-code на %d слое (z = %.2lf мм) обнаружен конфликт путей. Пожалуйста, разместите конфликтующие модели дальше друг от друга (%s <-> %s)."
@@ -7144,22 +7141,6 @@ msgstr "Файл .gcode.3mf не содержит данных G-code. Испо
msgid "File '%s' was lost! Please download it again."
msgstr "Файл '%s' потерян! Пожалуйста, загрузите его снова."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11166,12 +11147,6 @@ msgstr "Отключить таймлапс и продолжить"
msgid "Clean Up"
msgstr "Очистить"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Подготовка задания на печать"
@@ -27256,6 +27231,215 @@ msgstr "В этом шрифте нет контуров символов это
msgid "Size: %.1f × %.1f mm"
msgstr "Размер: %.1f × %.1f мм"
# AI Translated
msgid "Primitive"
msgstr "Фигура"
# AI Translated
msgid "Empty mesh generated"
msgstr "Создана пустая сетка"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Параллелепипед"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Быстрый выбор:"
# AI Translated
msgid "Width (X)"
msgstr "Ширина (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Глубина (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Высота (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "Нижний R"
# AI Translated
msgid "Top R"
msgstr "Верхний R"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "Большой R"
# AI Translated
msgid "Minor R"
msgstr "Малый R"
# AI Translated
msgid "All edges"
msgstr "Все рёбра"
# AI Translated
msgid "Top edges"
msgstr "Верхние рёбра"
# AI Translated
msgid "Bottom edges"
msgstr "Нижние рёбра"
# AI Translated
msgid "Lateral edges"
msgstr "Боковые рёбра"
# AI Translated
msgid "Mesh resolution"
msgstr "Разрешение сетки"
# AI Translated
msgid "Add Shape"
msgstr "Добавить фигуру"
# AI Translated
msgid "No outer profile"
msgstr "Нет внешнего профиля"
# AI Translated
msgid "Failed to make outer face"
msgstr "Не удалось создать внешнюю грань"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Не удалось построить грань с отверстиями"
# AI Translated
msgid "Revolve failed"
msgstr "Ошибка вращения"
# AI Translated
msgid "Profile"
msgstr "Профиль"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Начать новый профиль (для отверстий)"
# AI Translated
msgid "Segments"
msgstr "Сегменты"
# AI Translated
msgid "Sides"
msgstr "Стороны"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Щёлкайте в рабочем пространстве, чтобы рисовать"
# AI Translated
msgid "Snap to grid"
msgstr "Привязка к сетке"
# AI Translated
msgid "Grid step"
msgstr "Шаг сетки"
# AI Translated
msgid "Outer"
msgstr "Внешний"
# AI Translated
msgid "closed"
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 "%1% %2% (точек: %3%) %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (сверху)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (спереди)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (сбоку)"
# AI Translated
msgid "Revolve deg"
msgstr "Угол вращения, °"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "0 — выдавливание, >0 — вращение"
# AI Translated
msgid "Pocket (cut)"
msgstr "Карман (вырез)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu замкнутый профиль"
msgstr[1] "%zu замкнутых профиля"
msgstr[2] "%zu замкнутых профилей"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Нарисуйте замкнутый профиль, чтобы включить"
# AI Translated
msgid "Clear all"
msgstr "Очистить всё"
# AI Translated
msgid "Empty result"
msgstr "Пустой результат"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Выдавливание: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Вращение: %1%"
# AI Translated
msgid "No object selected"
msgstr "Модель не выбрана"
# AI Translated
msgid "Face failed"
msgstr "Ошибка построения грани"
# AI Translated
msgid "Face with holes failed"
msgstr "Ошибка построения грани с отверстиями"
# AI Translated
msgid "Tool mesh empty"
msgstr "Сетка инструмента пуста"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Карман добавлен (вырез)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Карман: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -30643,9 +30827,6 @@ msgstr "Включить инструменты разработчика"
msgid "An error occurred loading %s"
msgstr "Ошибка при загрузке %s"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -31323,210 +31504,6 @@ msgstr ""
"Предотвращение коробления материала\n"
"Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?"
# AI Translated
#~ msgid "Primitive"
#~ msgstr "Фигура"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Создана пустая сетка"
# AI Translated
#~ msgid "Box"
#~ msgstr "Параллелепипед"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Быстрый выбор:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Ширина (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Глубина (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Высота (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "Нижний R"
# AI Translated
#~ msgid "Top R"
#~ msgstr "Верхний R"
# AI Translated
#~ msgid "Major R"
#~ msgstr "Большой R"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "Малый R"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Все рёбра"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Верхние рёбра"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Нижние рёбра"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Боковые рёбра"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Разрешение сетки"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Добавить фигуру"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Нет внешнего профиля"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Не удалось создать внешнюю грань"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Не удалось построить грань с отверстиями"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Ошибка вращения"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Профиль"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Начать новый профиль (для отверстий)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Сегменты"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Стороны"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Щёлкайте в рабочем пространстве, чтобы рисовать"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Привязка к сетке"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Шаг сетки"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Внешний"
# AI Translated
#~ msgid "closed"
#~ msgstr "замкнутый"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2% (точек: %3%) %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (сверху)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (спереди)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (сбоку)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Угол вращения, °"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "0 — выдавливание, >0 — вращение"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Карман (вырез)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu замкнутый профиль"
#~ msgstr[1] "%zu замкнутых профиля"
#~ msgstr[2] "%zu замкнутых профилей"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Нарисуйте замкнутый профиль, чтобы включить"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Очистить всё"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Пустой результат"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Выдавливание: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Вращение: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Модель не выбрана"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Ошибка построения грани"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Ошибка построения грани с отверстиями"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Сетка инструмента пуста"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Карман добавлен (вырез)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Карман: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Экспериментально) Использовать агентов принтера вместо хостов печати"
@@ -32594,6 +32571,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Ошибка при загрузке "
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+213 -233
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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"
@@ -4784,9 +4784,6 @@ msgstr "Är du säker på att du vill rensa filament informationen?"
msgid "You need to select the material type and color first."
msgstr "Du måste först välja materialtyp och färg."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
# AI Translated
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
@@ -6840,7 +6837,7 @@ msgid "Size:"
msgstr "Storlek:"
# AI Translated
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "Konflikter mellan G-code-banor hittades på lager %d, Z = %.2lfmm. Placera de objekt som krockar längre ifrån varandra (%s <-> %s)."
@@ -7781,22 +7778,6 @@ msgstr "Filen .gcode.3mf innehåller inga G-code-data. Bered den med Orca Slicer
msgid "File '%s' was lost! Please download it again."
msgstr "Filen '%s' förlorades! Ladda ner den igen."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
# AI Translated
#, c-format, boost-format
msgid ""
@@ -12196,12 +12177,6 @@ msgstr "Avbryt timelapse och skriv ut"
msgid "Clean Up"
msgstr "Rensa"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Förbereder utskriftsjobb"
@@ -29296,6 +29271,214 @@ msgstr "Det här teckensnittet har ingen kontur för den här texten"
msgid "Size: %.1f × %.1f mm"
msgstr "Storlek: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Primitiv"
# AI Translated
msgid "Empty mesh generated"
msgstr "Tom mesh genererades"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Låda"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Förval:"
# AI Translated
msgid "Width (X)"
msgstr "Bredd (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Djup (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Höjd (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "Nedre R"
# AI Translated
msgid "Top R"
msgstr "Övre R"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "Stor R"
# AI Translated
msgid "Minor R"
msgstr "Liten R"
# AI Translated
msgid "All edges"
msgstr "Alla kanter"
# AI Translated
msgid "Top edges"
msgstr "Övre kanter"
# AI Translated
msgid "Bottom edges"
msgstr "Nedre kanter"
# AI Translated
msgid "Lateral edges"
msgstr "Sidokanter"
# AI Translated
msgid "Mesh resolution"
msgstr "Meshupplösning"
# AI Translated
msgid "Add Shape"
msgstr "Lägg till form"
# AI Translated
msgid "No outer profile"
msgstr "Ingen yttre profil"
# AI Translated
msgid "Failed to make outer face"
msgstr "Det gick inte att skapa den yttre ytan"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Det gick inte att skapa en yta med hål"
# AI Translated
msgid "Revolve failed"
msgstr "Rotationen misslyckades"
# AI Translated
msgid "Profile"
msgstr "Profil"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Starta ny profil (för hål)"
# AI Translated
msgid "Segments"
msgstr "Segment"
# AI Translated
msgid "Sides"
msgstr "Sidor"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Klicka i vyn för att rita"
# AI Translated
msgid "Snap to grid"
msgstr "Fäst mot rutnät"
# AI Translated
msgid "Grid step"
msgstr "Rutnätssteg"
# AI Translated
msgid "Outer"
msgstr "Yttre"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% punkter %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (Topp)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (Front)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (Sida)"
# AI Translated
msgid "Revolve deg"
msgstr "Rotationsvinkel"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "Ange 0 för extrudering, >0 för rotation"
# AI Translated
msgid "Pocket (cut)"
msgstr "Ficka (skär)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu sluten profil"
msgstr[1] "%zu slutna profiler"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Rita en sluten profil för att aktivera"
# AI Translated
msgid "Clear all"
msgstr "Rensa alla"
# AI Translated
msgid "Empty result"
msgstr "Tomt resultat"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Extrudera: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Rotera: %1%"
# AI Translated
msgid "No object selected"
msgstr "Inget objekt valt"
# AI Translated
msgid "Face failed"
msgstr "Det gick inte att skapa ytan"
# AI Translated
msgid "Face with holes failed"
msgstr "Det gick inte att skapa ytan med hål"
# AI Translated
msgid "Tool mesh empty"
msgstr "Verktygets mesh är tom"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Ficka tillagd (negativ volym)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Ficka: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -32685,9 +32868,6 @@ msgstr "Aktivera utvecklarverktyg"
msgid "An error occurred loading %s"
msgstr "Ett fel uppstod vid inläsning av %s"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -33382,209 +33562,6 @@ 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 "Primitive"
#~ msgstr "Primitiv"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Tom mesh genererades"
# AI Translated
#~ msgid "Box"
#~ msgstr "Låda"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Förval:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Bredd (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Djup (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Höjd (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "Nedre R"
# AI Translated
#~ msgid "Top R"
#~ msgstr "Övre R"
# AI Translated
#~ msgid "Major R"
#~ msgstr "Stor R"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "Liten R"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Alla kanter"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Övre kanter"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Nedre kanter"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Sidokanter"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Meshupplösning"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Lägg till form"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Ingen yttre profil"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Det gick inte att skapa den yttre ytan"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Det gick inte att skapa en yta med hål"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Rotationen misslyckades"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Profil"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Starta ny profil (för hål)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segment"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Sidor"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Klicka i vyn för att rita"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Fäst mot rutnät"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Rutnätssteg"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Yttre"
# AI Translated
#~ msgid "closed"
#~ msgstr "sluten"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% punkter %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (Topp)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (Front)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (Sida)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Rotationsvinkel"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "Ange 0 för extrudering, >0 för rotation"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Ficka (skär)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu sluten profil"
#~ msgstr[1] "%zu slutna profiler"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Rita en sluten profil för att aktivera"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Rensa alla"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Tomt resultat"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Extrudera: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Rotera: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Inget objekt valt"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Det gick inte att skapa ytan"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Det gick inte att skapa ytan med hål"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Verktygets mesh är tom"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Ficka tillagd (negativ volym)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Ficka: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Experimentellt) Använd skrivaragenter i stället för utskriftsvärdar"
@@ -34710,6 +34687,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Ett fel uppstod vid inläsning av "
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+213 -233
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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"
@@ -4332,9 +4332,6 @@ msgstr "คุณแน่ใจหรือไม่ว่าต้องกา
msgid "You need to select the material type and color first."
msgstr "คุณต้องเลือกประเภทวัสดุและสีก่อน"
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "โปรดป้อนค่าที่ถูกต้อง (K อยู่ในช่วง %.1f~%.1f)"
@@ -6192,7 +6189,7 @@ msgid "Size:"
msgstr "ขนาด:"
# AI Translated
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "พบความขัดแย้งของเส้นทาง G-code ที่เลเยอร์ %d, Z = %.2lfmm โปรดแยกวัตถุที่ขัดแย้งกันให้ไกลออกไป (%s <-> %s)"
@@ -7061,22 +7058,6 @@ msgstr "ไฟล์ .gcode.3mf ไม่มีข้อมูล G-code โป
msgid "File '%s' was lost! Please download it again."
msgstr "ไฟล์ '%s' สูญหาย! กรุณาดาวน์โหลดอีกครั้ง."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11084,12 +11065,6 @@ msgstr "ยกเลิกไทม์แลปส์และพิมพ์"
msgid "Clean Up"
msgstr "ล้าง"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "กำลังเตรียมงานพิมพ์"
@@ -26642,6 +26617,213 @@ msgstr "แบบอักษรนี้ไม่มีเส้นขอบส
msgid "Size: %.1f × %.1f mm"
msgstr "ขนาด: %.1f × %.1f มม."
# AI Translated
msgid "Primitive"
msgstr "รูปทรงพื้นฐาน"
# AI Translated
msgid "Empty mesh generated"
msgstr "สร้างเมชว่างเปล่า"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "กล่อง"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "ขนาดด่วน:"
# AI Translated
msgid "Width (X)"
msgstr "ความกว้าง (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "ความลึก (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "ความสูง (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "R ล่าง"
# AI Translated
msgid "Top R"
msgstr "R บน"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "R หลัก"
# AI Translated
msgid "Minor R"
msgstr "R รอง"
# AI Translated
msgid "All edges"
msgstr "ขอบทั้งหมด"
# AI Translated
msgid "Top edges"
msgstr "ขอบบน"
# AI Translated
msgid "Bottom edges"
msgstr "ขอบล่าง"
# AI Translated
msgid "Lateral edges"
msgstr "ขอบด้านข้าง"
# AI Translated
msgid "Mesh resolution"
msgstr "ความละเอียดเมช"
# AI Translated
msgid "Add Shape"
msgstr "เพิ่มรูปทรง"
# AI Translated
msgid "No outer profile"
msgstr "ไม่มีโปรไฟล์ด้านนอก"
# AI Translated
msgid "Failed to make outer face"
msgstr "ไม่สามารถสร้างผิวหน้าด้านนอกได้"
# AI Translated
msgid "Failed to build face with holes"
msgstr "ไม่สามารถสร้างผิวหน้าที่มีรูได้"
# AI Translated
msgid "Revolve failed"
msgstr "หมุนขึ้นรูปล้มเหลว"
# AI Translated
msgid "Profile"
msgstr "โปรไฟล์"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "เริ่มโปรไฟล์ใหม่ (สำหรับรู)"
# AI Translated
msgid "Segments"
msgstr "เซกเมนต์"
# AI Translated
msgid "Sides"
msgstr "ด้าน"
# AI Translated
msgid "Click on canvas to draw"
msgstr "คลิกบนพื้นที่วาดเพื่อวาด"
# AI Translated
msgid "Snap to grid"
msgstr "สแน็ปกับกริด"
# AI Translated
msgid "Grid step"
msgstr "ระยะกริด"
# AI Translated
msgid "Outer"
msgstr "ด้านนอก"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% จุด %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (บน)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (ด้านหน้า)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (ด้านข้าง)"
# AI Translated
msgid "Revolve deg"
msgstr "องศาหมุนขึ้นรูป"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "ตั้งเป็น 0 เพื่อยืดขึ้นรูป, >0 เพื่อหมุนขึ้นรูป"
# AI Translated
msgid "Pocket (cut)"
msgstr "ช่องเว้า (ตัด)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "โปรไฟล์ปิด %zu รายการ"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "วาดโปรไฟล์ปิดเพื่อเปิดใช้งาน"
# AI Translated
msgid "Clear all"
msgstr "ล้างทั้งหมด"
# AI Translated
msgid "Empty result"
msgstr "ผลลัพธ์ว่างเปล่า"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "ยืดขึ้นรูป: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "หมุนขึ้นรูป: %1%"
# AI Translated
msgid "No object selected"
msgstr "ไม่ได้เลือกวัตถุ"
# AI Translated
msgid "Face failed"
msgstr "สร้างผิวหน้าล้มเหลว"
# AI Translated
msgid "Face with holes failed"
msgstr "สร้างผิวหน้าที่มีรูล้มเหลว"
# AI Translated
msgid "Tool mesh empty"
msgstr "เมชเครื่องมือว่างเปล่า"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "เพิ่มช่องเว้าแล้ว (วอลลุ่มเชิงลบ)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "ช่องเว้า: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -30034,10 +30216,6 @@ msgstr "เปิดใช้งานเครื่องมือนักพ
msgid "An error occurred loading %s"
msgstr "เกิดข้อผิดพลาดในการโหลด %s"
# AI Translated
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -30717,208 +30895,6 @@ msgstr ""
"หลีกเลี่ยงการบิดเบี้ยว\n"
"คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้"
# AI Translated
#~ msgid "Primitive"
#~ msgstr "รูปทรงพื้นฐาน"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "สร้างเมชว่างเปล่า"
# AI Translated
#~ msgid "Box"
#~ msgstr "กล่อง"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "ขนาดด่วน:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "ความกว้าง (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "ความลึก (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "ความสูง (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "R ล่าง"
# AI Translated
#~ msgid "Top R"
#~ msgstr "R บน"
# AI Translated
#~ msgid "Major R"
#~ msgstr "R หลัก"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "R รอง"
# AI Translated
#~ msgid "All edges"
#~ msgstr "ขอบทั้งหมด"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "ขอบบน"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "ขอบล่าง"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "ขอบด้านข้าง"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "ความละเอียดเมช"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "เพิ่มรูปทรง"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "ไม่มีโปรไฟล์ด้านนอก"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "ไม่สามารถสร้างผิวหน้าด้านนอกได้"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "ไม่สามารถสร้างผิวหน้าที่มีรูได้"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "หมุนขึ้นรูปล้มเหลว"
# AI Translated
#~ msgid "Profile"
#~ msgstr "โปรไฟล์"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "เริ่มโปรไฟล์ใหม่ (สำหรับรู)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "เซกเมนต์"
# AI Translated
#~ msgid "Sides"
#~ msgstr "ด้าน"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "คลิกบนพื้นที่วาดเพื่อวาด"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "สแน็ปกับกริด"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "ระยะกริด"
# AI Translated
#~ msgid "Outer"
#~ msgstr "ด้านนอก"
# AI Translated
#~ msgid "closed"
#~ msgstr "แบบปิด"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% จุด %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (บน)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (ด้านหน้า)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (ด้านข้าง)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "องศาหมุนขึ้นรูป"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "ตั้งเป็น 0 เพื่อยืดขึ้นรูป, >0 เพื่อหมุนขึ้นรูป"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "ช่องเว้า (ตัด)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "โปรไฟล์ปิด %zu รายการ"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "วาดโปรไฟล์ปิดเพื่อเปิดใช้งาน"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "ล้างทั้งหมด"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "ผลลัพธ์ว่างเปล่า"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "ยืดขึ้นรูป: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "หมุนขึ้นรูป: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "ไม่ได้เลือกวัตถุ"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "สร้างผิวหน้าล้มเหลว"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "สร้างผิวหน้าที่มีรูล้มเหลว"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "เมชเครื่องมือว่างเปล่า"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "เพิ่มช่องเว้าแล้ว (วอลลุ่มเชิงลบ)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "ช่องเว้า: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(ทดลอง) ใช้เอเจนต์เครื่องพิมพ์แทนโฮสต์การพิมพ์"
@@ -31976,6 +31952,10 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "เกิดข้อผิดพลาดในการโหลด "
# AI Translated
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+214 -234
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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"
@@ -4384,9 +4384,6 @@ msgstr "Filament bilgisini temizlemek istediğinizden emin misiniz?"
msgid "You need to select the material type and color first."
msgstr "Önce malzeme türünü ve rengini seçmeniz gerekir."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Lütfen geçerli bir değer girin (K %.1f~%.1f içinde)"
@@ -6258,7 +6255,7 @@ msgstr "Hacim:"
msgid "Size:"
msgstr "Boyut:"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "%d katmanında G-code yollarında çakışmalar bulundu, Z = %.2lfmm. Lütfen çakışan nesneleri daha uzağa ayırın (%s <-> %s)."
@@ -7134,22 +7131,6 @@ msgstr ".gcode.3mf dosyası hiçbir G-code verisi içermiyor. Lütfen dosyayı B
msgid "File '%s' was lost! Please download it again."
msgstr "'%s' dosyası kayboldu! Lütfen tekrar indirin."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11220,12 +11201,6 @@ msgstr "Timelapse'i İptal Et ve Yazdır"
msgid "Clean Up"
msgstr "Temizle"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Yazdırma için hazırlanıyor"
@@ -27087,6 +27062,214 @@ msgstr "Bu yazı tipinde bu metin için dış hat yok"
msgid "Size: %.1f × %.1f mm"
msgstr "Boyut: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Şekil"
# AI Translated
msgid "Empty mesh generated"
msgstr "Boş mesh oluşturuldu"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Kutu"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Hızlı:"
# AI Translated
msgid "Width (X)"
msgstr "Genişlik (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Derinlik (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Yükseklik (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "Alt R"
# AI Translated
msgid "Top R"
msgstr "Üst R"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "Büyük R"
# AI Translated
msgid "Minor R"
msgstr "Küçük R"
# AI Translated
msgid "All edges"
msgstr "Tüm kenarlar"
# AI Translated
msgid "Top edges"
msgstr "Üst kenarlar"
# AI Translated
msgid "Bottom edges"
msgstr "Alt kenarlar"
# AI Translated
msgid "Lateral edges"
msgstr "Yan kenarlar"
# AI Translated
msgid "Mesh resolution"
msgstr "Mesh çözünürlüğü"
# AI Translated
msgid "Add Shape"
msgstr "Şekil ekle"
# AI Translated
msgid "No outer profile"
msgstr "Dış profil yok"
# AI Translated
msgid "Failed to make outer face"
msgstr "Dış yüz oluşturulamadı"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Delikli yüz oluşturulamadı"
# AI Translated
msgid "Revolve failed"
msgstr "Döndürme başarısız oldu"
# AI Translated
msgid "Profile"
msgstr "Profil"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Yeni profil başlat (delikler için)"
# AI Translated
msgid "Segments"
msgstr "Segmentler"
# AI Translated
msgid "Sides"
msgstr "Kenar sayısı"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Çizmek için tuvale tıklayın"
# AI Translated
msgid "Snap to grid"
msgstr "Izgaraya yasla"
# AI Translated
msgid "Grid step"
msgstr "Izgara adımı"
# AI Translated
msgid "Outer"
msgstr "Dış"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% nokta %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (Üst)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (Ön)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (Yan)"
# AI Translated
msgid "Revolve deg"
msgstr "Döndürme açısı"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "Ekstrüzyon için 0, döndürme için >0 girin"
# AI Translated
msgid "Pocket (cut)"
msgstr "Cep (kes)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu kapalı profil"
msgstr[1] "%zu kapalı profil"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Etkinleştirmek için kapalı bir profil çizin"
# AI Translated
msgid "Clear all"
msgstr "Tümünü temizle"
# AI Translated
msgid "Empty result"
msgstr "Boş sonuç"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Ekstrüzyon: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Döndürme: %1%"
# AI Translated
msgid "No object selected"
msgstr "Nesne seçilmedi"
# AI Translated
msgid "Face failed"
msgstr "Yüz oluşturulamadı"
# AI Translated
msgid "Face with holes failed"
msgstr "Delikli yüz oluşturulamadı"
# AI Translated
msgid "Tool mesh empty"
msgstr "Araç mesh'i boş"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Cep eklendi (negatif hacim)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Cep: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -30482,10 +30665,6 @@ msgstr "Geliştirici Araçlarını Etkinleştir"
msgid "An error occurred loading %s"
msgstr "%s yüklenirken bir hata oluştu"
# AI Translated
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -31167,209 +31346,6 @@ 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 "Primitive"
#~ msgstr "Şekil"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Boş mesh oluşturuldu"
# AI Translated
#~ msgid "Box"
#~ msgstr "Kutu"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Hızlı:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Genişlik (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Derinlik (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Yükseklik (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "Alt R"
# AI Translated
#~ msgid "Top R"
#~ msgstr "Üst R"
# AI Translated
#~ msgid "Major R"
#~ msgstr "Büyük R"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "Küçük R"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Tüm kenarlar"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Üst kenarlar"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Alt kenarlar"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Yan kenarlar"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Mesh çözünürlüğü"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Şekil ekle"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Dış profil yok"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Dış yüz oluşturulamadı"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Delikli yüz oluşturulamadı"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Döndürme başarısız oldu"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Profil"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Yeni profil başlat (delikler için)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Segmentler"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Kenar sayısı"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Çizmek için tuvale tıklayın"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Izgaraya yasla"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Izgara adımı"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Dış"
# AI Translated
#~ msgid "closed"
#~ msgstr "kapalı"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% nokta %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (Üst)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (Ön)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (Yan)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Döndürme açısı"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "Ekstrüzyon için 0, döndürme için >0 girin"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Cep (kes)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu kapalı profil"
#~ msgstr[1] "%zu kapalı profil"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Etkinleştirmek için kapalı bir profil çizin"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Tümünü temizle"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Boş sonuç"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Ekstrüzyon: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Döndürme: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Nesne seçilmedi"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Yüz oluşturulamadı"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Delikli yüz oluşturulamadı"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Araç mesh'i boş"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Cep eklendi (negatif hacim)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Cep: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Deneysel) Baskı sunucuları yerine yazıcı aracılarını kullan"
@@ -32425,6 +32401,10 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Yüklenirken bir hata oluştu: "
# AI Translated
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+215 -235
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: orcaslicerua\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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 <andm1zyk@proton.me>\n"
"Language-Team: Ukrainian\n"
@@ -4298,9 +4298,6 @@ msgstr "Ви впевнені, що хочете видалити інформа
msgid "You need to select the material type and color first."
msgstr "Спочатку потрібно вибрати тип матеріалу та колір."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Будь ласка введіть коректне значення (K в %.1f~%.1f)"
@@ -6212,7 +6209,7 @@ msgid "Size:"
msgstr "Розмір:"
# AI Translated
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "Виявлено конфлікти шляхів G-code на шарі %d, Z = %.2lf мм. Будь ласка, рознесіть конфліктуючі обʼєкти далі один від одного (%s <-> %s)."
@@ -7103,22 +7100,6 @@ msgstr "Файл .gcode.3mf не містить даних G-code. Будь ла
msgid "File '%s' was lost! Please download it again."
msgstr "Файл '%s' втрачений! Завантажте його знову."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11237,12 +11218,6 @@ msgstr "Скасувати таймлапс і друкувати"
msgid "Clean Up"
msgstr "Очистити"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Підготовка завдання для друку"
@@ -27254,6 +27229,216 @@ msgstr "У цьому шрифті немає контурів символів
msgid "Size: %.1f × %.1f mm"
msgstr "Розмір: %.1f × %.1f мм"
# AI Translated
msgid "Primitive"
msgstr "Примітив"
# AI Translated
msgid "Empty mesh generated"
msgstr "Згенеровано порожню сітку"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Паралелепіпед"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Швидкий вибір:"
# AI Translated
msgid "Width (X)"
msgstr "Ширина (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Глибина (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Висота (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "Нижній R"
# AI Translated
msgid "Top R"
msgstr "Верхній R"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "Великий R"
# AI Translated
msgid "Minor R"
msgstr "Малий R"
# AI Translated
msgid "All edges"
msgstr "Усі ребра"
# AI Translated
msgid "Top edges"
msgstr "Верхні ребра"
# AI Translated
msgid "Bottom edges"
msgstr "Нижні ребра"
# AI Translated
msgid "Lateral edges"
msgstr "Бічні ребра"
# AI Translated
msgid "Mesh resolution"
msgstr "Роздільна здатність сітки"
# AI Translated
msgid "Add Shape"
msgstr "Додати форму"
# AI Translated
msgid "No outer profile"
msgstr "Немає зовнішнього профілю"
# AI Translated
msgid "Failed to make outer face"
msgstr "Не вдалося створити зовнішню грань"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Не вдалося побудувати грань з отворами"
# AI Translated
msgid "Revolve failed"
msgstr "Не вдалося виконати обертання"
# AI Translated
msgid "Profile"
msgstr "Профіль"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Почати новий профіль (для отворів)"
# AI Translated
msgid "Segments"
msgstr "Сегменти"
# AI Translated
msgid "Sides"
msgstr "Сторони"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Клацніть на полотні, щоб малювати"
# AI Translated
msgid "Snap to grid"
msgstr "Привʼязка до сітки"
# AI Translated
msgid "Grid step"
msgstr "Крок сітки"
# AI Translated
msgid "Outer"
msgstr "Зовнішній"
# AI Translated
msgid "closed"
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 "%1% %2% (точок: %3%) %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (Верх)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (Перед)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (Бік)"
# AI Translated
msgid "Revolve deg"
msgstr "Обертання, °"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "0 — видавлювання, >0 — обертання"
# AI Translated
msgid "Pocket (cut)"
msgstr "Кишеня (вирізання)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu замкнений профіль"
msgstr[1] "%zu замкнені профілі"
msgstr[2] "%zu замкнених профілів"
msgstr[3] "%zu замкненого профілю"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "Намалюйте замкнений профіль, щоб увімкнути"
# AI Translated
msgid "Clear all"
msgstr "Очистити все"
# AI Translated
msgid "Empty result"
msgstr "Порожній результат"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Видавлювання: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Обертання: %1%"
# AI Translated
msgid "No object selected"
msgstr "Не вибрано обʼєкт"
# AI Translated
msgid "Face failed"
msgstr "Не вдалося створити грань"
# AI Translated
msgid "Face with holes failed"
msgstr "Не вдалося створити грань з отворами"
# AI Translated
msgid "Tool mesh empty"
msgstr "Сітка інструмента порожня"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Кишеню додано (відʼємний обʼєм)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Кишеня: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -30647,9 +30832,6 @@ msgstr "Увімкнути інструменти розробника"
msgid "An error occurred loading %s"
msgstr "Помилка під час завантаження %s"
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -31334,211 +31516,6 @@ msgstr ""
"Уникнення деформації\n"
"Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури столу може зменшити ймовірність деформації?"
# AI Translated
#~ msgid "Primitive"
#~ msgstr "Примітив"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Згенеровано порожню сітку"
# AI Translated
#~ msgid "Box"
#~ msgstr "Паралелепіпед"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Швидкий вибір:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Ширина (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Глибина (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Висота (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "Нижній R"
# AI Translated
#~ msgid "Top R"
#~ msgstr "Верхній R"
# AI Translated
#~ msgid "Major R"
#~ msgstr "Великий R"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "Малий R"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Усі ребра"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Верхні ребра"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Нижні ребра"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Бічні ребра"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Роздільна здатність сітки"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Додати форму"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Немає зовнішнього профілю"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Не вдалося створити зовнішню грань"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Не вдалося побудувати грань з отворами"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Не вдалося виконати обертання"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Профіль"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Почати новий профіль (для отворів)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Сегменти"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Сторони"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Клацніть на полотні, щоб малювати"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Привʼязка до сітки"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Крок сітки"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Зовнішній"
# AI Translated
#~ msgid "closed"
#~ msgstr "замкнений"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2% (точок: %3%) %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (Верх)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (Перед)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (Бік)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Обертання, °"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "0 — видавлювання, >0 — обертання"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Кишеня (вирізання)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu замкнений профіль"
#~ msgstr[1] "%zu замкнені профілі"
#~ msgstr[2] "%zu замкнених профілів"
#~ msgstr[3] "%zu замкненого профілю"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "Намалюйте замкнений профіль, щоб увімкнути"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "Очистити все"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Порожній результат"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Видавлювання: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Обертання: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Не вибрано обʼєкт"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Не вдалося створити грань"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Не вдалося створити грань з отворами"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Сітка інструмента порожня"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Кишеню додано (відʼємний обʼєм)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Кишеня: %1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(Експериментально) Використовувати агентів принтера замість хостів друку"
@@ -32618,6 +32595,9 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Помилка під час завантаження "
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+213 -233
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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"
@@ -4558,9 +4558,6 @@ msgstr "Bạn có chắc muốn xóa thông tin filament?"
msgid "You need to select the material type and color first."
msgstr "Bạn cần chọn loại vật liệu và màu trước."
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "Vui lòng nhập giá trị hợp lệ (K trong %.1f~%.1f)"
@@ -6565,7 +6562,7 @@ msgstr "Thể tích:"
msgid "Size:"
msgstr "Kích thước:"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "Đã tìm thấy xung đột đường đi G-code tại lớp %d, Z = %.2lfmm. Vui lòng tách các vật thể xung đột ra xa hơn (%s <-> %s)."
@@ -7469,22 +7466,6 @@ msgstr "File .gcode.3mf không chứa dữ liệu G-code. Vui lòng slice với
msgid "File '%s' was lost! Please download it again."
msgstr "File '%s' đã bị mất! Vui lòng tải lại."
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11763,12 +11744,6 @@ msgstr "Hủy timelapse & In"
msgid "Clean Up"
msgstr "Dọn dẹp"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "Đang chuẩn bị công việc in"
@@ -27930,6 +27905,213 @@ msgstr "Font này không có đường viền cho chữ này"
msgid "Size: %.1f × %.1f mm"
msgstr "Kích thước: %.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "Hình nguyên thủy"
# AI Translated
msgid "Empty mesh generated"
msgstr "Đã tạo lưới rỗng"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "Hộp"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "Nhanh:"
# AI Translated
msgid "Width (X)"
msgstr "Độ rộng (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "Độ sâu (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "Chiều cao (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "R đáy"
# AI Translated
msgid "Top R"
msgstr "R đỉnh"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "R lớn"
# AI Translated
msgid "Minor R"
msgstr "R nhỏ"
# AI Translated
msgid "All edges"
msgstr "Tất cả cạnh"
# AI Translated
msgid "Top edges"
msgstr "Cạnh trên"
# AI Translated
msgid "Bottom edges"
msgstr "Cạnh dưới"
# AI Translated
msgid "Lateral edges"
msgstr "Cạnh bên"
# AI Translated
msgid "Mesh resolution"
msgstr "Độ phân giải lưới"
# AI Translated
msgid "Add Shape"
msgstr "Thêm hình"
# AI Translated
msgid "No outer profile"
msgstr "Không có biên dạng ngoài"
# AI Translated
msgid "Failed to make outer face"
msgstr "Không thể tạo mặt ngoài"
# AI Translated
msgid "Failed to build face with holes"
msgstr "Không thể tạo mặt có lỗ"
# AI Translated
msgid "Revolve failed"
msgstr "Tròn xoay thất bại"
# AI Translated
msgid "Profile"
msgstr "Biên dạng"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "Bắt đầu biên dạng mới (cho lỗ)"
# AI Translated
msgid "Segments"
msgstr "Số đoạn"
# AI Translated
msgid "Sides"
msgstr "Số cạnh"
# AI Translated
msgid "Click on canvas to draw"
msgstr "Nhấn vào khung vẽ để vẽ"
# AI Translated
msgid "Snap to grid"
msgstr "Bám theo lưới"
# AI Translated
msgid "Grid step"
msgstr "Bước lưới"
# AI Translated
msgid "Outer"
msgstr "Ngoài"
# AI Translated
msgid "closed"
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 "%1% %2%: %3% điểm %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY (Trên)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ (Trước)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ (Bên)"
# AI Translated
msgid "Revolve deg"
msgstr "Góc tròn xoay"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "Đặt 0 để đùn, >0 để tạo khối tròn xoay"
# AI Translated
msgid "Pocket (cut)"
msgstr "Khoét hốc (cắt)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu biên dạng khép kín"
# AI Translated
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 "Xóa tất cả"
# AI Translated
msgid "Empty result"
msgstr "Kết quả rỗng"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "Đùn: %1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "Tròn xoay: %1%"
# AI Translated
msgid "No object selected"
msgstr "Chưa chọn vật thể nào"
# AI Translated
msgid "Face failed"
msgstr "Tạo mặt thất bại"
# AI Translated
msgid "Face with holes failed"
msgstr "Tạo mặt có lỗ thất bại"
# AI Translated
msgid "Tool mesh empty"
msgstr "Lưới công cụ rỗng"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "Đã thêm hốc (thể tích âm)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "Khoét hốc: %1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -31323,10 +31505,6 @@ msgstr "Bật công cụ nhà phát triển"
msgid "An error occurred loading %s"
msgstr "Đã xảy ra lỗi khi tải %s"
# AI Translated
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -32007,208 +32185,6 @@ 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 "Primitive"
#~ msgstr "Hình nguyên thủy"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "Đã tạo lưới rỗng"
# AI Translated
#~ msgid "Box"
#~ msgstr "Hộp"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "Nhanh:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "Độ rộng (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "Độ sâu (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "Chiều cao (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "R đáy"
# AI Translated
#~ msgid "Top R"
#~ msgstr "R đỉnh"
# AI Translated
#~ msgid "Major R"
#~ msgstr "R lớn"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "R nhỏ"
# AI Translated
#~ msgid "All edges"
#~ msgstr "Tất cả cạnh"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "Cạnh trên"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "Cạnh dưới"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "Cạnh bên"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "Độ phân giải lưới"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "Thêm hình"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "Không có biên dạng ngoài"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "Không thể tạo mặt ngoài"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "Không thể tạo mặt có lỗ"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "Tròn xoay thất bại"
# AI Translated
#~ msgid "Profile"
#~ msgstr "Biên dạng"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "Bắt đầu biên dạng mới (cho lỗ)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "Số đoạn"
# AI Translated
#~ msgid "Sides"
#~ msgstr "Số cạnh"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "Nhấn vào khung vẽ để vẽ"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "Bám theo lưới"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "Bước lưới"
# AI Translated
#~ msgid "Outer"
#~ msgstr "Ngoài"
# AI Translated
#~ msgid "closed"
#~ msgstr "khép kín"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%: %3% điểm %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY (Trên)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ (Trước)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ (Bên)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "Góc tròn xoay"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "Đặt 0 để đùn, >0 để tạo khối tròn xoay"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "Khoét hốc (cắt)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu biên dạng khép kín"
# AI Translated
#~ 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 "Xóa tất cả"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "Kết quả rỗng"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "Đùn: %1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "Tròn xoay: %1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "Chưa chọn vật thể nào"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "Tạo mặt thất bại"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "Tạo mặt có lỗ thất bại"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "Lưới công cụ rỗng"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "Đã thêm hốc (thể tích âm)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "Khoét hốc: %1%"
# 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"
@@ -33299,6 +33275,10 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "Đã xảy ra lỗi khi tải "
# AI Translated
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+213 -233
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Slic3rPE\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\n"
"POT-Creation-Date: 2026-10-06 15:16-0300\n"
"PO-Revision-Date: 2026-06-11 12:37-0300\n"
"Last-Translator: Handle <mail@bysb.net>\n"
"Language-Team: \n"
@@ -4185,9 +4185,6 @@ msgstr "您确定要清除耗材丝信息吗?"
msgid "You need to select the material type and color first."
msgstr "您需要先选择材料类型和颜色。"
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "请输入有效的数值(K的范围为%.1f~%.1f)"
@@ -6042,7 +6039,7 @@ msgstr "体积:"
msgid "Size:"
msgstr "尺寸:"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "发现G-code路径在层%d,高度为%.2lf mm处有冲突。请将有冲突的对象分离得更远(%s <-> %s)。"
@@ -6906,22 +6903,6 @@ msgstr ".gcode.3mf文件中不包含G-code数据。请使用Orca Slicer进行切
msgid "File '%s' was lost! Please download it again."
msgstr "文件%s丢失,请重新下载。"
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -10872,12 +10853,6 @@ msgstr "取消延时摄影,继续打印"
msgid "Clean Up"
msgstr "清理"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "正在准备打印任务"
@@ -26360,6 +26335,213 @@ msgstr "此字体中没有该文字的字形轮廓"
msgid "Size: %.1f × %.1f mm"
msgstr "大小:%.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "标准模型"
# AI Translated
msgid "Empty mesh generated"
msgstr "生成了空网格"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "长方体"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "快速:"
# AI Translated
msgid "Width (X)"
msgstr "宽度 (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "深度 (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "高度 (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "底面半径"
# AI Translated
msgid "Top R"
msgstr "顶面半径"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "大半径"
# AI Translated
msgid "Minor R"
msgstr "小半径"
# AI Translated
msgid "All edges"
msgstr "所有边"
# AI Translated
msgid "Top edges"
msgstr "顶部边"
# AI Translated
msgid "Bottom edges"
msgstr "底部边"
# AI Translated
msgid "Lateral edges"
msgstr "侧边"
# AI Translated
msgid "Mesh resolution"
msgstr "网格精度"
# AI Translated
msgid "Add Shape"
msgstr "添加形状"
# AI Translated
msgid "No outer profile"
msgstr "没有外轮廓"
# AI Translated
msgid "Failed to make outer face"
msgstr "无法生成外轮廓面"
# AI Translated
msgid "Failed to build face with holes"
msgstr "无法生成带孔的面"
# AI Translated
msgid "Revolve failed"
msgstr "旋转失败"
# AI Translated
msgid "Profile"
msgstr "轮廓"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "开始新轮廓(用于孔)"
# AI Translated
msgid "Segments"
msgstr "段数"
# AI Translated
msgid "Sides"
msgstr "边数"
# AI Translated
msgid "Click on canvas to draw"
msgstr "单击画布进行绘制"
# AI Translated
msgid "Snap to grid"
msgstr "吸附到网格"
# AI Translated
msgid "Grid step"
msgstr "网格间距"
# AI Translated
msgid "Outer"
msgstr "外轮廓"
# AI Translated
msgid "closed"
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 "%1% %2%:%3% 个点 %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY(顶部)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ(前面)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ(侧面)"
# AI Translated
msgid "Revolve deg"
msgstr "旋转角度"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "设为 0 则拉伸,大于 0 则旋转"
# AI Translated
msgid "Pocket (cut)"
msgstr "凹槽(切除)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu 个闭合轮廓"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "绘制一个闭合轮廓以启用"
# AI Translated
msgid "Clear all"
msgstr "全部清除"
# AI Translated
msgid "Empty result"
msgstr "结果为空"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "拉伸:%1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "旋转:%1%"
# AI Translated
msgid "No object selected"
msgstr "未选择对象"
# AI Translated
msgid "Face failed"
msgstr "生成面失败"
# AI Translated
msgid "Face with holes failed"
msgstr "生成带孔的面失败"
# AI Translated
msgid "Tool mesh empty"
msgstr "工具网格为空"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "已添加凹槽(负体积)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "凹槽:%1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -29762,10 +29944,6 @@ msgstr "启用开发者工具"
msgid "An error occurred loading %s"
msgstr "加载 %s 时出错"
# AI Translated
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -30445,208 +30623,6 @@ msgstr ""
"避免翘曲\n"
"您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。"
# AI Translated
#~ msgid "Primitive"
#~ msgstr "标准模型"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "生成了空网格"
# AI Translated
#~ msgid "Box"
#~ msgstr "长方体"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "快速:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "宽度 (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "深度 (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "高度 (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "底面半径"
# AI Translated
#~ msgid "Top R"
#~ msgstr "顶面半径"
# AI Translated
#~ msgid "Major R"
#~ msgstr "大半径"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "小半径"
# AI Translated
#~ msgid "All edges"
#~ msgstr "所有边"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "顶部边"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "底部边"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "侧边"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "网格精度"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "添加形状"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "没有外轮廓"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "无法生成外轮廓面"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "无法生成带孔的面"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "旋转失败"
# AI Translated
#~ msgid "Profile"
#~ msgstr "轮廓"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "开始新轮廓(用于孔)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "段数"
# AI Translated
#~ msgid "Sides"
#~ msgstr "边数"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "单击画布进行绘制"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "吸附到网格"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "网格间距"
# AI Translated
#~ msgid "Outer"
#~ msgstr "外轮廓"
# AI Translated
#~ msgid "closed"
#~ msgstr "已闭合"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%:%3% 个点 %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY(顶部)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ(前面)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ(侧面)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "旋转角度"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "设为 0 则拉伸,大于 0 则旋转"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "凹槽(切除)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu 个闭合轮廓"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "绘制一个闭合轮廓以启用"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "全部清除"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "结果为空"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "拉伸:%1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "旋转:%1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "未选择对象"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "生成面失败"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "生成带孔的面失败"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "工具网格为空"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "已添加凹槽(负体积)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "凹槽:%1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(实验性)使用打印机代理替代打印主机"
@@ -31699,6 +31675,10 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "加载时出错: "
# AI Translated
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+213 -233
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-08 11:08+0800\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"
@@ -4290,9 +4290,6 @@ msgstr "您確認要清除線材資訊嗎?"
msgid "You need to select the material type and color first."
msgstr "您需要先選擇線材類型和顏色。"
msgid "The minimum temperature cannot be greater than the maximum temperature."
msgstr ""
#, c-format, boost-format
msgid "Please input a valid value (K in %.1f~%.1f)"
msgstr "請輸入有效的數值 (K於 %.1f~%.1f 之間)"
@@ -6172,7 +6169,7 @@ msgstr "體積:"
msgid "Size:"
msgstr "尺寸:"
#, boost-format
#, c-format, boost-format
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
msgstr "發現 G-code 路徑在 %d 層,Z = %.2lf mm 處的衝突。請將有衝突的物件分離得更遠(%s <-> %s)。"
@@ -7041,22 +7038,6 @@ msgstr ".gcode.3mf 檔案不包含 G-code 資料。請使用 OrcaSlicer 切片
msgid "File '%s' was lost! Please download it again."
msgstr "檔案 %s 遺失,請重新下載。"
msgid "gcodes"
msgstr ""
msgid "Failed to delete the file from printer."
msgstr ""
#, c-format, boost-format
msgid "Do you want to print the file '%s' from printer?"
msgstr ""
msgid "Print file"
msgstr ""
msgid "Failed to start the print job."
msgstr ""
#, c-format, boost-format
msgid ""
"File: %s\n"
@@ -11070,12 +11051,6 @@ msgstr "取消縮時攝影並列印"
msgid "Clean Up"
msgstr "清理"
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
msgstr ""
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
msgstr ""
msgid "Preparing print job"
msgstr "正在準備列印作業"
@@ -26558,6 +26533,213 @@ msgstr "此字型中沒有該文字的字形輪廓"
msgid "Size: %.1f × %.1f mm"
msgstr "尺寸:%.1f × %.1f mm"
# AI Translated
msgid "Primitive"
msgstr "標準模型"
# AI Translated
msgid "Empty mesh generated"
msgstr "產生了空的網格"
# AI Translated
#. TRN Default name of an object created from the box primitive shape.
msgid "Box"
msgstr "長方體"
# AI Translated
#. TRN Primitive gizmo: label in front of the preset cube size buttons
msgid "Quick:"
msgstr "快速:"
# AI Translated
msgid "Width (X)"
msgstr "寬度 (X)"
# AI Translated
msgid "Depth (Y)"
msgstr "深度 (Y)"
# AI Translated
msgid "Height (Z)"
msgstr "高度 (Z)"
# AI Translated
#. TRN Primitive gizmo: bottom radius of a cone ("Top R" is the top radius)
msgid "Bottom R"
msgstr "底部半徑"
# AI Translated
msgid "Top R"
msgstr "頂部半徑"
# AI Translated
#. TRN Primitive gizmo: major radius of a torus ("Minor R" is the tube radius)
msgid "Major R"
msgstr "主半徑"
# AI Translated
msgid "Minor R"
msgstr "次半徑"
# AI Translated
msgid "All edges"
msgstr "所有邊"
# AI Translated
msgid "Top edges"
msgstr "頂部邊"
# AI Translated
msgid "Bottom edges"
msgstr "底部邊"
# AI Translated
msgid "Lateral edges"
msgstr "側邊"
# AI Translated
msgid "Mesh resolution"
msgstr "網格解析度"
# AI Translated
msgid "Add Shape"
msgstr "新增形狀"
# AI Translated
msgid "No outer profile"
msgstr "沒有外輪廓"
# AI Translated
msgid "Failed to make outer face"
msgstr "無法建立外部面"
# AI Translated
msgid "Failed to build face with holes"
msgstr "無法建立帶孔的面"
# AI Translated
msgid "Revolve failed"
msgstr "迴轉失敗"
# AI Translated
msgid "Profile"
msgstr "輪廓"
# AI Translated
msgid "Start new profile (for holes)"
msgstr "開始新輪廓(用於孔洞)"
# AI Translated
msgid "Segments"
msgstr "段數"
# AI Translated
msgid "Sides"
msgstr "邊數"
# AI Translated
msgid "Click on canvas to draw"
msgstr "在畫布上點選以繪製"
# AI Translated
msgid "Snap to grid"
msgstr "貼齊格線"
# AI Translated
msgid "Grid step"
msgstr "格線間距"
# AI Translated
msgid "Outer"
msgstr "外輪廓"
# AI Translated
msgid "closed"
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 "%1% %2%:%3% 個點 %4%"
# AI Translated
msgid "XY (Top)"
msgstr "XY(頂部)"
# AI Translated
msgid "XZ (Front)"
msgstr "XZ(前面)"
# AI Translated
msgid "YZ (Side)"
msgstr "YZ(側面)"
# AI Translated
msgid "Revolve deg"
msgstr "迴轉角度"
# AI Translated
msgid "Set to 0 for extrude, >0 for revolve"
msgstr "設為 0 表示擠出,大於 0 表示迴轉"
# AI Translated
msgid "Pocket (cut)"
msgstr "挖槽(切除)"
# AI Translated
#, c-format
msgid "%zu closed profile"
msgid_plural "%zu closed profiles"
msgstr[0] "%zu 個封閉輪廓"
# AI Translated
msgid "Draw a closed profile to enable"
msgstr "請繪製封閉輪廓以啟用"
# AI Translated
msgid "Clear all"
msgstr "全部清除"
# AI Translated
msgid "Empty result"
msgstr "結果為空"
# AI Translated
#, boost-format
msgid "Extrude: %1%"
msgstr "擠出:%1%"
# AI Translated
#, boost-format
msgid "Revolve: %1%"
msgstr "迴轉:%1%"
# AI Translated
msgid "No object selected"
msgstr "未選取物件"
# AI Translated
msgid "Face failed"
msgstr "建立面失敗"
# AI Translated
msgid "Face with holes failed"
msgstr "建立帶孔的面失敗"
# AI Translated
msgid "Tool mesh empty"
msgstr "工具網格為空"
# AI Translated
msgid "Pocket added (negative volume)"
msgstr "已新增挖槽(負體積)"
# AI Translated
#, boost-format
msgid "Pocket: %1%"
msgstr "挖槽:%1%"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Ins"
@@ -29955,10 +30137,6 @@ msgstr "啟用開發者工具"
msgid "An error occurred loading %s"
msgstr "載入 %s 時發生錯誤"
# AI Translated
msgid "/"
msgstr "/"
# AI Translated
#, boost-format
msgid "Load %1% to %2%"
@@ -30659,208 +30837,6 @@ msgstr ""
"避免翹曲\n"
"您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率。"
# AI Translated
#~ msgid "Primitive"
#~ msgstr "標準模型"
# AI Translated
#~ msgid "Empty mesh generated"
#~ msgstr "產生了空的網格"
# AI Translated
#~ msgid "Box"
#~ msgstr "長方體"
# AI Translated
#~ msgid "Quick:"
#~ msgstr "快速:"
# AI Translated
#~ msgid "Width (X)"
#~ msgstr "寬度 (X)"
# AI Translated
#~ msgid "Depth (Y)"
#~ msgstr "深度 (Y)"
# AI Translated
#~ msgid "Height (Z)"
#~ msgstr "高度 (Z)"
# AI Translated
#~ msgid "Bottom R"
#~ msgstr "底部半徑"
# AI Translated
#~ msgid "Top R"
#~ msgstr "頂部半徑"
# AI Translated
#~ msgid "Major R"
#~ msgstr "主半徑"
# AI Translated
#~ msgid "Minor R"
#~ msgstr "次半徑"
# AI Translated
#~ msgid "All edges"
#~ msgstr "所有邊"
# AI Translated
#~ msgid "Top edges"
#~ msgstr "頂部邊"
# AI Translated
#~ msgid "Bottom edges"
#~ msgstr "底部邊"
# AI Translated
#~ msgid "Lateral edges"
#~ msgstr "側邊"
# AI Translated
#~ msgid "Mesh resolution"
#~ msgstr "網格解析度"
# AI Translated
#~ msgid "Add Shape"
#~ msgstr "新增形狀"
# AI Translated
#~ msgid "No outer profile"
#~ msgstr "沒有外輪廓"
# AI Translated
#~ msgid "Failed to make outer face"
#~ msgstr "無法建立外部面"
# AI Translated
#~ msgid "Failed to build face with holes"
#~ msgstr "無法建立帶孔的面"
# AI Translated
#~ msgid "Revolve failed"
#~ msgstr "迴轉失敗"
# AI Translated
#~ msgid "Profile"
#~ msgstr "輪廓"
# AI Translated
#~ msgid "Start new profile (for holes)"
#~ msgstr "開始新輪廓(用於孔洞)"
# AI Translated
#~ msgid "Segments"
#~ msgstr "段數"
# AI Translated
#~ msgid "Sides"
#~ msgstr "邊數"
# AI Translated
#~ msgid "Click on canvas to draw"
#~ msgstr "在畫布上點選以繪製"
# AI Translated
#~ msgid "Snap to grid"
#~ msgstr "貼齊格線"
# AI Translated
#~ msgid "Grid step"
#~ msgstr "格線間距"
# AI Translated
#~ msgid "Outer"
#~ msgstr "外輪廓"
# AI Translated
#~ msgid "closed"
#~ msgstr "已封閉"
# AI Translated
#, boost-format
#~ msgid "%1% %2%: %3% points %4%"
#~ msgstr "%1% %2%:%3% 個點 %4%"
# AI Translated
#~ msgid "XY (Top)"
#~ msgstr "XY(頂部)"
# AI Translated
#~ msgid "XZ (Front)"
#~ msgstr "XZ(前面)"
# AI Translated
#~ msgid "YZ (Side)"
#~ msgstr "YZ(側面)"
# AI Translated
#~ msgid "Revolve deg"
#~ msgstr "迴轉角度"
# AI Translated
#~ msgid "Set to 0 for extrude, >0 for revolve"
#~ msgstr "設為 0 表示擠出,大於 0 表示迴轉"
# AI Translated
#~ msgid "Pocket (cut)"
#~ msgstr "挖槽(切除)"
# AI Translated
#, c-format
#~ msgid "%zu closed profile"
#~ msgid_plural "%zu closed profiles"
#~ msgstr[0] "%zu 個封閉輪廓"
# AI Translated
#~ msgid "Draw a closed profile to enable"
#~ msgstr "請繪製封閉輪廓以啟用"
# AI Translated
#~ msgid "Clear all"
#~ msgstr "全部清除"
# AI Translated
#~ msgid "Empty result"
#~ msgstr "結果為空"
# AI Translated
#, boost-format
#~ msgid "Extrude: %1%"
#~ msgstr "擠出:%1%"
# AI Translated
#, boost-format
#~ msgid "Revolve: %1%"
#~ msgstr "迴轉:%1%"
# AI Translated
#~ msgid "No object selected"
#~ msgstr "未選取物件"
# AI Translated
#~ msgid "Face failed"
#~ msgstr "建立面失敗"
# AI Translated
#~ msgid "Face with holes failed"
#~ msgstr "建立帶孔的面失敗"
# AI Translated
#~ msgid "Tool mesh empty"
#~ msgstr "工具網格為空"
# AI Translated
#~ msgid "Pocket added (negative volume)"
#~ msgstr "已新增挖槽(負體積)"
# AI Translated
#, boost-format
#~ msgid "Pocket: %1%"
#~ msgstr "挖槽:%1%"
# AI Translated
#~ msgid "(Experimental) Use printer agents instead of print hosts"
#~ msgstr "(實驗性)使用列印裝置代理程式取代列印主機"
@@ -31914,6 +31890,10 @@ msgstr ""
#~ msgid "An error occurred loading "
#~ msgstr "載入時發生錯誤: "
# AI Translated
#~ msgid "/"
#~ msgstr "/"
# AI Translated
#, c-format, boost-format
#~ msgid "Load %s to "
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "Elegoo",
"version": "02.04.00.12",
"version": "02.04.00.11",
"force_update": "0",
"description": "Elegoo configurations",
"machine_model_list": [
@@ -15,6 +15,6 @@
"Elegoo"
],
"filament_start_gcode": [
"; Elegoo PLA filament start gcode\n"
"; filament start gcode\n"
]
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "Orca Arena Printer",
"url": "",
"version": "02.04.00.08",
"version": "02.04.00.07",
"force_update": "0",
"description": "Orca Arena configuration files",
"machine_model_list": [
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "OrcaFilamentLibrary",
"version": "02.04.00.19",
"version": "02.04.00.15",
"force_update": "0",
"description": "Orca Filament Library",
"filament_list": [
@@ -39,7 +39,7 @@
"60"
],
"filament_start_gcode": [
"; Elegoo PLA filament start gcode\n"
"; filament start gcode\n"
],
"filament_end_gcode": [
"; filament end gcode \n"
+37
View File
@@ -165,6 +165,7 @@ using json = nlohmann::json;
#ifdef SLIC3R_GUI
#include "slic3r/GUI/GUI_Init.hpp"
#include "slic3r/GUI/Widgets/WebView.hpp"
// BBLPrinterAgent::from_orca_filament_id(); the map and its lookups live in libslic3r_gui,
// which only a SLIC3R_GUI build links (see target_link_libraries(OrcaSlicer libslic3r_gui)
// in CMakeLists).
@@ -1155,6 +1156,12 @@ int CLI::run(int argc, char **argv)
// unset preserves WebKit hardware acceleration on Device / Setup
// Wizard / login / store. The default path still applies it on
// XWayland sessions as a conservative fallback for older WebKit.
//
// The default path also disables WebKit's DMA-BUF renderer when the
// NVIDIA proprietary driver is in use on native Wayland. That is a
// separate switch from compositing and is needed because GTK3 commits
// a shared-memory frame onto an explicit-sync surface (GNOME/gtk#8056),
// which KWin/Mutter reject with "Error 71 (Protocol error)".
// ------------------------------------------------------------------
{
const char* gdk_backend = ::getenv("GDK_BACKEND");
@@ -1218,6 +1225,34 @@ int CLI::run(int argc, char **argv)
}
}
// WebKitGTK's DMA-BUF renderer arms explicit sync
// (linux-drm-syncobj-v1) on the toplevel Wayland surface. If the
// first painted frame is a shared-memory buffer, GTK3's
// gdk_wayland_window_attach_image() commits it without an acquire
// point, and compositors that enforce the protocol (KWin, Mutter)
// terminate the client with "Error 71 (Protocol error)" before the
// app can log anything (GNOME/gtk#8056). NVIDIA's proprietary
// driver has no implicit-sync fallback, so the crash only happens
// there; Mesa tolerates the missing point. Scope the workaround to
// NVIDIA on native Wayland, on WebKitGTK >= 2.46 (the oldest release
// with a confirmed report; the DMA-BUF renderer predates it).
// Non-replacing, so a user who does not hit the bug can opt back in
// with WEBKIT_DISABLE_DMABUF_RENDERER=0.
#if defined(__linux__)
{
const char* gdk_backend_wk = ::getenv("GDK_BACKEND");
// The EGL-less fallback above may have just forced X11.
const bool x11_backend_wk = gdk_backend_wk && boost::starts_with(gdk_backend_wk, "x11");
const char* wayland_env_dmabuf = ::getenv("WAYLAND_DISPLAY");
if (!x11_backend_wk && wayland_env_dmabuf && *wayland_env_dmabuf &&
::access("/proc/driver/nvidia/version", F_OK) == 0 &&
WebView::WebKitAtLeast(2, 46)) {
BOOST_LOG_TRIVIAL(info) << "NVIDIA proprietary driver on Wayland: disabling the WebKit DMA-BUF renderer (GNOME/gtk#8056 workaround).";
::setenv("WEBKIT_DISABLE_DMABUF_RENDERER", "1", /* replace */ false);
}
}
#endif
// XInitThreads is needed before GStreamer may use Xlib. On
// native Wayland without DISPLAY, GStreamer uses waylandsink
// (no Xlib involved), so the call is skipped.
@@ -4094,6 +4129,8 @@ int CLI::run(int argc, char **argv)
flush_and_exit(CLI_MIXED_FILAMENT_INVALID);
}
}
if (filament_count > 0)
resize_mixed_filament_metadata(m_print_config, size_t(filament_count), size_t(filament_count));
m_print_config.option<ConfigOptionEnum<PrinterTechnology>>("printer_technology", true)->value = printer_technology;
-7
View File
@@ -126,13 +126,6 @@
</array>
<key>LSMinimumSystemVersion</key>
<string>10.10</string>
<key>NSLocalNetworkUsageDescription</key>
<string>OrcaSlicer uses your local network to discover and connect to printers.</string>
<key>NSBonjourServices</key>
<array>
<string>_octoprint._tcp</string>
<string>_http._tcp</string>
</array>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSHighResolutionCapable</key>
-1
View File
@@ -84,7 +84,6 @@
#include <cmath>
#include <cctype>
#include <cstdio>
#include <functional>
#include <gp_XY.hxx>
#include <initializer_list>
#include <math.h>
-3
View File
@@ -261,8 +261,6 @@ set(lisbslic3r_sources
GCode/PreciseSeam.cpp
GCode/PreciseSeam.hpp
GCode/PreciseSeamInternal.hpp
#GCodeSender.cpp
#GCodeSender.hpp
GCode/SmallAreaInfillFlowCompensator.cpp
GCode/SmallAreaInfillFlowCompensator.hpp
GCode/SpiralVase.cpp
@@ -447,7 +445,6 @@ set(lisbslic3r_sources
SLA/SupportTreeBuildsteps.hpp
SLA/SupportTree.cpp
SLA/SupportTree.hpp
#SLA/SupportTreeIGL.cpp
SLA/SupportTreeMesher.cpp
SLA/SupportTreeMesher.hpp
SlicesToTriangleMesh.cpp
-1
View File
@@ -2589,7 +2589,6 @@ void priv::create_face_types(FaceTypeMap &map,
}
#include <CGAL/Polygon_mesh_processing/clip.h>
#include <CGAL/Polygon_mesh_processing/corefinement.h>
bool priv::clip_cut(SurfacePatch &cut, CutMesh clipper)
{
CutMesh& tm = cut.mesh;
-1
View File
@@ -15,7 +15,6 @@
#include "Emboss.hpp"
#include <optional>
#include <stdio.h>
#include <numeric>
#include <cstdlib>
#include <boost/nowide/convert.hpp>
#include <boost/log/trivial.hpp>
+31 -25
View File
@@ -29,6 +29,7 @@
#include "ExtrusionEntity.hpp"
#include "Fill.hpp"
#include "libslic3r/Fill/FillBase.hpp"
#include "FillAdaptive.hpp"
#include "FillRectilinear.hpp"
#include "FillLightning.hpp"
#include "FillConcentricInternal.hpp"
@@ -926,7 +927,6 @@ std::vector<SurfaceFill> group_fills(const Layer &layer, LockRegionParam &lock_p
params.lateral_lattice_angle_2 = region_config.lateral_lattice_angle_2;
params.infill_overhang_angle = region_config.infill_overhang_angle;
params.center_of_surface_pattern = region_config.center_of_surface_pattern;
params.separated_infills = region_config.separated_infills;
if (params.pattern == ipLockedZag) {
params.infill_lock_depth = scale_(region_config.infill_lock_depth);
params.skin_infill_depth = scale_(region_config.skin_infill_depth);
@@ -999,6 +999,9 @@ std::vector<SurfaceFill> group_fills(const Layer &layer, LockRegionParam &lock_p
// (which would unnecessarily split fill batching).
// Stored on SurfaceFillParams; copied to FillParams during conversion.
params.gyroid_optimized = (params.pattern == ipGyroid) && region_config.gyroid_optimized;
// Orca: Likewise separated_infills only where it can move the pattern.
params.separated_infills = region_config.separated_infills && is_separable_infill_pattern(params.pattern) &&
params.extrusion_role != erTopSolidInfill && params.extrusion_role != erBottomSurface;
if (params.extrusion_role == erInternalInfill) {
params.angle = calculate_infill_rotation_angle(layer.object(), layer.id(), region_config.infill_direction.value,
@@ -1073,7 +1076,7 @@ std::vector<SurfaceFill> group_fills(const Layer &layer, LockRegionParam &lock_p
//get locked region param
if (params.pattern == ipLockedZag){
const PrintObject *object = layerm.layer()->object();
auto nozzle_diameter = float(object->print()->config().nozzle_diameter.get_at(layerm.region().extruder(extrusion_role) - 1));
auto nozzle_diameter = float(nozzle_diameter_for_filament(object->print()->config(), layerm.region().extruder(extrusion_role), object->print()->is_BBL_printer()));
Flow skin_flow = params.bridge ? params.flow : Flow::new_from_config_width(extrusion_role, region_config.skin_infill_line_width, nozzle_diameter, float((surface.thickness == -1) ? layer.height : surface.thickness));
//add skin flow
append_flow_param(lock_param.skin_flow_params, skin_flow, surface.expolygon);
@@ -1271,29 +1274,28 @@ std::vector<SurfaceFill> group_fills(const Layer &layer, LockRegionParam &lock_p
// Orca: Anchors and printed infill must share the same body origin. Keep the choice
// here so per-model surface centering and separated sparse infill cannot drift apart.
static BoundingBox infill_bounding_box(const Layer &layer, const SurfaceFill &fill, const ExPolygon &expoly, BoundingBox bbox)
// Returns the connected body the fill region is laid out on, or -1 to keep the object's origin.
static int infill_body(const Layer &layer, const SurfaceFill &fill, const ExPolygon &expoly)
{
const auto &params = fill.params;
const auto &config = layer.regions()[fill.region_id]->region().config();
const bool external = params.extrusion_role == erTopSolidInfill || params.extrusion_role == erBottomSurface;
const bool per_model = external && params.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model &&
const bool per_model = (params.extrusion_role == erTopSolidInfill || params.extrusion_role == erBottomSurface) &&
params.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model &&
(params.pattern == ipArchimedeanChords || params.pattern == ipOctagramSpiral);
const bool separate = !external && params.separated_infills &&
(is_separable_infill_pattern(params.pattern) || !config.solid_infill_rotate_template.value.empty() ||
!config.sparse_infill_rotate_template.value.empty());
if (per_model || separate) {
double best_overlap = 0.;
for (size_t i = 0; i < layer.lslices.size() && i < layer.lslices_separated_component_bboxes.size(); ++i) {
int body = -1;
if (per_model || params.separated_infills || is_octree_infill_pattern(params.pattern)) {
const BoundingBox box = get_extents(expoly);
double best_overlap = 0.;
for (size_t i = 0; i < layer.lslices.size() && i < layer.lslices_separated_component_ids.size(); ++i) {
if (! layer.lslices_bboxes[i].overlap(box))
continue;
const double overlap = area(intersection_ex(layer.lslices[i], expoly));
if (overlap > best_overlap) {
best_overlap = overlap;
const Point center = layer.lslices_separated_component_bboxes[i].center();
bbox = layer.object()->bounding_box();
bbox.translate(center.x(), center.y());
body = int(layer.lslices_separated_component_ids[i]);
}
}
}
return bbox;
return body;
}
#ifdef SLIC3R_DEBUG_SLICE_PROCESSING
@@ -1318,7 +1320,7 @@ void export_group_fills_to_svg(const char *path, const std::vector<SurfaceFill>
#endif
// friend to Layer
void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive::Octree* support_fill_octree, FillLightning::Generator* lightning_generator)
void Layer::make_fills(const FillAdaptive::Octrees* adaptive_fill_octrees, const FillAdaptive::Octrees* support_fill_octrees, FillLightning::Generator* lightning_generator)
{
for (LayerRegion *layerm : m_regions)
layerm->fills.clear();
@@ -1351,7 +1353,7 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
f->z = this->print_z;
f->angle = surface_fill.params.angle;
f->fixed_angle = surface_fill.params.fixed_angle;
f->adapt_fill_octree = (surface_fill.params.pattern == ipSupportCubic) ? support_fill_octree : adaptive_fill_octree;
const FillAdaptive::Octrees *octrees = surface_fill.params.pattern == ipSupportCubic ? support_fill_octrees : adaptive_fill_octrees;
f->print_config = &this->object()->print()->config();
f->print_object_config = &this->object()->config();
if (surface_fill.params.pattern == ipConcentricInternal) {
@@ -1443,8 +1445,10 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
params.can_reverse = false;
for (ExPolygon& expoly : surface_fill.expolygons) {
// Orca: Reuse the body origin used for bridge anchoring, resetting it for each surface.
f->set_bounding_box(infill_bounding_box(*this, surface_fill, expoly, bbox));
// Orca: Reuse the body box and octree used for bridge anchoring, resetting them for each surface.
const int body = infill_body(*this, surface_fill, expoly);
f->set_bounding_box(body >= 0 ? this->object()->separated_body_bboxes()[body] : bbox);
f->adapt_fill_octree = octrees ? octrees->get(body) : nullptr;
f->no_overlap_expolygons = intersection_ex(surface_fill.no_overlap_expolygons, ExPolygons() = {expoly}, ApplySafetyOffset::Yes);
if (params.symmetric_infill_y_axis) {
@@ -1512,7 +1516,7 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
* - For lightning/adaptive patterns, the respective generators are wired so their
* polylines match the final infill layout.
*/
Polylines Layer::generate_sparse_infill_polylines_for_anchoring(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive::Octree* support_fill_octree, FillLightning::Generator* lightning_generator) const
Polylines Layer::generate_sparse_infill_polylines_for_anchoring(const FillAdaptive::Octrees* adaptive_fill_octrees, const FillAdaptive::Octrees* support_fill_octrees, FillLightning::Generator* lightning_generator) const
{
LockRegionParam skin_inner_param;
std::vector<SurfaceFill> surface_fills = group_fills(*this, skin_inner_param);
@@ -1570,7 +1574,7 @@ Polylines Layer::generate_sparse_infill_polylines_for_anchoring(FillAdaptive::Oc
f->z = this->print_z;
f->angle = surface_fill.params.angle;
f->fixed_angle = surface_fill.params.fixed_angle;
f->adapt_fill_octree = (surface_fill.params.pattern == ipSupportCubic) ? support_fill_octree : adaptive_fill_octree;
const FillAdaptive::Octrees *octrees = surface_fill.params.pattern == ipSupportCubic ? support_fill_octrees : adaptive_fill_octrees;
f->print_config = &this->object()->print()->config();
f->print_object_config = &this->object()->config();
@@ -1617,8 +1621,10 @@ Polylines Layer::generate_sparse_infill_polylines_for_anchoring(FillAdaptive::Oc
params.extrusion_role = surface_fill.params.extrusion_role;
for (ExPolygon &expoly : surface_fill.expolygons) {
// Orca: Match the per-body origin of make_fills() before generating physical anchors.
f->set_bounding_box(infill_bounding_box(*this, surface_fill, expoly, bbox));
// Orca: Match the per-body box and octree of make_fills() before generating physical anchors.
const int body = infill_body(*this, surface_fill, expoly);
f->set_bounding_box(body >= 0 ? this->object()->separated_body_bboxes()[body] : bbox);
f->adapt_fill_octree = octrees ? octrees->get(body) : nullptr;
// Spacing is modified by the filler to indicate adjustments. Reset it for each expolygon.
f->spacing = surface_fill.params.spacing;
surface_fill.surface.expolygon = std::move(expoly);
@@ -1788,7 +1794,7 @@ void Layer::make_ironing()
// Create the ironing extrusions for regions <i, j)
ExPolygons ironing_areas;
double nozzle_dmr = this->object()->print()->config().nozzle_diameter.get_at(ironing_params.extruder - 1);
double nozzle_dmr = nozzle_diameter_for_filament(this->object()->print()->config(), ironing_params.extruder, this->object()->print()->is_BBL_printer());
if (ironing_params.just_infill) {
//TODO just_infill is currently not used.
// Just infill.
+1
View File
@@ -25,6 +25,7 @@ public:
// pattern is placed on top of previous layers
bool use_bridge_flow() const override { return false; }
bool is_self_crossing() override { return false; }
bool aligned_to_origin() const override { return true; }
protected:
void _fill_surface_single(
+22
View File
@@ -14,6 +14,7 @@
#include "libslic3r/BoundingBox.hpp"
#include "libslic3r/ExPolygon.hpp"
#include "FillBase.hpp"
#include <cstddef>
#include <memory>
#include <utility>
#include <Eigen/Geometry>
@@ -37,6 +38,27 @@ struct Octree;
struct OctreeDeleter { void operator()(Octree *p); };
using OctreePtr = std::unique_ptr<Octree, OctreeDeleter>;
// Orca: One octree per body (see Layer::lslices_separated_component_ids), and one of the whole object
// for objects of a single body or with a body that has none of its own.
struct Octrees
{
OctreePtr object;
std::vector<OctreePtr> bodies;
// A body without an octree, or body -1, uses the object's, or any body's when the object has none.
Octree *get(int body) const
{
if (body >= 0 && size_t(body) < bodies.size() && bodies[body])
return bodies[body].get();
if (object)
return object.get();
for (const OctreePtr &octree : bodies)
if (octree)
return octree.get();
return nullptr;
}
};
// Calculate line spacing for
// 1) adaptive cubic infill
// 2) adaptive internal support cubic infill
+12 -2
View File
@@ -128,6 +128,9 @@ Polylines Fill::fill_surface(const Surface *surface, const FillParams &params)
{
// Perform offset.
Slic3r::ExPolygons expp = offset_ex(surface->expolygon, float(scale_(this->overlap - 0.5 * this->spacing)));
// Orca: Separated infills move the box center onto each body; origin-aligned patterns follow it.
const Point shift = this->aligned_to_origin() && ! empty(this->bounding_box) ? this->bounding_box.center() : Point::Zero();
translate(expp, -shift);
// Create the infills for each of the regions.
Polylines polylines_out;
for (size_t i = 0; i < expp.size(); ++ i)
@@ -137,6 +140,8 @@ Polylines Fill::fill_surface(const Surface *surface, const FillParams &params)
_infill_direction(surface),
std::move(expp[i]),
polylines_out);
for (Polyline &pl : polylines_out)
pl.translate(shift);
return polylines_out;
}
@@ -1591,13 +1596,18 @@ BoundaryInfillGraph create_boundary_infill_graph(const Polylines &infill_ordered
// The extended bounding box of the whole object that covers any rotation of every layer.
BoundingBox Fill::extended_object_bounding_box() const
{
BoundingBox out = bounding_box;
// Orca: Extend about the box center, which separated infills move off the origin.
const Point c = this->bounding_box.center();
BoundingBox out = this->bounding_box;
out.translate(-c.x(), -c.y());
out.merge(Point(out.min.y(), out.min.x()));
out.merge(Point(out.max.y(), out.max.x()));
// The bounding box is scaled by sqrt(2.) to ensure that the bounding box
// covers any possible rotations.
return out.scaled(sqrt(2.));
out = out.scaled(sqrt(2.));
out.translate(c.x(), c.y());
return out;
}
void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Polygon*> &boundary_src, const BoundingBox &bbox, Polylines &polylines_out, const double spacing, const FillParams &params)
+3
View File
@@ -188,6 +188,9 @@ public:
// Return true if infill has a consistent pattern between layers.
virtual bool has_consistent_pattern() const { return false; }
// Orca: Is the pattern laid out from the origin instead of the bounding box center?
virtual bool aligned_to_origin() const { return false; }
// Perform the fill.
virtual Polylines fill_surface(const Surface *surface, const FillParams &params);
virtual ThickPolylines fill_surface_arachne(const Surface* surface, const FillParams& params);
+1
View File
@@ -19,6 +19,7 @@ public:
Fill *clone() const override { return new FillCrossHatch(*this); };
~FillCrossHatch() override {}
bool is_self_crossing() override { return false; }
bool aligned_to_origin() const override { return true; }
protected:
void _fill_surface_single(
+1
View File
@@ -20,6 +20,7 @@ public:
// require bridge flow since most of this pattern hangs in air
bool use_bridge_flow() const override { return false; }
bool is_self_crossing() override { return false; }
bool aligned_to_origin() const override { return true; }
// Correction applied to regular infill angle to maximize printing
// speed in default configuration (degrees)
+1
View File
@@ -20,6 +20,7 @@ class FillHoneycomb : public Fill
public:
~FillHoneycomb() override {}
bool is_self_crossing() override { return false; }
bool aligned_to_origin() const override { return true; }
protected:
Fill* clone() const override { return new FillHoneycomb(*this); };
+7 -18
View File
@@ -2750,23 +2750,6 @@ static void polylines_from_paths(const std::vector<MonotonicRegionLink> &path, c
}
}
// The extended bounding box of the whole object that covers any rotation of every layer.
BoundingBox FillRectilinear::extended_object_bounding_box() const {
// Build the extension around the box center. The transpose merge and the sqrt(2.) scaling
// (which covers any possible rotation) are both defined about the origin, so a box that is not
// origin-centered — e.g. a separated-infill box re-centered on a single assembly part — would be
// distorted. Shift to the origin first and back afterwards; for the default origin-centered box
// the two translations cancel and this is identical to the original behavior.
const Point c = this->bounding_box.center();
BoundingBox out = this->bounding_box;
out.translate(-c.x(), -c.y());
out.merge(Point(out.min.y(), out.min.x()));
out.merge(Point(out.max.y(), out.max.x()));
out = out.scaled(sqrt(2.));
out.translate(c.x(), c.y());
return out;
}
bool FillRectilinear::fill_surface_by_lines(const Surface *surface, const FillParams &params, float angleBase, float pattern_shift, Polylines &polylines_out)
{
// At the end, only the new polylines will be rotated back.
@@ -2801,7 +2784,13 @@ bool FillRectilinear::fill_surface_by_lines(const Surface *surface, const FillPa
// For infill that needs to be consistent between layers (like Zig Zag),
// we use bounding box of whole object to match vertical lines between layers.
BoundingBox bounding_box_src = poly_with_offset.bounding_box_src();
BoundingBox bounding_box = this->has_consistent_pattern() ? this->extended_object_bounding_box() : bounding_box_src;
BoundingBox bounding_box = bounding_box_src;
if (this->has_consistent_pattern()) {
// Orca: The polygons are rotated about the origin, so follow the box center to where it was rotated.
const Point c = this->bounding_box.center();
bounding_box = this->extended_object_bounding_box();
bounding_box.translate(c.rotated(- rotate_vector.first) - c);
}
// define flow spacing according to requested density
if (params.full_infill() && !params.dont_adjust) {
-3
View File
@@ -42,9 +42,6 @@ protected:
};
bool fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out);
bool fill_surface_trapezoidal(const Surface *surface, FillParams params, Polylines &polylines_out, int Pattern_type);
// The extended bounding box of the whole object that covers any rotation of every layer.
BoundingBox extended_object_bounding_box() const;
};
class FillAlignedRectilinear : public FillRectilinear
+1
View File
@@ -31,6 +31,7 @@ public:
Polylines& polylines_out) override;
bool is_self_crossing() override { return false; }
bool aligned_to_origin() const override { return true; }
// Density adjustment to have a good %of weight.
static constexpr double DensityAdjust = 2.1;
+1
View File
@@ -31,6 +31,7 @@ public:
Polylines& polylines_out) override;
bool is_self_crossing() override { return false; }
bool aligned_to_origin() const override { return true; }
};
+4 -4
View File
@@ -241,14 +241,14 @@ Flow support_material_flow(const PrintObject *object, float layer_height)
// The width parameter accepted by new_from_config_width is of type ConfigOptionFloatOrPercent, the Flow class takes care of the percent to value substitution.
(object->config().support_line_width.value > 0) ? object->config().support_line_width : object->config().line_width,
// if object->config().support_filament == 0 (which means to not trigger tool change, but use the current extruder instead), get_at will return the 0th component.
float(object->print()->config().nozzle_diameter.get_at(object->config().support_filament-1)),
float(nozzle_diameter_for_filament(object->print()->config(), object->config().support_filament, object->print()->is_BBL_printer())),
(layer_height > 0.f) ? layer_height : float(object->config().layer_height.value));
}
//BBS
Flow support_transition_flow(const PrintObject* object)
{
//BBS: support transition of tree support is bridge flow
float dmr = float(object->print()->config().nozzle_diameter.get_at(object->config().support_filament - 1));
float dmr = float(nozzle_diameter_for_filament(object->print()->config(), object->config().support_filament, object->print()->is_BBL_printer()));
return Flow::bridging_flow(dmr, dmr);
}
@@ -260,7 +260,7 @@ Flow support_material_1st_layer_flow(const PrintObject *object, float layer_heig
frSupportMaterial,
// The width parameter accepted by new_from_config_width is of type ConfigOptionFloatOrPercent, the Flow class takes care of the percent to value substitution.
(width.value > 0) ? width : object->config().line_width,
float(print_config.nozzle_diameter.get_at(object->config().support_filament-1)),
float(nozzle_diameter_for_filament(print_config, object->config().support_filament, object->print()->is_BBL_printer())),
(layer_height > 0.f) ? layer_height : float(print_config.initial_layer_print_height.value));
}
@@ -271,7 +271,7 @@ Flow support_material_interface_flow(const PrintObject *object, float layer_heig
// The width parameter accepted by new_from_config_width is of type ConfigOptionFloatOrPercent, the Flow class takes care of the percent to value substitution.
(object->config().support_line_width > 0) ? object->config().support_line_width : object->config().line_width,
// if object->config().support_interface_filament == 0 (which means to not trigger tool change, but use the current extruder instead), get_at will return the 0th component.
float(object->print()->config().nozzle_diameter.get_at(object->config().support_interface_filament-1)),
float(nozzle_diameter_for_filament(object->print()->config(), object->config().support_interface_filament, object->print()->is_BBL_printer())),
(layer_height > 0.f) ? layer_height : float(object->config().layer_height.value));
}
-1
View File
@@ -55,7 +55,6 @@
#include "TDataStd_Name.hxx"
#include "BRepBuilderAPI_Transform.hxx"
#include "TopExp_Explorer.hxx"
#include "TopExp_Explorer.hxx"
#include "BRep_Tool.hxx"
#include "BRepTools.hxx"
#include <IMeshTools_Parameters.hxx>
+41 -65
View File
@@ -43,7 +43,6 @@
#include "Print.hpp"
#include "Utils.hpp"
#include "ClipperUtils.hpp"
#include "libslic3r.h"
#include "LocalesUtils.hpp"
#include "libslic3r/format.hpp"
#include "Time.hpp"
@@ -155,14 +154,9 @@ static const float g_purge_volume_one_time = 135.f;
static const int g_max_flush_count = 4;
static const size_t g_max_label_object = 64;
static bool is_bambu_x2d_printer(const FullPrintConfig &config)
{
return config.printer_model.value == "Bambu Lab X2D";
}
// Multi-nozzle printer predicate: an extruder carries a nozzle cluster (extruder_max_nozzle_count
// entry > 1). Today only H2C profiles trip it, so every existing single- and dual-extruder printer
// is excluded and keeps its historic placeholder values.
// is excluded and keeps its historic first-filament marker.
static bool is_multi_nozzle_printer(const FullPrintConfig &config)
{
return std::any_of(config.extruder_max_nozzle_count.values.begin(),
@@ -170,33 +164,20 @@ static bool is_multi_nozzle_printer(const FullPrintConfig &config)
[](int v) { return v > 1; });
}
static int hotend_id_for_gcode_placeholder(const FullPrintConfig &config, int hotend_id)
// current_hotend / next_hotend value. On a BBL printer: the real nozzle id only while the print uses a
// dynamic nozzle map (a filament moves between nozzles across layers), else -1. Bambu firmware reads an
// explicit hotend index as a request for the Filament Track Switch and rejects the job on a printer
// without one. group_result may be null on slicing paths that don't populate it, which resolves to -1.
// Any other printer has no firmware hotend selection and gets the filament's extruder index, whatever
// its nozzle map, so existing custom G-code keeps its values.
static int hotend_id_for_gcode_placeholder(const std::shared_ptr<MultiNozzleUtils::LayeredNozzleGroupResult> &group_result,
bool is_bbl_printer, int filament_id, int extruder_id, int layer_id = -1)
{
return is_bambu_x2d_printer(config) ? -1 : hotend_id;
}
// current_hotend / next_hotend value. For multi-nozzle printers a dynamic nozzle map yields the real
// nozzle id, a static map yields -1:
// - multi-nozzle (H2C): dynamic nozzle map -> real nozzle id; static -> -1.
// The dynamic branch is dormant today: the selector create() overload that sets the flag has no
// callers yet (deferred with the nozzle-assignment pipeline), so H2C currently resolves to -1.
// - X2D: keeps its historic -1 (single-nozzle -> falls through to the fallback helper).
// - every other (existing single-nozzle) printer: keeps its historic extruder-id value, so
// existing g-code stays byte-identical.
// group_result may be null on slicing paths that don't populate it -> the dynamic branch is simply
// skipped, so we never dereference null.
static int hotend_id_for_gcode_placeholder(const FullPrintConfig &config,
const std::shared_ptr<MultiNozzleUtils::LayeredNozzleGroupResult> &group_result,
int filament_id,
int extruder_id,
int layer_id = -1)
{
if (is_multi_nozzle_printer(config)) {
if (group_result && group_result->is_support_dynamic_nozzle_map() && filament_id >= 0)
return group_result->get_nozzle_id(filament_id, layer_id);
return -1;
}
return hotend_id_for_gcode_placeholder(config, extruder_id);
if (!is_bbl_printer)
return extruder_id;
if (group_result && group_result->is_support_dynamic_nozzle_map() && filament_id >= 0)
return group_result->get_nozzle_id(filament_id, layer_id);
return -1;
}
// Logical nozzle id for the *_nozzle_id placeholders. Null-safe: falls back to the
@@ -211,24 +192,20 @@ static int nozzle_id_for_gcode_placeholder(const std::shared_ptr<MultiNozzleUtil
// Init variants: the start-gcode init sites (first_non_support_hotend / initial_no_support_hotend /
// current_hotend / initial_nozzle_id / filament_start current_nozzle_id) use get_first_nozzle_for_filament
// (the nozzle a filament FIRST uses) rather than the layer-based get_nozzle_id. Same hotend-value semantics
// as hotend_id_for_gcode_placeholder above (multi-nozzle static -> -1; dynamic branch dormant;
// existing printers -> extruder id; X2D -> -1); they differ from the layer-based helper only on the dormant
// dynamic path for a filament first used after layer 0.
static int first_hotend_id_for_gcode_placeholder(const FullPrintConfig &config,
const std::shared_ptr<MultiNozzleUtils::LayeredNozzleGroupResult> &group_result,
int filament_id,
int extruder_id)
// (the nozzle a filament FIRST uses) rather than the layer-based get_nozzle_id. Same hotend-value rule
// as hotend_id_for_gcode_placeholder above; they differ from the layer-based helper only on the dynamic
// path for a filament first used after layer 0.
static int first_hotend_id_for_gcode_placeholder(const std::shared_ptr<MultiNozzleUtils::LayeredNozzleGroupResult> &group_result,
bool is_bbl_printer, int filament_id, int extruder_id)
{
if (is_multi_nozzle_printer(config)) {
if (group_result && group_result->is_support_dynamic_nozzle_map() && filament_id >= 0) {
auto nozzle = group_result->get_first_nozzle_for_filament(filament_id);
if (nozzle)
return nozzle->group_id;
}
return -1;
if (!is_bbl_printer)
return extruder_id;
if (group_result && group_result->is_support_dynamic_nozzle_map() && filament_id >= 0) {
auto nozzle = group_result->get_first_nozzle_for_filament(filament_id);
if (nozzle)
return nozzle->group_id;
}
return hotend_id_for_gcode_placeholder(config, extruder_id);
return -1;
}
static int first_nozzle_id_for_gcode_placeholder(const std::shared_ptr<MultiNozzleUtils::LayeredNozzleGroupResult> &group_result,
@@ -1215,12 +1192,11 @@ static std::vector<Vec2d> get_path_of_change_filament(const Print& print)
config.set_key_value("previous_extruder", new ConfigOptionInt(old_filament_id));
config.set_key_value("next_extruder", new ConfigOptionInt(new_filament_id));
// current_hotend/next_hotend (see hotend_id_for_gcode_placeholder): multi-nozzle H2C -> -1
// (static; dynamic branch dormant), X2D -> -1, existing printers -> extruder id.
const bool is_bbl_printer = gcodegen.m_print->is_BBL_printer();
config.set_key_value("current_hotend", new ConfigOptionInt(
hotend_id_for_gcode_placeholder(gcodegen.m_config, group_result, old_filament_id, old_extruder_id, m_layer_idx)));
hotend_id_for_gcode_placeholder(group_result, is_bbl_printer, old_filament_id, old_extruder_id, m_layer_idx)));
config.set_key_value("next_hotend", new ConfigOptionInt(
hotend_id_for_gcode_placeholder(gcodegen.m_config, group_result, new_filament_id, (int) gcodegen.get_extruder_id(new_filament_id), m_layer_idx)));
hotend_id_for_gcode_placeholder(group_result, is_bbl_printer, new_filament_id, (int) gcodegen.get_extruder_id(new_filament_id), m_layer_idx)));
config.set_key_value("current_nozzle_id", new ConfigOptionInt(old_nozzle_id));
config.set_key_value("next_nozzle_id", new ConfigOptionInt(next_nozzle_id));
config.set_key_value("current_filament_id", new ConfigOptionInt(old_filament_id));
@@ -1499,7 +1475,7 @@ static std::vector<Vec2d> get_path_of_change_filament(const Print& print)
gcodegen.placeholder_parser().set("current_nozzle_id",
nozzle_id_for_gcode_placeholder(group_result, new_filament_id, new_extruder_id, m_layer_idx));
gcodegen.placeholder_parser().set("current_hotend",
hotend_id_for_gcode_placeholder(gcodegen.m_config, group_result, new_filament_id, new_extruder_id, m_layer_idx));
hotend_id_for_gcode_placeholder(group_result, gcodegen.m_print->is_BBL_printer(), new_filament_id, new_extruder_id, m_layer_idx));
{
size_t fi = gcodegen.get_filament_config_index(new_filament_id);
gcodegen.placeholder_parser().set("retraction_distance_when_cut", gcodegen.m_config.retraction_distances_when_cut.get_at(fi));
@@ -3310,20 +3286,19 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
first_non_support_hotends.reserve(first_non_support_filaments.size());
for (int filament_id : first_non_support_filaments)
first_non_support_hotends.push_back(filament_id < 0 ? -1 :
first_hotend_id_for_gcode_placeholder(m_config, group_result, filament_id, (int) get_extruder_id(filament_id)));
first_hotend_id_for_gcode_placeholder(group_result, is_bbl_printers, filament_id, (int) get_extruder_id(filament_id)));
this->placeholder_parser().set("first_non_support_tools", new ConfigOptionInts(first_non_support_filaments));
this->placeholder_parser().set("first_non_support_filaments", new ConfigOptionInts(first_non_support_filaments));
this->placeholder_parser().set("first_non_support_hotend", new ConfigOptionInts(first_non_support_hotends));
this->placeholder_parser().set("initial_no_support_tool", initial_non_support_extruder_id);
this->placeholder_parser().set("initial_no_support_extruder", initial_non_support_extruder_id);
// initial_no_support_hotend/current_hotend (see first_hotend_id_for_gcode_placeholder): multi-nozzle
// H2C -> -1 (static; dynamic branch dormant), X2D -> -1, existing printers -> extruder id.
this->placeholder_parser().set("initial_no_support_hotend",
first_hotend_id_for_gcode_placeholder(m_config, group_result, (int) initial_non_support_extruder_id, (int) get_extruder_id(initial_non_support_extruder_id)));
first_hotend_id_for_gcode_placeholder(group_result, is_bbl_printers, (int) initial_non_support_extruder_id,
(int) get_extruder_id(initial_non_support_extruder_id)));
this->placeholder_parser().set("current_extruder", initial_extruder_id);
this->placeholder_parser().set("current_hotend",
first_hotend_id_for_gcode_placeholder(m_config, group_result, (int) initial_extruder_id, extruder_id));
first_hotend_id_for_gcode_placeholder(group_result, is_bbl_printers, (int) initial_extruder_id, extruder_id));
this->placeholder_parser().set("current_filament_id", (int) initial_extruder_id);
this->placeholder_parser().set("current_extruder_id", extruder_id);
this->placeholder_parser().set("current_nozzle_id",
@@ -3832,7 +3807,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
file.writeln(filament_start_gcode);
// Mark the first filament used in print. Multi-nozzle printers (H2C) get ";VT%d H%d" where
// H = dynamic ? nozzle_id : -1; existing single-nozzle printers keep the bare ";VT%d" so their
// g-code stays byte-identical. (The dynamic branch is dormant, so H2C currently emits H-1.)
// g-code stays byte-identical.
if (is_multi_nozzle_printer(m_config)) {
int initial_nozzle_id = -1;
if (group_result && group_result->is_support_dynamic_nozzle_map()) {
@@ -9616,6 +9591,9 @@ std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bo
this->placeholder_parser().set("current_extruder_id", new_extruder_id);
this->placeholder_parser().set("current_nozzle_id",
nozzle_id_for_gcode_placeholder(m_print->get_layered_nozzle_group_result(), (int) new_filament_id, new_extruder_id, m_layer_index));
this->placeholder_parser().set("current_hotend",
hotend_id_for_gcode_placeholder(m_print->get_layered_nozzle_group_result(), m_print->is_BBL_printer(), (int) new_filament_id,
new_extruder_id, m_layer_index));
{
size_t fi = get_filament_config_index(new_filament_id);
this->placeholder_parser().set("retraction_distance_when_ec", m_config.retraction_distances_when_ec.get_at(fi));
@@ -9794,12 +9772,10 @@ std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bo
dyn_config.set_key_value("outer_wall_volumetric_speed", new ConfigOptionFloat(outer_wall_volumetric_speed));
dyn_config.set_key_value("previous_extruder", new ConfigOptionInt(old_filament_id));
dyn_config.set_key_value("next_extruder", new ConfigOptionInt((int)new_filament_id));
// current_hotend/next_hotend (see hotend_id_for_gcode_placeholder): multi-nozzle H2C -> -1
// (static; dynamic branch dormant), X2D -> -1, existing printers -> extruder id.
dyn_config.set_key_value("current_hotend", new ConfigOptionInt(
hotend_id_for_gcode_placeholder(m_config, group_result, old_filament_id, old_extruder_id, m_layer_index)));
hotend_id_for_gcode_placeholder(group_result, m_print->is_BBL_printer(), old_filament_id, old_extruder_id, m_layer_index)));
dyn_config.set_key_value("next_hotend", new ConfigOptionInt(
hotend_id_for_gcode_placeholder(m_config, group_result, (int) new_filament_id, new_extruder_id, m_layer_index)));
hotend_id_for_gcode_placeholder(group_result, m_print->is_BBL_printer(), (int) new_filament_id, new_extruder_id, m_layer_index)));
dyn_config.set_key_value("current_nozzle_id", new ConfigOptionInt(old_nozzle_id));
dyn_config.set_key_value("next_nozzle_id", new ConfigOptionInt(next_nozzle_id));
dyn_config.set_key_value("current_filament_id", new ConfigOptionInt(old_filament_id));
@@ -9977,7 +9953,7 @@ std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bo
this->placeholder_parser().set("current_extruder", new_filament_id);
this->placeholder_parser().set("current_hotend",
hotend_id_for_gcode_placeholder(m_config, group_result, (int) new_filament_id, new_extruder_id, m_layer_index));
hotend_id_for_gcode_placeholder(group_result, m_print->is_BBL_printer(), (int) new_filament_id, new_extruder_id, m_layer_index));
// Orca: keep the global current-tool identity coherent for later contexts (see append_tcr).
this->placeholder_parser().set("current_filament_id", (int) new_filament_id);
this->placeholder_parser().set("current_extruder_id", new_extruder_id);
-2
View File
@@ -148,8 +148,6 @@ struct ConflictComputeResult
using ConflictComputeOpt = std::optional<ConflictComputeResult>;
using ConflictObjName = std::optional<std::pair<std::string, std::string>>;
struct ConflictChecker
{
static ConflictResultOpt find_inter_of_lines_in_diff_objs(PrintObjectPtrs objs, std::optional<const FakeWipeTower *> wtdptr);
-2
View File
@@ -27,8 +27,6 @@
#include "../PrintConfig.hpp"
#include "../Utils.hpp"
#include "Print.hpp"
#include "libslic3r/PrintConfig.hpp"
#include "libslic3r/libslic3r.h"
#include <boost/log/trivial.hpp>
#include <string>
+1 -4
View File
@@ -22,9 +22,6 @@
namespace Slic3r {
namespace PreciseSeam {
// Import EnforcedBlockedSeamPoint from SeamPlacerImpl namespace for convenience
using SeamPlacerImpl::EnforcedBlockedSeamPoint;
// Geometry and its exterior bounds are prepared together, then treated as read-only.
struct ModifierRegion {
ExPolygon polygon;
@@ -137,7 +134,7 @@ SegmentExtraction extract_perimeter_segments(const PreparedPerimeter &prepared,
// Result of weak modifier segment processing
struct WeakModifierSegment {
EnforcedBlockedSeamPoint type; // Enforced/Blocked/Neutral
SeamPlacerImpl::EnforcedBlockedSeamPoint type; // Enforced/Blocked/Neutral
Point left_point; // Coordinates of left (first) point of segment
PerimeterPosition left_position; // Position on the source perimeter before insertion/refinement.
Point right_point; // Coordinates of right (last) point of segment
+1 -2
View File
@@ -40,8 +40,7 @@ std::string get_error_string(const ThumbnailErrors& errors);
typedef std::vector<std::pair<GCodeThumbnailsFormat, Vec2d>> GCodeThumbnailDefinitionsList;
using namespace std::literals;
std::pair<GCodeThumbnailDefinitionsList, ThumbnailErrors> make_and_check_thumbnail_list(const std::string& thumbnails_string, const std::string_view def_ext = "PNG"sv);
std::pair<GCodeThumbnailDefinitionsList, ThumbnailErrors> make_and_check_thumbnail_list(const std::string& thumbnails_string, const std::string_view def_ext = "PNG");
std::pair<GCodeThumbnailDefinitionsList, ThumbnailErrors> make_and_check_thumbnail_list(const ConfigBase &config);
-580
View File
@@ -1,580 +0,0 @@
#include "GCodeSender.hpp"
#include <iostream>
#include <istream>
#include <string>
#include <thread>
#include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/trim.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/lexical_cast.hpp>
#if defined(__APPLE__) || defined(__OpenBSD__)
#include <termios.h>
#endif
#ifdef __APPLE__
#include <sys/ioctl.h>
#include <IOKit/serial/ioss.h>
#endif
#ifdef __linux__
#include <sys/ioctl.h>
#include <fcntl.h>
#include "/usr/include/asm-generic/ioctls.h"
/* The following definitions are kindly borrowed from:
/usr/include/asm-generic/termbits.h
Unfortunately we cannot just include that one because
it would redefine the "struct termios" already defined
the <termios.h> already included by Boost.ASIO. */
#define K_NCCS 19
struct termios2 {
tcflag_t c_iflag;
tcflag_t c_oflag;
tcflag_t c_cflag;
tcflag_t c_lflag;
cc_t c_line;
cc_t c_cc[K_NCCS];
speed_t c_ispeed;
speed_t c_ospeed;
};
#define BOTHER CBAUDEX
#endif
//#define DEBUG_SERIAL
#ifdef DEBUG_SERIAL
#include <cstdlib>
#include <fstream>
std::fstream fs;
#endif
#define KEEP_SENT 20
namespace Slic3r {
GCodeSender::GCodeSender()
: io(), serial(io), can_send(false), sent(0), open(false), error(false),
connected(false), queue_paused(false)
{
#ifdef DEBUG_SERIAL
std::srand(std::time(nullptr));
#endif
}
GCodeSender::~GCodeSender()
{
this->disconnect();
}
bool
GCodeSender::connect(std::string devname, unsigned int baud_rate)
{
this->disconnect();
this->set_error_status(false);
try {
this->serial.open(devname);
this->serial.set_option(boost::asio::serial_port_base::parity(boost::asio::serial_port_base::parity::odd));
this->serial.set_option(boost::asio::serial_port_base::character_size(boost::asio::serial_port_base::character_size(8)));
this->serial.set_option(boost::asio::serial_port_base::flow_control(boost::asio::serial_port_base::flow_control::none));
this->serial.set_option(boost::asio::serial_port_base::stop_bits(boost::asio::serial_port_base::stop_bits::one));
this->set_baud_rate(baud_rate);
this->serial.close();
this->serial.open(devname);
this->serial.set_option(boost::asio::serial_port_base::parity(boost::asio::serial_port_base::parity::none));
// set baud rate again because set_option overwrote it
this->set_baud_rate(baud_rate);
this->open = true;
this->reset();
} catch (boost::system::system_error &) {
this->set_error_status(true);
return false;
}
// a reset firmware expect line numbers to start again from 1
this->sent = 0;
this->last_sent.clear();
/* Initialize debugger */
#ifdef DEBUG_SERIAL
fs.open("serial.txt", std::fstream::out | std::fstream::trunc);
#endif
// this gives some work to the io_service before it is started
// (post() runs the supplied function in its thread)
this->io.post(boost::bind(&GCodeSender::do_read, this));
// start reading in the background thread
boost::thread t(boost::bind(&boost::asio::io_service::run, &this->io));
this->background_thread.swap(t);
// always send a M105 to check for connection because firmware might be silent on connect
//FIXME Vojtech: This is being sent too early, leading to line number synchronization issues,
// from which the GCodeSender never recovers.
// this->send("M105", true);
return true;
}
void
GCodeSender::set_baud_rate(unsigned int baud_rate)
{
try {
// This does not support speeds > 115200
this->serial.set_option(boost::asio::serial_port_base::baud_rate(baud_rate));
} catch (boost::system::system_error &) {
boost::asio::serial_port::native_handle_type handle = this->serial.native_handle();
#if __APPLE__
termios ios;
::tcgetattr(handle, &ios);
::cfsetspeed(&ios, baud_rate);
speed_t newSpeed = baud_rate;
ioctl(handle, IOSSIOSPEED, &newSpeed);
::tcsetattr(handle, TCSANOW, &ios);
#elif __linux__
termios2 ios;
if (ioctl(handle, TCGETS2, &ios))
printf("Error in TCGETS2: %s\n", strerror(errno));
ios.c_ispeed = ios.c_ospeed = baud_rate;
ios.c_cflag &= ~CBAUD;
ios.c_cflag |= BOTHER | CLOCAL | CREAD;
ios.c_cc[VMIN] = 1; // Minimum of characters to read, prevents eof errors when 0 bytes are read
ios.c_cc[VTIME] = 1;
if (ioctl(handle, TCSETS2, &ios))
printf("Error in TCSETS2: %s\n", strerror(errno));
#elif __OpenBSD__
struct termios ios;
::tcgetattr(handle, &ios);
::cfsetspeed(&ios, baud_rate);
if (::tcsetattr(handle, TCSAFLUSH, &ios) != 0)
printf("Failed to set baud rate: %s\n", strerror(errno));
#else
//throw Slic3r::InvalidArgument("OS does not currently support custom bauds");
#endif
}
}
void
GCodeSender::disconnect()
{
if (!this->open) return;
this->open = false;
this->connected = false;
this->io.post(boost::bind(&GCodeSender::do_close, this));
this->background_thread.join();
this->io.reset();
/*
if (this->error_status()) {
throw(boost::system::system_error(boost::system::error_code(),
"Error while closing the device"));
}
*/
#ifdef DEBUG_SERIAL
fs << "DISCONNECTED" << std::endl << std::flush;
fs.close();
#endif
}
bool
GCodeSender::is_connected() const
{
return this->connected;
}
bool
GCodeSender::wait_connected(unsigned int timeout) const
{
using namespace boost::posix_time;
ptime t0 = second_clock::local_time() + seconds(timeout);
while (!this->connected) {
if (second_clock::local_time() > t0) return false;
boost::this_thread::sleep(boost::posix_time::milliseconds(100));
}
return true;
}
size_t
GCodeSender::queue_size() const
{
boost::lock_guard<boost::mutex> l(this->queue_mutex);
return this->queue.size();
}
void
GCodeSender::pause_queue()
{
boost::lock_guard<boost::mutex> l(this->queue_mutex);
this->queue_paused = true;
}
void
GCodeSender::resume_queue()
{
{
boost::lock_guard<boost::mutex> l(this->queue_mutex);
this->queue_paused = false;
}
this->send();
}
void
GCodeSender::purge_queue(bool priority)
{
boost::lock_guard<boost::mutex> l(this->queue_mutex);
if (priority) {
// clear priority queue
std::list<std::string> empty;
std::swap(this->priqueue, empty);
} else {
// clear queue
std::queue<std::string> empty;
std::swap(this->queue, empty);
this->queue_paused = false;
}
}
// purge log and return its contents
std::vector<std::string>
GCodeSender::purge_log()
{
boost::lock_guard<boost::mutex> l(this->log_mutex);
std::vector<std::string> retval;
retval.reserve(this->log.size());
while (!this->log.empty()) {
retval.push_back(this->log.front());
this->log.pop();
}
return retval;
}
std::string
GCodeSender::getT() const
{
boost::lock_guard<boost::mutex> l(this->log_mutex);
return this->T;
}
std::string
GCodeSender::getB() const
{
boost::lock_guard<boost::mutex> l(this->log_mutex);
return this->B;
}
void
GCodeSender::do_close()
{
this->set_error_status(false);
boost::system::error_code ec;
this->serial.cancel(ec);
if (ec) this->set_error_status(true);
this->serial.close(ec);
if (ec) this->set_error_status(true);
}
void
GCodeSender::set_error_status(bool e)
{
boost::lock_guard<boost::mutex> l(this->error_mutex);
this->error = e;
}
bool
GCodeSender::error_status() const
{
boost::lock_guard<boost::mutex> l(this->error_mutex);
return this->error;
}
void
GCodeSender::do_read()
{
// read one line
boost::asio::async_read_until(
this->serial,
this->read_buffer,
'\n',
boost::bind(
&GCodeSender::on_read,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred
)
);
}
void
GCodeSender::on_read(const boost::system::error_code& error,
size_t bytes_transferred)
{
this->set_error_status(false);
if (error) {
#ifdef __APPLE__
if (error.value() == 45) {
// OS X bug: http://osdir.com/ml/lib.boost.asio.user/2008-08/msg00004.html
this->do_read();
return;
}
#endif
// printf("ERROR: [%d] %s\n", error.value(), error.message().c_str());
// error can be true even because the serial port was closed.
// In this case it is not a real error, so ignore.
if (this->open) {
this->do_close();
this->set_error_status(true);
}
return;
}
std::istream is(&this->read_buffer);
std::string line;
std::getline(is, line);
if (!line.empty()) {
#ifdef DEBUG_SERIAL
fs << "<< " << line << std::endl << std::flush;
#endif
// note that line might contain \r at its end
// parse incoming line
if (!this->connected
&& (boost::starts_with(line, "start")
|| boost::starts_with(line, "Grbl ")
|| boost::starts_with(line, "ok")
|| boost::contains(line, "T:"))) {
this->connected = true;
{
boost::lock_guard<boost::mutex> l(this->queue_mutex);
this->can_send = true;
}
this->send();
} else if (boost::starts_with(line, "ok")) {
{
boost::lock_guard<boost::mutex> l(this->queue_mutex);
this->can_send = true;
}
this->send();
} else if (boost::istarts_with(line, "resend") // Marlin uses "Resend: "
|| boost::istarts_with(line, "rs")) {
// extract the first number from line
boost::algorithm::trim_left_if(line, !boost::algorithm::is_digit());
size_t toresend = boost::lexical_cast<size_t>(line.substr(0, line.find_first_not_of("0123456789")));
#ifdef DEBUG_SERIAL
fs << "!! line num out of sync: toresend = " << toresend << ", sent = " << sent << ", last_sent.size = " << last_sent.size() << std::endl;
#endif
if (toresend > this->sent - this->last_sent.size() && toresend <= this->sent) {
{
boost::lock_guard<boost::mutex> l(this->queue_mutex);
const auto lines_to_resend = this->sent - toresend + 1;
#ifdef DEBUG_SERIAL
fs << "!! resending " << lines_to_resend << " lines" << std::endl;
#endif
// move the unsent lines to priqueue
this->priqueue.insert(
this->priqueue.begin(), // insert at the beginning
this->last_sent.begin() + this->last_sent.size() - lines_to_resend,
this->last_sent.end()
);
// we can empty last_sent because it's not useful anymore
this->last_sent.clear();
// start resending with the requested line number
this->sent = toresend - 1;
this->can_send = true;
}
this->send();
} else {
printf("Cannot resend %zu (oldest we have is %zu)\n", toresend, this->sent - this->last_sent.size());
}
} else if (boost::starts_with(line, "wait")) {
// ignore
} else {
// push any other line into the log
boost::lock_guard<boost::mutex> l(this->log_mutex);
this->log.push(line);
}
// parse temperature info
{
size_t pos = line.find("T:");
if (pos != std::string::npos && line.size() > pos + 2) {
// we got temperature info
boost::lock_guard<boost::mutex> l(this->log_mutex);
this->T = line.substr(pos+2, line.find_first_not_of("0123456789.", pos+2) - (pos+2));
pos = line.find("B:");
if (pos != std::string::npos && line.size() > pos + 2) {
// we got bed temperature info
this->B = line.substr(pos+2, line.find_first_not_of("0123456789.", pos+2) - (pos+2));
}
}
}
}
this->do_read();
}
void
GCodeSender::send(const std::vector<std::string> &lines, bool priority)
{
// append lines to queue
{
boost::lock_guard<boost::mutex> l(this->queue_mutex);
for (std::vector<std::string>::const_iterator line = lines.begin(); line != lines.end(); ++line) {
if (priority) {
this->priqueue.push_back(*line);
} else {
this->queue.push(*line);
}
}
}
this->send();
}
void
GCodeSender::send(const std::string &line, bool priority)
{
// append line to queue
{
boost::lock_guard<boost::mutex> l(this->queue_mutex);
if (priority) {
this->priqueue.push_back(line);
} else {
this->queue.push(line);
}
}
this->send();
}
void
GCodeSender::send()
{
this->io.post(boost::bind(&GCodeSender::do_send, this));
}
void
GCodeSender::do_send()
{
boost::lock_guard<boost::mutex> l(this->queue_mutex);
// printer is not connected or we're still waiting for the previous ack
if (!this->can_send) return;
std::string line;
while (!this->priqueue.empty() || (!this->queue.empty() && !this->queue_paused)) {
if (!this->priqueue.empty()) {
line = this->priqueue.front();
this->priqueue.pop_front();
} else {
line = this->queue.front();
this->queue.pop();
}
// strip comments
size_t comment_pos = line.find_first_of(';');
if (comment_pos != std::string::npos)
line.erase(comment_pos, std::string::npos);
boost::algorithm::trim(line);
// if line is not empty, send it
if (!line.empty()) break;
// if line is empty, process next item in queue
}
if (line.empty()) return;
// compute full line
++ this->sent;
#ifndef DEBUG_SERIAL
const auto line_num = this->sent;
#else
// In DEBUG_SERIAL mode, test line re-synchronization by sending bad line number 1/4 of the time
const auto line_num = std::rand() < RAND_MAX/4 ? 0 : this->sent;
#endif
std::string full_line = "N" + boost::lexical_cast<std::string>(line_num) + " " + line;
// calculate checksum
int cs = 0;
for (std::string::const_iterator it = full_line.begin(); it != full_line.end(); ++it)
cs = cs ^ *it;
// write line to device
full_line += "*";
full_line += boost::lexical_cast<std::string>(cs);
full_line += "\n";
#ifdef DEBUG_SERIAL
fs << ">> " << full_line << std::flush;
#endif
this->last_sent.push_back(line);
this->can_send = false;
while (this->last_sent.size() > KEEP_SENT) {
this->last_sent.pop_front();
}
// we can't supply boost::asio::buffer(full_line) to async_write() because full_line is on the
// stack and the buffer would lose its underlying storage causing memory corruption
std::ostream os(&this->write_buffer);
os << full_line;
boost::asio::async_write(this->serial, this->write_buffer, boost::bind(&GCodeSender::on_write, this, boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
void
GCodeSender::on_write(const boost::system::error_code& error,
size_t bytes_transferred)
{
this->set_error_status(false);
if (error) {
if (this->open) {
this->do_close();
this->set_error_status(true);
}
return;
}
this->do_send();
}
void
GCodeSender::set_DTR(bool on)
{
#if defined(_WIN32) && !defined(__SYMBIAN32__)
boost::asio::serial_port_service::native_handle_type handle = this->serial.native_handle();
if (on)
EscapeCommFunction(handle, SETDTR);
else
EscapeCommFunction(handle, CLRDTR);
#else
int fd = this->serial.native_handle();
int status;
ioctl(fd, TIOCMGET, &status);
if (on)
status |= TIOCM_DTR;
else
status &= ~TIOCM_DTR;
ioctl(fd, TIOCMSET, &status);
#endif
}
void
GCodeSender::reset()
{
set_DTR(false);
std::this_thread::sleep_for(std::chrono::milliseconds(200));
set_DTR(true);
std::this_thread::sleep_for(std::chrono::milliseconds(200));
set_DTR(false);
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
} // namespace Slic3r
-81
View File
@@ -1,81 +0,0 @@
#ifndef slic3r_GCodeSender_hpp_
#define slic3r_GCodeSender_hpp_
#include "libslic3r.h"
#include <queue>
#include <boost/core/noncopyable.hpp>
#include <cstddef>
#include <boost/asio/io_service.hpp>
#include <boost/asio/serial_port.hpp>
#include <boost/asio/streambuf.hpp>
#include <list>
#include <deque>
#include <string>
#include <vector>
#include <boost/asio.hpp>
#include <boost/noncopyable.hpp>
#include <boost/bind/bind.hpp>
#include <boost/thread.hpp>
namespace Slic3r {
namespace asio = boost::asio;
class GCodeSender : private boost::noncopyable {
public:
GCodeSender();
~GCodeSender();
bool connect(std::string devname, unsigned int baud_rate);
void send(const std::vector<std::string> &lines, bool priority = false);
void send(const std::string &s, bool priority = false);
void disconnect();
bool error_status() const;
bool is_connected() const;
bool wait_connected(unsigned int timeout = 3) const;
size_t queue_size() const;
void pause_queue();
void resume_queue();
void purge_queue(bool priority = false);
std::vector<std::string> purge_log();
std::string getT() const;
std::string getB() const;
void set_DTR(bool on);
void reset();
private:
asio::io_service io;
asio::serial_port serial;
boost::thread background_thread;
boost::asio::streambuf read_buffer, write_buffer;
bool open; // whether the serial socket is connected
bool connected; // whether the printer is online
bool error;
mutable boost::mutex error_mutex;
// this mutex guards queue, priqueue, can_send, queue_paused, sent, last_sent
mutable boost::mutex queue_mutex;
std::queue<std::string> queue;
std::list<std::string> priqueue;
bool can_send;
bool queue_paused;
size_t sent;
std::deque<std::string> last_sent;
// this mutex guards log, T, B
mutable boost::mutex log_mutex;
std::queue<std::string> log;
std::string T, B;
void set_baud_rate(unsigned int baud_rate);
void set_error_status(bool e);
void do_send();
void on_write(const boost::system::error_code& error, size_t bytes_transferred);
void do_close();
void do_read();
void on_read(const boost::system::error_code& error, size_t bytes_transferred);
void send();
};
} // namespace Slic3r
#endif /* slic3r_GCodeSender_hpp_ */
-2
View File
@@ -94,8 +94,6 @@ struct Circle {
using Circlef = Circle<Vec2f>;
using Circled = Circle<Vec2d>;
using CircleSqf = CircleSq<Vec2f>;
using CircleSqd = CircleSq<Vec2d>;
/// Find the center of the circle corresponding to the vector of Points as an arc.
Point circle_center_taubin_newton(const Points::const_iterator& input_start, const Points::const_iterator& input_end, size_t cycles = 20);
-1
View File
@@ -1,7 +1,6 @@
#include <boost/log/trivial.hpp>
#include "MedialAxis.hpp"
#include <boost/log/trivial.hpp>
#include <boost/polygon/polygon.hpp>
#include <cassert>
#include <cmath>
+8 -8
View File
@@ -33,7 +33,7 @@ class PrintObject;
class Print;
namespace FillAdaptive {
struct Octree;
struct Octrees;
};
namespace FillLightning {
@@ -170,10 +170,10 @@ public:
ExPolygons lslices;
ExPolygons lslices_extrudable; // BBS: the extrudable part of lslices used for tree support
std::vector<BoundingBox> lslices_bboxes;
// Orca: for separated infills / per-model centering. Aligned with lslices: for each island, the
// full bounding box of the 3D connected body (across all layers) it belongs to. Populated by
// PrintObject::infill() only when the feature is used; empty otherwise.
std::vector<BoundingBox> lslices_separated_component_bboxes;
// Orca: for separated infills / per-model centering / octree infills. Aligned with lslices: for each
// island, the 3D connected body (across all layers) it belongs to, indexing
// PrintObject::separated_body_bboxes(). Populated by PrintObject::prepare_infill() only when needed.
std::vector<size_t> lslices_separated_component_ids;
// BBS
ExPolygons loverhangs;
@@ -208,9 +208,9 @@ public:
void make_perimeters();
// Phony version of make_fills() without parameters for Perl integration only.
void make_fills() { this->make_fills(nullptr, nullptr); }
void make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive::Octree* support_fill_octree, FillLightning::Generator* lightning_generator = nullptr);
Polylines generate_sparse_infill_polylines_for_anchoring(FillAdaptive::Octree *adaptive_fill_octree,
FillAdaptive::Octree *support_fill_octree,
void make_fills(const FillAdaptive::Octrees* adaptive_fill_octrees, const FillAdaptive::Octrees* support_fill_octrees, FillLightning::Generator* lightning_generator = nullptr);
Polylines generate_sparse_infill_polylines_for_anchoring(const FillAdaptive::Octrees *adaptive_fill_octrees,
const FillAdaptive::Octrees *support_fill_octrees,
FillLightning::Generator* lightning_generator) const;
void make_ironing();
// Returns the filament id (1-based) the region is ironed with, or -1 when the
+1 -1
View File
@@ -62,7 +62,7 @@ Flow LayerRegion::bridging_flow(FlowRole role, bool thick_bridge) const
const PrintObject &print_object = *this->layer()->object();
Flow bridge_flow;
// Here this->extruder(role) - 1 may underflow to MAX_INT, but then the get_at() will fall back to zero'th element, so everything is all right.
auto nozzle_diameter = float(print_object.print()->config().nozzle_diameter.get_at(region.extruder(role) - 1));
auto nozzle_diameter = float(nozzle_diameter_for_filament(print_object.print()->config(), region.extruder(role), print_object.print()->is_BBL_printer()));
const ConfigOptionFloatOrPercent& bridge_width_opt = region_config.bridge_line_width;
const double bridge_width = bridge_width_opt.get_abs_value(nozzle_diameter);
const bool has_bridge_width = bridge_width > 0.;
+3 -4
View File
@@ -154,13 +154,12 @@ template<class ExecutionPolicy, class Enable = void> struct _Loop
};
// Add Specialization for using ExecutionTBB for parallel loops.
using namespace Slic3r;
template<> struct _Loop<ExecutionTBB>
template<> struct _Loop<Slic3r::ExecutionTBB>
{
template<class It, class Fn> static void for_each_idx(It from, It to, Fn&& fn)
{
execution::for_each(
ex_tbb, size_t(0), size_t(to - from), [&from, &fn](size_t i) { fn(from[i], i); }, execution::max_concurrency(ex_tbb));
Slic3r::execution::for_each(
Slic3r::ex_tbb, size_t(0), size_t(to - from), [&from, &fn](size_t i) { fn(from[i], i); }, Slic3r::execution::max_concurrency(Slic3r::ex_tbb));
}
};
+3 -1
View File
@@ -22,7 +22,6 @@
#include "Format/AssimpImport.hpp"
#include "ClipperUtils.hpp"
#include "Exception.hpp"
#include "Model.hpp"
#include "ModelArrange.hpp"
#include "Arrange.hpp"
#include "Geometry.hpp"
@@ -1697,6 +1696,9 @@ indexed_triangle_set ModelObject::raw_indexed_triangle_set() const
size_t j = out.indices.size();
append(out.vertices, v->mesh().its.vertices);
append(out.indices, v->mesh().its.indices);
// Orca: Point the volume's triangles at its own vertices, which follow those of the volumes before it.
for (size_t k = j; k < out.indices.size(); ++ k)
out.indices[k] += stl_triangle_vertex_indices::Constant(int(i));
const Transform3d& m = v->get_matrix();
for (; i < out.vertices.size(); ++ i)
out.vertices[i] = (m * out.vertices[i].cast<double>()).cast<float>().eval();
-1
View File
@@ -18,7 +18,6 @@
#include "TriangleMesh.hpp"
#include "CustomGCode.hpp"
#include "calib.hpp"
#include "enum_bitmask.hpp"
#include "TextConfiguration.hpp"
#include "EmbossShape.hpp"
#include "TriangleSelector.hpp"
+36 -129
View File
@@ -3593,24 +3593,6 @@ void PresetBundle::export_selections(AppConfig &config)
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": printer %1%, print %2%, filaments[0] %3% ")%printers.get_selected_preset_name() % prints.get_selected_preset_name() %filament_presets[0];
}
// Preserve metadata only for existing colour slots; new slots get false/empty defaults.
static void resize_mixed_filament_metadata(DynamicPrintConfig &config, size_t old_slot_count, size_t new_slot_count)
{
auto resize = [old_slot_count, new_slot_count](auto *opt) {
if (opt) {
opt->values.resize(std::min(old_slot_count, opt->values.size()));
opt->values.resize(new_slot_count);
}
};
resize(config.option<ConfigOptionBools>("filament_is_mixed"));
resize(config.option<ConfigOptionStrings>("filament_mixed_components"));
resize(config.option<ConfigOptionStrings>("filament_mixed_sublayer_ratios"));
resize(config.option<ConfigOptionBools>("filament_mixed_gradient"));
resize(config.option<ConfigOptionStrings>("filament_mixed_gradient_range"));
resize(config.option<ConfigOptionStrings>("filament_mixed_gradient_curve"));
resize(config.option<ConfigOptionBools>("filament_mixed_gradient_per_part"));
}
void PresetBundle::set_num_filaments(unsigned int n, std::string new_color)
{
unsigned old_filament_count = this->filament_presets.size();
@@ -3808,11 +3790,7 @@ void PresetBundle::get_ams_cobox_infos(AMSComboInfo& combox_info)
auto ams_name = ams.opt_string("tray_name", 0u);
auto filament_changed = !ams.has("filament_changed") || ams.opt_bool("filament_changed");
auto filament_multi_color = ams.opt<ConfigOptionStrings>("filament_multi_colour")->values;
auto filament_type = ams.opt_string("filament_type", 0u);
auto is_placeholder = ams.has("filament_slot_placeholder") && ams.opt_bool("filament_slot_placeholder", 0u);
// A printer-set tray carries a material type but no preset id; resolve it to the
// matching Generic preset so it is not dropped and the combo array keeps aligning.
if (filament_id.empty() && (is_placeholder || filament_type.empty())) {
if (filament_id.empty()) {
continue;
}
if (!filament_changed && this->filament_presets.size() > combox_info.ams_filament_presets.size()) {
@@ -3822,48 +3800,16 @@ void PresetBundle::get_ams_cobox_infos(AMSComboInfo& combox_info)
combox_info.ams_names.push_back(ams_name);
continue;
}
auto iter = filaments.end();
if (!filament_id.empty()) {
iter = std::find_if(filaments.begin(), filaments.end(),
[this, &filament_id](auto &f) { return f.is_compatible && filaments.get_preset_base(f) == &f && f.filament_id == filament_id; });
warn_ambiguous_filament_id_match(filaments, iter, filament_id);
}
auto iter = std::find_if(filaments.begin(), filaments.end(),
[this, &filament_id](auto &f) { return f.is_compatible && filaments.get_preset_base(f) == &f && f.filament_id == filament_id; });
warn_ambiguous_filament_id_match(filaments, iter, filament_id);
if (iter == filaments.end()) {
BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": filament_id %1% not found or system or compatible") % filament_id;
auto filament_type = ams.opt_string("filament_type", 0u);
if (!filament_type.empty()) {
auto original_type = filament_type;
filament_type = "Generic " + filament_type;
iter = std::find_if(filaments.begin(), filaments.end(),
[&filament_type](auto &f) { return f.is_compatible && f.is_system && boost::algorithm::starts_with(f.name, filament_type); });
if (iter == filaments.end()) {
// Similarity fallback: find a generic preset whose filament_type
// appears as a whole word in the AMS type (e.g. "ASA" in "ASA Sparkle").
auto upper_type = boost::to_upper_copy(original_type);
auto contains_word = [](const std::string& haystack, const std::string& needle) {
auto pos = haystack.find(needle);
while (pos != std::string::npos) {
bool start_ok = (pos == 0 || !std::isalnum(static_cast<unsigned char>(haystack[pos - 1])));
bool end_ok = (pos + needle.size() >= haystack.size() ||
!std::isalnum(static_cast<unsigned char>(haystack[pos + needle.size()])));
if (start_ok && end_ok)
return true;
pos = haystack.find(needle, pos + 1);
}
return false;
};
// Find the longest-matching preset type to prefer e.g. "PA-CF" over "PA".
size_t best_len = 0;
for (auto it = filaments.begin(); it != filaments.end(); ++it) {
if (!it->is_compatible || !it->is_system || !boost::algorithm::starts_with(it->name, "Generic "))
continue;
auto preset_type = boost::to_upper_copy(it->config.opt_string("filament_type", 0u));
if (preset_type.size() > best_len && contains_word(upper_type, preset_type)) {
iter = it;
best_len = preset_type.size();
filament_type = "Generic " + it->config.opt_string("filament_type", 0u);
}
}
}
}
if (iter == filaments.end()) {
// Prefer old selection
@@ -3874,11 +3820,7 @@ void PresetBundle::get_ams_cobox_infos(AMSComboInfo& combox_info)
combox_info.ams_names.push_back(ams_name);
continue;
}
iter = std::find_if(filaments.begin(), filaments.end(), [](auto &f) {
return f.is_compatible && f.is_system && boost::algorithm::starts_with(f.name, "Generic ");
});
if (iter == filaments.end())
iter = std::find_if(filaments.begin(), filaments.end(), [](auto &f) { return f.is_compatible && f.is_system; });
iter = std::find_if(filaments.begin(), filaments.end(), [](auto &f) { return f.is_compatible && f.is_system; });
if (iter == filaments.end())
continue;
}
@@ -3916,7 +3858,6 @@ unsigned int PresetBundle::sync_ams_list(std::vector<std::pair<DynamicPrintConfi
for (auto &entry : filament_ams_list) {
auto & ams = entry.second;
auto filament_id = ams.opt_string("filament_id", 0u);
const bool printer_set_tray = filament_id.empty();
auto filament_color = ams.opt_string("filament_colour", 0u);
auto filament_color_type = ams.opt_string("filament_colour_type", 0u);
auto filament_changed = !ams.has("filament_changed") || ams.opt_bool("filament_changed");
@@ -3929,58 +3870,42 @@ unsigned int PresetBundle::sync_ams_list(std::vector<std::pair<DynamicPrintConfi
ams_array_maps.push_back(temp);
index++;
if (filament_id.empty()) {
// A tray written by the printer UI carries a material type but no
// OrcaSlicer preset id. Resolve it to the matching Generic preset with
// the tray's own color instead of dropping it (direct sync) or forcing
// "Generic PLA" (mapping sync). Placeholders and typeless trays keep
// the previous behavior.
const auto tray_type = ams.opt_string("filament_type", 0u);
if (is_placeholder || tray_type.empty()) {
if (use_map) {
for (int j = maps.size() - 1; j >= 0; j--) {
if (maps[j].slot_id == slot_id && maps[j].ams_id == ams_id) {
maps.erase(j);
}
if (use_map) {
for (int j = maps.size() - 1; j >= 0; j--) {
if (maps[j].slot_id == slot_id && maps[j].ams_id == ams_id) {
maps.erase(j);
}
ams_filament_presets.push_back("Generic PLA");//for unknow matieral
auto default_unknown_color = "#CECECE";
ams_filament_colors.push_back(default_unknown_color);
ams_filament_color_types.push_back("1");
if (filament_multi_color.size() == 0) {
filament_multi_color.push_back(default_unknown_color);
}
ams_multi_color_filment.push_back(filament_multi_color);
} else if (is_placeholder) {
// Orca: push placeholders to keep index alignment with ams_infos
ams_filament_presets.push_back("");
ams_filament_colors.push_back("");
ams_filament_color_types.push_back("");
ams_multi_color_filment.push_back({});
}
continue;
ams_filament_presets.push_back("Generic PLA");//for unknow matieral
auto default_unknown_color = "#CECECE";
ams_filament_colors.push_back(default_unknown_color);
ams_filament_color_types.push_back("1");
if (filament_multi_color.size() == 0) {
filament_multi_color.push_back(default_unknown_color);
}
ams_multi_color_filment.push_back(filament_multi_color);
} else if (is_placeholder) {
// Orca: push placeholders to keep index alignment with ams_infos
ams_filament_presets.push_back("");
ams_filament_colors.push_back("");
ams_filament_color_types.push_back("");
ams_multi_color_filment.push_back({});
}
continue;
}
if (!filament_changed && this->filament_presets.size() > ams_filament_presets.size()) {
ams_filament_presets.push_back(this->filament_presets[ams_filament_presets.size()]);
ams_filament_colors.push_back(filament_color);
ams_filament_color_types.push_back(filament_color_type);
ams_multi_color_filment.push_back(filament_multi_color);
ams_infos.back().valid = true;
continue;
}
bool has_type = false;
auto filament_type = ams.opt_string("filament_type", 0u);
auto iter = filaments.end();
if (!filament_id.empty()) {
iter = std::find_if(filaments.begin(), filaments.end(), [this, &filament_id, &has_type, filament_type](auto &f) {
has_type |= f.config.opt_string("filament_type", 0u) == filament_type;
return f.is_compatible && filaments.get_preset_base(f) == &f && f.filament_id == filament_id; });
warn_ambiguous_filament_id_match(filaments, iter, filament_id);
} else {
// The material type is the only identity a printer-set tray carries.
has_type = std::any_of(filaments.begin(), filaments.end(), [&filament_type](auto &f) {
return f.is_compatible && f.config.opt_string("filament_type", 0u) == filament_type; });
}
auto iter = std::find_if(filaments.begin(), filaments.end(), [this, &filament_id, &has_type, filament_type](auto &f) {
has_type |= f.config.opt_string("filament_type", 0u) == filament_type;
return f.is_compatible && filaments.get_preset_base(f) == &f && f.filament_id == filament_id; });
warn_ambiguous_filament_id_match(filaments, iter, filament_id);
if (iter == filaments.end()) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": filament_id %1% not found or system or compatible") % filament_id;
if (!filament_type.empty()) {
@@ -4020,7 +3945,6 @@ unsigned int PresetBundle::sync_ams_list(std::vector<std::pair<DynamicPrintConfi
}
}
}
const bool resolved_by_material_type = printer_set_tray && iter != filaments.end();
if (iter == filaments.end()) {
// Prefer old selection
if (ams_filament_presets.size() < this->filament_presets.size()) {
@@ -4028,7 +3952,6 @@ unsigned int PresetBundle::sync_ams_list(std::vector<std::pair<DynamicPrintConfi
ams_filament_colors.push_back(filament_color);
ams_filament_color_types.push_back(filament_color_type);
ams_multi_color_filment.push_back(filament_multi_color);
ams_infos.back().valid = true;
unknowns.emplace_back(&ams, has_type ? L("The filament may not be compatible with the current machine settings. Generic filament presets will be used.") :
L("The filament model is unknown. Still using the previous filament preset."));
continue;
@@ -4044,8 +3967,7 @@ unsigned int PresetBundle::sync_ams_list(std::vector<std::pair<DynamicPrintConfi
if (iter == filaments.end())
continue;
}
if (!resolved_by_material_type)
unknowns.emplace_back(&ams, boost::algorithm::starts_with(iter->name, filament_type) ?
unknowns.emplace_back(&ams, boost::algorithm::starts_with(iter->name, filament_type) ?
(has_type ? L("The filament may not be compatible with the current machine settings. Generic filament presets will be used.") :
L("The filament model is unknown. Generic filament presets will be used.")) :
(has_type ? L("The filament may not be compatible with the current machine settings. A random filament preset will be used.") :
@@ -4056,7 +3978,6 @@ unsigned int PresetBundle::sync_ams_list(std::vector<std::pair<DynamicPrintConfi
ams_filament_colors.push_back(filament_color);
ams_filament_color_types.push_back(filament_color_type);
ams_multi_color_filment.push_back(filament_multi_color);
ams_infos.back().valid = true;
}
if (ams_filament_presets.empty())
return 0;
@@ -4496,21 +4417,9 @@ std::vector<std::vector<DynamicPrintConfig>> PresetBundle::get_extruder_filament
return filament_infos;
}
std::string PresetBundle::get_printer_model_display_name(const std::string &model_id) const
{
if (model_id.empty())
return {};
for (const auto &vendor_entry : vendors) {
for (const auto &model : vendor_entry.second.models) {
if (model.model_id == model_id)
return model.name;
}
}
return {};
}
// ORCA TODO: this assumes printer names follow "<printer_model> <nozzle_diameter>", e.g.
// "Bambu Lab X2D 0.4 nozzle". Other naming schemes may not resolve correctly.
// ORCA TODO: currently, this function assumes the printer name follows the pattern of "<printer_model> <nozzle_diameter>", e.g.
// printer_type: "Bambu Lab X2D", nozzle_diameter_str: "0.4 nozzle" => printer_name: "Bambu Lab X2D 0.4 nozzle". If the printer name does
// not follow this pattern, the function may not work correctly.
std::set<std::string> PresetBundle::get_printer_names_by_printer_type_and_nozzle(const std::string &printer_type, std::string nozzle_diameter_str, bool system_only)
{
std::set<std::string> printer_names;
@@ -4532,9 +4441,7 @@ std::set<std::string> PresetBundle::get_printer_names_by_printer_type_and_nozzle
if (printer_it->name.find(nozzle_diameter_str) != std::string::npos) printer_names.insert(printer_it->name);
}
// No match is normal for a connected machine the user has not installed; only an
// ambiguous match is a bug (the caller assumes one preset per model and nozzle).
assert(printer_names.size() <= 1);
assert(printer_names.size() == 1);
for (auto& printer_name : printer_names) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << " printer name: " << printer_name;
@@ -4547,8 +4454,8 @@ std::vector<Preset *> PresetBundle::get_filament_presets_for_machine(const std::
const std::string &nozzle_diameter_str,
bool include_user_presets)
{
// Printer model plus nozzle diameter normally resolves to a single system printer preset.
// Zero matches is normal for a connected machine the user never installed.
// Printer model plus nozzle diameter is expected to resolve to a single system printer preset;
// get_printer_names_by_printer_type_and_nozzle asserts as much in debug builds.
const std::set<std::string> printer_names = get_printer_names_by_printer_type_and_nozzle(printer_type, nozzle_diameter_str);
const Preset *printer = printer_names.empty() ? nullptr : printers.find_preset(*printer_names.begin());
if (printer == nullptr)
-3
View File
@@ -411,9 +411,6 @@ public:
std::vector<std::vector<DynamicPrintConfig>> get_extruder_filament_info() const;
// Resolve a vendor model id (an agent-reported machine identity) to the display name
// printer profiles use as printer_model. Empty when no loaded vendor declares it.
std::string get_printer_model_display_name(const std::string &model_id) const;
std::set<std::string> get_printer_names_by_printer_type_and_nozzle(const std::string &printer_type, std::string nozzle_diameter_str, bool system_only = true);
// Orca: the root filament presets a connected machine can use, resolved with the rule the rest
// of the app applies (is_compatible_with_printer): an empty compatible_printers means every
+9 -8
View File
@@ -2229,7 +2229,7 @@ StringObjectException Print::validate(std::vector<StringObjectException> *warnin
for (const PrintRegion &region : object->all_regions()) {
const auto &bridge_width_opt = region.config().bridge_line_width;
for (FlowRole bridge_role : { frPerimeter, frInfill, frSolidInfill, frTopSolidInfill }) {
const double nozzle_diameter = m_config.nozzle_diameter.get_at(region.extruder(bridge_role) - 1);
const double nozzle_diameter = nozzle_diameter_for_filament(m_config, region.extruder(bridge_role), this->is_BBL_printer());
const double bridge_width = bridge_width_opt.get_abs_value(nozzle_diameter);
if (bridge_width <= 0.)
continue;
@@ -2606,7 +2606,7 @@ Flow Print::brim_flow() const
frPerimeter,
// Flow::new_from_config_width takes care of the percent to value substitution
width,
(float)m_config.nozzle_diameter.get_at(m_print_regions.front()->config().outer_wall_filament_id-1),
(float)nozzle_diameter_for_filament(m_config, m_print_regions.front()->config().outer_wall_filament_id, this->is_BBL_printer()),
(float)this->skirt_first_layer_height());
}
@@ -2623,12 +2623,13 @@ Flow Print::skirt_flow() const
extruders and take the one with, say, the smallest index;
The same logic should be applied to the code that selects the extruder during G-code
generation as well. */
return Flow::new_from_config_width(frPerimeter,
// Flow::new_from_config_width takes care of the percent to value substitution
width,
(float) m_config.nozzle_diameter.get_at(
m_objects.empty() ? 0 : m_objects.front()->config().support_filament - 1),
(float) this->skirt_first_layer_height());
return Flow::new_from_config_width(
frPerimeter,
// Flow::new_from_config_width takes care of the percent to value substitution
width,
// ORCA: resolve the actual nozzle the support filament is printed with (dual-nozzle printers).
(float)nozzle_diameter_for_filament(m_config, m_objects.empty() ? 0 : m_objects.front()->config().support_filament, this->is_BBL_printer()),
(float)this->skirt_first_layer_height());
}
bool Print::has_support_material() const
+6 -3
View File
@@ -375,6 +375,8 @@ public:
Transform3d trafo_centered() const
{ Transform3d t = this->trafo(); t.pretranslate(Vec3d(- unscale<double>(m_center_offset.x()), - unscale<double>(m_center_offset.y()), 0)); return t; }
const PrintInstances& instances() const { return m_instances; }
// Orca: Bounding box of each connected body, indexed by Layer::lslices_separated_component_ids.
const std::vector<BoundingBox>& separated_body_bboxes() const { return m_separated_body_bboxes; }
PrintInstances &instances() { return m_instances; }
// Whoever will get a non-const pointer to PrintObject will be able to modify its layers.
@@ -581,8 +583,8 @@ private:
void discover_horizontal_shells();
void combine_infill();
void _generate_support_material();
std::pair<FillAdaptive::OctreePtr, FillAdaptive::OctreePtr> prepare_adaptive_infill_data(
const std::vector<std::pair<const Surface*, float>>& surfaces_w_bottom_z) const;
std::pair<FillAdaptive::Octrees, FillAdaptive::Octrees> prepare_adaptive_infill_data(
const std::vector<std::pair<const Surface*, const Layer*>>& surfaces_w_layer) const;
FillLightning::GeneratorPtr prepare_lightning_infill_data();
// BBS
@@ -614,7 +616,8 @@ private:
// so that next call to make_perimeters() performs a union() before computing loops
bool m_typed_slices = false;
std::pair<FillAdaptive::OctreePtr, FillAdaptive::OctreePtr> m_adaptive_fill_octrees;
std::pair<FillAdaptive::Octrees, FillAdaptive::Octrees> m_adaptive_fill_octrees;
std::vector<BoundingBox> m_separated_body_bboxes;
FillLightning::GeneratorPtr m_lightning_generator;
std::vector < VolumeSlices > firstLayerObjSliceByVolume;
+27 -3
View File
@@ -133,6 +133,15 @@ size_t get_extruder_index(const GCodeConfig& config, unsigned int filament_id)
return 0;
}
double nozzle_diameter_for_filament(const PrintConfig& config, int filament_id, bool is_bbl_printer)
{
int extruder = filament_id;
if (is_bbl_printer && config.nozzle_diameter.size() > 1 &&
filament_id >= 1 && static_cast<size_t>(filament_id - 1) < config.filament_map.size())
extruder = config.filament_map.get_at(filament_id - 1);
return config.nozzle_diameter.get_at(extruder - 1);
}
// Orca: input shaping values types by flavor
std::vector<std::string> get_shaper_type_values_for_flavor(GCodeFlavor flavor)
@@ -7602,8 +7611,8 @@ void PrintConfigDef::init_fff_params()
"whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts "
"(or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected.");
"Adaptive Cubic and Support Cubic always center each part on itself, and Lightning infill is generated for "
"the whole object and is unaffected.");
def->mode = comExpert;
def->set_default_value(new ConfigOptionBool(false));
@@ -10845,6 +10854,21 @@ void set_filament_dev_options(DynamicPrintConfig &config, const std::vector<cons
}
}
void resize_mixed_filament_metadata(DynamicPrintConfig &config, size_t old_slot_count, size_t new_slot_count)
{
auto resize = [old_slot_count, new_slot_count](auto *opt) {
opt->values.resize(std::min(old_slot_count, opt->values.size()));
opt->values.resize(new_slot_count);
};
resize(config.option<ConfigOptionBools>("filament_is_mixed", true));
resize(config.option<ConfigOptionStrings>("filament_mixed_components", true));
resize(config.option<ConfigOptionStrings>("filament_mixed_sublayer_ratios", true));
resize(config.option<ConfigOptionBools>("filament_mixed_gradient", true));
resize(config.option<ConfigOptionStrings>("filament_mixed_gradient_range", true));
resize(config.option<ConfigOptionStrings>("filament_mixed_gradient_curve", true));
resize(config.option<ConfigOptionBools>("filament_mixed_gradient_per_part", true));
}
//used for object/region config
//use the smallest of multiple to single
@@ -12975,7 +12999,7 @@ CustomGcodeSpecificConfigDef::CustomGcodeSpecificConfigDef()
// Common Defs
def = this->add("layer_num", coInt);
def->label = L("Layer number");
def->tooltip = L("Index of the current layer. One-based (i.e. first layer is number 1).");
def->tooltip = L("Index of the current layer. Zero-based (i.e. first layer is number 0), except in extrusion role change G-code, where it is one-based.");
def = this->add("layer_z", coFloat);
def->label = L("Layer Z");
+19 -4
View File
@@ -136,25 +136,31 @@ enum InfillPattern : int {
ipCount,
};
// Orca: Infill patterns whose alignment origin follows the fill bounding box, so the
// "separated_infills" option can re-center them per connected body. Patterns evaluated in
// absolute/global coordinates (Gyroid, TPMS, Honeycomb, CrossHatch, ...) or that are shape-relative
// (Concentric) ignore that bounding box and are therefore excluded.
// Orca: Infill patterns that the "separated_infills" option can center on each connected body.
inline bool is_separable_infill_pattern(InfillPattern pattern)
{
switch (pattern) {
case ipMonotonic:
case ipMonotonicLine:
case ipRectilinear:
case ipAlignedRectilinear:
case ipZigZag:
case ipCrossZag:
case ipLockedZag:
case ipLine:
case ipGrid:
case ipTriangles:
case ipStars: // tri-hexagon
case ipCubic:
case ipQuarterCubic:
case ipHoneycomb:
case ip3DHoneycomb:
case ipLateralHoneycomb:
case ipLateralLattice:
case ipCrossHatch:
case ipTpmsD:
case ipTpmsFK:
case ipGyroid:
case ipHilbertCurve:
case ipArchimedeanChords:
case ipOctagramSpiral:
@@ -164,6 +170,9 @@ inline bool is_separable_infill_pattern(InfillPattern pattern)
}
}
// Orca: Infill patterns laid out by an octree, which each connected body always gets of its own.
inline bool is_octree_infill_pattern(InfillPattern pattern) { return pattern == ipAdaptiveCubic || pattern == ipSupportCubic; }
// Orca: Infill patterns that round their corners by the "sparse_infill_smooth_factor" option.
// Grid, Triangles and Tri-hexagon only do so in their trapezoidal form, which is generated with more
// than one line per infill wall; a single line makes them plain crossing lines with nothing to round.
@@ -933,6 +942,10 @@ extern std::set<std::string> filament_dev_options;
// filament_configs, one config per filament in slot order, as the filaments' values one after another.
void set_filament_dev_options(DynamicPrintConfig &config, const std::vector<const DynamicPrintConfig *> &filament_configs);
// Orca: sizes the per-slot mixed-colour metadata options to new_slot_count, keeping the first
// old_slot_count values; an option the config lacks is created.
void resize_mixed_filament_metadata(DynamicPrintConfig &config, size_t old_slot_count, size_t new_slot_count);
extern void update_static_print_config_from_dynamic(ConfigBase& config, const DynamicPrintConfig& dest_config, std::vector<int> variant_index, std::set<std::string>& key_set1, int stride = 1);
extern void compute_filament_override_value(const std::string& opt_key, const ConfigOption *opt_old_machine, const ConfigOption *opt_new_machine, const ConfigOption *opt_new_filament, const DynamicPrintConfig& new_full_config,
t_config_option_keys& diff_keys, DynamicPrintConfig& filament_overrides, std::vector<int>& f_map_indices);
@@ -2562,6 +2575,8 @@ static bool has_zero_flush_volume_for_used_filaments(const std::vector<T> &fv_ma
size_t get_extruder_index(const GCodeConfig& config, unsigned int filament_id);
double nozzle_diameter_for_filament(const PrintConfig& config, int filament_id, bool is_bbl_printer);
} // namespace Slic3r
// Serialization through the Cereal library
+125 -34
View File
@@ -67,6 +67,7 @@
#include <utility>
#include <boost/log/trivial.hpp>
#include <Eigen/Core>
#include <tbb/parallel_for.h>
#include <tbb/spin_mutex.h>
@@ -719,7 +720,8 @@ void PrintObject::prepare_infill()
bool needs_separated_components = false;
for (size_t i = 0; i < this->num_printing_regions(); ++ i) {
const PrintRegionConfig &rc = this->printing_region(i).config();
if (rc.separated_infills || rc.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model) {
if (rc.separated_infills || rc.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model ||
(rc.sparse_infill_density > 0 && is_octree_infill_pattern(rc.sparse_infill_pattern))) {
needs_separated_components = true;
break;
}
@@ -736,8 +738,9 @@ void PrintObject::prepare_infill()
if (parts <= 1 && ! (first_part != nullptr && first_part->is_splittable()))
needs_separated_components = false;
}
m_separated_body_bboxes.clear();
for (Layer *layer : m_layers)
layer->lslices_separated_component_bboxes.clear();
layer->lslices_separated_component_ids.clear();
if (needs_separated_components) {
const size_t nl = m_layers.size();
std::vector<size_t> offset(nl + 1, 0); // Orca: flat index of the first island of each layer
@@ -788,17 +791,20 @@ void PrintObject::prepare_infill()
});
}
}
// Orca: Full bounding box of each body, indexed by its union-find root.
std::vector<BoundingBox> body_bbox(nreg);
for (size_t i = 0; i < nl; ++ i)
for (size_t a = 0; a < m_layers[i]->lslices.size(); ++ a)
body_bbox[find(offset[i] + a)].merge(m_layers[i]->lslices_bboxes[a]);
// Orca: Store the body bbox for every island.
// Orca: Number the bodies by their first island and merge the bounding boxes of their islands.
std::vector<size_t> body_of_root(nreg, size_t(-1));
for (size_t i = 0; i < nl; ++ i) {
Layer *layer = m_layers[i];
layer->lslices_separated_component_bboxes.resize(layer->lslices.size());
for (size_t a = 0; a < layer->lslices.size(); ++ a)
layer->lslices_separated_component_bboxes[a] = body_bbox[find(offset[i] + a)];
layer->lslices_separated_component_ids.resize(layer->lslices.size());
for (size_t a = 0; a < layer->lslices.size(); ++ a) {
size_t &body = body_of_root[find(offset[i] + a)];
if (body == size_t(-1)) {
body = m_separated_body_bboxes.size();
m_separated_body_bboxes.emplace_back();
}
m_separated_body_bboxes[body].merge(layer->lslices_bboxes[a]);
layer->lslices_separated_component_ids[a] = body;
}
}
}
@@ -836,16 +842,13 @@ void PrintObject::infill()
if (this->set_started(posInfill)) {
m_print->set_status(35, L("Generating infill toolpath"));
const auto& adaptive_fill_octree = this->m_adaptive_fill_octrees.first;
const auto& support_fill_octree = this->m_adaptive_fill_octrees.second;
BOOST_LOG_TRIVIAL(debug) << "Filling layers in parallel - start";
tbb::parallel_for(
tbb::blocked_range<size_t>(0, m_layers.size()),
[this, &adaptive_fill_octree = adaptive_fill_octree, &support_fill_octree = support_fill_octree](const tbb::blocked_range<size_t>& range) {
[this](const tbb::blocked_range<size_t>& range) {
for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++ layer_idx) {
m_print->throw_if_canceled();
m_layers[layer_idx]->make_fills(adaptive_fill_octree.get(), support_fill_octree.get(), this->m_lightning_generator.get());
m_layers[layer_idx]->make_fills(&m_adaptive_fill_octrees.first, &m_adaptive_fill_octrees.second, this->m_lightning_generator.get());
}
}
);
@@ -1110,14 +1113,69 @@ void PrintObject::simplify_extrusion_path()
}
}
std::pair<FillAdaptive::OctreePtr, FillAdaptive::OctreePtr> PrintObject::prepare_adaptive_infill_data(
const std::vector<std::pair<const Surface *, float>> &surfaces_w_bottom_z) const
// Orca: Separated body of the island containing a point of a layer, else of the island outline nearest within 1 mm, or -1.
static int separated_body_at(const Layer &layer, const Point &point)
{
int body = -1;
double best = scaled<double>(1.);
for (size_t i = 0; i < layer.lslices.size() && i < layer.lslices_separated_component_ids.size() && best > 0.; ++ i) {
BoundingBox bbox = layer.lslices_bboxes[i];
bbox.offset(coord_t(best));
if (! bbox.contains(point))
continue;
const double dist = layer.lslices[i].contains(point) ? 0. : (layer.lslices[i].point_projection(point) - point).cast<double>().norm();
if (dist < best) {
best = dist;
body = int(layer.lslices_separated_component_ids[i]);
}
}
return body;
}
// Orca: The object mesh in the octree frame split by separated body. Each connected component goes to the body
// most of its sampled triangles lie on, sampled a layer height inside the solid at the layer nearest to them.
static std::vector<indexed_triangle_set> split_mesh_by_body(const PrintObject &object, const indexed_triangle_set &mesh, size_t num_bodies)
{
const Eigen::Matrix3d to_object = FillAdaptive::transform_to_world().toRotationMatrix();
const double inset = object.config().layer_height.value;
std::vector<indexed_triangle_set> bodies(num_bodies);
for (const indexed_triangle_set &component : its_split(mesh)) {
std::vector<size_t> votes(num_bodies, 0);
const size_t step = std::max<size_t>(1, component.indices.size() / 8);
for (size_t i = 0; i < component.indices.size(); i += step) {
const stl_triangle_vertex_indices &tri = component.indices[i];
const Vec3d a = component.vertices[tri[0]].cast<double>(), b = component.vertices[tri[1]].cast<double>(),
d = component.vertices[tri[2]].cast<double>();
const Vec3d normal = (b - a).cross(d - a);
const double area2 = normal.norm();
const Vec3d c = to_object * ((a + b + d) / 3. - (area2 > 0. ? Vec3d(normal * (inset / area2)) : Vec3d::Zero()));
size_t lo = 0, hi = object.layer_count();
while (lo < hi) {
const size_t mid = (lo + hi) / 2;
if (object.get_layer(int(mid))->slice_z < c.z())
lo = mid + 1;
else
hi = mid;
}
if (lo == object.layer_count() || (lo > 0 && c.z() - object.get_layer(int(lo) - 1)->slice_z < object.get_layer(int(lo))->slice_z - c.z()))
-- lo;
if (const int body = separated_body_at(*object.get_layer(int(lo)), Point(scaled<coord_t>(c.x()), scaled<coord_t>(c.y()))); body >= 0)
++ votes[body];
}
if (const auto best = std::max_element(votes.begin(), votes.end()); *best > 0)
its_merge(bodies[best - votes.begin()], component);
}
return bodies;
}
std::pair<FillAdaptive::Octrees, FillAdaptive::Octrees> PrintObject::prepare_adaptive_infill_data(
const std::vector<std::pair<const Surface *, const Layer *>> &surfaces_w_layer) const
{
using namespace FillAdaptive;
auto [adaptive_line_spacing, support_line_spacing] = adaptive_fill_line_spacing(*this);
if ((adaptive_line_spacing == 0. && support_line_spacing == 0.) || this->layers().empty())
return std::make_pair(OctreePtr(), OctreePtr());
return {};
indexed_triangle_set mesh = this->model_object()->raw_indexed_triangle_set();
// Rotate mesh and build octree on it with axis-aligned (standart base) cubes.
@@ -1125,27 +1183,60 @@ std::pair<FillAdaptive::OctreePtr, FillAdaptive::OctreePtr> PrintObject::prepare
its_transform(mesh, to_octree * this->trafo_centered(), true);
// Triangulate internal bridging surfaces.
std::vector<std::vector<Vec3d>> overhangs(std::max(surfaces_w_bottom_z.size(), size_t(1)));
std::vector<std::vector<Vec3d>> overhangs(std::max(surfaces_w_layer.size(), size_t(1)));
// ^ make sure vector is not empty, even with no briding surfaces we still want to build the adaptive trees later, some continue normally
tbb::parallel_for(tbb::blocked_range<int>(0, surfaces_w_bottom_z.size()),
[this, &to_octree, &overhangs, &surfaces_w_bottom_z](const tbb::blocked_range<int> &range) {
tbb::parallel_for(tbb::blocked_range<int>(0, surfaces_w_layer.size()),
[this, &to_octree, &overhangs, &surfaces_w_layer](const tbb::blocked_range<int> &range) {
PRINT_OBJECT_TIME_LIMIT_MILLIS(PRINT_OBJECT_TIME_LIMIT_DEFAULT);
for (int surface_idx = range.begin(); surface_idx < range.end(); ++surface_idx) {
std::vector<Vec3d> &out = overhangs[surface_idx];
m_print->throw_if_canceled();
append(out, triangulate_expolygon_3d(surfaces_w_bottom_z[surface_idx].first->expolygon,
surfaces_w_bottom_z[surface_idx].second));
append(out, triangulate_expolygon_3d(surfaces_w_layer[surface_idx].first->expolygon,
float(surfaces_w_layer[surface_idx].second->bottom_z())));
for (Vec3d &p : out)
p = (to_octree * p).eval();
}
});
// Orca: Each body gets the octree it has when sliced on its own, from its own triangles.
std::pair<Octrees, Octrees> octrees;
const size_t num_bodies = m_separated_body_bboxes.size();
bool need_object = num_bodies <= 1;
if (num_bodies > 1) {
const std::vector<indexed_triangle_set> body_meshes = split_mesh_by_body(*this, mesh, num_bodies);
need_object = std::any_of(body_meshes.begin(), body_meshes.end(), [](const indexed_triangle_set &its) { return its.indices.empty(); });
std::vector<std::vector<Vec3d>> body_overhangs(num_bodies);
for (size_t i = 0; i < surfaces_w_layer.size(); ++ i)
if (const int body = separated_body_at(*surfaces_w_layer[i].second, surfaces_w_layer[i].first->expolygon.contour.points.front()); body >= 0)
append(body_overhangs[body], overhangs[i]);
if (adaptive_line_spacing)
octrees.first.bodies.resize(num_bodies);
if (support_line_spacing)
octrees.second.bodies.resize(num_bodies);
tbb::parallel_for(tbb::blocked_range<size_t>(0, num_bodies), [&, adaptive_spacing = adaptive_line_spacing, support_spacing = support_line_spacing](
const tbb::blocked_range<size_t> &range) {
for (size_t body = range.begin(); body < range.end(); ++ body) {
m_print->throw_if_canceled();
if (body_meshes[body].indices.empty())
continue;
if (adaptive_spacing)
octrees.first.bodies[body] = build_octree(body_meshes[body], body_overhangs[body], adaptive_spacing, false);
if (support_spacing)
octrees.second.bodies[body] = build_octree(body_meshes[body], body_overhangs[body], support_spacing, true);
}
});
}
// and gather them.
for (size_t i = 1; i < overhangs.size(); ++ i)
append(overhangs.front(), std::move(overhangs[i]));
return std::make_pair(
adaptive_line_spacing ? build_octree(mesh, overhangs.front(), adaptive_line_spacing, false) : OctreePtr(),
support_line_spacing ? build_octree(mesh, overhangs.front(), support_line_spacing, true) : OctreePtr());
// Orca: The object's octree only serves bodies that have none of their own.
if (need_object && adaptive_line_spacing)
octrees.first.object = build_octree(mesh, overhangs.front(), adaptive_line_spacing, false);
if (need_object && support_line_spacing)
octrees.second.object = build_octree(mesh, overhangs.front(), support_line_spacing, true);
return octrees;
}
FillLightning::GeneratorPtr PrintObject::prepare_lightning_infill_data()
@@ -2963,14 +3054,14 @@ void PrintObject::bridge_over_infill()
std::map<size_t, Polylines> infill_lines;
// SECTION to generate infill polylines
{
std::vector<std::pair<const Surface *, float>> surfaces_w_bottom_z;
std::vector<std::pair<const Surface *, const Layer *>> surfaces_w_layer;
for (const auto &pair : surfaces_by_layer) {
for (const CandidateSurface &c : pair.second) {
surfaces_w_bottom_z.emplace_back(c.original_surface, c.region->m_layer->bottom_z());
surfaces_w_layer.emplace_back(c.original_surface, c.region->m_layer);
}
}
this->m_adaptive_fill_octrees = this->prepare_adaptive_infill_data(surfaces_w_bottom_z);
this->m_adaptive_fill_octrees = this->prepare_adaptive_infill_data(surfaces_w_layer);
std::vector<size_t> layers_to_generate_infill;
for (const auto &pair : surfaces_by_layer) {
@@ -2986,8 +3077,8 @@ void PrintObject::bridge_over_infill()
for (size_t job_idx = r.begin(); job_idx < r.end(); job_idx++) {
size_t lidx = layers_to_generate_infill[job_idx];
infill_lines.at(
lidx) = po->get_layer(lidx)->generate_sparse_infill_polylines_for_anchoring(po->m_adaptive_fill_octrees.first.get(),
po->m_adaptive_fill_octrees.second.get(),
lidx) = po->get_layer(lidx)->generate_sparse_infill_polylines_for_anchoring(&po->m_adaptive_fill_octrees.first,
&po->m_adaptive_fill_octrees.second,
po->m_lightning_generator.get());
}
});
@@ -4467,8 +4558,8 @@ void PrintObject::combine_infill()
// Limit the number of combined layers to the maximum height allowed by this regions' nozzle.
//FIXME limit the layer height to max_layer_height
double nozzle_diameter = std::min(
this->print()->config().nozzle_diameter.get_at(region.config().sparse_infill_filament_id.value - 1),
this->print()->config().nozzle_diameter.get_at(region.config().internal_solid_filament_id.value - 1));
nozzle_diameter_for_filament(this->print()->config(), region.config().sparse_infill_filament_id.value, this->print()->is_BBL_printer()),
nozzle_diameter_for_filament(this->print()->config(), region.config().internal_solid_filament_id.value, this->print()->is_BBL_printer()));
//Orca: Limit combination of infill to up to infill_combination_max_layer_height
const double infill_combination_max_layer_height = region.config().infill_combination_max_layer_height.get_abs_value(nozzle_diameter);
+1 -1
View File
@@ -57,7 +57,7 @@ Flow PrintRegion::flow(const PrintObject &object, FlowRole role, double layer_he
// Get the configured nozzle_diameter for the extruder associated to the flow role requested.
// Here this->extruder(role) - 1 may underflow to MAX_INT, but then the get_at() will follback to zero'th element, so everything is all right.
auto nozzle_diameter = float(print_config.nozzle_diameter.get_at(this->extruder(role) - 1));
auto nozzle_diameter = float(nozzle_diameter_for_filament(print_config, this->extruder(role), object.print()->is_BBL_printer()));
return Flow::new_from_config_width(role, config_width, nozzle_diameter, float(layer_height));
}
-1
View File
@@ -49,7 +49,6 @@ public:
using TColor = typename PixelRenderer::color_type;
using TValue = typename TColor::value_type;
using TPixel = typename PixelRenderer::pixel_type;
using TRawBuffer = agg::rendering_buffer;
protected:
-1
View File
@@ -44,7 +44,6 @@
#include "TDataStd_Name.hxx"
#include "BRepBuilderAPI_Transform.hxx"
#include "TopExp_Explorer.hxx"
#include "TopExp_Explorer.hxx"
#include "BRep_Tool.hxx"
#include "Font_BRepFont.hxx"
#include "Font_BRepTextBuilder.hxx"
+1 -1
View File
@@ -2180,7 +2180,7 @@ SupportGeneratorLayersPtr PrintObjectSupportMaterial::top_contact_layers(
// check if the sharp tails should be extended higher
bool detect_first_sharp_tail_only = false;
const coordf_t extrusion_width = m_object_config->line_width.get_abs_value(object.print()->config().nozzle_diameter.get_at(object.config().support_interface_filament-1));
const coordf_t extrusion_width = m_object_config->line_width.get_abs_value(nozzle_diameter_for_filament(object.print()->config(), object.config().support_interface_filament, object.print()->is_BBL_printer()));
const coordf_t extrusion_width_scaled = scale_(extrusion_width);
if (is_auto(m_object_config->support_type.value) && g_config_support_sharp_tails && !detect_first_sharp_tail_only) {
for (size_t layer_nr = layer_id_start; layer_nr < num_layers; layer_nr++) {
+1 -1
View File
@@ -1399,7 +1399,7 @@ void TreeSupport::generate_toolpaths()
{
const PrintObjectConfig &object_config = m_object->config();
coordf_t support_extrusion_width = m_support_params.support_extrusion_width;
coordf_t nozzle_diameter = m_print_config->nozzle_diameter.get_at(object_config.support_filament - 1);
coordf_t nozzle_diameter = nozzle_diameter_for_filament(*m_print_config, object_config.support_filament, m_object->print()->is_BBL_printer());
coordf_t layer_height = object_config.layer_height.value;
const size_t wall_count = object_config.tree_support_wall_count.value;
@@ -17,9 +17,6 @@ typedef std::vector<Color> ColorList;
typedef std::array<double, 3> ColorDouble;
typedef std::array<std::size_t, 3> RGB;
// Function pointer type that points to a specific color-difference function based on the chosen method.
using DistanceFunction = double (*)(const Color&, const Color&);
// Color space used for computing color differences.
enum struct ColorDifferenceMethod : std::size_t {
RGB = 0, // Simplest and fastest
+3 -2
View File
@@ -24,8 +24,6 @@
namespace Slic3r { namespace tex2color {
namespace PMP = CGAL::Polygon_mesh_processing;
// Default upper bound on the number of half-edges in any single boundary cycle
// that CloseBoundariesAndRepairManifoldness will attempt to triangulate. The
// cost of triangulate_hole grows non-linearly with cycle length, so this caps
@@ -61,6 +59,7 @@ struct BoundaryEdgeStats
// any pre-processing (e.g. stitch_borders) needed for the count to be meaningful.
inline BoundaryEdgeStats ComputeBoundaryEdgeStats(const cgalutils::CGALMesh& cgal_mesh)
{
namespace PMP = CGAL::Polygon_mesh_processing;
using CGALMesh = cgalutils::CGALMesh;
using HalfedgeDescriptor = boost::graph_traits<CGALMesh>::halfedge_descriptor;
@@ -87,6 +86,7 @@ inline BoundaryEdgeStats ComputeBoundaryEdgeStats(const cgalutils::CGALMesh& cga
// boundary statistics; entering this function always triggers triangulation.
inline void CloseBoundariesAndRepairManifoldness(cgalutils::CGALMesh& cgal_mesh)
{
namespace PMP = CGAL::Polygon_mesh_processing;
using CGALMesh = cgalutils::CGALMesh;
using HalfedgeDescriptor = boost::graph_traits<CGALMesh>::halfedge_descriptor;
using FaceDescriptor = boost::graph_traits<CGALMesh>::face_descriptor;
@@ -112,6 +112,7 @@ inline bool RepairMesh(const TriMesh& mesh,
AlgoCancelCallback cancel_callback = nullptr,
const RepairSetting& setting = RepairSetting{})
{
namespace PMP = CGAL::Polygon_mesh_processing;
using Clock = std::chrono::steady_clock;
auto elapsed_ms = [](Clock::time_point t0) {
return std::chrono::duration_cast<std::chrono::milliseconds>(Clock::now() - t0).count();
-2
View File
@@ -25,8 +25,6 @@
#include <initializer_list>
#include <string_view>
#include <regex>
#include <string_view>
#include <algorithm>
#include <boost/system/error_code.hpp>
#include <boost/algorithm/string.hpp>
-2
View File
@@ -432,8 +432,6 @@ inline IntegerOnly<I, I> fast_round_up(double a)
return a == 0.49999999999999994 ? I(0) : I(floor(a + 0.5));
}
template<class T> using SamePair = std::pair<T, T>;
} // namespace Slic3r
#endif
+1 -14
View File
@@ -368,10 +368,6 @@ set(SLIC3R_GUI_SOURCES
GUI/MarkdownTip.hpp
GUI/MediaFilePanel.cpp
GUI/MediaFilePanel.h
GUI/OrcaFilesPanel.cpp
GUI/OrcaFilesPanel.h
GUI/StoragePanel.cpp
GUI/StoragePanel.h
GUI/MediaPlayCtrl.cpp
GUI/MediaPlayCtrl.h
GUI/WebRtcMediaController.cpp
@@ -461,11 +457,6 @@ set(SLIC3R_GUI_SOURCES
GUI/PresetHints.hpp
GUI/PrinterCloudAuthDialog.cpp
GUI/PrinterCloudAuthDialog.hpp
GUI/Printer/BambuFileGridModel.cpp
GUI/Printer/BambuFileGridModel.h
GUI/Printer/IFileGridModel.h
GUI/Printer/RemoteFileGridModel.cpp
GUI/Printer/RemoteFileGridModel.h
GUI/Printer/PrinterFileSystem.cpp
GUI/Printer/PrinterFileSystem.h
GUI/PrinterWebView.cpp
@@ -781,12 +772,8 @@ set(SLIC3R_GUI_SOURCES
Utils/ICameraSignalingChannel.hpp
Utils/OrcaCloudServiceAgent.cpp
Utils/OrcaCloudServiceAgent.hpp
Utils/OrcaMqttConnection.cpp
Utils/OrcaMqttConnection.hpp
Utils/OrcaPrinterAgent.cpp
Utils/OrcaPrinterAgent.hpp
Utils/OrcaCloudSignalingChannel.cpp
Utils/OrcaCloudSignalingChannel.hpp
Utils/QidiPrinterAgent.cpp
Utils/QidiPrinterAgent.hpp
Utils/SnapmakerPrinterAgent.cpp
@@ -925,7 +912,7 @@ target_include_directories(libslic3r_gui PRIVATE Utils ${CMAKE_CURRENT_BINARY_DI
if (WIN32)
target_include_directories(libslic3r_gui SYSTEM PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../deps/WebView2/include)
target_link_libraries(libslic3r_gui Advapi32 Crypt32)
target_link_libraries(libslic3r_gui Advapi32)
endif()
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES})
+1 -10
View File
@@ -7,7 +7,6 @@
#include "slic3r/GUI/DeviceCore/DevExtruderSystem.h"
#include "slic3r/GUI/DeviceCore/DevManager.h"
#include "slic3r/GUI/DeviceManager.hpp"
#include "slic3r/GUI/MsgDialog.hpp"
@@ -1634,16 +1633,8 @@ int AMSDryCtrWin::update_filament_list(DevAms* dev_ams, MachineObject* obj)
stream << std::fixed << std::setprecision(1) << obj->GetExtderSystem()->GetNozzleDiameter(extruder_id);
std::string nozzle_diameter_str = stream.str();
// The connected device's model may not resolve (OrcaSonar's is optional); the
// helper falls back to the selected profile so the list is never empty.
const std::string filament_printer_model = resolve_filament_printer_model(obj->printer_type, preset_bundle);
if (filament_printer_model.empty()) {
BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " cannot resolve a printer model for the filament list";
return false;
}
for (Preset *filament_it : preset_bundle->get_filament_presets_for_machine(
filament_printer_model, nozzle_diameter_str, obj->is_support_user_preset)) {
DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str, obj->is_support_user_preset)) {
if (!filament_id_set.insert(filament_it->filament_id).second)
continue;
const std::string filament_alias = filaments.get_preset_alias(*filament_it, true);
+51 -100
View File
@@ -4,12 +4,10 @@
#include "GUI_App.hpp"
#include "GUI.hpp"
#include "slic3r/Utils/NetworkAgent.hpp"
#include "slic3r/Utils/NetworkAgentFactory.hpp"
#include "libslic3r/Preset.hpp"
#include "I18N.hpp"
#include <algorithm>
#include <boost/log/trivial.hpp>
#include <slic3r/GUI/DeviceManager.hpp>
#include <string>
#include <sstream>
#include <ios>
@@ -474,13 +472,6 @@ void AMSMaterialsSetting::update_filament_editing(bool is_printing)
m_button_confirm->Show(true);
}
// A third-party tray owns its temp range; BBL RFID trays keep the read-only preset values.
// Only the OrcaSonar agent accepts the temp fields, so other agents stay read-only.
const bool is_orca_agent = obj && obj->printer_agent_id == ORCA_PRINTER_AGENT_ID;
const bool can_edit = !is_printing || obj->is_support_filament_setting_inprinting;
m_input_nozzle_min->Enable(m_is_third && can_edit && is_orca_agent);
m_input_nozzle_max->Enable(m_is_third && can_edit && is_orca_agent);
if (!m_is_third) {
m_tip_readonly->SetLabelText(wxEmptyString);
m_tip_readonly->Hide();
@@ -503,8 +494,6 @@ void AMSMaterialsSetting::update_filament_editing(bool is_printing)
if (m_view_only) { // Orca: view-only (2D laser/cut) — lock every edit control and hide apply/reset
m_comboBox_filament->Enable(false);
m_comboBox_cali_result->Enable(false);
m_input_nozzle_min->Enable(false);
m_input_nozzle_max->Enable(false);
m_input_k_val->Enable(false);
m_input_n_val->Enable(false);
m_button_confirm->Hide();
@@ -554,7 +543,7 @@ void AMSMaterialsSetting::on_select_reset(wxCommandEvent& event) {
}
// set k / n value
if (obj->supports_extrusion_cali() && obj->cali_version <= -1 && obj->get_printer_series() == PrinterSeries::SERIES_P1P) {
if (obj->cali_version <= -1 && obj->get_printer_series() == PrinterSeries::SERIES_P1P) {
// set extrusion cali ratio
int cali_tray_id = ams_id * 4 + slot_id;
@@ -575,7 +564,7 @@ void AMSMaterialsSetting::on_select_reset(wxCommandEvent& event) {
}
obj->command_extrusion_cali_set(cali_tray_id, "", "", k, n);
}
else if (obj->supports_extrusion_cali()) {
else {
PACalibIndexInfo select_index_info;
int tray_id = ams_id * 4 + slot_id;
if (is_virtual_tray()) {
@@ -734,21 +723,6 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event)
return;
}
if (nozzle_temp_min_int < FILAMENT_MIN_TEMP || nozzle_temp_min_int > FILAMENT_MAX_TEMP ||
nozzle_temp_max_int < FILAMENT_MIN_TEMP || nozzle_temp_max_int > FILAMENT_MAX_TEMP) {
MessageDialog msg_dlg(nullptr,
wxString::Format(_L("The input value should be greater than %1% and less than %2%"), FILAMENT_MIN_TEMP, FILAMENT_MAX_TEMP),
wxEmptyString, wxICON_WARNING | wxOK);
msg_dlg.ShowModal();
return;
}
if (nozzle_temp_min_int > nozzle_temp_max_int) {
MessageDialog msg_dlg(nullptr, _L("The minimum temperature cannot be greater than the maximum temperature."),
wxEmptyString, wxICON_WARNING | wxOK);
msg_dlg.ShowModal();
return;
}
// Orca: log the tray payload this dialog hands the printer, so the filament_id resolved from the
// dropdown selection can be checked against the tray_info_idx the AMS actually receives. A
@@ -772,7 +746,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event)
wxString k_text = m_input_k_val->GetTextCtrl()->GetValue();
wxString n_text = m_input_n_val->GetTextCtrl()->GetValue();
if (obj->supports_extrusion_cali() && obj->cali_version <= -1 && (obj->get_printer_series() != PrinterSeries::SERIES_X1) && !ExtrusionCalibration::check_k_validation(k_text)) {
if (obj->cali_version <= -1 && (obj->get_printer_series() != PrinterSeries::SERIES_X1) && !ExtrusionCalibration::check_k_validation(k_text)) {
wxString k_tips = wxString::Format(_L("Please input a valid value (K in %.1f~%.1f)"), MIN_PA_K_VALUE, MAX_PA_K_VALUE);
wxString kn_tips = wxString::Format(_L("Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)"), MIN_PA_K_VALUE, MAX_PA_K_VALUE, 0.6, 2.0);
MessageDialog msg_dlg(nullptr, k_tips, wxEmptyString, wxICON_WARNING | wxOK);
@@ -802,7 +776,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event)
vt_tray = VIRTUAL_TRAY_DEPUTY_ID;
}
if (obj->supports_extrusion_cali() && obj->cali_version >= 0) {
if (obj->cali_version >= 0) {
PACalibIndexInfo select_index_info;
select_index_info.tray_id = vt_tray;
select_index_info.ams_id = ams_id;
@@ -821,7 +795,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event)
CalibUtils::select_PA_calib_result(select_index_info);
}
else if (obj->supports_extrusion_cali()) {
else {
obj->command_extrusion_cali_set(vt_tray, "", "", k, n);
}
}
@@ -843,7 +817,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event)
;
}
if (obj->supports_extrusion_cali() && obj->cali_version >= 0) {
if (obj->cali_version >= 0) {
PACalibIndexInfo select_index_info;
select_index_info.tray_id = cali_tray_id;
select_index_info.ams_id = ams_id;
@@ -862,7 +836,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event)
CalibUtils::select_PA_calib_result(select_index_info);
}
else if (obj->supports_extrusion_cali()) {
else {
obj->command_extrusion_cali_set(cali_tray_id, "", "", k, n);
}
}
@@ -958,12 +932,7 @@ bool AMSMaterialsSetting::is_virtual_tray()
void AMSMaterialsSetting::update_widgets()
{
if (obj && !obj->supports_extrusion_cali()) {
// No printer-side K/N records: do not offer them.
m_panel_normal->Show();
m_panel_kn->Hide();
}
else if (obj && obj->get_printer_series() == PrinterSeries::SERIES_X1 && obj->cali_version <= -1) {
if (obj && obj->get_printer_series() == PrinterSeries::SERIES_X1 && obj->cali_version <= -1) {
// Low version firmware does not display k value
m_panel_kn->Hide();
}
@@ -1024,9 +993,6 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi
m_input_k_val->GetTextCtrl()->SetValue(k);
m_input_n_val->GetTextCtrl()->SetValue(n);
// Tray values are re-supplied by every caller; clear so a previous popup cannot leak in.
m_input_nozzle_min->GetTextCtrl()->SetValue(wxEmptyString);
m_input_nozzle_max->GetTextCtrl()->SetValue(wxEmptyString);
wxArrayString filament_items;
wxString bambu_filament_name;
@@ -1046,18 +1012,18 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi
float machine_diameter = obj->GetExtderSystem()->GetNozzleDiameter(0);
if (machine_diameter == 0.0f && preset_bundle) {
const ConfigOption *opt = preset_bundle->printers.get_selected_preset().config.option("nozzle_diameter");
if (opt) machine_diameter = static_cast<const ConfigOptionFloats *>(opt)->values[0];
if (opt) {
const auto &nd = static_cast<const ConfigOptionFloats *>(opt)->values;
if (!nd.empty()) machine_diameter = nd.size() > 1 ? nd[1] : nd[0];
}
}
stream << std::fixed << std::setprecision(1) << machine_diameter;
std::string nozzle_diameter_str = stream.str();
// OrcaSonar's model id is optional, so the device model alone can resolve to nothing;
// the helper falls back to the selected profile so the dropdown is never empty.
const std::string filament_printer_model = resolve_filament_printer_model(obj->printer_type, preset_bundle);
if (preset_bundle && !filament_printer_model.empty()) {
if (preset_bundle) {
BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size();
for (Preset *filament_it : preset_bundle->get_filament_presets_for_machine(
filament_printer_model, nozzle_diameter_str, obj->is_support_user_preset)) {
DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str, obj->is_support_user_preset)) {
if (!filament_id_set.insert(filament_it->filament_id).second)
continue;
const std::string alias = preset_bundle->filaments.get_preset_alias(*filament_it, true);
@@ -1124,12 +1090,6 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi
else {
m_comboBox_filament->Show();
m_readonly_filament->Hide();
// A printer-set tray carries its own temps; the preset selection only fills
// them when the tray has none.
if (!temp_min.IsEmpty() && temp_min != "0")
m_input_nozzle_min->GetTextCtrl()->SetValue(temp_min);
if (!temp_max.IsEmpty() && temp_max != "0")
m_input_nozzle_max->GetTextCtrl()->SetValue(temp_max);
}
if (obj->cali_version >= 0) {
@@ -1266,12 +1226,7 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi
}
}
if (filament_items.IsEmpty())
BOOST_LOG_TRIVIAL(warning) << "ams_materials_setting: no filament presets for printer model \""
<< filament_printer_model << "\" at nozzle " << nozzle_diameter_str;
m_comboBox_filament->Set(filament_items);
m_comboBox_from_printer = true;
m_comboBox_filament->SetSelection(selection_idx);
post_select_event(selection_idx);
@@ -1279,6 +1234,9 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi
m_comboBox_filament->SetValue(wxEmptyString);
}
// Set the flag whether to open the filament setting dialog from the device page
m_comboBox_filament->SetClientData(new int(1));
update();
Layout();
Fit();
@@ -1322,53 +1280,53 @@ int AMSMaterialsSetting::get_filament_variant_index(const Preset &filament, cons
void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt)
{
// True for the popup's own initial selection: the dialog pre-filled the tray's
// temps, so the matching preset must not overwrite them.
const bool initial_printer_selection = m_comboBox_from_printer;
// Get the flag whether to open the filament setting dialog from the device page
int* from_printer = static_cast<int*>(m_comboBox_filament->GetClientData());
m_filament_type = "";
PresetBundle* preset_bundle = wxGetApp().preset_bundle;
std::string filament_printer_model;
if (preset_bundle) {
std::ostringstream stream;
if (obj) {
// Use the selected profile's nozzle diameter until the connected device reports one.
// Defensive: this dialog is opened only from StatusPanel (BBL-only) today, so the fallback fires
// only during the brief BBL startup window before firmware reports nozzle info. Without this,
// the "0.0" lookup string returns an empty set and filament lookup yields no results.
float machine_diameter = obj->GetExtderSystem()->GetNozzleDiameter(0);
if (machine_diameter == 0.0f) {
const ConfigOption *opt = preset_bundle->printers.get_selected_preset().config.option("nozzle_diameter");
if (opt) machine_diameter = static_cast<const ConfigOptionFloats *>(opt)->values[0];
if (opt) {
const auto &nd = static_cast<const ConfigOptionFloats *>(opt)->values;
if (!nd.empty()) machine_diameter = nd.size() > 1 ? nd[1] : nd[0];
}
}
stream << std::fixed << std::setprecision(1) << machine_diameter;
filament_printer_model = resolve_filament_printer_model(obj->printer_type, preset_bundle);
}
std::string nozzle_diameter_str = stream.str();
// Resolve the selection against the same list Popup() built the dropdown from, so the two
// halves of the dialog cannot disagree about which filaments this machine can use.
const std::string selected = m_comboBox_filament->GetValue().ToStdString();
if (!selected.empty() && !filament_printer_model.empty()) {
if (!selected.empty()) {
const std::string filament_id = map_filament_items[selected].filament_id;
for (Preset *it : preset_bundle->get_filament_presets_for_machine(
filament_printer_model, nozzle_diameter_str, obj->is_support_user_preset)) {
DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str, obj->is_support_user_preset)) {
if (it->filament_id != filament_id)
continue;
if (!initial_printer_selection) {
// ) if nozzle_temperature_range is found
const int variant_index = get_filament_variant_index(*it, nozzle_diameter_str);
ConfigOption* opt_min = it->config.option("nozzle_temperature_range_low");
if (opt_min) {
ConfigOptionInts* opt_min_ints = dynamic_cast<ConfigOptionInts*>(opt_min);
if (opt_min_ints) {
wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(variant_index));
m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min);
}
// ) if nozzle_temperature_range is found
const int variant_index = get_filament_variant_index(*it, nozzle_diameter_str);
ConfigOption* opt_min = it->config.option("nozzle_temperature_range_low");
if (opt_min) {
ConfigOptionInts* opt_min_ints = dynamic_cast<ConfigOptionInts*>(opt_min);
if (opt_min_ints) {
wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(variant_index));
m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min);
}
ConfigOption* opt_max = it->config.option("nozzle_temperature_range_high");
if (opt_max) {
ConfigOptionInts* opt_max_ints = dynamic_cast<ConfigOptionInts*>(opt_max);
if (opt_max_ints) {
wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(variant_index));
m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max);
}
}
ConfigOption* opt_max = it->config.option("nozzle_temperature_range_high");
if (opt_max) {
ConfigOptionInts* opt_max_ints = dynamic_cast<ConfigOptionInts*>(opt_max);
if (opt_max_ints) {
wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(variant_index));
m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max);
}
}
ConfigOption* opt_type = it->config.option("filament_type");
@@ -1407,16 +1365,13 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt)
m_button_confirm->Disable(); // ORCA No need to change style
m_comboBox_cali_result->Clear();
m_comboBox_cali_result->SetValue(wxEmptyString);
if (!initial_printer_selection) {
m_input_k_val->GetTextCtrl()->SetValue(wxEmptyString);
m_input_n_val->GetTextCtrl()->SetValue(wxEmptyString);
}
m_comboBox_from_printer = false;
m_input_k_val->GetTextCtrl()->SetValue(wxEmptyString);
m_input_n_val->GetTextCtrl()->SetValue(wxEmptyString);
m_comboBox_filament->SetClientData(new int(0));
return;
}
else {
if (!m_view_only)
m_button_confirm->Enable(true); // ORCA No need to change style
m_button_confirm->Enable(true); // ORCA No need to change style
}
//filament id
@@ -1440,9 +1395,6 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt)
}
}
if (!ams_filament_id.empty())
m_clr_picker->is_empty(false);
wxArrayString items;
m_pa_profile_items.clear();
m_comboBox_cali_result->SetValue(wxEmptyString);
@@ -1498,7 +1450,7 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt)
m_comboBox_cali_result->Set(items);
if (ams_id == VIRTUAL_TRAY_MAIN_ID || ams_id == VIRTUAL_TRAY_DEPUTY_ID) {
if (initial_printer_selection) {
if (from_printer && (*from_printer == 1)) {
for (auto slot : obj->vt_slot) {
if (slot.id == std::to_string(ams_id))
cali_select_idx = CalibUtils::get_selected_calib_idx(m_pa_profile_items, slot.cali_idx);
@@ -1515,11 +1467,10 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt)
}
}
else {
if (initial_printer_selection) {
if (from_printer && (*from_printer == 1)) {
DevAmsTray* selected_tray = this->obj->GetFilaSystem()->GetAmsTray(std::to_string(ams_id), std::to_string(slot_id));
if (!selected_tray)
{
m_comboBox_from_printer = false;
return;
}
@@ -1550,7 +1501,7 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt)
else {
if (!ams_filament_id.empty()) {
//m_input_k_val->GetTextCtrl()->SetValue("0.00");
m_input_k_val->Enable(!m_view_only);
m_input_k_val->Enable(true);
}
else {
//m_input_k_val->GetTextCtrl()->SetValue("0.00");
@@ -1558,7 +1509,7 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt)
}
}
m_comboBox_from_printer = false;
m_comboBox_filament->SetClientData(new int(0));
}
void AMSMaterialsSetting::on_dpi_changed(const wxRect &suggested_rect)
+1 -4
View File
@@ -138,7 +138,7 @@ public:
std::string ams_filament_id;
std::string ams_setting_id;
bool m_is_third = false;
bool m_is_third;
// Orca: view-only mode (laser/cut). When set, the dialog is inspectable but every
// editing control is disabled and no command is sent.
bool m_view_only = false;
@@ -200,9 +200,6 @@ protected:
wxStaticText* m_n_param;
TextInput* m_input_n_val;
int m_filament_selection;
// True while the popup's initial, printer-driven selection is being handled; it
// keeps that selection from overwriting the tray's own temps with preset temps.
bool m_comboBox_from_printer = false;
int m_pa_cali_select_id = 0;
+4 -7
View File
@@ -530,8 +530,7 @@ void AMSSetting::on_insert_material_read(wxCommandEvent &event)
bool tray_read_opt = m_checkbox_Insert_material_auto_read->GetValue();
bool remain_opt = m_checkbox_remain->GetValue();
if (m_obj->command_ams_user_settings(start_read_opt, tray_read_opt, remain_opt) != 0)
UpdateByObj(m_obj);
m_obj->command_ams_user_settings(start_read_opt, tray_read_opt, remain_opt);
m_sizer_Insert_material_tip_inline->Layout();
Layout();
@@ -557,8 +556,7 @@ void AMSSetting::on_starting_read(wxCommandEvent &event)
bool tray_read_opt = m_checkbox_Insert_material_auto_read->GetValue();
bool remain_opt = m_checkbox_remain->GetValue();
if (m_obj->command_ams_user_settings(start_read_opt, tray_read_opt, remain_opt) != 0)
UpdateByObj(m_obj);
m_obj->command_ams_user_settings(start_read_opt, tray_read_opt, remain_opt);
m_sizer_starting_tip_inline->Layout();
Layout();
@@ -572,8 +570,7 @@ void AMSSetting::on_remain(wxCommandEvent& event)
bool start_read_opt = m_checkbox_starting_auto_read->GetValue();
bool tray_read_opt = m_checkbox_Insert_material_auto_read->GetValue();
bool remain_opt = m_checkbox_remain->GetValue();
if (m_obj->command_ams_user_settings(start_read_opt, tray_read_opt, remain_opt) != 0)
UpdateByObj(m_obj);
m_obj->command_ams_user_settings(start_read_opt, tray_read_opt, remain_opt);
event.Skip();
}
@@ -809,4 +806,4 @@ void AMSSettingArrangeAMSOrder::OnBtnRearrangeClicked(wxCommandEvent& event)
}
#endif
}} // namespace Slic3r::GUI
}} // namespace Slic3r::GUI
-2
View File
@@ -17,7 +17,6 @@
#include <wx/dataview.h>
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/dataview.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
@@ -30,7 +29,6 @@
#include <wx/dialog.h>
#include <wx/popupwin.h>
#include <wx/spinctrl.h>
#include <wx/artprov.h>
#include <wx/wrapsizer.h>
#include "GUI_Utils.hpp"
-3
View File
@@ -19,20 +19,17 @@
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/sizer.h>
#include <wx/grid.h>
#include <wx/dataview.h>
#include <wx/panel.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/bmpbuttn.h>
#include <wx/button.h>
#include <wx/statbox.h>
#include <wx/tglbtn.h>
#include <wx/popupwin.h>
#include <wx/spinctrl.h>
#include <wx/artprov.h>
#include <map>
-3
View File
@@ -28,7 +28,6 @@
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/sizer.h>
#include <wx/grid.h>
#include <wx/dataview.h>
#include <wx/panel.h>
@@ -36,14 +35,12 @@
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/bmpbuttn.h>
#include <wx/button.h>
#include <wx/gbsizer.h>
#include <wx/statbox.h>
#include <wx/tglbtn.h>
#include <wx/popupwin.h>
#include <wx/spinctrl.h>
#include <wx/artprov.h>
#include <wx/webrequest.h>
#include <map>
#include <vector>
-1
View File
@@ -8,7 +8,6 @@
#include <memory>
#include <string>
#include <functional>
#include <string>
#include "Jobs/ProgressIndicator.hpp"
-1
View File
@@ -10,7 +10,6 @@
#include <memory>
#include <string>
#include <functional>
#include <string>
#include <wx/string.h>
#include "Jobs/ProgressIndicator.hpp"
-1
View File
@@ -9,7 +9,6 @@
#include <memory>
#include <string>
#include <functional>
#include <string>
#include <wx/hyperlink.h>
#include "Jobs/ProgressIndicator.hpp"
-1
View File
@@ -9,7 +9,6 @@
#include <memory>
#include <string>
#include <functional>
#include <string>
#include <wx/hyperlink.h>
#include "Jobs/ProgressIndicator.hpp"
@@ -18,7 +18,6 @@
#include <wx/string.h>
#include <wx/toplevel.h>
#include <wx/timer.h>
#include "Widgets/Button.hpp"
#include "CapsuleButton.hpp"
namespace Slic3r::GUI { struct IntEvent; }
-1
View File
@@ -46,7 +46,6 @@
#include "libslic3r/Model.hpp"
#include "libslic3r/Polygon.hpp"
#include "MainFrame.hpp"
#include "GUI_App.hpp"
#include "Plater.hpp"
#include "Jobs/BoostThreadWorker.hpp"
#include "Jobs/PlaterWorker.hpp"
-1
View File
@@ -29,7 +29,6 @@
#include "slic3r/GUI/GUI_App.hpp"
#include "slic3r/GUI/I18N.hpp"
#include "slic3r/GUI/format.hpp"
#include "slic3r/Utils/Bonjour.hpp"
#include "slic3r/GUI/Widgets/DialogButtons.hpp"
+1 -8
View File
@@ -10,7 +10,6 @@
#include "Widgets/DialogButtons.hpp"
#include "libslic3r/Config.hpp"
#include <boost/log/trivial.hpp>
#include <slic3r/GUI/DeviceManager.hpp>
#include <string>
#include <vector>
#include "libslic3r/calib.hpp"
@@ -746,15 +745,9 @@ wxArrayString NewCalibrationHistoryDialog::get_all_filaments(const MachineObject
std::string nozzle_diameter_str = stream.str();
if (preset_bundle) {
// OrcaSonar's model id is optional; the helper falls back to the selected profile
// so the list is never empty.
const std::string filament_printer_model = resolve_filament_printer_model(obj->printer_type, preset_bundle);
if (filament_printer_model.empty())
return filament_items;
BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size();
for (Preset *filament_it : preset_bundle->get_filament_presets_for_machine(
filament_printer_model, nozzle_diameter_str, obj->is_support_user_preset)) {
DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str, obj->is_support_user_preset)) {
if (!filament_id_set.insert(filament_it->filament_id).second)
continue;
const std::string alias = preset_bundle->filaments.get_preset_alias(*filament_it, true);

Some files were not shown because too many files have changed in this diff Show More