Compare commits

...

11 Commits

Author SHA1 Message Date
Robert J Audas
1717c0f263 Fix brim first layer speed (#14616)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-06 19:04:32 -03:00
Ian Bassi
3bee58fcab Spanish Fuzzy Skin standarized (#14622) 2026-07-06 14:14:34 -03:00
Ian Bassi
6b7cfd71b1 Spanish update + Gettext for all (#14620) 2026-07-06 13:32:47 -03:00
sharanchius
ab6ec672b2 hms files translation to Lithuanian (#14578) 2026-07-06 12:51:29 -03:00
raistlin7447
29f31b9b38 fff_print: a maintainable testing framework (proposal + coverage) (#14426)
* fix: initialize Print::m_isBBLPrinter

Built outside the GUI/CLI (headless tests, embedded use) the member was read
uninitialized: is_BBL_printer()/wipe_tower_type() feed it into ToolOrdering,
which then non-deterministically dropped per-feature filament assignments.
Default it to false, the value the GUI and CLI already assign for non-Bambu
printers.

* docs(test): add the fff_print testing contract

tests/fff_print/README.md codifies how the suite is organized: one file per
subsystem (each owning both in-memory and emitted-G-code assertions), flat
behavioral test names with a single [Subsystem] tag, a robust-tests guide,
the shared helpers, and an add-a-test checklist. Linked from tests/CLAUDE.md.

* test(fff_print): reorganize the suite to the contract and add coverage

Bring every subsystem into one file per the README: rename the test_data
harness to test_helpers; consolidate skirt/brim; split multi-filament and
cooling into their own files; disperse the test_printgcode grab-bag and the
end-to-end smoke scenario into focused tests; fold test_gcode into
test_gcodewriter. Standardize names and tags, align cube tests on the cube()
helper, and de-qualify the flagship files.

New coverage: multi-filament per-feature and per-object routing; a skirt/brim
behavior matrix (the #14333 rework, including brim ears, with regression
coverage for #14319 and #14366); resolved extrusion-width and config
comments; custom-G-code placeholders; fan control and speed-marker
consumption.

Re-enable three slice tests previously tagged [NotWorking]: the clipper
"Coordinate outside allowed range" error that disabled them was specific to a
past CI runner environment and no longer reproduces.

* test(fff_print): tag arm64-flaky skirt/brim tests NotWorking

Four skirt/brim slice tests intermittently throw ClipperLib's "Coordinate
outside allowed range" on the macOS and Windows arm64 CI toolchains (an FP
divergence, not a slicing bug; see PR #14207). Linux x86_64 and aarch64 are
unaffected. Tag them [NotWorking] so ctest -LE NotWorking skips them.

* test(fff_print): re-enable the arm64 skirt/brim tests

These were tagged [NotWorking] as a stopgap when myfork's daily-driver build
combined them with the cross-platform CI on a base that predated upstream's
m_origin fix (99dea01cc3). With upstream merged in, Print::m_origin is
initialized and the "Coordinate outside allowed range" throw is gone, so the
tests pass on macOS/Windows arm64. Drop the tags.
2026-07-06 22:24:24 +08:00
SoftFever
a1ff45284c Fix version was not properly updated on non windows OS (#14617)
Fixed an issue where on non-Windows systems, the version was not properly written to the appconfig.
2026-07-06 22:16:28 +08:00
yw4z
cc89416055 Improve layout of transform gizmos (#14410)
* init

* add tooltips
2026-07-06 14:34:36 +03:00
Gabriel Monteiro
fd80ded5a8 fix(gui): startup crash in clang/LLVM builds, null pointer UB in create_scaled_bitmap (#14521)
fix(gui): avoid null-pointer UB in create_scaled_bitmap with win == nullptr

create_scaled_bitmap() documents that win may be nullptr, but called
win->FromDIP() on it. Calling a member function through a null pointer
is undefined behavior: clang assumes `this` is non-null and deletes the
subsequent `win ?` null check added in #13117, turning the fallback
branch into an unconditional virtual call through a null vtable.
This crashed LLVM/clang-cl builds at startup (access violation reading
0x0 in BBLTopbar creation); MSVC builds were unaffected by luck.

Use the static, null-safe wxWindow::FromDIP(x, win) overload instead,
which falls back to the primary display DPI. Behavior is unchanged for
non-null windows.
2026-07-06 11:28:03 +08:00
Kiss Lorand
db2f861a11 Fix painted mouse-ear brims snapping to wrong location (#14606)
Fix painted mouse-ear brims moving to incorrect locations when Brim follows compensated outline is enabled.
2026-07-06 09:28:41 +08:00
raistlin7447
2860353b9f fix: multi-user slicing crash on shared temp dir (#14607)
On Linux every account shares /tmp, but slicing builds temp paths there under
fixed, app-owned names via temporary_dir() (model backups, STEP import,
part-skip). The first user to slice creates and owns those dirs, so the next
user cannot write under them and slicing crashes with "No such file or
directory".

Tag the app temp root with the user id at startup (<temp>/orcaslicer_<uid>)
so every temporary_dir() consumer is isolated at once. The id stays at the
top level of the world-writable system temp so each user's dir is created
directly there; a shared parent dir would be owned by whichever user made it
first. The root is pre-created because STEP import writes into it directly.
Windows keeps the plain temp dir since it is already per-user.

Fixes #10108. Same root cause as #5969.
2026-07-06 09:18:04 +08:00
Alexandre Folle de Menezes
218ec29d74 Improve and complement ptBR translation (#14470)
Co-authored-by: yw4z <ywsyildiz@gmail.com>
2026-07-05 21:29:46 +03:00
60 changed files with 93784 additions and 11090 deletions

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-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"
@@ -388,27 +388,30 @@ msgstr ""
msgid "Reset rotation"
msgstr ""
msgid "Object coordinates"
msgid "World"
msgstr ""
msgid "World coordinates"
msgid "Object"
msgstr ""
msgid "Translate(Relative)"
msgid "Part"
msgstr ""
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr ""
msgid "Rotate (absolute)"
msgstr ""
msgid "Reset current rotation to real zeros."
msgstr ""
msgid "Part coordinates"
msgstr ""
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr ""
@@ -512,12 +515,6 @@ msgstr ""
msgid "Spacing"
msgstr ""
msgid "Part"
msgstr ""
msgid "Object"
msgstr ""
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1820,23 +1817,30 @@ msgstr ""
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr ""
msgid "Cloud sync conflict:"
msgstr ""
#, possible-c-format, possible-boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1845,6 +1849,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, possible-c-format, possible-boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1912,7 +1922,8 @@ msgstr ""
msgid "Sync user presets"
msgstr ""
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, possible-c-format, possible-boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, possible-c-format, possible-boost-format
@@ -2122,6 +2133,9 @@ msgstr ""
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr ""
@@ -5004,6 +5018,9 @@ msgstr ""
msgid "Outline"
msgstr ""
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5046,7 +5063,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 ""
@@ -7665,6 +7682,35 @@ msgstr ""
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr ""
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr ""
@@ -7677,6 +7723,12 @@ msgid ""
"Lower values produce smaller files but lose more geometric detail; higher values preserve more detail at the cost of larger files."
msgstr ""
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr ""
@@ -11696,6 +11748,18 @@ msgstr ""
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr ""
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr ""
@@ -11848,21 +11912,25 @@ msgid ""
"3. Enter the triplets of PA values, Flow and Accelerations in the text box here and save your filament profile."
msgstr ""
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgstr ""
msgid "Pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
@@ -12219,6 +12287,22 @@ msgstr ""
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr ""
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr ""
@@ -14785,6 +14869,14 @@ msgstr ""
msgid "Rotate the polyhole every layer."
msgstr ""
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr ""
@@ -17973,6 +18065,12 @@ msgstr ""
msgid "Calculating, please wait..."
msgstr ""
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: 2025-03-15 10:55+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -402,27 +402,30 @@ msgstr "Restableix la Posició"
msgid "Reset rotation"
msgstr "Reinicialitza la rotació"
msgid "Object coordinates"
msgstr "Coordenades de l'objecte"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Coordenades cartesianes"
msgid "Object"
msgstr "Objecte"
msgid "Translate(Relative)"
msgstr "Trasllada (relatiu)"
msgid "Part"
msgstr "Peça"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Restableix la rotació actual al valor d'quan s'ha obert l'eina de rotació."
msgid "Rotate (absolute)"
msgstr "Gira (absolut)"
msgid "Reset current rotation to real zeros."
msgstr "Restableix la rotació actual a zeros reals."
msgid "Part coordinates"
msgstr "Coordenades de la part"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Mida"
@@ -526,12 +529,6 @@ msgstr ""
msgid "Spacing"
msgstr "Espaiat"
msgid "Part"
msgstr "Peça"
msgid "Object"
msgstr "Objecte"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1879,23 +1876,30 @@ msgstr "Obrir Projecte"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "La versió de l'Orca Slicer és massa antiga i s'ha d'actualitzar a la versió més recent abans que es pugui utilitzar amb normalitat"
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1904,6 +1908,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1978,7 +1988,8 @@ msgstr "El nombre de perfils d'usuari emmagatzemats a memòria cau al núvol ha
msgid "Sync user presets"
msgstr "Sincronitzar perfils d'usuari"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
@@ -2200,6 +2211,9 @@ msgstr "Cub d'Orca"
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Prova de tolerància d'Orca"
@@ -5266,6 +5280,9 @@ msgstr "Voladissos"
msgid "Outline"
msgstr "Contorn"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5310,7 +5327,7 @@ msgid "Size:"
msgstr "Mida:"
# TODO: Review, changed by lang refactor. PR 14254
#, 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 gcode a la capa %d, Z = %.2lfmm. Si us plau, separeu els objectes conflictius més lluny ( %s <-> %s )."
@@ -8057,6 +8074,35 @@ msgstr "Mostra opcions en importar fitxers STEP"
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "Si s'activa, apareixerà un diàleg de configuració de paràmetres durant la importació de fitxers STEP."
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr "Nivell de qualitat per a l'exportació Draco"
@@ -8072,6 +8118,12 @@ msgstr ""
"0 = compressió sense pèrdua (la geometria es preserva a plena precisió). Els valors amb pèrdua vàlids van de 8 a 30.\n"
"Valors més baixos produeixen fitxers més petits però perden més detall geomètric; valors més alts preserven més detall a costa de fitxers més grans."
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Perfil"
@@ -12394,6 +12446,18 @@ msgstr "Llindar de perímetres petits"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "Això estableix el llindar per a la longitud perimetral petita. El llindar predeterminat és de 0mm"
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "Ordre d'impressió de perímetres"
@@ -12579,25 +12643,26 @@ msgstr ""
"2. Anoteu el valor de PA òptim per a cada velocitat i acceleració del cabal volumètric. Podeu trobar el número de flux seleccionant el flux al desplegable de l'esquema de colors i moveu el control lliscant horitzontal per sobre de les línies del patró PA. El número ha de ser visible a la part inferior de la pàgina. El valor de PA ideal hauria de ser decreixent com més gran sigui el cabal volumètric. Si no és així, confirmeu que la vostra extrusora funciona correctament. Com més lent i amb menys acceleració imprimiu, més gran serà el rang de valors de PA acceptables. Si no hi ha cap diferència visible, utilitzeu el valor PA de la prova més ràpida.\n"
"3. Introduïu els triplets dels valors de PA, flux i acceleracions al quadre de text aquí i deseu el vostre perfil de filament."
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "Habilita l'avanç de pressió adaptativa per als voladissos (beta)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid "Pressure advance for bridges"
msgstr "Avanç de pressió per als ponts"
msgid ""
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"Valor d'avanç de pressió per als ponts. Establiu a 0 per desactivar.\n"
"\n"
" Un valor de PA més baix quan s'imprimeixen ponts ajuda a reduir l'aparició d'una lleugera extrusió immediatament després dels ponts. Això és causat per la caiguda de pressió al broquet quan s'imprimeix a l'aire i un PA més baix ajuda a contrarestar-ho."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Amplada de línia predeterminada si altres amplades de línia estan definides com a 0. Si s'expressa en %, es calcularà sobre el diàmetre del broquet."
@@ -12981,6 +13046,22 @@ msgstr "Direcció de farciment sòlid"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "Angle per al patró de farciment sòlid, que controla l'inici o la direcció principal de la línia"
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Densitat de farciment poc dens"
@@ -15778,6 +15859,14 @@ msgstr "Gir del poliforat"
msgid "Rotate the polyhole every layer."
msgstr "Rotar el poliforat a cada capa."
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "Mida Miniatures al Codi-G"
@@ -19146,6 +19235,12 @@ msgstr "Nombre de cares triangulars"
msgid "Calculating, please wait..."
msgstr "Calculant, espereu..."
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -19551,6 +19646,36 @@ 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ó?"
#~ msgid "Object coordinates"
#~ msgstr "Coordenades de l'objecte"
#~ msgid "World coordinates"
#~ msgstr "Coordenades cartesianes"
#~ msgid "Translate(Relative)"
#~ msgstr "Trasllada (relatiu)"
#~ msgid "Rotate (absolute)"
#~ msgstr "Gira (absolut)"
#~ msgid "Part coordinates"
#~ msgstr "Coordenades de la part"
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Habilita l'avanç de pressió adaptativa per als voladissos (beta)"
#~ msgid "Pressure advance for bridges"
#~ msgstr "Avanç de pressió per als ponts"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "Valor d'avanç de pressió per als ponts. Establiu a 0 per desactivar.\n"
#~ "\n"
#~ " Un valor de PA més baix quan s'imprimeixen ponts ajuda a reduir l'aparició d'una lleugera extrusió immediatament després dels ponts. Això és causat per la caiguda de pressió al broquet quan s'imprimeix a l'aire i un PA més baix ajuda a contrarestar-ho."
#~ msgid "Filament Sync Options"
#~ msgstr "Opcions de sincronització de filament"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: Jakub Hencl\n"
"Language-Team: \n"
@@ -397,27 +397,30 @@ msgstr "Obnovit pozici"
msgid "Reset rotation"
msgstr "Resetovat rotaci"
msgid "Object coordinates"
msgstr "Souřadnice objektu"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Světové souřadnice"
msgid "Object"
msgstr "Objekt"
msgid "Translate(Relative)"
msgstr "Přesunout (relativně)"
msgid "Part"
msgstr "Díl"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Obnovit aktuální rotaci na hodnotu při otevření nástroje pro rotaci."
msgid "Rotate (absolute)"
msgstr "Otočit (absolutně)"
msgid "Reset current rotation to real zeros."
msgstr "Obnovit aktuální rotaci na skutečné nuly."
msgid "Part coordinates"
msgstr "Souřadnice části"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Velikost"
@@ -521,12 +524,6 @@ msgstr "Mezera"
msgid "Spacing"
msgstr "Rozestup"
msgid "Part"
msgstr "Díl"
msgid "Object"
msgstr "Objekt"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1871,23 +1868,30 @@ msgstr "Otevřít projekt"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "Verze Orca Slicer je příliš stará a je nutné ji aktualizovat na nejnovější verzi, aby ji bylo možné používat."
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1896,6 +1900,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1976,8 +1986,9 @@ msgstr "Počet uživatelských předvoleb uložených v cloudu překročil povol
msgid "Sync user presets"
msgstr "Synchronizovat uživatelské předvolby"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr "Obsah předvolby je příliš velký pro synchronizaci do cloudu (přesahuje 1 MB). Zmenšete velikost předvolby odstraněním vlastních nastavení nebo ji používejte pouze lokálně."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
msgid "%s updated from %s to %s"
@@ -2197,6 +2208,9 @@ msgstr ""
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr ""
@@ -5263,6 +5277,9 @@ msgstr "Převisy"
msgid "Outline"
msgstr "Obrys"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5306,7 +5323,7 @@ msgstr "Objem:"
msgid "Size:"
msgstr "Velikost:"
#, 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-kódu ve vrstvě %d, Z = %.2lf mm. Oddělte prosím konfliktní objekty více od sebe (%s <-> %s)."
@@ -8054,6 +8071,35 @@ msgstr "Zobrazit možnosti při importu souboru STEP"
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "Pokud je povoleno, během importu souboru STEP se zobrazí dialog nastavení parametrů."
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr "Úroveň kvality pro export Draco"
@@ -8069,6 +8115,12 @@ msgstr ""
"0 = bezztrátová komprese (geometrie je zachována v plné přesnosti). Platné ztrátové hodnoty jsou v rozsahu 8 až 30.\n"
"Nižší hodnoty vytvářejí menší soubory, ale ztrácí více geometrických detailů; vyšší hodnoty zachovávají více detailů za cenu větších souborů."
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Předvolba"
@@ -12398,6 +12450,18 @@ msgstr "Práh malých obvodů"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "Tímto se nastavuje práh délky malého obvodu. Výchozí práh je 0 mm."
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "Pořadí tisku stěn"
@@ -12586,25 +12650,26 @@ msgstr ""
"2. Poznamenejte si optimální hodnotu PA pro každou objemovou rychlost průtoku a zrychlení. Hodnotu průtoku zjistíte výběrem „Flow“ v rozbalovací nabídce barevného schématu a posunutím vodorovného posuvníku nad čárami PA vzoru. Číslo by mělo být viditelné dole na stránce. Ideální hodnota PA by měla s rostoucím objemovým průtokem klesat. Pokud tomu tak není, ověřte, že extruder funguje správně. Čím pomaleji a s menším zrychlením tisknete, tím větší je rozsah přijatelných hodnot PA. Pokud není vidět žádný rozdíl, použijte hodnotu PA z rychlejšího testu.\n"
"3. Zadejte trojice hodnot PA, průtoku a zrychlení do textového pole zde a uložte profil filamentu."
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "Povolit adaptivní pressure advance pro převisy (beta)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid "Pressure advance for bridges"
msgstr "Pressure advance pro mosty"
msgid ""
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"Hodnota Pressure advance pro mosty. Nastavte na 0 pro vypnutí.\n"
"\n"
"Nižší hodnota PA při tisku mostů pomáhá omezit výskyt mírné podextruze ihned po mostech. To je způsobeno poklesem tlaku v trysce při tisku do vzduchu a nižší PA tomu pomáhá předcházet."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Výchozí šířka čáry, pokud jsou ostatní šířky čáry nastaveny na 0. Pokud je zadáno v %, bude vypočteno vůči průměru trysky."
@@ -12987,6 +13052,22 @@ msgstr "Směr plného vyplnění"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "Úhel pro vzor plného výplně, který určuje počáteční nebo hlavní směr čáry."
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Hustota řídké výplně"
@@ -15819,6 +15900,14 @@ msgstr "Zkroucení polyotvoru"
msgid "Rotate the polyhole every layer."
msgstr "Otočit polyotvor každou vrstvu."
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "Náhledy G-code"
@@ -19180,6 +19269,12 @@ msgstr ""
msgid "Calculating, please wait..."
msgstr ""
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -19585,6 +19680,39 @@ msgstr ""
"Zamezte kroucení\n"
"Víte, že při tisku materiálů náchylných ke kroucení, jako je ABS, může vhodné zvýšení teploty vyhřívané desky snížit pravděpodobnost kroucení?"
#~ msgid "Object coordinates"
#~ msgstr "Souřadnice objektu"
#~ msgid "World coordinates"
#~ msgstr "Světové souřadnice"
#~ msgid "Translate(Relative)"
#~ msgstr "Přesunout (relativně)"
#~ msgid "Rotate (absolute)"
#~ msgstr "Otočit (absolutně)"
#~ msgid "Part coordinates"
#~ msgstr "Souřadnice části"
#~ msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#~ msgstr "Obsah předvolby je příliš velký pro synchronizaci do cloudu (přesahuje 1 MB). Zmenšete velikost předvolby odstraněním vlastních nastavení nebo ji používejte pouze lokálně."
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Povolit adaptivní pressure advance pro převisy (beta)"
#~ msgid "Pressure advance for bridges"
#~ msgstr "Pressure advance pro mosty"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "Hodnota Pressure advance pro mosty. Nastavte na 0 pro vypnutí.\n"
#~ "\n"
#~ "Nižší hodnota PA při tisku mostů pomáhá omezit výskyt mírné podextruze ihned po mostech. To je způsobeno poklesem tlaku v trysce při tisku do vzduchu a nižší PA tomu pomáhá předcházet."
#~ msgid "Filament Sync Options"
#~ msgstr "Možnosti synchronizace filamentů"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: Heiko Liebscher <hliebschergmail.com>\n"
"Language-Team: \n"
@@ -397,27 +397,30 @@ msgstr "Position zurücksetzen"
msgid "Reset rotation"
msgstr "Rotation zurücksetzen"
msgid "Object coordinates"
msgstr "Objektkoordinaten"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Weltkoordinaten"
msgid "Object"
msgstr "Objekt"
msgid "Translate(Relative)"
msgstr "Verschieben (relativ)"
msgid "Part"
msgstr "Teil"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Setze die aktuelle Rotation auf den Wert zurück, als das Rotationswerkzeug geöffnet wurde."
msgid "Rotate (absolute)"
msgstr "Rotation (absolut)"
msgid "Reset current rotation to real zeros."
msgstr "Setze die aktuelle Rotation auf die realen Nullen zurück."
msgid "Part coordinates"
msgstr "Teile Koordinaten"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Größe"
@@ -521,12 +524,6 @@ msgstr "Spalt"
msgid "Spacing"
msgstr "Abstand"
msgid "Part"
msgstr "Teil"
msgid "Object"
msgstr "Objekt"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1875,33 +1872,32 @@ msgstr "Projekt öffnen"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "Die Version von Orca Slicer ist veraltet und muss auf die neueste Version aktualisiert werden, bevor sie normal verwendet werden kann"
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
"Cloud-Synchronisationskonflikt: Dieses Profil hat eine neuere Version in OrcaCloud.\n"
"Pull lädt die Cloud-Kopie herunter. Force Push überschreibt sie mit Ihrem lokalen Profil."
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"Cloud-Synchronisationskonflikt: Ein Profil mit diesem Namen existiert bereits in OrcaCloud.\n"
"Pull lädt die Cloud-Kopie herunter. Force Push überschreibt sie mit Ihrem lokalen Profil."
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
"Cloud-Synchronisationskonflikt: Ein Profil mit demselben Namen wurde zuvor aus der Cloud gelöscht.\n"
"Delete löscht Ihr lokales Profil. Force Push überschreibt es mit Ihrem lokalen Profil."
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"Cloud-Synchronisationskonflikt: Es gab einen unerwarteten oder nicht identifizierten Profilkonflikt.\n"
"Pull lädt die Cloud-Kopie herunter. Force Push überschreibt sie mit Ihrem lokalen Profil."
msgid ""
"Force push will overwrite the cloud copy with your local preset changes.\n"
@@ -1910,6 +1906,12 @@ msgstr ""
"Force Push überschreibt die Cloud-Kopie mit Ihren lokalen Profiländerungen.\n"
"Möchten Sie fortfahren?"
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr "Cloud-Synchronisationskonflikt lösen"
@@ -1989,7 +1991,8 @@ msgstr "Die Anzahl der im Cloud-Cache gespeicherten Benutzerprofile hat das Limi
msgid "Sync user presets"
msgstr "Benutzerprofile synchronisieren"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
@@ -2210,6 +2213,9 @@ msgstr "Orca Würfel"
msgid "OrcaSliced Combo"
msgstr "OrcaSliced Kombination"
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Orca Toleranz Test"
@@ -5275,6 +5281,9 @@ msgstr "Überhänge"
msgid "Outline"
msgstr "Umriss"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr "Realistische Ansicht"
@@ -5318,7 +5327,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)."
@@ -8069,6 +8078,35 @@ msgstr "Optionen beim Importieren von STEP-Dateien anzeigen"
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "Wenn aktiviert, wird während des Imports von STEP-Dateien ein Dialogfeld "
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr "Qualitätsstufe für den Draco-Export"
@@ -8084,6 +8122,12 @@ msgstr ""
"0 = verlustfreie Kompression (Geometrie wird mit voller Präzision beibehalten). Gültige verlustbehaftete Werte liegen zwischen 8 und 30.\n"
"Niedrigere Werte erzeugen kleinere Dateien, verlieren jedoch mehr geometrische Details; höhere Werte bewahren mehr Details auf Kosten größerer Dateien."
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Profil"
@@ -12512,6 +12556,18 @@ msgstr "Schwelle für kleine Strukturen"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "Dies legt die Schwelle für eine kleine Umfangslänge fest. Der Standardwert für die Schwelle beträgt 0 mm."
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "Anordnung der Wände"
@@ -12700,27 +12756,26 @@ msgstr ""
"2. Notieren Sie den optimalen PA-Wert für jede Volumenfließgeschwindigkeit und Beschleunigung. Sie können die Fließzahl auswählen, indem Sie Fluss ausdem Farbschema-Dropdown auswählen und den horizontalen Schieberegler über den PA-Musterlinien bewegen. Die Zahl sollte am unteren Rand der Seite sichtbar sein. Der ideale PA-Wert sollte abnehmen, je höher die Volumenfließgeschwin-digkeit ist. Wenn dies nicht der Fall ist, bestätigen Sie, dass Ihr Extruder korrekt funktioniert. Je langsamer und mit weniger Beschleunigung Sie drucken, desto größer ist der Bereich der akzeptablen PA-Werte. Wenn kein Unterschied sichtbar ist, verwenden Sie den PA-Wert aus dem schnelleren Test.\n"
"3. Geben Sie die Triplets von PA-Werten, Fluss und Beschleunigungen im Textfeld hier ein und speichern Sie Ihr Filamentprofil."
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "Adaptives PA für Überhänge aktivieren (experimentell)"
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
"Aktivieren Sie adaptives PA auch für Überhänge sowie bei Flussänderungen innerhalb desselben Features. Dies ist eine experimentelle Option, da sie bei ungenau eingestelltem PA-Profil zu Uniformitätsproblemen auf den äußeren Oberflächen vor und nach Überhängen führen kann.\n"
"Nicht kompatibel mit Prusa-Druckern, da diese pausieren, um PA-Änderungen zu verarbeiten, was zu Verzögerungen und Defekten führt."
msgid "Pressure advance for bridges"
msgstr "Pressure Advance für Brücken"
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"Pressure Advance-Wert für Brücken. Auf 0 setzen, um zu deaktivieren.\n"
"\n"
"Ein niedrigerer PA-Wert beim Drucken von Brücken hilft, das Auftreten einer leichten Unterextrusion unmittelbar nach Brücken zu reduzieren. Dies wird durch den Druckabfall in der Düse beim Drucken in der Luft verursacht, und ein niedrigerer PA hilft, dem entgegenzuwirken."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Standardmäßige Linienbreite, wenn andere Linienbreiten auf 0 gesetzt sind. Wenn als Prozentsatz angegeben, wird sie in Bezug auf den Düsendurchmesser berechnet."
@@ -13101,6 +13156,22 @@ msgstr "Richtung des massiven Füllmusters"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "Winkel des massiven Füllmusters, der die Start- oder Hauptrichtung der Linie steuert."
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Fülldichte"
@@ -15956,6 +16027,14 @@ msgstr "Polyhole verdrehen"
msgid "Rotate the polyhole every layer."
msgstr "Polyhole in jeder Schicht drehen."
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "G-Code Vorschaubilder"
@@ -19326,6 +19405,12 @@ msgstr "Anzahl der dreieckigen Facetten"
msgid "Calculating, please wait..."
msgstr "Berechnung läuft, bitte warten..."
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr "Preset-Bündel"
@@ -19736,6 +19821,71 @@ 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?"
#~ msgid "Object coordinates"
#~ msgstr "Objektkoordinaten"
#~ msgid "World coordinates"
#~ msgstr "Weltkoordinaten"
#~ msgid "Translate(Relative)"
#~ msgstr "Verschieben (relativ)"
#~ msgid "Rotate (absolute)"
#~ msgstr "Rotation (absolut)"
#~ msgid "Part coordinates"
#~ msgstr "Teile Koordinaten"
#~ msgid ""
#~ "Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "Cloud-Synchronisationskonflikt: Dieses Profil hat eine neuere Version in OrcaCloud.\n"
#~ "Pull lädt die Cloud-Kopie herunter. Force Push überschreibt sie mit Ihrem lokalen Profil."
#~ msgid ""
#~ "Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "Cloud-Synchronisationskonflikt: Ein Profil mit diesem Namen existiert bereits in OrcaCloud.\n"
#~ "Pull lädt die Cloud-Kopie herunter. Force Push überschreibt sie mit Ihrem lokalen Profil."
#~ msgid ""
#~ "Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
#~ "Delete will delete your local preset. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "Cloud-Synchronisationskonflikt: Ein Profil mit demselben Namen wurde zuvor aus der Cloud gelöscht.\n"
#~ "Delete löscht Ihr lokales Profil. Force Push überschreibt es mit Ihrem lokalen Profil."
#~ msgid ""
#~ "Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "Cloud-Synchronisationskonflikt: Es gab einen unerwarteten oder nicht identifizierten Profilkonflikt.\n"
#~ "Pull lädt die Cloud-Kopie herunter. Force Push überschreibt sie mit Ihrem lokalen Profil."
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Adaptives PA für Überhänge aktivieren (experimentell)"
#~ msgid ""
#~ "Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
#~ "Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
#~ msgstr ""
#~ "Aktivieren Sie adaptives PA auch für Überhänge sowie bei Flussänderungen innerhalb desselben Features. Dies ist eine experimentelle Option, da sie bei ungenau eingestelltem PA-Profil zu Uniformitätsproblemen auf den äußeren Oberflächen vor und nach Überhängen führen kann.\n"
#~ "Nicht kompatibel mit Prusa-Druckern, da diese pausieren, um PA-Änderungen zu verarbeiten, was zu Verzögerungen und Defekten führt."
#~ msgid "Pressure advance for bridges"
#~ msgstr "Pressure Advance für Brücken"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "Pressure Advance-Wert für Brücken. Auf 0 setzen, um zu deaktivieren.\n"
#~ "\n"
#~ "Ein niedrigerer PA-Wert beim Drucken von Brücken hilft, das Auftreten einer leichten Unterextrusion unmittelbar nach Brücken zu reduzieren. Dies wird durch den Druckabfall in der Düse beim Drucken in der Luft verursacht, und ein niedrigerer PA hilft, dem entgegenzuwirken."
#~ msgid "Filament Sync Options"
#~ msgstr "Filament-Synchronisierungsoptionen"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: 2026-06-17 15:44-0300\n"
"Last-Translator: Alexandre Folle de Menezes\n"
"Language-Team: \n"
@@ -384,27 +384,30 @@ msgstr ""
msgid "Reset rotation"
msgstr ""
msgid "Object coordinates"
msgid "World"
msgstr ""
msgid "World coordinates"
msgid "Object"
msgstr ""
msgid "Translate(Relative)"
msgid "Part"
msgstr ""
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr ""
msgid "Rotate (absolute)"
msgstr ""
msgid "Reset current rotation to real zeros."
msgstr ""
msgid "Part coordinates"
msgstr ""
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr ""
@@ -508,12 +511,6 @@ msgstr ""
msgid "Spacing"
msgstr ""
msgid "Part"
msgstr ""
msgid "Object"
msgstr ""
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1816,23 +1813,30 @@ msgstr ""
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr ""
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1841,6 +1845,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1908,7 +1918,8 @@ msgstr ""
msgid "Sync user presets"
msgstr ""
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
@@ -2118,6 +2129,9 @@ msgstr ""
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr ""
@@ -5000,6 +5014,9 @@ msgstr ""
msgid "Outline"
msgstr ""
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5042,7 +5059,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 ""
@@ -7661,6 +7678,35 @@ msgstr ""
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr ""
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr ""
@@ -7673,6 +7719,12 @@ msgid ""
"Lower values produce smaller files but lose more geometric detail; higher values preserve more detail at the cost of larger files."
msgstr ""
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr ""
@@ -11692,6 +11744,18 @@ msgstr ""
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr ""
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr ""
@@ -11844,21 +11908,25 @@ msgid ""
"3. Enter the triplets of PA values, Flow and Accelerations in the text box here and save your filament profile."
msgstr ""
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgstr ""
msgid "Pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
@@ -12215,6 +12283,22 @@ msgstr ""
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr ""
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr ""
@@ -14781,6 +14865,14 @@ msgstr ""
msgid "Rotate the polyhole every layer."
msgstr ""
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr ""
@@ -17969,6 +18061,12 @@ msgstr ""
msgid "Calculating, please wait..."
msgstr ""
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: Ian A. Bassi <>\n"
"Language-Team: \n"
@@ -277,31 +277,31 @@ msgid "Color painting editing"
msgstr "Edición de pintura de colores"
msgid "Paint-on fuzzy skin"
msgstr "Pintar piel difusa"
msgstr "Pintar piel rugosa"
msgid "Add fuzzy skin"
msgstr "Agregar piel difusa"
msgstr "Agregar piel rugosa"
msgid "Remove fuzzy skin"
msgstr "Quitar piel difusa"
msgstr "Quitar piel rugosa"
msgid "Reset selection"
msgstr "Reiniciar selección"
msgid "Warning: Fuzzy skin is disabled, painted fuzzy skin will not take effect!"
msgstr "Advertencia: ¡Piel difusa está desactivada, la piel difusa pintada no tendrá efecto!"
msgstr "Advertencia: ¡Piel rugosa está desactivada, la piel rugosa pintada no tendrá efecto!"
msgid "Enable painted fuzzy skin for this object"
msgstr "Habilitar piel difusa pintada para este objeto"
msgstr "Habilitar piel rugosa pintada para este objeto"
msgid "Entering Paint-on fuzzy skin"
msgstr "Entrando al mecanismo de pintar piel difusa"
msgstr "Entrando al mecanismo de pintar piel rugosa"
msgid "Leaving Paint-on fuzzy skin"
msgstr "Saliendo del mecanismo de pintar piel difusa"
msgstr "Saliendo del mecanismo de pintar piel rugosa"
msgid "Paint-on fuzzy skin editing"
msgstr "Pintar piel difusa"
msgstr "Pintar piel rugosa"
msgid "Move"
msgstr "Mover"
@@ -384,27 +384,30 @@ msgstr "Reiniciar posición"
msgid "Reset rotation"
msgstr "Reiniciar rotación"
msgid "Object coordinates"
msgstr "Coordenadas de objeto"
msgid "World"
msgstr "Global"
msgid "World coordinates"
msgstr "Coordenadas globales"
msgid "Object"
msgstr "Objeto"
msgid "Translate(Relative)"
msgstr "Traslación (relativo)"
msgid "Part"
msgstr "Pieza"
msgid "Relative"
msgstr "Relativo"
msgid "Coordinate system used for transform actions."
msgstr "Sistema de coordenadas utilizado para las acciones de transformación."
msgid "Absolute"
msgstr "Absoluto"
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Restablecer la rotación actual al valor que tenía al abrir la herramienta de rotación."
msgid "Rotate (absolute)"
msgstr "Rotar (absoluto)"
msgid "Reset current rotation to real zeros."
msgstr "Restablecer la rotación actual a ceros reales."
msgid "Part coordinates"
msgstr "Coordenadas de la pieza"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Tamaño"
@@ -508,12 +511,6 @@ msgstr "Brecha"
msgid "Spacing"
msgstr "Separación"
msgid "Part"
msgstr "Pieza"
msgid "Object"
msgstr "Objeto"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1856,33 +1853,32 @@ msgstr "Abrir proyecto"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "La versión de Orca Slicer es una versión demasiado antigua y necesita ser actualizada a la última versión antes de poder utilizarla con normalidad."
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"Conflicto de sincronización en la nube: este perfil tiene una versión más reciente en OrcaCloud.\n"
"«Descargar» descarga la copia de la nube. «Forzar envío» la sobrescribe con tu perfil local."
msgid "Cloud sync conflict:"
msgstr "Conflicto de sincronización con la nube:"
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr "Conflicto de sincronización con la nube para el perfil \"%s\":"
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"Conflicto de sincronización en la nube: ya existe un perfil con este nombre en OrcaCloud.\n"
"«Descargar» descarga la copia de la nube. «Forzar envío» la sobrescribe con tu perfil local."
msgstr "Este perfil tiene una versión más reciente en OrcaCloud.\nDescargar obtiene la copia de la nube. Forzar envío la sobrescribe con tu perfil local."
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr "Ya existe un perfil con este nombre en OrcaCloud.\nDescargar obtiene la copia de la nube. Forzar envío la sobrescribe con tu perfil local."
msgid ""
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
"Conflicto de sincronización en la nube: ya se ha eliminado de la nube un perfil con el mismo nombre.\n"
"Al hacer clic en «Eliminar», se borrará tu perfil local. Al hacer clic en «Forzar envío», se sobrescribirá con tu perfil local."
msgstr "Un perfil con el mismo nombre se eliminó anteriormente de la nube.\nEliminar borrará tu perfil local. Forzar envío la sobrescribe con tu perfil local."
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"Conflicto de sincronización en la nube: se ha producido un conflicto inesperado o no identificado con los perfiles.\n"
"«Descargar» descarga la copia de la nube. «Forzar envío» la sobrescribe con tu perfil local."
msgstr "Se produjo un conflicto de perfil inesperado o no identificado.\nDescargar obtiene la copia de la nube. Forzar envío la sobrescribe con tu perfil local."
msgid ""
"Force push will overwrite the cloud copy with your local preset changes.\n"
@@ -1891,6 +1887,12 @@ msgstr ""
"Forzar el envío sobrescribirá la copia en la nube con los cambios que hayas realizado en los ajustes preestablecidos locales.\n"
"¿Deseas continuar?"
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr "Forzar envío sobrescribirá la copia en la nube del perfil \"%s\" con tus cambios locales.\n¿Quieres continuar?"
msgid "Resolve cloud sync conflict"
msgstr "Resolver conflictos de sincronización con la nube"
@@ -1970,8 +1972,9 @@ msgstr "El número de perfiles de usuario almacenados en la nube ha superado el
msgid "Sync user presets"
msgstr "Sincronizar perfiles de usuario"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr "El contenido del perfil es demasiado grande para sincronizarlo con la nube (supera 1 MB). Reduce el tamaño del perfil eliminando las configuraciones personalizadas o utilízalo solo de forma local."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr "El perfil \"%s\" es demasiado grande para sincronizarlo con la nube (supera 1 MB). Reduce el tamaño del perfil eliminando las configuraciones personalizadas o utilízalo solo de forma local."
#, c-format, boost-format
msgid "%s updated from %s to %s"
@@ -2091,7 +2094,7 @@ msgid "Ironing"
msgstr "Alisado"
msgid "Fuzzy skin"
msgstr "Superficie rugosa"
msgstr "Piel rugosa"
msgid "Extruders"
msgstr "Extrusores"
@@ -2180,6 +2183,9 @@ msgstr "Cubo Orca"
msgid "OrcaSliced Combo"
msgstr "Combo OrcaSliced"
msgid "Orca Badge"
msgstr "Insignia de Orca"
msgid "Orca Tolerance Test"
msgstr "Test de tolerancia Orca"
@@ -2617,7 +2623,7 @@ msgid "Switch to per-object setting mode to edit process settings of selected ob
msgstr "Cambiar al modo de ajuste a modo por objeto para editar los ajustes de proceso de los objetos."
msgid "Remove paint-on fuzzy skin"
msgstr "Eliminar la piel difusa pintada"
msgstr "Eliminar la piel rugosa pintada"
msgid "Delete connector from object which is a part of cut"
msgstr "Borrar conector del objeto el cual es parte del corte"
@@ -4130,7 +4136,7 @@ msgstr ""
"Restablecer al 50 % de la profundidad de piel."
msgid "Both [Extrusion] and [Combined] modes of Fuzzy Skin require the Arachne Wall Generator to be enabled."
msgstr "Tanto el modo [Extrusión] como el modo [Combinado] de Piel Difusa requieren que el Generador de paredes Arachne esté habilitado."
msgstr "Tanto el modo [Extrusión] como el modo [Combinado] de Piel rugosa requieren que el Generador de paredes Arachne esté habilitado."
msgid ""
"Change these settings automatically?\n"
@@ -4139,7 +4145,7 @@ msgid ""
msgstr ""
"¿Cambiar estos ajustes automáticamente?\n"
"Sí: habilitar el generador de muros Arachne\n"
"No: deshabilitar el generador de paredes Arachne y establecer el modo [Desplazamiento] de la piel difusa"
"No: deshabilitar el generador de paredes Arachne y establecer el modo [Desplazamiento] de la piel rugosa"
msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional."
msgstr "El modo espiral solo funciona cuando los bucles de perímetro son 1, el soporte está desactivado, la detección de agrupamientos mediante sondeo está desactivada, las capas superiores de la carcasa son 0, la densidad de relleno es 0 y el tipo de lapso de tiempo es tradicional."
@@ -5155,6 +5161,9 @@ msgstr "Voladizos"
msgid "Outline"
msgstr "Contorno"
msgid "Wireframe"
msgstr "Malla alámbrica"
msgid "Realistic View"
msgstr "Vista realista"
@@ -5197,7 +5206,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)."
@@ -6647,8 +6656,8 @@ msgstr[1] "%1$d Los objetos se han cargado como partes del objeto de corte."
#, c-format, boost-format
msgid "%1$d object was loaded with fuzzy skin painting."
msgid_plural "%1$d objects were loaded with fuzzy skin painting."
msgstr[0] "%1$d objeto se cargó con pintura de piel difusa."
msgstr[1] "%1$d objetos se cargaron con pintura de piel difusa."
msgstr[0] "%1$d objeto se cargó con pintura de piel rugosa."
msgstr[1] "%1$d objetos se cargaron con pintura de piel rugosa."
msgid "ERROR"
msgstr "ERROR"
@@ -7888,6 +7897,35 @@ msgstr "Mostrar opciones al importar archivos STEP"
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "Si está activado, aparecerá un diálogo de configuración de parámetros durante la importación de archivos STEP."
msgid "STEP importing: linear deflection"
msgstr "Importación STEP: deflexión lineal"
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr "Deflexión lineal utilizada al mallar los archivos STEP importados.\nLos valores más pequeños producen mallas de mayor calidad pero aumentan el tiempo de procesamiento.\nSe usa como valor predeterminado en el diálogo de importación, o directamente cuando el diálogo de importación está desactivado.\nPredeterminado: 0.003 mm."
msgid "STEP importing: angle deflection"
msgstr "Importación STEP: deflexión angular"
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr "Deflexión angular utilizada al mallar los archivos STEP importados.\nLos valores más pequeños producen mallas de mayor calidad pero aumentan el tiempo de procesamiento.\nSe usa como valor predeterminado en el diálogo de importación, o directamente cuando el diálogo de importación está desactivado.\nPredeterminado: 0.5."
msgid "STEP importing: Split into multiple objects"
msgstr "Importación STEP: Separar en múltiples objetos"
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr "Si está activado, las formas compound y compsolid de los archivos STEP importados se separan en múltiples objetos.\nSe usa como valor predeterminado en el diálogo de importación, o directamente cuando el diálogo de importación está desactivado.\nPredeterminado: desactivado."
msgid "Quality level for Draco export"
msgstr "Nivel de calidad para exportación Draco"
@@ -7903,6 +7941,12 @@ msgstr ""
"0 = compresión sin pérdidas (la geometría se conserva con total precisión). Los valores válidos con pérdidas oscilan entre 8 y 30.\n"
"Los valores más bajos producen archivos más pequeños, pero pierden más detalles geométricos; los valores más altos conservan más detalles a costa de archivos más grandes."
msgid "Store full source file paths in projects"
msgstr "Guardar las rutas completas de los archivos de origen en los proyectos"
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr "Si está activado, los proyectos guardados almacenan la ruta absoluta de los archivos de origen importados (STEP/STL/...), de modo que \"Recargar desde el disco\" sigue funcionando cuando el archivo de origen se mantiene en una carpeta distinta a la del proyecto. Si está desactivado, solo se guarda el nombre del archivo, lo que mantiene los proyectos portables y evita incrustar rutas absolutas."
msgid "Preset"
msgstr "Perfil"
@@ -8277,16 +8321,16 @@ msgid "Show incompatible/unsupported presets in the printer and filament dropdow
msgstr "Mostrar los ajustes preestablecidos incompatibles o no compatibles en los menús desplegables de impresoras y filamentos. Estos ajustes preestablecidos no se pueden seleccionar."
msgid "Experimental Features"
msgstr ""
msgstr "Funciones experimentales"
msgid "Keep painted feature after mesh change"
msgstr ""
msgstr "Mantener las zonas pintadas tras cambiar la malla"
msgid ""
"Attempt to keep painted features (color/seam/support/fuzzy etc.) after changing the object mesh (such as cut/reload from disk/simplify/fix etc.)\n"
"Highly experimental! Slow and may create artifact."
msgstr ""
"Intenta conservar las característica pintadas (color, costuras, soportes, piel difusa, etc.) tras modificar la malla del objeto (por ejemplo, al cortar, volver a cargar desde el disco, simplificar, corregir, etc.).\n"
"Intenta conservar las característica pintadas (color, costuras, soportes, piel rugosa, etc.) tras modificar la malla del objeto (por ejemplo, al cortar, volver a cargar desde el disco, simplificar, corregir, etc.).\n"
"¡Muy experimental! Es lento y puede generar artefactos."
msgid "Allow Abnormal Storage"
@@ -10362,7 +10406,7 @@ msgid "Gizmo mesh boolean"
msgstr "Gizmo buleana de malla"
msgid "Gizmo FDM paint-on fuzzy skin"
msgstr "Herramienta FDM para pintar piel difusa"
msgstr "Herramienta FDM para pintar piel rugosa"
msgid "Gizmo SLA support points"
msgstr "Herramienta de puntos de soporte SLA"
@@ -12227,6 +12271,18 @@ msgstr "Umbral de Perímetros pequeños"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "Esto configura el umbral de longitud de perímetros pequeños. El umbral por defecto es 0mm."
msgid "Small support perimeters"
msgstr "Perímetros pequeños de soporte"
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr "Igual que \"Perímetros pequeños\", pero para los soportes. Este ajuste independiente afectará a la velocidad del soporte en áreas <= `small_support_perimeter_threshold`. Si se expresa como porcentaje (por ejemplo: 80%), se calculará sobre el ajuste de velocidad de soporte o de interfaz de soporte anterior. Establécelo a cero para automático."
msgid "Small support perimeters threshold"
msgstr "Umbral de perímetros pequeños de soporte"
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr "Esto establece el umbral para la longitud de los perímetros pequeños de soporte. El umbral predeterminado es 0mm."
msgid "Walls printing order"
msgstr "Orden de impresión de perímetros"
@@ -12412,27 +12468,26 @@ msgstr ""
"2. Tome nota del valor óptimo de PA para cada velocidad de flujo volumétrico y aceleración. Puede encontrar el valor de flujo seleccionando flujo en el desplegable del esquema de colores y moviendo el deslizador horizontal sobre las líneas del patrón PA. El valor númerico debería ser visible en la parte inferior de la página. El valor ideal de PA debería disminuir cuanto mayor sea el flujo volumétrico. Si no es así, confirme que su extrusor funciona correctamente. Cuanto más lento y con menos aceleración imprimas, mayor será el rango de valores PA aceptables. Si no se aprecia ninguna diferencia, utilice el valor PA de la prueba más rápida.\n"
"3. Introduzca los trios de valores PA, Flujo y Aceleraciones en el cuadro de texto que aparece aquí y guarde su perfil de filamento."
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "Activación del Avance de Presión Adaptativo para Voladizos (beta)"
msgid "Enable adaptive pressure advance within features (beta)"
msgstr "Activar Pressure Advance adaptativo dentro de las características (beta)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgstr ""
"Activa el PA adaptativo para los voladizos, así como cuando el flujo cambia dentro de la misma pieza. Esta es una opción experimental, ya que si el perfil de PA no se configura con precisión, causará problemas de uniformidad en las superficies externas antes y después de los voladizos.\n"
"No es compatible con las impresoras Prusa, ya que estas se detienen para procesar los cambios de PA, lo que provoca retrasos y defectos."
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr "Activa el PA adaptativo siempre que haya cambios de flujo en una característica, como cambios de ancho de línea en una esquina o en voladizos.\n\nNo es compatible con las impresoras Prusa, ya que se pausan para procesar los cambios de PA, lo que provoca retrasos y defectos.\n\nEsta es una opción experimental, ya que si el perfil de PA no se configura con precisión, causará problemas de uniformidad."
msgid "Pressure advance for bridges"
msgstr "Pressure advance para puentes"
msgid "Static pressure advance for bridges"
msgstr "Pressure Advance estático para puentes"
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"Valor de Avance de Presión (PA) para puentes. Establecer a 0 para desactivar.\n"
"\n"
"Un valor de PA más bajo al imprimir puentes ayuda a reducir la aparición de una ligera sub-extrusión inmediatamente después de los puentes. Esto es causado por la caída de presión en la boquilla cuando se imprime en el aire, y un PA más bajo ayuda a contrarrestar este efecto."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr "Valor de Pressure Advance estático para los puentes. Establécelo a 0 para aplicar el mismo Pressure Advance que en los \nperímetros equivalentes (usando los ajustes adaptativos si están activados).\n\nUn valor de PA más bajo al imprimir puentes ayuda a reducir la aparición de una ligera subextrusión justo después de los puentes. Esto se debe a la caída de presión en la boquilla al imprimir en el aire, y un PA más bajo ayuda a contrarrestarlo."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Ancho de línea por defecto si otros anchos de línea están a 0. Si se expresa cómo %, se calculará en base al diámetro de la boquilla."
@@ -12804,6 +12859,22 @@ msgstr "Dirección del relleno sólido"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "Ángulo para el patrón de relleno sólido, que controla el inicio o la dirección principal de la línea."
msgid "Top layer direction"
msgstr "Dirección de la capa superior"
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr "Ángulo fijo para el relleno sólido superior y las líneas de alisado.\nEstablécelo a -1 para seguir la dirección predeterminada del relleno sólido."
msgid "Bottom layer direction"
msgstr "Dirección de la capa inferior"
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr "Ángulo fijo para las líneas del relleno sólido inferior.\nEstablécelo a -1 para seguir la dirección predeterminada del relleno sólido."
msgid "Sparse infill density"
msgstr "Densidad de relleno de baja densidad"
@@ -13011,7 +13082,7 @@ msgid "layer"
msgstr "capa"
msgid "First layer fan speed"
msgstr ""
msgstr "Velocidad del ventilador en la primera capa"
msgid ""
"Sets an exact fan speed for the first layer, overriding all other cooling settings. Useful for protecting 3D-printed toolhead parts (e.g. Voron-style ABS/ASA ducts) from a hot bed. A small amount of airflow cools the ducts down, without using full cooling that may in certain conditions hurt first-layer adhesion.\n"
@@ -13019,7 +13090,7 @@ msgid ""
"If \"Full fan speed at layer\" is also set, the fan ramps smoothly from this value on the first layer up to your target by the chosen layer.\n"
"Only available when \"No cooling for the first\" is 0.\n"
"Set to -1 to disable it."
msgstr ""
msgstr "Establece una velocidad exacta del ventilador para la primera capa, anulando el resto de ajustes de refrigeración. Útil para proteger las piezas del cabezal impresas en 3D (por ejemplo, los conductos de ABS/ASA tipo Voron) de una cama caliente. Una pequeña cantidad de flujo de aire enfría los conductos, sin usar la refrigeración completa que en ciertas condiciones puede perjudicar la adhesión de la primera capa.\nA partir de la segunda capa, se reanuda la refrigeración normal.\nSi también se ha establecido \"Velocidad máxima del ventilador en la capa\", el ventilador sube suavemente desde este valor en la primera capa hasta tu objetivo en la capa elegida.\nSolo disponible cuando \"No refrigerar las primeras\" es 0.\nEstablécelo a -1 para desactivarlo."
msgid "Support interface fan speed"
msgstr "Velocidad de ventilador en la interfaz de los soportes"
@@ -13080,7 +13151,7 @@ msgid "Filament-specific override for ironing speed. This allows you to customiz
msgstr "Sobrescritura específica por filamento para la velocidad de alisado. Esto permite personalizar la velocidad de impresión de las líneas de alisado para cada tipo de filamento."
msgid "This setting makes the toolhead randomly jitter while printing walls so that the surface has a rough textured look. This setting controls the fuzzy position."
msgstr "Sacudir ligeramente el cabezal de forma aleatoria cuando se imprime el perímetro externo, de modo que la superficie tenga un aspecto rugoso. Este ajuste controla la posición difusa."
msgstr "Sacudir ligeramente el cabezal de forma aleatoria cuando se imprime el perímetro externo, de modo que la superficie tenga un aspecto rugoso. Este ajuste controla la posición de la piel rugosa."
msgid "Painted only"
msgstr "Solo pintado"
@@ -13098,25 +13169,25 @@ msgid "All walls"
msgstr "Todas los perímetros"
msgid "Fuzzy skin thickness"
msgstr "Espesor de superficie rugosa"
msgstr "Espesor de piel rugosa"
msgid "The width of jittering: its recommended to keep this lower than the outer wall line width."
msgstr "La anchura dentro de la cual se va a sacudir el cabezal. Se aconseja que esté por debajo del ancho de línea del perímetro exterior."
msgid "Fuzzy skin point distance"
msgstr "Distancia entre puntos de superficie rugosa"
msgstr "Distancia entre puntos de piel rugosa"
msgid "The average distance between the random points introduced on each line segment."
msgstr "La diatancia media entre los puntos aleatorios introducidos en cada segmento de línea."
msgid "Apply fuzzy skin to first layer"
msgstr "Aplicar superficie difusa en la primera capa"
msgstr "Aplicar piel rugosa en la primera capa"
msgid "Whether to apply fuzzy skin on the first layer."
msgstr "Aplicar o no superficie difusa en la primera capa."
msgstr "Aplicar o no piel rugosa en la primera capa."
msgid "Fuzzy skin generator mode"
msgstr "Modo generador de piel difusa"
msgstr "Modo generador de piel rugosa"
#, c-format, boost-format
msgid ""
@@ -13127,12 +13198,12 @@ msgid ""
"\n"
"Attention! The [Extrusion] and [Combined] modes works only the fuzzy_skin_thickness parameter not more than the thickness of printed loop. At the same time, the width of the extrusion for a particular layer should also not be below a certain level. It is usually equal 15-25%% of a layer height. Therefore, the maximum fuzzy skin thickness with a perimeter width of 0.4 mm and a layer height of 0.2 mm will be 0.4-(0.2*0.25)=±0.35mm! If you enter a higher parameter than this, the error Flow::spacing() will displayed, and the model will not be sliced. You can choose this number until this error is repeated."
msgstr ""
"Modo de generación de piel difusa. ¡Funciona solo con Arachne!\n"
"Modo de generación de piel rugosa. ¡Funciona solo con Arachne!\n"
"Desplazamiento: Modo clásico en el que el patrón se forma desplazando la boquilla lateralmente respecto a la trayectoria original.\n"
"Extrusión: Modo en que el patrón se forma por la cantidad de material extruido. Es un algoritmo rápido y directo sin vibraciones innecesarias de la boquilla que produce un patrón suave. Sin embargo, resulta más útil para formar paredes sueltas en toda la matriz.\n"
"Combinado: Modo conjunto [Desplazamiento] + [Extrusión]. La apariencia de las paredes es similar al modo [Desplazamiento], pero no deja poros entre los perímetros.\n"
"\n"
"¡Atención! Los modos [Extrusión] y [Combinado] funcionan solo si el parámetro fuzzy_skin_thickness no supera el espesor del perímetro impreso. Al mismo tiempo, el ancho de extrusión para una capa determinada tampoco debe estar por debajo de un cierto umbral, que suele ser el 1525%% de la altura de capa. Por lo tanto, el espesor máximo de piel difusa con un ancho de perímetro de 0,4 mm y una altura de capa de 0,2 mm será 0,4-(0,2*0,25)=±0,35 mm. Si introduce un valor mayor, se mostrará el error Flow::spacing() y el modelo no se podrá laminar. Puede ajustar este valor hasta que deje de producirse el error."
"¡Atención! Los modos [Extrusión] y [Combinado] funcionan solo si el parámetro fuzzy_skin_thickness no supera el espesor del perímetro impreso. Al mismo tiempo, el ancho de extrusión para una capa determinada tampoco debe estar por debajo de un cierto umbral, que suele ser el 1525%% de la altura de capa. Por lo tanto, el espesor máximo de piel rugosa con un ancho de perímetro de 0,4 mm y una altura de capa de 0,2 mm será 0,4-(0,2*0,25)=±0,35 mm. Si introduce un valor mayor, se mostrará el error Flow::spacing() y el modelo no se podrá laminar. Puede ajustar este valor hasta que deje de producirse el error."
msgid "Displacement"
msgstr "Desplazamiento"
@@ -13144,7 +13215,7 @@ msgid "Combined"
msgstr "Combinado"
msgid "Fuzzy skin noise type"
msgstr "Tipo de ruido de la piel difusa"
msgstr "Tipo de ruido de la piel rugosa"
msgid ""
"Noise type to use for fuzzy skin generation:\n"
@@ -13155,7 +13226,7 @@ msgid ""
"Voronoi: Divides the surface into voronoi cells, and displaces each one by a random amount. Creates a patchwork texture.\n"
"Ripple: Uniform ripple pattern that ripples left and right of the original path. Repeating pattern, woven appearance."
msgstr ""
"Tipo de ruido a usar para la generación de la piel difusa:\n"
"Tipo de ruido a usar para la generación de la piel rugosa:\n"
"Clásico: Ruido aleatorio uniforme clásico.\n"
"Perlin: Ruido Perlin, que ofrece una textura más coherente.\n"
"Ondulado: Similar al ruido Perlin, pero más agrupado.\n"
@@ -13182,19 +13253,19 @@ msgid "Ripple"
msgstr "Ripple"
msgid "Fuzzy skin feature size"
msgstr "Tamaño de característica de la piel difusa"
msgstr "Tamaño de característica de la piel rugosa"
msgid "The base size of the coherent noise features, in mm. Higher values will result in larger features."
msgstr "El tamaño base de las características del ruido coherente, en mm. Valores mayores producen características más grandes."
msgid "Fuzzy Skin Noise Octaves"
msgstr "Octavas de ruido de la piel difusa"
msgstr "Octavas de ruido de la piel rugosa"
msgid "The number of octaves of coherent noise to use. Higher values increase the detail of the noise, but also increase computation time."
msgstr "El número de octavas de ruido coherente a usar. Valores más altos aumentan el detalle del ruido, pero también incrementan el tiempo de cálculo."
msgid "Fuzzy skin noise persistence"
msgstr "Persistencia del ruido de piel difusa"
msgstr "Persistencia del ruido de piel rugosa"
msgid "The decay rate for higher octaves of the coherent noise. Lower values will result in smoother noise."
msgstr "La tasa de decaimiento para las octavas superiores del ruido coherente. Valores más bajos producirán un ruido más suave."
@@ -15573,6 +15644,14 @@ msgstr "Giro de poliorificio"
msgid "Rotate the polyhole every layer."
msgstr "Rotar el poliorificio en cada capa."
msgid "Maximum Polyhole edge count"
msgstr "Número máximo de aristas de poliorificio"
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr "Número máximo de aristas de un poliorificio\nEste ajuste limita la cantidad de aristas que puede tener un poliorificio"
msgid "G-code thumbnails"
msgstr "Miniaturas de G-Code"
@@ -16315,8 +16394,8 @@ msgid ""
"An object has enabled XY Size compensation which will not be used because it is also fuzzy skin painted.\n"
"XY Size compensation cannot be combined with fuzzy skin painting."
msgstr ""
"Un objeto tiene activada la compensación de tamaño XY que no se utilizará porque también tiene piel difusa pintada.\n"
"La compensación de tamaño XY no puede combinarse con la pintura de piel difusa."
"Un objeto tiene activada la compensación de tamaño XY que no se utilizará porque también tiene piel rugosa pintada.\n"
"La compensación de tamaño XY no puede combinarse con la pintura de piel rugosa."
msgid "Object name"
msgstr "Nombre del objeto"
@@ -17930,130 +18009,130 @@ msgid "Connection to printers connected via the print host failed."
msgstr "Ha fallado la conexión a impresoras conectadas a través del host de impresión."
msgid "Detect Creality K-series printer"
msgstr ""
msgstr "Detectar impresora Creality serie K"
msgid "Click Scan to look for K-series printers on your network."
msgstr ""
msgstr "Haz clic en Escanear para buscar impresoras de la serie K en tu red."
msgid "Use Selected"
msgstr ""
msgstr "Usar seleccionada"
msgid "Scanning the LAN for K-series printers... this takes a few seconds."
msgstr ""
msgstr "Escaneando la LAN en busca de impresoras de la serie K... esto tarda unos segundos."
msgid "No K-series printers found. Make sure the printer is on the same network and not blocked by Wi-Fi client isolation, then click Scan again."
msgstr ""
msgstr "No se encontraron impresoras de la serie K. Asegúrate de que la impresora esté en la misma red y no esté bloqueada por el aislamiento de clientes Wi-Fi, luego haz clic en Escanear de nuevo."
#, c-format
msgid "Found %zu Creality printer(s). Select one and click Use Selected."
msgstr ""
msgstr "Se encontraron %zu impresora(s) Creality. Selecciona una y haz clic en Usar seleccionada."
msgid "Active"
msgstr ""
msgstr "Activo"
msgid "Printers"
msgstr ""
msgstr "Impresoras"
msgid "Processes"
msgstr ""
msgstr "Procesos"
msgid "Show/Hide system information"
msgstr ""
msgstr "Mostrar/Ocultar información del sistema"
msgid "Copy system information to clipboard"
msgstr ""
msgstr "Copiar información del sistema al portapapeles"
msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide."
msgstr ""
msgstr "Necesitamos información para diagnosticar el origen del problema. Consulta la página wiki para una guía detallada."
msgid "Pack button collects project file and logs of current session onto a zip file."
msgstr ""
msgstr "El botón Empaquetar recopila el archivo del proyecto y los registros de la sesión actual en un archivo zip."
msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue."
msgstr ""
msgstr "Cualquier ejemplo visual adicional, como imágenes o grabaciones de pantalla, puede ser útil al informar del problema."
msgid "Report issue"
msgstr ""
msgstr "Informar de un problema"
msgid "Pack"
msgstr ""
msgstr "Empaquetar"
msgid "Cleans and rebuilds system profiles cache on next launch"
msgstr ""
msgstr "Limpia y reconstruye la caché de perfiles del sistema en el próximo inicio"
msgid "Clean system profiles cache"
msgstr ""
msgstr "Limpiar la caché de perfiles del sistema"
msgid "Clean"
msgstr "Limpiar"
msgid "Loaded profiles overview"
msgstr ""
msgstr "Resumen de los perfiles cargados"
msgid "This section shows information for loaded profiles"
msgstr ""
msgstr "Esta sección muestra información de los perfiles cargados"
msgid "Exports detailed overview of loaded profiles in json format"
msgstr ""
msgstr "Exporta un resumen detallado de los perfiles cargados en formato json"
msgid "Configurations folder"
msgstr ""
msgstr "Carpeta de configuraciones"
msgid "Opens configurations folder"
msgstr ""
msgstr "Abre la carpeta de configuraciones"
msgid "Log level"
msgstr ""
msgstr "Nivel de registro"
msgid "Stored logs"
msgstr ""
msgstr "Registros almacenados"
msgid "Packs all stored logs onto a zip file."
msgstr ""
msgstr "Empaqueta todos los registros almacenados en un archivo zip."
msgid "Profiles"
msgstr ""
msgstr "Perfiles"
msgid "Select NO to close dialog and review project"
msgstr ""
msgstr "Selecciona NO para cerrar el diálogo y revisar el proyecto"
msgid "No project file on current session. Only logs will be included to package"
msgstr ""
msgstr "No hay archivo de proyecto en la sesión actual. Solo se incluirán los registros en el paquete"
msgid "Select NO to close dialog and review project."
msgstr ""
msgstr "Selecciona NO para cerrar el diálogo y revisar el proyecto."
msgid "Please make sure any instances of OrcaSlicer are not running"
msgstr ""
msgstr "Asegúrate de que no haya ninguna instancia de OrcaSlicer en ejecución"
msgid "System folder cannot be deleted because some files are in use by another application. Please close any applications using these files and try again."
msgstr ""
msgstr "No se puede eliminar la carpeta del sistema porque algunos archivos están siendo usados por otra aplicación. Cierra cualquier aplicación que esté usando estos archivos e inténtalo de nuevo."
msgid "Failed to delete system folder..."
msgstr ""
msgstr "No se pudo eliminar la carpeta del sistema..."
msgid "Failed to determine executable path."
msgstr ""
msgstr "No se pudo determinar la ruta del ejecutable."
msgid "Failed to launch a new instance."
msgstr ""
msgstr "No se pudo iniciar una nueva instancia."
msgid "log(s)"
msgstr ""
msgstr "registro(s)"
msgid "Choose where to save the exported JSON file"
msgstr ""
msgstr "Elige dónde guardar el archivo JSON exportado"
msgid ""
"Export failed\n"
"Please check write permissions or file in use by another application"
msgstr ""
msgstr "La exportación ha fallado\nComprueba los permisos de escritura o si el archivo está siendo usado por otra aplicación"
msgid "Choose where to save the exported ZIP file"
msgstr ""
msgstr "Elige dónde guardar el archivo ZIP exportado"
msgid "File already exists. Overwrite?"
msgstr ""
msgstr "El archivo ya existe. ¿Sobrescribir?"
msgid "3DPrinterOS Cloud upload options"
msgstr "Opciones de carga en la nube de 3DPrinterOS"
@@ -18138,17 +18217,17 @@ msgid "Could not connect to MKS"
msgstr "No se ha podido conectar con MKS"
msgid "Connection to Moonraker is working correctly."
msgstr ""
msgstr "La conexión con Moonraker funciona correctamente."
msgid "Could not connect to Moonraker"
msgstr ""
msgstr "No se pudo conectar con Moonraker"
msgid "The host responded but it doesn't look like Moonraker (missing result.klippy_state)."
msgstr ""
msgstr "El host respondió, pero no parece ser Moonraker (falta result.klippy_state)."
#, c-format, boost-format
msgid "Could not parse Moonraker server response: %s"
msgstr ""
msgstr "No se pudo analizar la respuesta del servidor Moonraker: %s"
msgid "Connection to OctoPrint is working correctly."
msgstr "La conexión con OctoPrint funciona correctamente."
@@ -18899,6 +18978,12 @@ msgstr "Número de caras triangulares"
msgid "Calculating, please wait..."
msgstr "Calculando, por favor espere..."
msgid "Save these settings as default"
msgstr "Guardar estos ajustes como predeterminados"
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr "Si está activado, los valores anteriores se guardan como los predeterminados usados para futuras importaciones STEP (y se muestran en Preferencias)."
msgid "PresetBundle"
msgstr "PaqueteDePerfiles"
@@ -19300,6 +19385,74 @@ 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?"
#~ msgid "Object coordinates"
#~ msgstr "Coordenadas de objeto"
#~ msgid "World coordinates"
#~ msgstr "Coordenadas globales"
#~ msgid "Translate(Relative)"
#~ msgstr "Traslación (relativo)"
#~ msgid "Rotate (absolute)"
#~ msgstr "Rotar (absoluto)"
#~ msgid "Part coordinates"
#~ msgstr "Coordenadas de la pieza"
#~ msgid ""
#~ "Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "Conflicto de sincronización en la nube: este perfil tiene una versión más reciente en OrcaCloud.\n"
#~ "«Descargar» descarga la copia de la nube. «Forzar envío» la sobrescribe con tu perfil local."
#~ msgid ""
#~ "Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "Conflicto de sincronización en la nube: ya existe un perfil con este nombre en OrcaCloud.\n"
#~ "«Descargar» descarga la copia de la nube. «Forzar envío» la sobrescribe con tu perfil local."
#~ msgid ""
#~ "Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
#~ "Delete will delete your local preset. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "Conflicto de sincronización en la nube: ya se ha eliminado de la nube un perfil con el mismo nombre.\n"
#~ "Al hacer clic en «Eliminar», se borrará tu perfil local. Al hacer clic en «Forzar envío», se sobrescribirá con tu perfil local."
#~ msgid ""
#~ "Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "Conflicto de sincronización en la nube: se ha producido un conflicto inesperado o no identificado con los perfiles.\n"
#~ "«Descargar» descarga la copia de la nube. «Forzar envío» la sobrescribe con tu perfil local."
#~ msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#~ msgstr "El contenido del perfil es demasiado grande para sincronizarlo con la nube (supera 1 MB). Reduce el tamaño del perfil eliminando las configuraciones personalizadas o utilízalo solo de forma local."
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Activación del Avance de Presión Adaptativo para Voladizos (beta)"
#~ msgid ""
#~ "Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
#~ "Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
#~ msgstr ""
#~ "Activa el PA adaptativo para los voladizos, así como cuando el flujo cambia dentro de la misma pieza. Esta es una opción experimental, ya que si el perfil de PA no se configura con precisión, causará problemas de uniformidad en las superficies externas antes y después de los voladizos.\n"
#~ "No es compatible con las impresoras Prusa, ya que estas se detienen para procesar los cambios de PA, lo que provoca retrasos y defectos."
#~ msgid "Pressure advance for bridges"
#~ msgstr "Pressure advance para puentes"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "Valor de Avance de Presión (PA) para puentes. Establecer a 0 para desactivar.\n"
#~ "\n"
#~ "Un valor de PA más bajo al imprimir puentes ayuda a reducir la aparición de una ligera sub-extrusión inmediatamente después de los puentes. Esto es causado por la caída de presión en la boquilla cuando se imprime en el aire, y un PA más bajo ayuda a contrarrestar este efecto."
#~ msgid "Filament Sync Options"
#~ msgstr "Opciones de sincronización de filamento"
@@ -19792,7 +19945,7 @@ msgstr ""
#~ "Ridged Multifractal: Ridged noise with sharp, jagged features. Creates marble-like textures.\n"
#~ "Voronoi: Divides the surface into voronoi cells, and displaces each one by a random amount. Creates a patchwork texture."
#~ msgstr ""
#~ "Tipo de ruido a usar para la generación de la piel difusa:\n"
#~ "Tipo de ruido a usar para la generación de la piel rugosa:\n"
#~ "Clásico: Ruido aleatorio uniforme clásico.\n"
#~ "Perlin: Ruido Perlin, que ofrece una textura más coherente.\n"
#~ "Billow: Similar al ruido Perlin, pero más agrupado.\n"

View File

@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Guislain Cyril, Thomas Lété\n"
@@ -387,27 +387,30 @@ msgstr "Réinitialiser la position"
msgid "Reset rotation"
msgstr "Réinitialiser la rotation"
msgid "Object coordinates"
msgstr "Coordonnées de lobjet"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Coordonnées"
msgid "Object"
msgstr "Objet"
msgid "Translate(Relative)"
msgstr "Translation (relative)"
msgid "Part"
msgstr "Pièce"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Réinitialiser la rotation actuelle à la valeur lors de l'ouverture de l'outil de rotation."
msgid "Rotate (absolute)"
msgstr "Rotation (absolue)"
msgid "Reset current rotation to real zeros."
msgstr "Réinitialiser la rotation actuelle à zéro."
msgid "Part coordinates"
msgstr "Coordonnées de la pièce"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Taille"
@@ -511,12 +514,6 @@ msgstr "Espacement"
msgid "Spacing"
msgstr "Espacement"
msgid "Part"
msgstr "Pièce"
msgid "Object"
msgstr "Objet"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1855,33 +1852,32 @@ msgstr "Ouvrir un projet"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "La version de OrcaSlicer est trop ancienne et doit être mise à jour vers la dernière version afin quil puisse être utilisé normalement."
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
"Conflit de synchronisation cloud : ce préréglage a une version plus récente dans OrcaCloud.\n"
"Récupérer télécharge la copie du cloud. Forcer lenvoi lécrase avec votre préréglage local."
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"Conflit de synchronisation cloud : un préréglage de ce nom existe déjà dans OrcaCloud.\n"
"Récupérer télécharge la copie du cloud. Forcer lenvoi lécrase avec votre préréglage local."
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
"Conflit de synchronisation cloud : un préréglage du même nom a été précédemment supprimé du cloud.\n"
"Supprimer effacera votre préréglage local. Forcer lenvoi lécrase avec votre préréglage local."
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"Conflit de synchronisation cloud : un conflit de préréglage inattendu ou non identifié sest produit.\n"
"Récupérer télécharge la copie du cloud. Forcer lenvoi lécrase avec votre préréglage local."
msgid ""
"Force push will overwrite the cloud copy with your local preset changes.\n"
@@ -1890,6 +1886,12 @@ msgstr ""
"Forcer lenvoi écrasera la copie du cloud avec vos modifications locales du préréglage.\n"
"Voulez-vous continuer ?"
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr "Résoudre le conflit de synchronisation cloud"
@@ -1969,8 +1971,9 @@ msgstr "Le nombre de préréglages utilisateur mis en cache dans le nuage a dép
msgid "Sync user presets"
msgstr "Synchroniser les réglages prédéfinis de lutilisateur"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr "Le contenu du préréglage est trop volumineux pour être synchronisé avec le cloud (dépasse 1 Mo). Veuillez réduire la taille du préréglage en supprimant des configurations personnalisées, ou lutiliser uniquement en local."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
msgid "%s updated from %s to %s"
@@ -2179,6 +2182,9 @@ msgstr "Cube Orca"
msgid "OrcaSliced Combo"
msgstr "OrcaSliced Combo"
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Test de tolérance Orca"
@@ -5151,6 +5157,9 @@ msgstr "Surplombs"
msgid "Outline"
msgstr "Contour"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr "Vue réaliste"
@@ -5193,7 +5202,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)."
@@ -7882,6 +7891,35 @@ msgstr "Afficher les options lors de l'importation d'un fichier STEP"
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "Si activé, une boîte de dialogue de paramètres apparaîtra lors de l'importation d'un fichier STEP."
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr "Niveau de qualité pour l'exportation Draco"
@@ -7897,6 +7935,12 @@ msgstr ""
"0 = compression sans perte (la géométrie est préservée en pleine précision). Les valeurs avec perte valides vont de 8 à 30.\n"
"Des valeurs plus basses produisent des fichiers plus petits mais perdent plus de détails géométriques ; des valeurs plus élevées préservent plus de détails au prix de fichiers plus volumineux."
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Préréglage"
@@ -12229,6 +12273,18 @@ msgstr "Seuil des petits périmètres"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "Cela définit le seuil pour une petite longueur de périmètre. Le seuil par défaut est de 0 mm"
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "Ordre dimpression des parois"
@@ -12414,27 +12470,26 @@ msgstr ""
"2. Notez la valeur optimale de PA pour chaque vitesse de débit volumétrique et accélération. Vous pouvez trouver le numéro de débit en sélectionnant le débit dans le menu déroulant du schéma de couleurs et en déplaçant le curseur horizontal sur les lignes du schéma PA. Le chiffre doit être visible en bas de la page. La valeur idéale du PA devrait diminuer au fur et à mesure que le débit volumétrique augmente. Si ce nest pas le cas, vérifiez que votre extrudeur fonctionne correctement. Plus vous imprimez lentement et avec peu daccélération, plus la plage des valeurs PA acceptables est grande. Si aucune différence nest visible, utilisez la valeur PA du test le plus rapide.\n"
"3 Entrez les triplets de valeurs PA, de débit et daccélérations dans la zone de texte ici et sauvegardez votre profil de filament."
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "Activation de lavance de pression adaptative pour les surplombs (beta)"
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
"Activez le PA adaptatif pour les surplombs ainsi que lorsque le débit change au sein dune même structure. Il sagit dune option expérimentale : si le profil de PA nest pas réglé avec précision, elle provoquera des problèmes duniformité sur les surfaces externes avant et après les surplombs.\n"
"Incompatible avec les imprimantes Prusa, car elles marquent une pause pour traiter les changements de PA, ce qui cause des retards et des défauts."
msgid "Pressure advance for bridges"
msgstr "Avance de pression pour les ponts"
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"Valeur de lavance de pression pour les ponts. Régler à 0 pour désactiver.\n"
"\n"
" Une valeur PA plus faible lors de limpression de ponts permet de réduire lapparition dune légère sous-extrusion immédiatement après les ponts. Ce phénomène est dû à la chute de pression dans la buse lors de limpression dans lair et une valeur PA plus faible permet dy remédier."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Largeur de ligne par défaut si les autres largeurs de ligne sont fixées à 0. Si elle est exprimée en %, elle sera calculée sur le diamètre de la buse."
@@ -12806,6 +12861,22 @@ msgstr "Direction du remplissage"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "Angle pour le motif de remplissage, qui contrôle le début ou la direction principale de la ligne"
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Densité de remplissage"
@@ -13022,7 +13093,12 @@ msgid ""
"If \"Full fan speed at layer\" is also set, the fan ramps smoothly from this value on the first layer up to your target by the chosen layer.\n"
"Only available when \"No cooling for the first\" is 0.\n"
"Set to -1 to disable it."
msgstr "Définit une vitesse de ventilateur exacte pour la première couche, remplaçant tous les autres réglages de refroidissement. Utile pour protéger les pièces de tête dimpression imprimées en 3D (par exemple les conduits ABS/ASA de type Voron) dun plateau chaud. Un léger flux dair refroidit les conduits, sans recourir au refroidissement complet qui, dans certaines conditions, peut nuire à ladhérence de la première couche.\nÀ partir de la deuxième couche, le refroidissement normal reprend.\nSi « Ventilateur à pleine vitesse à la couche » est également défini, le ventilateur monte progressivement de cette valeur sur la première couche jusquà votre cible à la couche choisie.\nDisponible uniquement lorsque « Pas de refroidissement pour » est à 0.\nRéglez sur -1 pour le désactiver."
msgstr ""
"Définit une vitesse de ventilateur exacte pour la première couche, remplaçant tous les autres réglages de refroidissement. Utile pour protéger les pièces de tête dimpression imprimées en 3D (par exemple les conduits ABS/ASA de type Voron) dun plateau chaud. Un léger flux dair refroidit les conduits, sans recourir au refroidissement complet qui, dans certaines conditions, peut nuire à ladhérence de la première couche.\n"
"À partir de la deuxième couche, le refroidissement normal reprend.\n"
"Si « Ventilateur à pleine vitesse à la couche » est également défini, le ventilateur monte progressivement de cette valeur sur la première couche jusquà votre cible à la couche choisie.\n"
"Disponible uniquement lorsque « Pas de refroidissement pour » est à 0.\n"
"Réglez sur -1 pour le désactiver."
msgid "Support interface fan speed"
msgstr "Vitesse du ventilateur"
@@ -15576,6 +15652,14 @@ msgstr "Torsion des trous polygones"
msgid "Rotate the polyhole every layer."
msgstr "Faites pivoter le trou polygone à chaque couche."
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "Vignette G-code"
@@ -18051,7 +18135,9 @@ msgstr "Choisissez où enregistrer le fichier JSON exporté"
msgid ""
"Export failed\n"
"Please check write permissions or file in use by another application"
msgstr "Échec de lexportation\nVeuillez vérifier les autorisations décriture ou si le fichier est utilisé par une autre application"
msgstr ""
"Échec de lexportation\n"
"Veuillez vérifier les autorisations décriture ou si le fichier est utilisé par une autre application"
msgid "Choose where to save the exported ZIP file"
msgstr "Choisissez où enregistrer le fichier ZIP exporté"
@@ -18903,6 +18989,12 @@ msgstr "Nombre de facettes triangulaires"
msgid "Calculating, please wait..."
msgstr "Calcul en cours, veuillez patienter…"
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr "Paquet de préréglages"
@@ -19304,6 +19396,74 @@ msgstr ""
"Éviter la déformation\n"
"Saviez-vous que lors de limpression de matériaux susceptibles de se déformer, tels que lABS, une augmentation appropriée de la température du plateau chauffant peut réduire la probabilité de déformation?"
#~ msgid "Object coordinates"
#~ msgstr "Coordonnées de lobjet"
#~ msgid "World coordinates"
#~ msgstr "Coordonnées"
#~ msgid "Translate(Relative)"
#~ msgstr "Translation (relative)"
#~ msgid "Rotate (absolute)"
#~ msgstr "Rotation (absolue)"
#~ msgid "Part coordinates"
#~ msgstr "Coordonnées de la pièce"
#~ msgid ""
#~ "Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "Conflit de synchronisation cloud : ce préréglage a une version plus récente dans OrcaCloud.\n"
#~ "Récupérer télécharge la copie du cloud. Forcer lenvoi lécrase avec votre préréglage local."
#~ msgid ""
#~ "Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "Conflit de synchronisation cloud : un préréglage de ce nom existe déjà dans OrcaCloud.\n"
#~ "Récupérer télécharge la copie du cloud. Forcer lenvoi lécrase avec votre préréglage local."
#~ msgid ""
#~ "Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
#~ "Delete will delete your local preset. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "Conflit de synchronisation cloud : un préréglage du même nom a été précédemment supprimé du cloud.\n"
#~ "Supprimer effacera votre préréglage local. Forcer lenvoi lécrase avec votre préréglage local."
#~ msgid ""
#~ "Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "Conflit de synchronisation cloud : un conflit de préréglage inattendu ou non identifié sest produit.\n"
#~ "Récupérer télécharge la copie du cloud. Forcer lenvoi lécrase avec votre préréglage local."
#~ msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#~ msgstr "Le contenu du préréglage est trop volumineux pour être synchronisé avec le cloud (dépasse 1 Mo). Veuillez réduire la taille du préréglage en supprimant des configurations personnalisées, ou lutiliser uniquement en local."
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Activation de lavance de pression adaptative pour les surplombs (beta)"
#~ msgid ""
#~ "Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
#~ "Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
#~ msgstr ""
#~ "Activez le PA adaptatif pour les surplombs ainsi que lorsque le débit change au sein dune même structure. Il sagit dune option expérimentale : si le profil de PA nest pas réglé avec précision, elle provoquera des problèmes duniformité sur les surfaces externes avant et après les surplombs.\n"
#~ "Incompatible avec les imprimantes Prusa, car elles marquent une pause pour traiter les changements de PA, ce qui cause des retards et des défauts."
#~ msgid "Pressure advance for bridges"
#~ msgstr "Avance de pression pour les ponts"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "Valeur de lavance de pression pour les ponts. Régler à 0 pour désactiver.\n"
#~ "\n"
#~ " Une valeur PA plus faible lors de limpression de ponts permet de réduire lapparition dune légère sous-extrusion immédiatement après les ponts. Ce phénomène est dû à la chute de pression dans la buse lors de limpression dans lair et une valeur PA plus faible permet dy remédier."
#~ msgid "Filament Sync Options"
#~ msgstr "Options de synchronisation des filaments"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -394,27 +394,30 @@ msgstr "Pozíció visszaállítása"
msgid "Reset rotation"
msgstr "Forgatás visszaállítása"
msgid "Object coordinates"
msgstr "Objektum koordináták"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Világkoordináták"
msgid "Object"
msgstr "Objektum"
msgid "Translate(Relative)"
msgstr "Eltolás (relatív)"
msgid "Part"
msgstr "Tárgy"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Az aktuális forgatás visszaállítása a forgatás eszköz megnyitásakor érvényes értékre."
msgid "Rotate (absolute)"
msgstr "Forgatás (abszolút)"
msgid "Reset current rotation to real zeros."
msgstr "Az aktuális forgatás visszaállítása valódi nullára."
msgid "Part coordinates"
msgstr "Alkatrész koordináták"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Méret"
@@ -518,12 +521,6 @@ msgstr "Rés"
msgid "Spacing"
msgstr "Térköz"
msgid "Part"
msgstr "Tárgy"
msgid "Object"
msgstr "Objektum"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1867,23 +1864,30 @@ msgstr "Projekt megnyitása"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "A Orca Slicer ezen verziója túl régi és a legfrissebb verzióra kell frissíteni, mielőtt rendesen használható lenne"
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1892,6 +1896,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1971,8 +1981,9 @@ msgstr "A felhőben tárolt felhasználói beállítások száma elérte a limit
msgid "Sync user presets"
msgstr "Felhasználói beállítások szinkronizálása"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr "Az beállítás tartalom túl nagy a cloud-al való szinkronizáláshoz (több mint 1 MB). Csökkentsd a beállítás méretet az egyéni konfigurációk eltávolításával, vagy használd csak helyileg."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
msgid "%s updated from %s to %s"
@@ -2193,6 +2204,9 @@ msgstr "Orca kocka"
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Orca tolerancia teszt"
@@ -5257,6 +5271,9 @@ msgstr "Túlnyúlások"
msgid "Outline"
msgstr "Körvonal"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5300,7 +5317,7 @@ msgstr "Térfogat:"
msgid "Size:"
msgstr "Méret:"
#, 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-kód ú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)."
@@ -8040,6 +8057,35 @@ msgstr "Beállítások megjelenítése STEP fájl importálásakor"
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "Ha engedélyezve van, STEP fájl importálásakor paraméterbeállítási párbeszédablak jelenik meg."
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr "Minőségi szint Draco exporthoz"
@@ -8055,6 +8101,12 @@ msgstr ""
"0 = veszteségmentes tömörítés (a geometria teljes pontossággal megmarad). Az érvényes veszteséges értékek 8 és 30 között vannak.\n"
"Az alacsonyabb értékek kisebb fájlokat eredményeznek, de több geometriai részlet vész el; a magasabb értékek több részletet őriznek meg nagyobb fájlméret árán."
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Beállítás"
@@ -12415,6 +12467,18 @@ msgstr "Kis kerületek küszöbértéke"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "A kis peremek hosszának küszöbértékét határozza meg. Az alapértelmezett érték 0 mm"
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "Falak nyomtatási sorrendje"
@@ -12603,25 +12667,26 @@ msgstr ""
"2. Jegyezd fel az optimális PA értéket minden volumetrikus áramlási sebességhez és gyorsuláshoz. Az áramlási számot úgy találhatod meg, hogy a színséma legördülő menüben az áramlást választod, majd a vízszintes csúszkát a PA mintavonalak fölé mozgatod. A számnak az oldal alján kell megjelenjen. Az ideális PA értéknek csökkennie kell a volumetrikus áramlás növekedésével. Ha nem így van, ellenőrizd, hogy az extrudered megfelelően működik-e. Minél lassabban és kisebb gyorsulással nyomtatsz, annál nagyobb az elfogadható PA értékek tartománya. Ha nincs látható különbség, használd a gyorsabb tesztből származó PA értéket\n"
"3. Add meg a PA értékek, az áramlás és a gyorsulás hármasait az itt található szövegmezőben, majd mentsd el a filamentprofilt."
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "Adaptív nyomáselőtolás engedélyezése túlnyúlásokhoz (béta)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid "Pressure advance for bridges"
msgstr "Nyomáselőtolás hidakhoz"
msgid ""
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"Nyomáselőtolási érték hidakhoz. A kikapcsoláshoz állítsd 0-ra.\n"
"\n"
"Hidak nyomtatásakor az alacsonyabb PA érték segít csökkenteni a hidak után közvetlenül jelentkező enyhe alulextrudálás megjelenését. Ezt az okozza, hogy a levegőbe nyomtatás során nyomásesés lép fel a fúvókában, amit az alacsonyabb PA részben ellensúlyoz."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Alapértelmezett vonalszélesség, ha a többi vonalszélesség 0-ra van állítva. Ha százalékban van megadva, a fúvókaátmérő alapján lesz kiszámítva."
@@ -13004,6 +13069,22 @@ msgstr "Tömör kitöltés iránya"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "A tömör kitöltési minta szöge, amely a vonalak kezdő- vagy fő irányát szabályozza."
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Kitöltés sűrűsége"
@@ -15857,6 +15938,14 @@ msgstr "Sokszögelt lyuk elforgatása"
msgid "Rotate the polyhole every layer."
msgstr "A sokszögelt lyuk forgatása rétegenként."
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "G-kód miniatűrök"
@@ -19208,6 +19297,12 @@ msgstr "Háromszögfelületek száma"
msgid "Calculating, please wait..."
msgstr "Számítás folyamatban, kérlek várj..."
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -19616,6 +19711,39 @@ msgstr ""
"Kunkorodás elkerülése\n"
"Tudtad, hogy a kunkorodásra hajlamos anyagok (például ABS) nyomtatásakor a tárgyasztal hőmérsékletének növelése csökkentheti a kunkorodás valószínűségét?"
#~ msgid "Object coordinates"
#~ msgstr "Objektum koordináták"
#~ msgid "World coordinates"
#~ msgstr "Világkoordináták"
#~ msgid "Translate(Relative)"
#~ msgstr "Eltolás (relatív)"
#~ msgid "Rotate (absolute)"
#~ msgstr "Forgatás (abszolút)"
#~ msgid "Part coordinates"
#~ msgstr "Alkatrész koordináták"
#~ msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#~ msgstr "Az beállítás tartalom túl nagy a cloud-al való szinkronizáláshoz (több mint 1 MB). Csökkentsd a beállítás méretet az egyéni konfigurációk eltávolításával, vagy használd csak helyileg."
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Adaptív nyomáselőtolás engedélyezése túlnyúlásokhoz (béta)"
#~ msgid "Pressure advance for bridges"
#~ msgstr "Nyomáselőtolás hidakhoz"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "Nyomáselőtolási érték hidakhoz. A kikapcsoláshoz állítsd 0-ra.\n"
#~ "\n"
#~ "Hidak nyomtatásakor az alacsonyabb PA érték segít csökkenteni a hidak után közvetlenül jelentkező enyhe alulextrudálás megjelenését. Ezt az okozza, hogy a levegőbe nyomtatás során nyomásesés lép fel a fúvókában, amit az alacsonyabb PA részben ellensúlyoz."
#~ msgid "Filament Sync Options"
#~ msgstr "Filament szinkronizálási opciók"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -397,27 +397,30 @@ msgstr "Ripristina posizione"
msgid "Reset rotation"
msgstr "Reimposta rotazione"
msgid "Object coordinates"
msgstr "Coordinate oggetto"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Coordinate reali"
msgid "Object"
msgstr "Oggetto"
msgid "Translate(Relative)"
msgstr "Trasla (relativo)"
msgid "Part"
msgstr "Parte"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Reimposta la rotazione corrente al valore di apertura dello strumento."
msgid "Rotate (absolute)"
msgstr "Ruota (assoluto)"
msgid "Reset current rotation to real zeros."
msgstr "Reimposta la rotazione corrente a zero reale."
msgid "Part coordinates"
msgstr "Coordinate della parte"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Dimensioni"
@@ -521,12 +524,6 @@ msgstr ""
msgid "Spacing"
msgstr "Spaziatura"
msgid "Part"
msgstr "Parte"
msgid "Object"
msgstr "Oggetto"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1869,23 +1866,30 @@ msgstr "Apri progetto"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "La versione di OrcaSlicer è obsoleta. Devi aggiornarla all'ultima versione prima di poter utilizzare normalmente il programma."
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1894,6 +1898,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1973,8 +1983,9 @@ msgstr "Il numero di profili utente memorizzati nel cloud ha superato il limite
msgid "Sync user presets"
msgstr "Sincronizza profili utente"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr "Il contenuto del profilo è troppo grande per essere sincronizzato con il cloud (supera 1 MB). Si prega di ridurre le dimensioni del profilo rimuovendo le configurazioni personalizzate oppure utilizzarlo solo in locale."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
msgid "%s updated from %s to %s"
@@ -2195,6 +2206,9 @@ msgstr "Cubo di Orca"
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Test di tolleranza di OrcaSlicer"
@@ -5258,6 +5272,9 @@ msgstr "Sporgenze"
msgid "Outline"
msgstr "Contorno"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5301,7 +5318,7 @@ msgstr ""
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)."
@@ -8047,6 +8064,35 @@ msgstr "Mostra opzioni durante l'importazione di file STEP"
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "Se abilitato, una finestra di dialogo per le impostazioni dei parametri apparirà durante l'importazione di file STEP."
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr "Livello di qualità per l'esportazione Draco"
@@ -8062,6 +8108,12 @@ msgstr ""
"0 = compressione senza perdita (la geometria viene preservata a piena precisione). I valori con perdita validi vanno da 8 a 30.\n"
"Valori più bassi producono file più piccoli ma perdono più dettagli geometrici; valori più alti preservano più dettagli a costo di file più grandi."
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Profilo"
@@ -12398,6 +12450,18 @@ msgstr "Soglia perimetri piccoli"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "Imposta la soglia per la lunghezza dei perimetri piccoli. La soglia predefinita è 0 mm."
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "Ordine stampa pareti"
@@ -12586,25 +12650,26 @@ msgstr ""
"2. Prendi nota del valore AP ottimale per ogni portata volumetrica e accelerazione. Puoi trovare il numero relativo alla portata volumetrica dal menu a discesa dello schema di colori e spostando il cursore orizzontale sulle linee del modello AP. Il numero dovrebbe essere visibile nella parte inferiore della pagina. Il valore AP ideale dovrebbe decrescere all'aumentare della portata volumetrica. In caso contrario, verifica che l'estrusore funzioni correttamente. Più lentamente e con meno accelerazione stampi, più ampio è l'intervallo di valori AP accettabili. Se non è visibile alcuna differenza, usa il valore AP dal test più veloce\n"
"3. Inserisci le triplette dei valori di anticipo di pressione, portata e accelerazione nella casella di testo qui e salva il tuo profilo di filamento."
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "Abilita anticipo di pressione adattiva per sporgenze (beta)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid "Pressure advance for bridges"
msgstr "Anticipo di pressione per ponti"
msgid ""
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"Valore di anticipo di pressione per i ponti. Impostare su 0 per disabilitare.\n"
"\n"
"Un valore AP più basso durante la stampa di ponti aiuta a ridurre la comparsa di una leggera sottoestrusione subito dopo l'estrusione dei ponti. Ciò è causato dalla caduta di pressione nell'ugello durante la stampa in aria e un anticipo di pressione più basso aiuta a contrastarla."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Larghezza di linea predefinita se le altre larghezze di linea sono impostate su 0. Se espresso come una %, verrà calcolato sul diametro del ugello."
@@ -12987,6 +13052,22 @@ msgstr "Direzione riempimento solido"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "Angolo per il motivo del riempimento solido, che controlla l'inizio o la direzione principale delle linee."
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Densità riempimento sparso"
@@ -15824,6 +15905,14 @@ msgstr "Torsione poliforo"
msgid "Rotate the polyhole every layer."
msgstr "Ruota il poliforo in ogni strato."
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "Miniature G-code"
@@ -19191,6 +19280,12 @@ msgstr "Numero di facce triangolari"
msgid "Calculating, please wait..."
msgstr "Calcolo in corso, attendere..."
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -19596,6 +19691,39 @@ msgstr ""
"Evita le deformazioni\n"
"Sapevi che quando si stampano materiali soggetti a deformazioni come l'ABS, aumentare in modo appropriato la temperatura del piano riscaldato può ridurre la probabilità di deformazione?"
#~ msgid "Object coordinates"
#~ msgstr "Coordinate oggetto"
#~ msgid "World coordinates"
#~ msgstr "Coordinate reali"
#~ msgid "Translate(Relative)"
#~ msgstr "Trasla (relativo)"
#~ msgid "Rotate (absolute)"
#~ msgstr "Ruota (assoluto)"
#~ msgid "Part coordinates"
#~ msgstr "Coordinate della parte"
#~ msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#~ msgstr "Il contenuto del profilo è troppo grande per essere sincronizzato con il cloud (supera 1 MB). Si prega di ridurre le dimensioni del profilo rimuovendo le configurazioni personalizzate oppure utilizzarlo solo in locale."
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Abilita anticipo di pressione adattiva per sporgenze (beta)"
#~ msgid "Pressure advance for bridges"
#~ msgstr "Anticipo di pressione per ponti"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "Valore di anticipo di pressione per i ponti. Impostare su 0 per disabilitare.\n"
#~ "\n"
#~ "Un valore AP più basso durante la stampa di ponti aiuta a ridurre la comparsa di una leggera sottoestrusione subito dopo l'estrusione dei ponti. Ciò è causato dalla caduta di pressione nell'ugello durante la stampa in aria e un anticipo di pressione più basso aiuta a contrastarla."
#~ msgid "Filament Sync Options"
#~ msgstr "Opzioni sincronizzazione filamento"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -397,27 +397,30 @@ msgstr "位置をリセット"
msgid "Reset rotation"
msgstr "回転をリセット"
msgid "Object coordinates"
msgstr "オブジェクト座標"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "空間座標"
msgid "Object"
msgstr "OBJ"
msgid "Translate(Relative)"
msgstr "移動(相対)"
msgid "Part"
msgstr "パーツ"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "回転ツールを開いた時の値にリセットします。"
msgid "Rotate (absolute)"
msgstr "回転(絶対)"
msgid "Reset current rotation to real zeros."
msgstr "現在の回転を0にリセットします。"
msgid "Part coordinates"
msgstr "パーツ座標"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "サイズ"
@@ -521,12 +524,6 @@ msgstr "ギャップ"
msgid "Spacing"
msgstr "間隔"
msgid "Part"
msgstr "パーツ"
msgid "Object"
msgstr "OBJ"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1868,23 +1865,30 @@ msgstr "プロジェクトを開く"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "現在のOrca Slicerはバージョンが古いため使用できません、アップデートしてください。"
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1893,6 +1897,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1967,7 +1977,8 @@ msgstr "クラウドにキャッシュされたユーザープリセット数が
msgid "Sync user presets"
msgstr "ユーザープリセットを同期"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
@@ -2189,6 +2200,9 @@ msgstr ""
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Orca公差テスト"
@@ -5231,6 +5245,9 @@ msgstr "オーバーハング"
msgid "Outline"
msgstr "アウトライン"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5274,7 +5291,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。"
@@ -8005,6 +8022,35 @@ msgstr "STEPファイルインポート時にオプションを表示"
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "有効にすると、STEPファイルインポート時にパラメータ設定ダイアログが表示されます。"
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr "Dracoエクスポートの品質レベル"
@@ -8020,6 +8066,12 @@ msgstr ""
"0 = 可逆圧縮ジオメトリは完全な精度で保持されます。有効な非可逆値の範囲は8〜30です。\n"
"低い値はファイルサイズが小さくなりますがジオメトリの詳細が失われます。高い値はファイルサイズが大きくなりますがより多くの詳細が保持されます。"
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "プリセット"
@@ -12201,6 +12253,18 @@ msgstr "小さな外周のしきい値"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr ""
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "壁の印刷順序"
@@ -12356,21 +12420,25 @@ msgid ""
"3. Enter the triplets of PA values, Flow and Accelerations in the text box here and save your filament profile."
msgstr ""
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgstr ""
msgid "Pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
@@ -12745,6 +12813,22 @@ msgstr ""
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr ""
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "充填密度"
@@ -15410,6 +15494,14 @@ msgstr ""
msgid "Rotate the polyhole every layer."
msgstr ""
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "Gコードのサムネイル"
@@ -18679,6 +18771,12 @@ msgstr "三角面の数"
msgid "Calculating, please wait..."
msgstr "計算中、お待ちください..."
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -19061,6 +19159,21 @@ msgstr ""
"反りを避ける\n"
"ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか"
#~ msgid "Object coordinates"
#~ msgstr "オブジェクト座標"
#~ msgid "World coordinates"
#~ msgstr "空間座標"
#~ msgid "Translate(Relative)"
#~ msgstr "移動(相対)"
#~ msgid "Rotate (absolute)"
#~ msgstr "回転(絶対)"
#~ msgid "Part coordinates"
#~ msgstr "パーツ座標"
#~ msgid "Filament Sync Options"
#~ msgstr "フィラメント同期オプション"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: 2025-06-02 17:12+0900\n"
"Last-Translator: crwusiz <crwusiz@gmail.com>\n"
"Language-Team: \n"
@@ -401,27 +401,30 @@ msgstr "위치 초기화"
msgid "Reset rotation"
msgstr "회전 재설정"
msgid "Object coordinates"
msgstr "객체 좌표"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "영역 좌표"
msgid "Object"
msgstr "객체"
msgid "Translate(Relative)"
msgstr "이동(상대)"
msgid "Part"
msgstr "부품"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "회전 도구를 열었을 때의 값으로 현재 회전을 초기화합니다."
msgid "Rotate (absolute)"
msgstr "회전 (절대)"
msgid "Reset current rotation to real zeros."
msgstr "현재 회전을 0으로 초기화합니다."
msgid "Part coordinates"
msgstr "파트 좌표"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "크기"
@@ -525,12 +528,6 @@ msgstr "간격"
msgid "Spacing"
msgstr "간격"
msgid "Part"
msgstr "부품"
msgid "Object"
msgstr "객체"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1874,23 +1871,30 @@ msgstr "프로젝트 열기"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "Orca Slicer의 버전이 너무 낮아 최신 버전으로 업데이트해야 정상적으로 사용 가능합니다"
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1899,6 +1903,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1973,7 +1983,8 @@ msgstr "클라우드에 캐시된 사용자 사전 설정 수가 상한을 초
msgid "Sync user presets"
msgstr "사용자 사전 설정 동기화"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
@@ -2196,6 +2207,9 @@ msgstr "Orca 큐브"
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Orca 공차 테스트"
@@ -5257,6 +5271,9 @@ msgstr "오버행"
msgid "Outline"
msgstr "외곽선"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5300,7 +5317,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 = %.2lf mm에서 Gcode 경로 충돌이 발견되었습니다. 충돌하는 객체를 더 멀리 분리하세요 (%s <-> %s)."
@@ -8032,6 +8049,35 @@ msgstr ""
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr ""
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr ""
@@ -8044,6 +8090,12 @@ msgid ""
"Lower values produce smaller files but lose more geometric detail; higher values preserve more detail at the cost of larger files."
msgstr ""
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "사전 설정"
@@ -12324,6 +12376,18 @@ msgstr "작은 둘레 임계값"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "작은 둘레 길이에 대한 임계값을 설정합니다. 기본 임계값은 0mm입니다"
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "벽 출력 순서"
@@ -12508,25 +12572,26 @@ msgstr ""
"2. 각 압출 유속 및 가속도에 대한 최적의 PA 값을 기록해 두십시오. 색상 구성표 드롭다운에서 흐름을 선택하고 PA 패턴 라인 위로 수평 슬라이더를 이동하여 흐름 번호를 찾을 수 있습니다. 페이지 하단에 번호가 표시되어야 합니다. 이상적인 PA 값은 압출 압출량이 높을수록 감소해야 합니다. 그렇지 않은 경우 압출기가 올바르게 작동하는지 확인하십시오. 출력 속도가 느리고 가속도가 낮을수록 허용되는 PA 값의 범위는 더 커집니다. 차이가 보이지 않으면 더 빠른 테스트의 PA 값을 사용하십시오.\n"
"3. 여기 텍스트 상자에 PA 값, 흐름 및 가속도의 세 가지 값을 입력하고 필라멘트 프로필을 저장하세요."
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "오버행에 대한 적응형 PA 활성화(베타)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid "Pressure advance for bridges"
msgstr "브릿지를 위한 PA"
msgid ""
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"브릿지의 PA 값입니다. 비활성화하려면 0으로 설정합니다.\n"
"\n"
" 브릿지를 프린팅할 때 PA 값이 낮으면 브릿지 직후에 약간의 언더 압출이 나타나는 것을 줄이는 데 도움이 됩니다. 이는 공중에서 출력할 때 노즐의 압력 강하로 인해 발생하며 PA가 낮을수록 이를 방지하는 데 도움이 됩니다."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "다른 선 너비가 0으로 설정된 경우 기본 선 너비입니다. %로 입력 시 노즐 직경에 대한 비율로 계산됩니다."
@@ -12902,6 +12967,22 @@ msgstr "꽉찬 채우기 방향"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "선의 시작 또는 기본 방향을 제어하는 솔리드 채우기 패턴의 각도"
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "드문 채우기 밀도"
@@ -15682,6 +15763,14 @@ msgstr "폴리홀 회전"
msgid "Rotate the polyhole every layer."
msgstr "레이어마다 폴리홀을 회전시킵니다."
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "Gcode 미리보기"
@@ -19027,6 +19116,12 @@ msgstr "삼각형 패싯 수"
msgid "Calculating, please wait..."
msgstr "계산 중, 잠시만 기다려주세요..."
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -19432,6 +19527,36 @@ msgstr ""
"뒤틀림 방지\n"
"ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?"
#~ msgid "Object coordinates"
#~ msgstr "객체 좌표"
#~ msgid "World coordinates"
#~ msgstr "영역 좌표"
#~ msgid "Translate(Relative)"
#~ msgstr "이동(상대)"
#~ msgid "Rotate (absolute)"
#~ msgstr "회전 (절대)"
#~ msgid "Part coordinates"
#~ msgstr "파트 좌표"
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "오버행에 대한 적응형 PA 활성화(베타)"
#~ msgid "Pressure advance for bridges"
#~ msgstr "브릿지를 위한 PA"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "브릿지의 PA 값입니다. 비활성화하려면 0으로 설정합니다.\n"
#~ "\n"
#~ " 브릿지를 프린팅할 때 PA 값이 낮으면 브릿지 직후에 약간의 언더 압출이 나타나는 것을 줄이는 데 도움이 됩니다. 이는 공중에서 출력할 때 노즐의 압력 강하로 인해 발생하며 PA가 낮을수록 이를 방지하는 데 도움이 됩니다."
#~ msgid "View control settings"
#~ msgstr "시점 컨트롤 설정"

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -397,27 +397,30 @@ msgstr "Positie herstellen"
msgid "Reset rotation"
msgstr "Reset rotatie"
msgid "Object coordinates"
msgstr "Objectcoördinaten"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Wereldcoördinaten"
msgid "Object"
msgstr "Voorwerp"
msgid "Translate(Relative)"
msgid "Part"
msgstr "Onderdeel"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr ""
msgid "Rotate (absolute)"
msgstr ""
msgid "Reset current rotation to real zeros."
msgstr ""
msgid "Part coordinates"
msgstr ""
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Maat"
@@ -521,12 +524,6 @@ msgstr "Kloof"
msgid "Spacing"
msgstr "Uitlijning"
msgid "Part"
msgstr "Onderdeel"
msgid "Object"
msgstr "Voorwerp"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1852,23 +1849,30 @@ msgstr "Project openen"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "De versie van Orca Slicer is te oud en dient te worden bijgewerkt naar de nieuwste versie voordat deze normaal kan worden gebruikt"
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1877,6 +1881,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1944,7 +1954,8 @@ msgstr "Het aantal gebruikersvoorinstellingen dat in de cloud is opgeslagen, hee
msgid "Sync user presets"
msgstr "Synchroniseer gebruikersvoorinstellingen"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
@@ -2166,6 +2177,9 @@ msgstr "Orca-kubus"
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr ""
@@ -5197,6 +5211,9 @@ msgstr "Overhangen"
msgid "Outline"
msgstr "Omtrek"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5240,7 +5257,7 @@ msgstr ""
msgid "Size:"
msgstr "Maat:"
#, 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 ""
@@ -7949,6 +7966,35 @@ msgstr ""
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr ""
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr ""
@@ -7961,6 +8007,12 @@ msgid ""
"Lower values produce smaller files but lose more geometric detail; higher values preserve more detail at the cost of larger files."
msgstr ""
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Voorinstelling"
@@ -12133,6 +12185,18 @@ msgstr ""
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "Dit stelt de drempel voor kleine omtreklengte in. De standaarddrempel is 0 mm"
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr ""
@@ -12288,21 +12352,25 @@ msgid ""
"3. Enter the triplets of PA values, Flow and Accelerations in the text box here and save your filament profile."
msgstr ""
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgstr ""
msgid "Pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
@@ -12670,6 +12738,22 @@ msgstr ""
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr ""
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Vulling percentage"
@@ -15338,6 +15422,14 @@ msgstr ""
msgid "Rotate the polyhole every layer."
msgstr ""
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "G-code miniaturen"
@@ -18611,6 +18703,12 @@ msgstr ""
msgid "Calculating, please wait..."
msgstr ""
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -19016,6 +19114,12 @@ 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?"
#~ msgid "Object coordinates"
#~ msgstr "Objectcoördinaten"
#~ msgid "World coordinates"
#~ msgstr "Wereldcoördinaten"
#~ msgid "View control settings"
#~ msgstr "Besturing instellingen weergeven"

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-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: \n"
"Last-Translator: Krzysztof Morga <<tlumaczeniebs@gmail.com>>\n"
"Language-Team: \n"
@@ -399,27 +399,30 @@ msgstr "Zresetuj pozycję"
msgid "Reset rotation"
msgstr "Zresetuj obrót"
msgid "Object coordinates"
msgstr "Koordynaty obiektu"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Współrzędne"
msgid "Object"
msgstr "Obiekt"
msgid "Translate(Relative)"
msgstr "Przesunięcie równoległe (Względne)"
msgid "Part"
msgstr "Część"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Zresetuj bieżący obrót do wartości ustawionej przy otwarciu narzędzia obrotu."
msgid "Rotate (absolute)"
msgstr "Obrót (bezwzględny)"
msgid "Reset current rotation to real zeros."
msgstr "Zresetuj bieżący obrót do wartości zerowej."
msgid "Part coordinates"
msgstr "Koordynaty części"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Rozmiar"
@@ -523,12 +526,6 @@ msgstr "Szczelina"
msgid "Spacing"
msgstr "Rozstaw"
msgid "Part"
msgstr "Część"
msgid "Object"
msgstr "Obiekt"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1875,23 +1872,30 @@ msgstr "Otwórz projekt"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "Wersja Orca Slicer jest przestarzała i musi zostać uaktualniona do najnowszej wersji, aby działać normalnie"
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1900,6 +1904,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1967,7 +1977,8 @@ msgstr "Liczba zapisanych w chmurze ustawień użytkownika przekroczyła maksyma
msgid "Sync user presets"
msgstr "Synchronizuj ustawienia użytkownika"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
@@ -2189,6 +2200,9 @@ msgstr "Sześcian Orca"
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Test tolerancji Orca"
@@ -5254,6 +5268,9 @@ msgstr "Nawisy"
msgid "Outline"
msgstr "kontur"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5297,7 +5314,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)."
@@ -8042,6 +8059,35 @@ msgstr ""
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr ""
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr ""
@@ -8054,6 +8100,12 @@ msgid ""
"Lower values produce smaller files but lose more geometric detail; higher values preserve more detail at the cost of larger files."
msgstr ""
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Profil"
@@ -12343,6 +12395,18 @@ msgstr "Próg małego obrysu"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "To ustawia próg długości małych obrysów. Domyślny próg to 0 mm"
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "Kolejność drukowania ścian"
@@ -12523,25 +12587,26 @@ msgstr ""
"2. Zwróć uwagę na optymalną wartość PA dla każdej wolumetrycznej prędkości przepływu i przyspieszenia. Możesz znaleźć numer przepływu, wybierając przepływ z rozwijanego schematu kolorów i przesuwając poziomy suwak nad liniami wzoru PA. Numer powinien być widoczny na dole strony. Idealna wartość PA powinna maleć, im większy jest przepływ objętościowy. Jeśli tak nie jest, potwierdź, że ekstruder działa poprawnie. Im wolniej i z mniejszym przyspieszeniu drukujesz, tym jest większy zakres dopuszczalnych wartości PA. Jeśli różnica nie jest widoczna, należy użyć wartości PA z szybszego testu.\n"
"3. Wprowadź trójki wartości PA, przepływu i przyspieszenia w polu tekstowym tutaj i zapisz swój profil filamentu."
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "Włącz adaptacyjny wzrost ciśnienia dla nawisów (beta)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid "Pressure advance for bridges"
msgstr "Wzrost ciśnienia (PA) dla mostów"
msgid ""
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"Wartość wzrostu ciśnienia dla mostów. Ustaw na 0, aby wyłączyć.\n"
"\n"
"Niższa wartość PA podczas drukowania mostów pomaga zredukować widoczność lekkiego niedoboru materiału, który może wystąpić bezpośrednio po ich wydruku. Jest to spowodowane spadkiem ciśnienia w dyszy podczas drukowania w powietrzu, a niższy PA pomaga temu przeciwdziałać."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Domyślna szerokość linii, jeśli inne szerokości linii są ustawione na 0. Jeśli wyrażona w %, zostanie obliczona na podstawie średnicy dyszy."
@@ -12917,6 +12982,22 @@ msgstr "Kierunek wzoru pełnego wypełnienia"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "Kąt wyznaczający główny kierunek linii dla wzoru pełnego wypełnienia"
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Gęstość wypełnienia"
@@ -15698,6 +15779,14 @@ msgstr "Skręt poliotworu"
msgid "Rotate the polyhole every layer."
msgstr "Obracaj poliotwor co warstwę."
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "Miniatury G-code"
@@ -19038,6 +19127,12 @@ msgstr "Liczba trójkątnych faset"
msgid "Calculating, please wait..."
msgstr "Obliczanie, proszę czekać..."
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -19446,6 +19541,36 @@ 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ń?"
#~ msgid "Object coordinates"
#~ msgstr "Koordynaty obiektu"
#~ msgid "World coordinates"
#~ msgstr "Współrzędne"
#~ msgid "Translate(Relative)"
#~ msgstr "Przesunięcie równoległe (Względne)"
#~ msgid "Rotate (absolute)"
#~ msgstr "Obrót (bezwzględny)"
#~ msgid "Part coordinates"
#~ msgstr "Koordynaty części"
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Włącz adaptacyjny wzrost ciśnienia dla nawisów (beta)"
#~ msgid "Pressure advance for bridges"
#~ msgstr "Wzrost ciśnienia (PA) dla mostów"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "Wartość wzrostu ciśnienia dla mostów. Ustaw na 0, aby wyłączyć.\n"
#~ "\n"
#~ "Niższa wartość PA podczas drukowania mostów pomaga zredukować widoczność lekkiego niedoboru materiału, który może wystąpić bezpośrednio po ich wydruku. Jest to spowodowane spadkiem ciśnienia w dyszy podczas drukowania w powietrzu, a niższy PA pomaga temu przeciwdziałać."
#~ msgid "View control settings"
#~ msgstr "Ustawienia kontrolowania widoku"

File diff suppressed because it is too large Load Diff

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-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-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"
@@ -400,27 +400,30 @@ msgstr "Сброс позиции"
msgid "Reset rotation"
msgstr "Сброс вращения"
msgid "Object coordinates"
msgstr "Относительно модели"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Относительно стола"
msgid "Object"
msgstr "Модель"
msgid "Translate(Relative)"
msgstr "Перемещение (относительное)"
msgid "Part"
msgstr "Часть"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Сбросить последние изменения ориентации"
msgid "Rotate (absolute)"
msgstr "Поворот"
msgid "Reset current rotation to real zeros."
msgstr "Сбросить ориентацию до изначальной"
msgid "Part coordinates"
msgstr "Относительно части"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Размер"
@@ -527,12 +530,6 @@ msgstr "Зазор"
msgid "Spacing"
msgstr "Отступ"
msgid "Part"
msgstr "Часть"
msgid "Object"
msgstr "Модель"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1907,23 +1904,30 @@ msgstr "Открыть проект"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "Слишком старая версия Orca Slicer. Для корректной работы обновите программу до последней версии."
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1932,6 +1936,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -2007,7 +2017,8 @@ msgstr "Количество пользовательских профилей,
msgid "Sync user presets"
msgstr "Синхронизировать пользовательские профили"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
@@ -2217,6 +2228,9 @@ msgstr "Куб Orca"
msgid "OrcaSliced Combo"
msgstr "Нарезанная Orca"
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Тест точности Orca"
@@ -5299,6 +5313,9 @@ msgstr "Нависания"
msgid "Outline"
msgstr "Обводка выбранного"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5341,7 +5358,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-коде на %d слое (z = %.2lf мм) обнаружен конфликт путей. Пожалуйста, разместите конфликтующие модели дальше друг от друга (%s <-> %s)."
@@ -8117,6 +8134,35 @@ msgstr "Показывать настройки импорта STEP"
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "Если включено, во время импорта STEP файла появится диалоговое окно настроек параметров импорта."
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr "Качество при экспорте в DRC"
@@ -8132,6 +8178,12 @@ msgstr ""
"Чем меньше глубина, тем ниже качество и размер файла. Допустимый диапазон от 8 до 30.\n"
"0 сжатие без потерь (представление с максимальной точностью)."
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Профиль"
@@ -12509,6 +12561,18 @@ msgstr "Порог коротких периметров"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "Пороговое значение (радиус) для расчёта длины коротких периметров (по формуле длины окружности). Значение по умолчанию 0 мм."
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "Порядок печати периметров"
@@ -12718,27 +12782,26 @@ msgstr ""
"\n"
"3. Проверьте порядок введённых значений (PA, расход, ускорения) и сохраните профиль материала."
# Тут речь о коэффициенте PA (адаптивный коэффициент PA), а не об адаптивном
# алгоритме
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "Адаптивный PA на нависаниях (beta)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid "Pressure advance for bridges"
msgstr "Коэффициент PA на мостах"
msgid ""
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"Коэффициент Pressure Advance для мостов. Установите значение 0, если хотите отключить функцию.\n"
"\n"
"Более низкое значение PA при печати мостов помогает уменьшить появление небольшой недоэкструзии сразу после мостов. Это вызвано падением давления в сопле при печати в воздухе, и более низкое значение PA помогает предотвратить это."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Стандартная ширина линии для отключённых (установленных на 0) значений ниже. Можно указать процент от диаметра сопла."
@@ -13125,6 +13188,22 @@ msgstr "Угол шаблона сплошного заполнения"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "Угол ориентации шаблона сплошного заполнения, который определяет начало или основное направление линий."
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Плотность заполнения"
@@ -16159,6 +16238,14 @@ msgstr "Скручивание многогранника"
msgid "Rotate the polyhole every layer."
msgstr "Вращение многогранного отверстия на каждом слое."
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "Эскизы в G-коде"
@@ -19594,6 +19681,12 @@ msgstr "Количество треугольников"
msgid "Calculating, please wait..."
msgstr "Расчёт, подождите..."
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -20002,6 +20095,38 @@ msgstr ""
"Предотвращение коробления материала\n"
"Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?"
#~ msgid "Object coordinates"
#~ msgstr "Относительно модели"
#~ msgid "World coordinates"
#~ msgstr "Относительно стола"
#~ msgid "Translate(Relative)"
#~ msgstr "Перемещение (относительное)"
#~ msgid "Rotate (absolute)"
#~ msgstr "Поворот"
#~ msgid "Part coordinates"
#~ msgstr "Относительно части"
# Тут речь о коэффициенте PA (адаптивный коэффициент PA), а не об адаптивном
# алгоритме
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Адаптивный PA на нависаниях (beta)"
#~ msgid "Pressure advance for bridges"
#~ msgstr "Коэффициент PA на мостах"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "Коэффициент Pressure Advance для мостов. Установите значение 0, если хотите отключить функцию.\n"
#~ "\n"
#~ "Более низкое значение PA при печати мостов помогает уменьшить появление небольшой недоэкструзии сразу после мостов. Это вызвано падением давления в сопле при печати в воздухе, и более низкое значение PA помогает предотвратить это."
#~ msgid "Filament Sync Options"
#~ msgstr "Настройки синхронизации"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -393,27 +393,30 @@ msgstr "Återställ Position"
msgid "Reset rotation"
msgstr ""
msgid "Object coordinates"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Världskoordinater"
msgid "Object"
msgstr "Objekt"
msgid "Translate(Relative)"
msgid "Part"
msgstr "Del"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr ""
msgid "Rotate (absolute)"
msgstr ""
msgid "Reset current rotation to real zeros."
msgstr ""
msgid "Part coordinates"
msgstr ""
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Storlek"
@@ -517,12 +520,6 @@ msgstr "Glipa"
msgid "Spacing"
msgstr "Mellanrum"
msgid "Part"
msgstr "Del"
msgid "Object"
msgstr "Objekt"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1841,23 +1838,30 @@ msgstr "Öppna Projekt"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "Versionen av Orca Slicer är för låg och behöver uppdateras till den senaste versionen innan den kan användas normalt"
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1866,6 +1870,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1933,7 +1943,8 @@ msgstr "Antalet användar inställningar som cachats i molnet har överskridit d
msgid "Sync user presets"
msgstr "Synkronisera användar inställningar"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
@@ -2155,6 +2166,9 @@ msgstr ""
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr ""
@@ -5188,6 +5202,9 @@ msgstr ""
msgid "Outline"
msgstr "Kontur"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5231,7 +5248,7 @@ msgstr "Volym:"
msgid "Size:"
msgstr "Storlek:"
#, 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 ""
@@ -7938,6 +7955,35 @@ msgstr ""
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr ""
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr ""
@@ -7950,6 +7996,12 @@ msgid ""
"Lower values produce smaller files but lose more geometric detail; higher values preserve more detail at the cost of larger files."
msgstr ""
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Förinställd"
@@ -12107,6 +12159,18 @@ msgstr ""
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "Detta ställer in tröskelvärdet för liten perimeterlängd. Standardgränsen är 0mm"
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr ""
@@ -12262,21 +12326,25 @@ msgid ""
"3. Enter the triplets of PA values, Flow and Accelerations in the text box here and save your filament profile."
msgstr ""
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgstr ""
msgid "Pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
@@ -12643,6 +12711,22 @@ msgstr ""
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr ""
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Sparsam ifyllnads densitet"
@@ -15309,6 +15393,14 @@ msgstr ""
msgid "Rotate the polyhole every layer."
msgstr ""
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr ""
@@ -18578,6 +18670,12 @@ msgstr ""
msgid "Calculating, please wait..."
msgstr ""
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -18956,6 +19054,9 @@ 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?"
#~ msgid "World coordinates"
#~ msgstr "Världskoordinater"
#~ msgid "View control settings"
#~ msgstr "Kontroll inställningar"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: 2026-06-19 13:40+0700\n"
"Last-Translator: Icezaza\n"
"Language-Team: Thai\n"
@@ -387,27 +387,30 @@ msgstr "รีเซ็ตตำแหน่ง"
msgid "Reset rotation"
msgstr "รีเซ็ตการหมุน"
msgid "Object coordinates"
msgstr "พิกัดวัตถุ"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "พิกัดโลก"
msgid "Object"
msgstr "วัตถุ"
msgid "Translate(Relative)"
msgstr "เลื่อนตำแหน่ง (แบบสัมพันธ์)"
msgid "Part"
msgstr "ชิ้นส่วน"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "รีเซ็ตการหมุนปัจจุบันเป็นค่าเมื่อเปิดเครื่องมือการหมุน"
msgid "Rotate (absolute)"
msgstr "หมุน (สัมบูรณ์)"
msgid "Reset current rotation to real zeros."
msgstr "รีเซ็ตการหมุนปัจจุบันให้เป็นศูนย์จริง"
msgid "Part coordinates"
msgstr "พิกัดส่วน"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "ขนาด"
@@ -511,12 +514,6 @@ msgstr "ช่องว่าง"
msgid "Spacing"
msgstr "ระยะห่าง"
msgid "Part"
msgstr "ชิ้นส่วน"
msgid "Object"
msgstr "วัตถุ"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1850,33 +1847,32 @@ msgstr "เปิดโปรเจกต์"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "Orca Slicer เวอร์ชันต่ำเกินไปและจำเป็นต้องอัปเดตเป็นเวอร์ชันล่าสุดก่อนจึงจะสามารถใช้งานได้ตามปกติ"
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
"ความขัดแย้งในการซิงก์ Cloud: ค่าที่ตั้งไว้ล่วงหน้านี้มีเวอร์ชันใหม่กว่าใน Orca Cloud\n"
"ดึงข้อมูลจะดาวน์โหลดสำเนาจากคลาวด์ บังคับส่งจะเขียนทับด้วยค่าที่ตั้งไว้ล่วงหน้าในเครื่องของคุณ"
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"ความขัดแย้งในการซิงก์ Cloud: มีค่าที่ตั้งไว้ล่วงหน้าชื่อนี้อยู่ใน Orca Cloud แล้ว\n"
"ดึงข้อมูลจะดาวน์โหลดสำเนาจากคลาวด์ บังคับส่งจะเขียนทับด้วยค่าที่ตั้งไว้ล่วงหน้าในเครื่องของคุณ"
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
"ความขัดแย้งในการซิงก์ Cloud: ค่าที่ตั้งไว้ล่วงหน้าชื่อเดียวกันเคยถูกลบจากคลาวด์แล้ว\n"
"ลบจะลบค่าที่ตั้งไว้ล่วงหน้าในเครื่องของคุณ บังคับส่งจะเขียนทับด้วยค่าที่ตั้งไว้ล่วงหน้าในเครื่องของคุณ"
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"ความขัดแย้งในการซิงก์ Cloud: พบความขัดแย้งของค่าที่ตั้งไว้ล่วงหน้าที่ไม่คาดคิดหรือระบุไม่ได้\n"
"ดึงข้อมูลจะดาวน์โหลดสำเนาจากคลาวด์ บังคับส่งจะเขียนทับด้วยค่าที่ตั้งไว้ล่วงหน้าในเครื่องของคุณ"
msgid ""
"Force push will overwrite the cloud copy with your local preset changes.\n"
@@ -1885,6 +1881,12 @@ msgstr ""
"การบังคับส่งจะเขียนทับสำเนาบนคลาวด์ด้วยการเปลี่ยนแปลงค่าที่ตั้งไว้ล่วงหน้าในเครื่องของคุณ\n"
"คุณต้องการดำเนินการต่อหรือไม่?"
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr "แก้ไขความขัดแย้งการซิงค์คลาวด์"
@@ -1964,8 +1966,9 @@ msgstr "จำนวนค่าที่ตั้งไว้ล่วงหน
msgid "Sync user presets"
msgstr "ซิงค์การตั้งค่าล่วงหน้าของผู้ใช้"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr "เนื้อหาที่ตั้งไว้ล่วงหน้ามีขนาดใหญ่เกินกว่าจะซิงค์กับระบบคลาวด์ (เกิน 1MB) โปรดลดขนาดที่กำหนดไว้ล่วงหน้าโดยการลบการกำหนดค่าที่กำหนดเองออกหรือใช้เฉพาะในเครื่องเท่านั้น"
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
msgid "%s updated from %s to %s"
@@ -2174,6 +2177,9 @@ msgstr "ออร์ก้าคิวบ์"
msgid "OrcaSliced Combo"
msgstr "OrcaSliced Combo"
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "การทดสอบค่าความเผื่อ Orca"
@@ -5142,6 +5148,9 @@ msgstr "ส่วนยื่น"
msgid "Outline"
msgstr "เส้นขอบ"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr "มุมมองสมจริง"
@@ -5184,7 +5193,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 ที่เลเยอร์ %d, Z = %.2lfmm โปรดแยกวัตถุที่ขัดแย้งกันให้ไกลออกไป (%s <-> %s)"
@@ -7863,6 +7872,35 @@ msgstr "แสดงตัวเลือกเมื่อนำเข้าไ
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "หากเปิดใช้งาน กล่องโต้ตอบการตั้งค่าพารามิเตอร์จะปรากฏขึ้นระหว่างการนำเข้าไฟล์ STEP"
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr "ระดับคุณภาพสำหรับการส่งออกของ Draco"
@@ -7878,6 +7916,12 @@ msgstr ""
"0 = การบีบอัดแบบไม่สูญเสีย (รูปทรงเรขาคณิตจะถูกรักษาไว้อย่างแม่นยำเต็มที่) ค่าการสูญเสียที่ถูกต้องมีตั้งแต่ 8 ถึง 30\n"
"ค่าที่ต่ำกว่าจะทำให้ไฟล์มีขนาดเล็กลง แต่สูญเสียรายละเอียดทางเรขาคณิตมากขึ้น ค่าที่สูงกว่าจะรักษารายละเอียดได้มากขึ้นโดยที่ไฟล์มีขนาดใหญ่กว่า"
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "พรีเซ็ต"
@@ -12199,6 +12243,18 @@ msgstr "เกณฑ์ขอบเขตขนาดเล็ก"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "นี่เป็นการกำหนดเกณฑ์สำหรับความยาวเส้นรอบวงเล็กน้อย เกณฑ์เริ่มต้นคือ 0 มม."
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "สั่งพิมพ์ผนัง"
@@ -12383,27 +12439,26 @@ msgstr ""
"2. จดบันทึกค่า PA ที่เหมาะสมที่สุดสำหรับความเร็วการไหลและความเร่งตามปริมาตรแต่ละรายการ คุณสามารถค้นหาหมายเลขโฟลว์ได้โดยเลือกโฟลว์จากรายการสีแบบเลื่อนลง และเลื่อนแถบเลื่อนแนวนอนไปเหนือเส้นรูปแบบ PA หมายเลขควรปรากฏที่ด้านล่างของหน้า ค่า PA ในอุดมคติควรลดลงตามอัตราการไหลตามปริมาตรที่สูงขึ้น หากไม่เป็นเช่นนั้น ให้ยืนยันว่าชุดดันเส้นของคุณทำงานอย่างถูกต้อง ยิ่งคุณพิมพ์ช้าลงและเร่งความเร็วน้อยลง ช่วงของค่า PA ที่ยอมรับได้ก็จะยิ่งมากขึ้นเท่านั้น หากไม่เห็นความแตกต่าง ให้ใช้ค่า PA จากการทดสอบที่เร็วกว่า\n"
"3. ป้อนค่า PA, การไหล และความเร่งสามเท่าในกล่องข้อความที่นี่ และบันทึกโปรไฟล์เส้นพลาสติกของคุณ"
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "เปิดใช้งานการปรับPressure Advanceสำหรับระยะยื่น (เบต้า)"
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
"เปิดใช้งาน PA แบบปรับตัวสำหรับส่วนยื่นและเมื่ออัตราการไหลเปลี่ยนภายในฟีเจอร์เดียวกัน เป็นตัวเลือกทดลอง หากโปรไฟล์ PA ไม่แม่นยำ จะทำให้ผิวด้านนอกไม่สม่ำเสมอก่อนและหลังส่วนยื่น\n"
"ไม่รองรับเครื่องพิมพ์ Prusa เพราะจะหยุดชั่วคราวเพื่อประมวลผลการเปลี่ยน PA ทำให้เกิดความล่าช้าและข้อบกพร่อง"
msgid "Pressure advance for bridges"
msgstr "แรงดันล่วงหน้า (Pressure Advance)สำหรับสะพาน"
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"ค่าPressure Advanceสำหรับสะพาน ตั้งค่าเป็น 0 เพื่อปิดใช้งาน\n"
"\n"
"ค่า PA ที่ต่ำลงเมื่อพิมพ์บริดจ์จะช่วยลดลักษณะที่ปรากฏเล็กน้อยจากการอัดขึ้นรูปทันทีหลังจากบริดจ์ สาเหตุนี้เกิดจากแรงดันตกในหัวฉีดเมื่อพิมพ์ในอากาศ และค่า PA ที่ต่ำกว่าจะช่วยแก้ปัญหานี้ได้"
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "ความกว้างของเส้นเริ่มต้นหากความกว้างของเส้นอื่นตั้งค่าเป็น 0 หากแสดงเป็น % ระบบจะคำนวณตามเส้นผ่านศูนย์กลางของหัวฉีด"
@@ -12775,6 +12830,22 @@ msgstr "ทิศทางไส้ในแบบทึบ"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "มุมสำหรับรูปแบบไส้ในแบบทึบ ซึ่งควบคุมจุดเริ่มต้นหรือทิศทางหลักของเส้น"
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "ความหนาแน่นไส้ในแบบโปร่ง"
@@ -15535,6 +15606,14 @@ msgstr "บิดรูหลายรู"
msgid "Rotate the polyhole every layer."
msgstr "หมุนโพลีโฮลทุกชั้น"
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "ภาพขนาดย่อ G-code"
@@ -18858,6 +18937,12 @@ msgstr "จำนวนด้านสามเหลี่ยม"
msgid "Calculating, please wait..."
msgstr "กำลังคำนวณ โปรดรอสักครู่..."
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr "ชุดค่าที่ตั้งไว้ล่วงหน้า"
@@ -19259,6 +19344,74 @@ msgstr ""
"หลีกเลี่ยงการบิดเบี้ยว\n"
"คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้"
#~ msgid "Object coordinates"
#~ msgstr "พิกัดวัตถุ"
#~ msgid "World coordinates"
#~ msgstr "พิกัดโลก"
#~ msgid "Translate(Relative)"
#~ msgstr "เลื่อนตำแหน่ง (แบบสัมพันธ์)"
#~ msgid "Rotate (absolute)"
#~ msgstr "หมุน (สัมบูรณ์)"
#~ msgid "Part coordinates"
#~ msgstr "พิกัดส่วน"
#~ msgid ""
#~ "Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "ความขัดแย้งในการซิงก์ Cloud: ค่าที่ตั้งไว้ล่วงหน้านี้มีเวอร์ชันใหม่กว่าใน Orca Cloud\n"
#~ "ดึงข้อมูลจะดาวน์โหลดสำเนาจากคลาวด์ บังคับส่งจะเขียนทับด้วยค่าที่ตั้งไว้ล่วงหน้าในเครื่องของคุณ"
#~ msgid ""
#~ "Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "ความขัดแย้งในการซิงก์ Cloud: มีค่าที่ตั้งไว้ล่วงหน้าชื่อนี้อยู่ใน Orca Cloud แล้ว\n"
#~ "ดึงข้อมูลจะดาวน์โหลดสำเนาจากคลาวด์ บังคับส่งจะเขียนทับด้วยค่าที่ตั้งไว้ล่วงหน้าในเครื่องของคุณ"
#~ msgid ""
#~ "Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
#~ "Delete will delete your local preset. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "ความขัดแย้งในการซิงก์ Cloud: ค่าที่ตั้งไว้ล่วงหน้าชื่อเดียวกันเคยถูกลบจากคลาวด์แล้ว\n"
#~ "ลบจะลบค่าที่ตั้งไว้ล่วงหน้าในเครื่องของคุณ บังคับส่งจะเขียนทับด้วยค่าที่ตั้งไว้ล่วงหน้าในเครื่องของคุณ"
#~ msgid ""
#~ "Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "ความขัดแย้งในการซิงก์ Cloud: พบความขัดแย้งของค่าที่ตั้งไว้ล่วงหน้าที่ไม่คาดคิดหรือระบุไม่ได้\n"
#~ "ดึงข้อมูลจะดาวน์โหลดสำเนาจากคลาวด์ บังคับส่งจะเขียนทับด้วยค่าที่ตั้งไว้ล่วงหน้าในเครื่องของคุณ"
#~ msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#~ msgstr "เนื้อหาที่ตั้งไว้ล่วงหน้ามีขนาดใหญ่เกินกว่าจะซิงค์กับระบบคลาวด์ (เกิน 1MB) โปรดลดขนาดที่กำหนดไว้ล่วงหน้าโดยการลบการกำหนดค่าที่กำหนดเองออกหรือใช้เฉพาะในเครื่องเท่านั้น"
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "เปิดใช้งานการปรับPressure Advanceสำหรับระยะยื่น (เบต้า)"
#~ msgid ""
#~ "Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
#~ "Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
#~ msgstr ""
#~ "เปิดใช้งาน PA แบบปรับตัวสำหรับส่วนยื่นและเมื่ออัตราการไหลเปลี่ยนภายในฟีเจอร์เดียวกัน เป็นตัวเลือกทดลอง หากโปรไฟล์ PA ไม่แม่นยำ จะทำให้ผิวด้านนอกไม่สม่ำเสมอก่อนและหลังส่วนยื่น\n"
#~ "ไม่รองรับเครื่องพิมพ์ Prusa เพราะจะหยุดชั่วคราวเพื่อประมวลผลการเปลี่ยน PA ทำให้เกิดความล่าช้าและข้อบกพร่อง"
#~ msgid "Pressure advance for bridges"
#~ msgstr "แรงดันล่วงหน้า (Pressure Advance)สำหรับสะพาน"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "ค่าPressure Advanceสำหรับสะพาน ตั้งค่าเป็น 0 เพื่อปิดใช้งาน\n"
#~ "\n"
#~ "ค่า PA ที่ต่ำลงเมื่อพิมพ์บริดจ์จะช่วยลดลักษณะที่ปรากฏเล็กน้อยจากการอัดขึ้นรูปทันทีหลังจากบริดจ์ สาเหตุนี้เกิดจากแรงดันตกในหัวฉีดเมื่อพิมพ์ในอากาศ และค่า PA ที่ต่ำกว่าจะช่วยแก้ปัญหานี้ได้"
#~ msgid "Filament Sync Options"
#~ msgstr "ตัวเลือกการซิงค์ฟิลาเมนต์"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: 2026-04-08 23:59+0300\n"
"Last-Translator: GlauTech\n"
"Language-Team: \n"
@@ -397,27 +397,30 @@ msgstr "Konumu Sıfırla"
msgid "Reset rotation"
msgstr "Döndürmeyi sıfırla"
msgid "Object coordinates"
msgstr "Nesne koordinatları"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Dünya koordinatları"
msgid "Object"
msgstr "Nesne"
msgid "Translate(Relative)"
msgstr "Çevir(Göreceli)"
msgid "Part"
msgstr "Parça"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Döndürme aracını açtığınızda mevcut döndürme değerini sıfırlayın."
msgid "Rotate (absolute)"
msgstr "Döndür (mutlak)"
msgid "Reset current rotation to real zeros."
msgstr "Mevcut dönüşü gerçek sıfırlara sıfırla."
msgid "Part coordinates"
msgstr "Parça koordinatları"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Boyut"
@@ -521,12 +524,6 @@ msgstr "Boşluk"
msgid "Spacing"
msgstr "Boşluk"
msgid "Part"
msgstr "Parça"
msgid "Object"
msgstr "Nesne"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1871,23 +1868,30 @@ msgstr "Projeyi Aç"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "Orca Slicer'ın sürümü çok düşük ve normal şekilde kullanılabilmesi için en son sürüme güncellenmesi gerekiyor."
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1896,6 +1900,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1970,7 +1980,8 @@ msgstr "Bulutta önbelleğe alınan kullanıcı ön ayarlarının sayısı üst
msgid "Sync user presets"
msgstr "Kullanıcı ön ayarlarını senkronize edin"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
@@ -2192,6 +2203,9 @@ msgstr "Orca Küpü"
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Orca tolerans testi"
@@ -5258,6 +5272,9 @@ msgstr "Çıkıntılar"
msgid "Outline"
msgstr "Taslak"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5301,7 +5318,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 gcode yollarında çakışmalar bulundu, Z = %.2lfmm. Lütfen çakışan nesneleri daha uzağa ayırın (%s <-> %s)."
@@ -8040,6 +8057,35 @@ msgstr "STEP dosyasını içe aktarırken seçenekleri göster"
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "Etkinleştirilirse, STEP dosyası içe aktarılırken bir parametre ayarları iletişim kutusu görüntülenir."
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr "Draco dışa aktarımı için kalite düzeyi"
@@ -8055,6 +8101,12 @@ msgstr ""
"0 = kayıpsız sıkıştırma (geometri tam hassasiyetle korunur). Geçerli kayıplı değerler 8 ile 30 arasında değişir.\n"
"Daha düşük değerler daha küçük dosyalar oluşturur ancak daha fazla geometrik ayrıntıyı kaybeder; daha yüksek değerler, daha büyük dosyalar pahasına daha fazla ayrıntıyı korur."
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Ön ayar"
@@ -12367,6 +12419,18 @@ msgstr "Küçük çevre (perimeter) eşiği"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "Bu, küçük çevre uzunluğu için eşiği belirler. Varsayılan eşik 0 mm'dir."
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "Duvar baskı sırası"
@@ -12550,25 +12614,26 @@ msgstr ""
"2. Her hacimsel akış hızı ve ivme için en uygun PA değerini not edin. Renk şemasıılır menüsünden akışı seçerek ve yatay kaydırıcıyı PA desen çizgileri üzerinde hareket ettirerek akış numarasını bulabilirsiniz. Numara sayfanın altında görünmelidir. İdeal PA değeri hacimsel akış ne kadar yüksek olursa o kadar azalmalıdır. Değilse, ekstruderinizin doğru şekilde çalıştığını doğrulayın. Ne kadar yavaş ve daha az ivmeyle yazdırırsanız, kabul edilebilir PA değerleri aralığı o kadar geniş olur. Hiçbir fark görünmüyorsa, daha hızlı olan testteki PA değerini kullanın.\n"
"3. Buradaki metin kutusuna PA değerleri, Akış ve Hızlanma üçlüsünü girin ve filament profilinizi kaydedin."
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "Çıkıntılar için uyarlanabilir basınç ilerlemesini etkinleştirin (beta)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid "Pressure advance for bridges"
msgstr "Köprüler için basınç ilerlemesi"
msgid ""
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"Köprüler için basınç ilerleme değeri. Devre dışı bırakmak için 0a ayarlayın.\n"
"\n"
" Köprüleri yazdırırken daha düşük bir basınç değeri, köprülerden hemen sonra hafif ekstrüzyon görünümünün azaltılmasına yardımcı olur. Bunun nedeni, havada yazdırma sırasında nozuldaki basınç düşüşüdür ve daha düşük bir basınç, bunu önlemeye yardımcı olur."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Diğer çizgi genişlikleri 0'a ayarlanmışsa varsayılan çizgi genişliği. % olarak ifade edilirse nozul çapı üzerinden hesaplanacaktır."
@@ -12951,6 +13016,22 @@ msgstr "Katı dolgu yönü"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "Hattın başlangıcını veya ana yönünü kontrol eden katı dolgu deseni açısı."
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Dolgu yoğunluğu"
@@ -15746,6 +15827,14 @@ msgstr "Çokgen delik eğrisi"
msgid "Rotate the polyhole every layer."
msgstr "Çokgeni her katmanda döndürün."
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "G-code önizleme resimleri"
@@ -19109,6 +19198,12 @@ msgstr "Üçgen yüzeylerin sayısı"
msgid "Calculating, please wait..."
msgstr "Hesaplanıyor, lütfen bekleyin..."
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -19514,6 +19609,36 @@ 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?"
#~ msgid "Object coordinates"
#~ msgstr "Nesne koordinatları"
#~ msgid "World coordinates"
#~ msgstr "Dünya koordinatları"
#~ msgid "Translate(Relative)"
#~ msgstr "Çevir(Göreceli)"
#~ msgid "Rotate (absolute)"
#~ msgstr "Döndür (mutlak)"
#~ msgid "Part coordinates"
#~ msgstr "Parça koordinatları"
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Çıkıntılar için uyarlanabilir basınç ilerlemesini etkinleştirin (beta)"
#~ msgid "Pressure advance for bridges"
#~ msgstr "Köprüler için basınç ilerlemesi"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "Köprüler için basınç ilerleme değeri. Devre dışı bırakmak için 0a ayarlayın.\n"
#~ "\n"
#~ " Köprüleri yazdırırken daha düşük bir basınç değeri, köprülerden hemen sonra hafif ekstrüzyon görünümünün azaltılmasına yardımcı olur. Bunun nedeni, havada yazdırma sırasında nozuldaki basınç düşüşüdür ve daha düşük bir basınç, bunu önlemeye yardımcı olur."
#~ msgid "Filament Sync Options"
#~ msgstr "Filament Senkronizasyon Seçenekleri"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: orcaslicerua\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: 2025-03-07 09:30+0200\n"
"Last-Translator: \n"
"Language-Team: Ukrainian\n"
@@ -402,27 +402,30 @@ msgstr "Скинути позицію"
msgid "Reset rotation"
msgstr "Скинути обертання"
msgid "Object coordinates"
msgstr "Координати об'єкта"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Глобальні координати"
msgid "Object"
msgstr "Об'єкт"
msgid "Translate(Relative)"
msgid "Part"
msgstr "Частина"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Скинути поточне обертання до значення при відкритті інструмента обертання."
msgid "Rotate (absolute)"
msgstr "Обертання (абсолютне)"
msgid "Reset current rotation to real zeros."
msgstr "Скинути поточне обертання до нульових значень."
msgid "Part coordinates"
msgstr "Координати частини"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Розмір"
@@ -526,12 +529,6 @@ msgstr "Проміжок"
msgid "Spacing"
msgstr "Відстань"
msgid "Part"
msgstr "Частина"
msgid "Object"
msgstr "Об'єкт"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1878,23 +1875,30 @@ msgstr "Відкрити проєкт"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "Версія студії Bambu надто низька, її необхідно оновити до останньоїверсії, перш ніж її можна буде використовувати у звичайному режимі"
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1903,6 +1907,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1970,7 +1980,8 @@ msgstr "Кількість налаштувань користувача, збе
msgid "Sync user presets"
msgstr "Синхронізувати налаштування користувача"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
@@ -2192,6 +2203,9 @@ msgstr "Orca Куб"
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Тест на допуски ORCA"
@@ -5259,6 +5273,9 @@ msgstr "Нависання"
msgid "Outline"
msgstr "Контур"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5303,7 +5320,7 @@ msgid "Size:"
msgstr "Розмір:"
# TODO: Review, changed by lang refactor. PR 14254
#, 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 ""
"Виявлено конфлікти шляхів gcode на рівні %d, Z = %.2lf мм. Будь ласка \n"
@@ -8054,6 +8071,35 @@ msgstr ""
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr ""
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr ""
@@ -8066,6 +8112,12 @@ msgid ""
"Lower values produce smaller files but lose more geometric detail; higher values preserve more detail at the cost of larger files."
msgstr ""
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Шаблон"
@@ -12350,6 +12402,18 @@ msgstr "Поріг малих периметрів"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "При цьому встановлюється поріг для невеликої довжини периметра. Порігове за замовчуванням - 0 мм"
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "Послідовність друку стінок"
@@ -12537,25 +12601,26 @@ msgstr ""
"2. Запишіть оптимальне значення PA для кожної об'ємної швидкості подачі та прискорення. Ви можете знайти значення подачі, вибравши \"Flow\" у випадаючому списку колірної схеми та пересуваючи горизонтальний повзунок по лініях шаблону PA. Значення повинне відображатися внизу сторінки. Ідеальне значення PA має зменшуватися зі збільшенням об'ємної швидкості подачі. Якщо це не так, переконайтеся, що ваш екструдер працює коректно. Чим повільніше друкуєте і з меншим прискоренням, тим ширший діапазон допустимих значень PA. Якщо різниця не помітна, використовуйте значення PA із швидшого тесту.\n"
"3. Введіть трійки значень PA, Flow і Acceleration у це текстове поле та збережіть профіль філамента."
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "Увімкнути адаптивне випередження тиску для нависань (бета)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid "Pressure advance for bridges"
msgstr "Випередження тиску для мостів"
msgid ""
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"Значення випередження тиску для мостів. Встановіть 0, щоб вимкнути.\n"
"\n"
"Нижче значення випередження тиску при друкуванні мостів допомагає зменшити прояви незначної недоекструзії одразу після друку мостів. Це спричинено падінням тиску в соплі під час друку в повітрі, і зменшене значення випередження тиску допомагає це компенсувати."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Ширина лінії за замовчуванням, якщо інші ширини ліній встановлено на 0. Якщо виражено у %, вона буде розрахована за діаметром сопла."
@@ -12933,6 +12998,22 @@ msgstr "Напрямок cуцільного заповнення"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "Кут шаблону суцільного заповнення, який контролює початок або основний напрямок лінії"
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Щільність часткового заповнення"
@@ -15719,6 +15800,14 @@ msgstr "Скручування полігонів"
msgid "Rotate the polyhole every layer."
msgstr "Повертайте полігон кожен шар."
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "Мініатюри G-code"
@@ -19053,6 +19142,12 @@ msgstr "Кількість трикутних граней"
msgid "Calculating, please wait..."
msgstr "Розрахунок, будь ласка, зачекайте…"
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -19458,6 +19553,33 @@ msgstr ""
"Уникнення деформації\n"
"Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури гарячого ліжка може зменшити ймовірність деформації?"
#~ msgid "Object coordinates"
#~ msgstr "Координати об'єкта"
#~ msgid "World coordinates"
#~ msgstr "Глобальні координати"
#~ msgid "Rotate (absolute)"
#~ msgstr "Обертання (абсолютне)"
#~ msgid "Part coordinates"
#~ msgstr "Координати частини"
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Увімкнути адаптивне випередження тиску для нависань (бета)"
#~ msgid "Pressure advance for bridges"
#~ msgstr "Випередження тиску для мостів"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "Значення випередження тиску для мостів. Встановіть 0, щоб вимкнути.\n"
#~ "\n"
#~ "Нижче значення випередження тиску при друкуванні мостів допомагає зменшити прояви незначної недоекструзії одразу після друку мостів. Це спричинено падінням тиску в соплі під час друку в повітрі, і зменшене значення випередження тиску допомагає це компенсувати."
#~ msgid "View control settings"
#~ msgstr "Перегляд параметрів керування"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: 2025-10-02 17:43+0700\n"
"Last-Translator: \n"
"Language-Team: hainguyen.ts13@gmail.com\n"
@@ -398,27 +398,30 @@ msgstr "Đặt lại vị trí"
msgid "Reset rotation"
msgstr "Đặt lại xoay"
msgid "Object coordinates"
msgstr "Tọa độ vật thể"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "Tọa độ thế giới"
msgid "Object"
msgstr "Vật thể"
msgid "Translate(Relative)"
msgid "Part"
msgstr "Phần"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Đặt lại xoay hiện tại về giá trị khi mở công cụ xoay."
msgid "Rotate (absolute)"
msgstr "Xoay (tuyệt đối)"
msgid "Reset current rotation to real zeros."
msgstr "Đặt lại xoay hiện tại về số không thực."
msgid "Part coordinates"
msgstr "Tọa độ phần"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "Kích thước"
@@ -522,12 +525,6 @@ msgstr ""
msgid "Spacing"
msgstr "Khoảng cách"
msgid "Part"
msgstr "Phần"
msgid "Object"
msgstr "Vật thể"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1871,23 +1868,30 @@ msgstr "Mở dự án"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "Phiên bản Orca Slicer quá cũ và cần được cập nhật lên phiên bản mới nhất trước khi có thể sử dụng bình thường."
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
@@ -1896,6 +1900,12 @@ msgid ""
"Do you want to continue?"
msgstr ""
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr ""
@@ -1963,7 +1973,8 @@ msgstr "Số lượng preset người dùng đã lưu trong cloud vượt quá g
msgid "Sync user presets"
msgstr "Đồng bộ preset người dùng"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
@@ -2184,6 +2195,9 @@ msgstr ""
msgid "OrcaSliced Combo"
msgstr ""
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr ""
@@ -5230,6 +5244,9 @@ msgstr "Phần nhô"
msgid "Outline"
msgstr ""
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr ""
@@ -5273,7 +5290,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)."
@@ -7992,6 +8009,35 @@ msgstr ""
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "Nếu được bật, hộp thoại cài đặt tham số sẽ xuất hiện trong quá trình nhập file STEP."
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr ""
@@ -8004,6 +8050,12 @@ msgid ""
"Lower values produce smaller files but lose more geometric detail; higher values preserve more detail at the cost of larger files."
msgstr ""
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "Cài đặt sẵn"
@@ -12263,6 +12315,18 @@ msgstr "Ngưỡng chu vi nhỏ"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "Điều này đặt ngưỡng cho độ dài chu vi nhỏ. Ngưỡng mặc định là 0mm."
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "Thứ tự in thành"
@@ -12447,25 +12511,26 @@ msgstr ""
"2. Ghi chú giá trị PA tối ưu cho mỗi tốc độ lưu lượng thể tích và gia tốc. Bạn có thể tìm số lưu lượng bằng cách chọn lưu lượng từ menu thả xuống sơ đồ màu và di chuyển thanh trượt ngang qua các đường mẫu PA. Số nên hiển thị ở cuối trang. Giá trị PA lý tưởng nên giảm xuống khi lưu lượng thể tích càng cao. Nếu không, hãy xác nhận rằng extruder của bạn đang hoạt động chính xác. Càng chậm và với gia tốc ít hơn bạn in, phạm vi giá trị PA chấp nhận được càng lớn. Nếu không thấy sự khác biệt, hãy sử dụng giá trị PA từ kiểm tra nhanh hơn\n"
"3. Nhập bộ ba giá trị PA, Lưu lượng và Gia tốc vào hộp văn bản ở đây và lưu hồ sơ filament của bạn."
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "Bật áp suất nâng cao thích ứng cho phần nhô (beta)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
msgid "Pressure advance for bridges"
msgstr "Áp suất nâng cao cho cầu"
msgid ""
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
"Giá trị áp suất nâng cao cho cầu. Đặt thành 0 để tắt.\n"
"\n"
"Giá trị PA thấp hơn khi in cầu giúp giảm sự xuất hiện của đùn thiếu nhỏ ngay sau cầu. Điều này được gây ra bởi áp suất giảm trong đầu phun khi in trong không khí và PA thấp hơn giúp chống lại điều này."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Độ rộng đường mặc định nếu độ rộng đường khác được đặt thành 0. Nếu được biểu thị dưới dạng %, nó sẽ được tính trên đường kính đầu phun."
@@ -12845,6 +12910,22 @@ msgstr "Hướng infill đặc"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "Góc cho mẫu infill đặc, điều khiển hướng bắt đầu hoặc chính của đường."
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "Mật độ infill thưa"
@@ -15634,6 +15715,14 @@ msgstr "Xoắn polyhole"
msgid "Rotate the polyhole every layer."
msgstr "Xoay polyhole mỗi lớp."
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "Hình thu nhỏ G-code"
@@ -18974,6 +19063,12 @@ msgstr ""
msgid "Calculating, please wait..."
msgstr ""
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr ""
@@ -19379,6 +19474,33 @@ 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?"
#~ msgid "Object coordinates"
#~ msgstr "Tọa độ vật thể"
#~ msgid "World coordinates"
#~ msgstr "Tọa độ thế giới"
#~ msgid "Rotate (absolute)"
#~ msgstr "Xoay (tuyệt đối)"
#~ msgid "Part coordinates"
#~ msgstr "Tọa độ phần"
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Bật áp suất nâng cao thích ứng cho phần nhô (beta)"
#~ msgid "Pressure advance for bridges"
#~ msgstr "Áp suất nâng cao cho cầu"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr ""
#~ "Giá trị áp suất nâng cao cho cầu. Đặt thành 0 để tắt.\n"
#~ "\n"
#~ "Giá trị PA thấp hơn khi in cầu giúp giảm sự xuất hiện của đùn thiếu nhỏ ngay sau cầu. Điều này được gây ra bởi áp suất giảm trong đầu phun khi in trong không khí và PA thấp hơn giúp chống lại điều này."
#~ msgid "View control settings"
#~ msgstr "Cài đặt điều khiển chế độ xem"

View File

@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Slic3rPE\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n"
"PO-Revision-Date: 2026-06-11 12:37-0300\n"
"Last-Translator: Handle <mail@bysb.net>\n"
"Language-Team: \n"
@@ -400,27 +400,30 @@ msgstr "重置位置"
msgid "Reset rotation"
msgstr "重置旋转"
msgid "Object coordinates"
msgstr "物体坐标"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "世界坐标"
msgid "Object"
msgstr "对象"
msgid "Translate(Relative)"
msgstr "转换(相对)"
msgid "Part"
msgstr "零件"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "重置当前旋转为打开旋转工具时的值"
msgid "Rotate (absolute)"
msgstr "旋转(绝对)"
msgid "Reset current rotation to real zeros."
msgstr "重置当前旋转为真实零位"
msgid "Part coordinates"
msgstr "零件坐标"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "大小"
@@ -524,12 +527,6 @@ msgstr "间隙"
msgid "Spacing"
msgstr "间距"
msgid "Part"
msgstr "零件"
msgid "Object"
msgstr "对象"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1869,33 +1866,32 @@ msgstr "打开项目"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "此逆戟鲸切片器的版本过低,需更新至最新版本方可正常使用"
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
"云同步冲突:此预设在 OrcaCloud 中存在更新的版本。\n"
"拉取将下载云端副本。强制推送将用您的本地预设覆盖它。"
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"云同步冲突OrcaCloud 中已存在同名预设。\n"
"拉取将下载云端副本。强制推送将用您的本地预设覆盖它。"
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
"云同步冲突:之前已从云端删除了同名预设。\n"
"“删除”将删除您的本地预设。“强制推送”将用您的本地预设覆盖它。"
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"云同步冲突:发生了意外或无法识别的预设冲突。\n"
"“拉取”将下载云端副本。“强制推送”将用您的本地预设覆盖它。"
msgid ""
"Force push will overwrite the cloud copy with your local preset changes.\n"
@@ -1904,6 +1900,12 @@ msgstr ""
"强制推送将用您本地的预设更改覆盖云端副本。\n"
"是否继续?"
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr "解决云同步冲突"
@@ -1983,8 +1985,9 @@ msgstr "云端缓存的用户预设数量已超过上限,新创建的用户预
msgid "Sync user presets"
msgstr "同步用户预设"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr "预设内容过大,无法同步到云端(超过 1MB。请通过移除自定义配置来缩减预设大小或仅在本地使用。"
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
msgid "%s updated from %s to %s"
@@ -2205,6 +2208,9 @@ msgstr "Orca方块"
msgid "OrcaSliced Combo"
msgstr "OrcaSliced 复合模型"
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Orca误差测试"
@@ -5254,6 +5260,9 @@ msgstr "悬垂"
msgid "Outline"
msgstr "轮廓线"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr "写实渲染"
@@ -5297,7 +5306,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)。"
@@ -8015,6 +8024,35 @@ msgstr "显示STEP网格参数设置对话框"
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "如果启用在导入STEP文件时将出现参数设置对话框"
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr "Draco 导出的模型质量"
@@ -8030,6 +8068,12 @@ msgstr ""
"0 = 无损压缩(以全精度保留几何形状)。有效有损值范围为 8 到 30。\n"
"较低的值会生成较小的文件,但会丢失更多的几何细节;较高的值可保留更多细节,但代价是文件较大。"
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "预设"
@@ -12435,6 +12479,18 @@ msgstr "微小部位周长阈值"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "这将设置微小部位周长的阈值。默认阈值为0mm"
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "墙顺序"
@@ -12615,24 +12671,26 @@ msgstr ""
"2. 记下每个体积流速和加速度的最佳 PA 值。您可以通过从配色方案下拉列表中选择流量并将水平滑块移动到 PA 图案线上来找到流量编号。该数字应该在页面底部可见。理想的 PA 值应该随着体积流量的增加而减小。如果不是,请确认您的挤出机运行正常。打印速度越慢且加速度越小,可接受的 PA 值范围就越大。如果没有明显差异,请使用更快测试中的 PA 值\n"
"3. 在此处的文本框中输入 PA 值、流量和加速度的三元组并保存耗材丝配置文件"
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "为悬垂启用自适应压力提前(试验)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
"针对悬垂以及同一特征内的流量变化启用自适应 PA。这是一个实验性选项因为如果未准确设置 PA 配置文件,将导致悬垂前后外表面出现均匀性问题。\n"
"与 Prusa 打印机不兼容,因为它们会暂停以处理 PA 变化,从而导致延迟和瑕疵。"
msgid "Pressure advance for bridges"
msgstr "为搭桥启用压力提前"
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr "桥梁的压力提前值。设置为 0 以禁用。 打印桥接时较低的 PA 值有助于减少桥接后立即出现的轻微挤压不足现象。这是由在空气中打印时喷嘴中的压力下降引起的,较低的 PA 有助于抵消这种情况。"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "当线宽设置为0时走线的默认线宽。如果以%表示,它将基于喷嘴直径来计算。"
@@ -13028,6 +13086,22 @@ msgstr "实心填充方向"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "实心填充图案的角度,决定走线的开始或整体方向。"
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "稀疏填充密度"
@@ -15877,6 +15951,14 @@ msgstr "扭曲多边型孔"
msgid "Rotate the polyhole every layer."
msgstr "按层旋转多边形孔。"
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "G-code缩略图尺寸"
@@ -19238,6 +19320,12 @@ msgstr "三角面片数量"
msgid "Calculating, please wait..."
msgstr "正在计算,请稍候..."
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr "预设包"
@@ -19648,6 +19736,71 @@ msgstr ""
"避免翘曲\n"
"您知道吗打印ABS这类易翘曲材料时适当提高热床温度可以降低翘曲的概率。"
#~ msgid "Object coordinates"
#~ msgstr "物体坐标"
#~ msgid "World coordinates"
#~ msgstr "世界坐标"
#~ msgid "Translate(Relative)"
#~ msgstr "转换(相对)"
#~ msgid "Rotate (absolute)"
#~ msgstr "旋转(绝对)"
#~ msgid "Part coordinates"
#~ msgstr "零件坐标"
#~ msgid ""
#~ "Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "云同步冲突:此预设在 OrcaCloud 中存在更新的版本。\n"
#~ "拉取将下载云端副本。强制推送将用您的本地预设覆盖它。"
#~ msgid ""
#~ "Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "云同步冲突OrcaCloud 中已存在同名预设。\n"
#~ "拉取将下载云端副本。强制推送将用您的本地预设覆盖它。"
#~ msgid ""
#~ "Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
#~ "Delete will delete your local preset. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "云同步冲突:之前已从云端删除了同名预设。\n"
#~ "“删除”将删除您的本地预设。“强制推送”将用您的本地预设覆盖它。"
#~ msgid ""
#~ "Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "云同步冲突:发生了意外或无法识别的预设冲突。\n"
#~ "“拉取”将下载云端副本。“强制推送”将用您的本地预设覆盖它。"
#~ msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#~ msgstr "预设内容过大,无法同步到云端(超过 1MB。请通过移除自定义配置来缩减预设大小或仅在本地使用。"
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "为悬垂启用自适应压力提前(试验)"
#~ msgid ""
#~ "Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
#~ "Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
#~ msgstr ""
#~ "针对悬垂以及同一特征内的流量变化启用自适应 PA。这是一个实验性选项因为如果未准确设置 PA 配置文件,将导致悬垂前后外表面出现均匀性问题。\n"
#~ "与 Prusa 打印机不兼容,因为它们会暂停以处理 PA 变化,从而导致延迟和瑕疵。"
#~ msgid "Pressure advance for bridges"
#~ msgstr "为搭桥启用压力提前"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr "桥梁的压力提前值。设置为 0 以禁用。 打印桥接时较低的 PA 值有助于减少桥接后立即出现的轻微挤压不足现象。这是由在空气中打印时喷嘴中的压力下降引起的,较低的 PA 有助于抵消这种情况。"
#~ msgid "Filament Sync Options"
#~ msgstr "耗材丝同步选项"

View File

@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-03 14:43+0200\n"
"POT-Creation-Date: 2026-07-06 12:57-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"
@@ -403,27 +403,30 @@ msgstr "重設位置"
msgid "Reset rotation"
msgstr "重設旋轉"
msgid "Object coordinates"
msgstr "物件座標"
msgid "World"
msgstr ""
msgid "World coordinates"
msgstr "世界座標"
msgid "Object"
msgstr "物件"
msgid "Translate(Relative)"
msgstr "平移(相對)"
msgid "Part"
msgstr "零件"
msgid "Relative"
msgstr ""
msgid "Coordinate system used for transform actions."
msgstr ""
msgid "Absolute"
msgstr ""
msgid "Reset current rotation to the value when open the rotation tool."
msgstr "重設旋轉角度為開啟旋轉工具時的狀態。"
msgid "Rotate (absolute)"
msgstr "旋轉(絕對)"
msgid "Reset current rotation to real zeros."
msgstr "將旋轉角度歸零"
msgid "Part coordinates"
msgstr "零件座標"
#. TRN - Input label. Be short as possible
msgid "Size"
msgstr "尺寸"
@@ -527,12 +530,6 @@ msgstr "間隙"
msgid "Spacing"
msgstr "間距"
msgid "Part"
msgstr "零件"
msgid "Object"
msgstr "物件"
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
@@ -1871,33 +1868,32 @@ msgstr "打開專案"
msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally."
msgstr "Orca Slicer 版本過舊,需要更新到最新版本才能正常使用"
msgid ""
"Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgid "Cloud sync conflict:"
msgstr ""
#, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":"
msgstr ""
"雲端同步衝突:此預設在 OrcaCloud 中有較新的版本。\n"
"拉取會下載雲端副本。強制推送會以您的本機預設覆寫雲端版本。"
msgid ""
"Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
"This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"雲端同步衝突OrcaCloud 中已有同名的預設。\n"
"拉取會下載雲端副本。強制推送會以您的本機預設覆寫它。"
msgid ""
"Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
"A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
msgid ""
"A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr ""
"雲端同步衝突:先前已從雲端刪除同名的預設。\n"
"「刪除」將刪除您的本機預設。「強制推送」會以您的本機預設覆寫它。"
msgid ""
"Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
"There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr ""
"雲端同步衝突:發生了未預期或無法識別的預設衝突。\n"
"拉取會下載雲端副本。強制推送會以您的本機預設覆寫它。"
msgid ""
"Force push will overwrite the cloud copy with your local preset changes.\n"
@@ -1906,6 +1902,12 @@ msgstr ""
"強制推送會以您本機的預設變更覆寫雲端副本。\n"
"您要繼續嗎?"
#, c-format, boost-format
msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?"
msgstr ""
msgid "Resolve cloud sync conflict"
msgstr "解決雲端同步衝突"
@@ -1985,8 +1987,9 @@ msgstr "雲端儲存的使用者預設數量已超過上限,新的使用者預
msgid "Sync user presets"
msgstr "同步使用者預設"
msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr "預設內容過大,無法同步至雲端(超過 1MB。請移除自訂設定以減少預設大小或僅在本機使用。"
#, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr ""
#, c-format, boost-format
msgid "%s updated from %s to %s"
@@ -2207,6 +2210,9 @@ msgstr "Orca 立方體"
msgid "OrcaSliced Combo"
msgstr "OrcaSliced 複合模型"
msgid "Orca Badge"
msgstr ""
msgid "Orca Tolerance Test"
msgstr "Orca 誤差測試"
@@ -5296,6 +5302,9 @@ msgstr "懸空"
msgid "Outline"
msgstr "輪廓線"
msgid "Wireframe"
msgstr ""
msgid "Realistic View"
msgstr "擬真檢視"
@@ -5339,7 +5348,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。"
@@ -8077,6 +8086,35 @@ msgstr "顯示 STEP 網格參數設定視窗。"
msgid "If enabled, a parameter settings dialog will appear during STEP file import."
msgstr "啟用後,匯入 STEP 檔案時會顯示參數設定視窗。"
msgid "STEP importing: linear deflection"
msgstr ""
msgid ""
"Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm."
msgstr ""
msgid "STEP importing: angle deflection"
msgstr ""
msgid ""
"Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5."
msgstr ""
msgid "STEP importing: Split into multiple objects"
msgstr ""
msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled."
msgstr ""
msgid "Quality level for Draco export"
msgstr "Draco 匯出品質等級"
@@ -8092,6 +8130,12 @@ msgstr ""
"0 = 無損壓縮(幾何資料以完整精度保留)。有效的有損值範圍為 8 至 30。\n"
"較低的值會產生較小的檔案但損失更多幾何細節;較高的值會保留更多細節但檔案較大。"
msgid "Store full source file paths in projects"
msgstr ""
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr ""
msgid "Preset"
msgstr "預設"
@@ -12501,6 +12545,18 @@ msgstr "微小部位周長臨界值"
msgid "This sets the threshold for small perimeter length. Default threshold is 0mm."
msgstr "這設定了微小部位周長的臨界值。 預設臨界值是 0mm"
msgid "Small support perimeters"
msgstr ""
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr ""
msgid "Small support perimeters threshold"
msgstr ""
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr ""
msgid "Walls printing order"
msgstr "牆列印順序"
@@ -12683,24 +12739,26 @@ msgstr ""
"2. 記錄每個體積流速和加速度的最佳壓力補償 (PA) 值。您可以通過從顏色方案下拉選單中選擇流量,並將水平滑桿移動到 PA 測試線的圖案來找到流量數值。該數值應顯示在頁面底部。理想的 PA 值應隨著體積流速的增加而減小。如果不是,請檢查您的擠出機是否正常工作。當列印速度較慢且加速度較低時,可接受的 PA 值範圍會更大。如果看不出差異,請採用最快測試的 PA 值。\n"
"3. 將 PA 值、流量和加速度的三組資料輸入到此文字框中,然後保存您的線材設定檔"
msgid "Enable adaptive pressure advance for overhangs (beta)"
msgstr "啟用懸挑自適應壓力補償 (beta)"
msgid ""
"Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
msgid "Enable adaptive pressure advance within features (beta)"
msgstr ""
"針對懸空以及同一特徵內的流量變化啟用自適應壓力補償 (PA)。這是一個實驗性選項,因為若 PA 設定檔設定不準確,將會導致懸空前後的外表面出現均勻性問題。\n"
"與 Prusa 印表機不相容,因為它們會暫停以處理 PA 變更,進而導致延遲與瑕疵。"
msgid "Pressure advance for bridges"
msgstr "橋接的壓力補償"
msgid ""
"Pressure advance value for bridges. Set to 0 to disable.\n"
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr "橋接的壓力補償值。設為 0 以停用此功能。降低橋接時的壓力補償值有助於減少橋接結束後立即出現的輕微欠擠出現象。這種現象是由於在空中列印時噴嘴內壓力下降引起的,而降低壓力補償值有助於抵消這一影響。"
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr ""
msgid "Static pressure advance for bridges"
msgstr ""
msgid ""
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n"
"\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr ""
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "當線寬設定為 0 時走線的預設線寬。如果以 % 表示,將以噴嘴直徑為基準來計算。"
@@ -13082,6 +13140,22 @@ msgstr "實心填充方向"
msgid "Angle for solid infill pattern, which controls the start or main direction of line."
msgstr "實心填充圖案的角度設定,用於決定線條的起始方向或主要列印方向"
msgid "Top layer direction"
msgstr ""
msgid ""
"Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Bottom layer direction"
msgstr ""
msgid ""
"Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction."
msgstr ""
msgid "Sparse infill density"
msgstr "稀疏填充密度"
@@ -15924,6 +15998,14 @@ msgstr "扭曲多邊形孔"
msgid "Rotate the polyhole every layer."
msgstr "依層旋轉多邊形孔。"
msgid "Maximum Polyhole edge count"
msgstr ""
msgid ""
"Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have"
msgstr ""
msgid "G-code thumbnails"
msgstr "G-code 縮圖"
@@ -19288,6 +19370,12 @@ msgstr "三角面片數量"
msgid "Calculating, please wait..."
msgstr "正在計算,請稍候..."
msgid "Save these settings as default"
msgstr ""
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr ""
msgid "PresetBundle"
msgstr "設定檔組"
@@ -19719,6 +19807,71 @@ msgstr ""
"您知道嗎?當列印容易翹曲的材料(如 ABS適當提高熱床溫度\n"
"可以降低翹曲的機率。"
#~ msgid "Object coordinates"
#~ msgstr "物件座標"
#~ msgid "World coordinates"
#~ msgstr "世界座標"
#~ msgid "Translate(Relative)"
#~ msgstr "平移(相對)"
#~ msgid "Rotate (absolute)"
#~ msgstr "旋轉(絕對)"
#~ msgid "Part coordinates"
#~ msgstr "零件座標"
#~ msgid ""
#~ "Cloud sync conflict: this preset has a newer version in OrcaCloud.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "雲端同步衝突:此預設在 OrcaCloud 中有較新的版本。\n"
#~ "拉取會下載雲端副本。強制推送會以您的本機預設覆寫雲端版本。"
#~ msgid ""
#~ "Cloud sync conflict: a preset with this name already exists in OrcaCloud.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "雲端同步衝突OrcaCloud 中已有同名的預設。\n"
#~ "拉取會下載雲端副本。強制推送會以您的本機預設覆寫它。"
#~ msgid ""
#~ "Cloud sync conflict: a preset with the same name was previously deleted from the cloud.\n"
#~ "Delete will delete your local preset. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "雲端同步衝突:先前已從雲端刪除同名的預設。\n"
#~ "「刪除」將刪除您的本機預設。「強制推送」會以您的本機預設覆寫它。"
#~ msgid ""
#~ "Cloud sync conflict: there was an unexpected or unidentified preset conflict.\n"
#~ "Pull downloads the cloud copy. Force push overwrites it with your local preset."
#~ msgstr ""
#~ "雲端同步衝突:發生了未預期或無法識別的預設衝突。\n"
#~ "拉取會下載雲端副本。強制推送會以您的本機預設覆寫它。"
#~ msgid "The preset content is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
#~ msgstr "預設內容過大,無法同步至雲端(超過 1MB。請移除自訂設定以減少預設大小或僅在本機使用。"
#~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "啟用懸挑自適應壓力補償 (beta)"
#~ msgid ""
#~ "Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"
#~ "Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects."
#~ msgstr ""
#~ "針對懸空以及同一特徵內的流量變化啟用自適應壓力補償 (PA)。這是一個實驗性選項,因為若 PA 設定檔設定不準確,將會導致懸空前後的外表面出現均勻性問題。\n"
#~ "與 Prusa 印表機不相容,因為它們會暫停以處理 PA 變更,進而導致延遲與瑕疵。"
#~ msgid "Pressure advance for bridges"
#~ msgstr "橋接的壓力補償"
#~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr "橋接的壓力補償值。設為 0 以停用此功能。降低橋接時的壓力補償值有助於減少橋接結束後立即出現的輕微欠擠出現象。這種現象是由於在空中列印時噴嘴內壓力下降引起的,而降低壓力補償值有助於抵消這一影響。"
#~ msgid "Filament Sync Options"
#~ msgstr "線材同步選項"

20905
resources/hms/hms_lt_093.json Normal file

File diff suppressed because it is too large Load Diff

20317
resources/hms/hms_lt_094.json Normal file

File diff suppressed because it is too large Load Diff

20217
resources/hms/hms_lt_22E.json Normal file

File diff suppressed because it is too large Load Diff

21801
resources/hms/hms_lt_239.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1317,7 +1317,13 @@ int CLI::run(int argc, char **argv)
return CLI_INVALID_PARAMS;
}
BOOST_LOG_TRIVIAL(info) << "finished setup params, argc="<< argc << std::endl;
std::string temp_path = wxFileName::GetTempDir().utf8_str().data();
std::string temp_path = per_user_temp_dir(wxFileName::GetTempDir().utf8_str().data(), per_user_temp_id());
// Some consumers write into the temp root directly, so create it up front.
try {
boost::filesystem::create_directories(temp_path);
} catch (const std::exception &ex) {
BOOST_LOG_TRIVIAL(warning) << "failed to create per-user temp dir " << temp_path << ": " << ex.what();
}
set_temporary_dir(temp_path);
m_extra_config.apply(m_config, true);

View File

@@ -61,7 +61,7 @@ static bool use_brim_efc_outline(const PrintObject &object)
&& object.config().raft_layers.value == 0;
}
//ORCA: Helper for snapping painted ears to the EFC outline.
//ORCA: Helper for projecting painted ears to the EFC outline.
static bool closest_point_on_expolygons(const ExPolygons &polygons, const Point &from, Point &closest_out)
{
double min_dist2 = std::numeric_limits<double>::max();
@@ -69,23 +69,22 @@ static bool closest_point_on_expolygons(const ExPolygons &polygons, const Point
for (const ExPolygon &poly : polygons) {
for (int i = 0; i < poly.num_contours(); ++i) {
const Point *candidate = poly.contour_or_hole(i).closest_point(from);
if (candidate == nullptr)
continue;
const int64_t dx = int64_t(candidate->x()) - int64_t(from.x());
const int64_t dy = int64_t(candidate->y()) - int64_t(from.y());
const double dist2 = double(dx * dx + dy * dy);
if (dist2 < min_dist2) {
min_dist2 = dist2;
closest_out = *candidate;
found = true;
const Lines lines = poly.contour_or_hole(i).lines();
for (const Line &line : lines) {
Point candidate;
const double dist2 = line.distance_to_squared(from, &candidate);
if (dist2 < min_dist2) {
min_dist2 = dist2;
closest_out = candidate;
found = true;
}
}
}
}
return found;
}
//ORCA: Helper for matching painted ears to their original island before EFC snapping.
//ORCA: Helper for matching painted ears to their original island before EFC projection.
static int find_containing_expolygon_index(const ExPolygons &polygons, const Point &from)
{
for (size_t idx = 0; idx < polygons.size(); ++idx) {
@@ -95,7 +94,7 @@ static int find_containing_expolygon_index(const ExPolygons &polygons, const Poi
return -1;
}
//ORCA: Keep painted ear snapping on the matching island when using EFC outline.
//ORCA: Keep painted ear projection on the matching island when using EFC outline.
static bool closest_point_on_matching_island(const ExPolygons &raw_outline, const ExPolygons &efc_outline, const Point &from, Point &closest_out)
{
const int island_idx = find_containing_expolygon_index(raw_outline, from);
@@ -106,6 +105,7 @@ static bool closest_point_on_matching_island(const ExPolygons &raw_outline, cons
}
return closest_point_on_expolygons(efc_outline, from, closest_out);
}
//ORCA: Use post-processed first-layer slices (including EFC) for brim outline.
// Returns ExPolygons of the bottom layer after all first-layer modifiers
// (including elephant foot compensation, if enabled) have been applied.
@@ -358,11 +358,12 @@ static ExPolygons make_brim_ears(const PrintObject* object, const double& flowWi
if (brim_ear_points.size() <= 0) {
return mouse_ears_ex;
}
//ORCA: Painted ears can snap to the EFC-adjusted outline when enabled.
//ORCA: Painted ears follow the EFC-adjusted outline when enabled, while
// preserving their position along the selected outline segment.
const bool use_efc_outline = use_brim_efc_outline(*object);
const ExPolygons &raw_outline = object->layers().front()->lslices;
//ORCA: Lazily computed EFC-adjusted bottom outline.
//Stored separately so we can avoid recomputation unless EFC snapping is used.
//Stored separately so we can avoid recomputation unless EFC projection is used.
ExPolygons efc_outline_storage;
const ExPolygons* efc_outline = nullptr;
@@ -390,17 +391,17 @@ static ExPolygons make_brim_ears(const PrintObject* object, const double& flowWi
int32_t pt_x = scale_(pos.x());
int32_t pt_y = scale_(pos.y());
//ORCA: Snap painted ears to the EFC-adjusted outline when enabled.
//ORCA: Project painted ears to the EFC-adjusted outline when enabled.
if (use_efc_outline) {
if (efc_outline == nullptr) {
//ORCA: Compute EFC-adjusted outline lazily for painted ear snapping.
//ORCA: Compute the EFC-adjusted outline lazily for painted ear projection.
efc_outline_storage = get_print_object_bottom_layer_expolygons(*object);
efc_outline = &efc_outline_storage;
}
if (!efc_outline->empty()) {
Point closest_point;
//ORCA: Snap within the matching island to avoid drifting to another island.
//ORCA: Project within the matching island to avoid drifting to another island.
if (closest_point_on_matching_island(
raw_outline,
*efc_outline,

View File

@@ -6613,8 +6613,9 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
//BBS: for solid infill of first layer, speed can be higher as long as
//wall lines have be attached
if (path.role() != erBottomSurface) {
speed = is_perimeter(path.role()) ? NOZZLE_CONFIG(initial_layer_speed) :
NOZZLE_CONFIG(initial_layer_infill_speed);
const bool use_first_layer_speed = is_perimeter(path.role()) || path.role() == erBrim;
speed = use_first_layer_speed ? NOZZLE_CONFIG(initial_layer_speed) :
NOZZLE_CONFIG(initial_layer_infill_speed);
}
} else if (m_config.slow_down_layers > 1 && m_config.raft_layers == 0) {

View File

@@ -1154,7 +1154,7 @@ private:
PrintRegionPtrs m_print_regions;
//SoftFever
bool m_isBBLPrinter;
bool m_isBBLPrinter = false;
// Ordered collections of extrusion paths to build skirt loops and brim.
ExtrusionEntityCollection m_skirt;

View File

@@ -203,7 +203,7 @@ static t_config_enum_values s_keys_map_NoiseType {
{ "perlin", int(NoiseType::Perlin) },
{ "billow", int(NoiseType::Billow) },
{ "ridgedmulti", int(NoiseType::RidgedMulti) },
{ "voronoi", int(NoiseType::Voronoi) },
{ "voronoi", int(NoiseType::Voronoi) },
{ "ripple", int(NoiseType::Ripple) }
};
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(NoiseType)
@@ -3009,7 +3009,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("top_layer_direction", coFloat);
def->label = L("Top layer direction");
def->category = L("Strength");
def->tooltip = L("Optional absolute angle for top-layer infill and ironing base direction. Set to -1 to use the current solid infill direction behavior.");
def->tooltip = L("Fixed angle for the top solid infill and ironing lines.\nSet to -1 to follow the default solid infill direction.");
def->sidetext = u8"°"; // degrees, don't need translation
def->min = -1;
def->max = 360;
@@ -3019,7 +3019,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("bottom_layer_direction", coFloat);
def->label = L("Bottom layer direction");
def->category = L("Strength");
def->tooltip = L("Optional absolute angle for bottom-layer infill. Set to -1 to use the current solid infill direction behavior.");
def->tooltip = L("Fixed angle for the bottom solid infill lines.\nSet to -1 to follow the default solid infill direction.");
def->sidetext = u8"°"; // degrees, don't need translation
def->min = -1;
def->max = 360;

View File

@@ -300,6 +300,10 @@ std::string header_gcodeviewer_generated();
// getpid platform wrapper
extern unsigned get_current_pid();
// Per-user id for isolating temp dirs; empty on Windows (its temp dir is already per-user).
std::string per_user_temp_id();
// Per-user temp root under `base`; an empty `user_id` returns `base` unchanged.
std::string per_user_temp_dir(const std::string &base, const std::string &user_id);
// BBS: backup & restore
std::string get_process_name(int pid);

View File

@@ -1285,6 +1285,24 @@ unsigned get_current_pid()
#endif
}
std::string per_user_temp_id()
{
#ifdef WIN32
return {};
#else
return std::to_string(static_cast<unsigned long>(::getuid()));
#endif
}
std::string per_user_temp_dir(const std::string &base, const std::string &user_id)
{
if (user_id.empty())
return base;
// Keep the id at the top level so each user's dir sits directly in the world-writable temp
// root; a shared parent dir would be owned by whichever user created it first.
return base + "/orcaslicer_" + user_id;
}
// BBS: backup & restore
std::string get_process_name(int pid)
{

View File

@@ -2861,10 +2861,11 @@ bool GUI_App::on_init_inner()
//update_label_colours_from_appconfig();
}
if (bool new_sys_menu_enabled = app_config->get("sys_menu_enabled") == "1";
init_sys_menu_enabled != new_sys_menu_enabled)
init_sys_menu_enabled != new_sys_menu_enabled) {
#ifdef __WINDOWS__
NppDarkMode::SetSystemMenuForApp(new_sys_menu_enabled);
#endif
}
#endif
// Orca: we allow user to pin the version of plugin, so we don't need to remove old networking plugins when the app version is updated

View File

@@ -504,9 +504,12 @@ void GizmoObjectManipulation::on_change(const std::string &opt_key, int axis, do
bool GizmoObjectManipulation::render_combo(
ImGuiWrapper *imgui_wrapper, const std::string &label, const std::vector<std::string> &lines, size_t &selection_idx, float label_width, float item_width)
{
ImGui::AlignTextToFramePadding();
imgui_wrapper->text(label);
ImGui::SameLine(label_width);
if(!label.empty()){
ImGui::AlignTextToFramePadding();
imgui_wrapper->text(label);
ImGui::SameLine(label_width);
}
ImGui::PushItemWidth(item_width);
size_t selection_out = selection_idx;
@@ -642,8 +645,9 @@ static const char* label_scale_values[2][3] = {
{ "##size_x", "##size_y", "##size_z"}
};
bool GizmoObjectManipulation::reset_button(ImGuiWrapper *imgui_wrapper, float caption_max, float unit_size, float space_size, float end_text_size)
bool GizmoObjectManipulation::reset_button(ImGuiWrapper *imgui_wrapper, bool enabled)
{
imgui_wrapper->disabled_begin(!enabled);
bool pressed = false;
ImTextureID normal_id = m_glcanvas.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_RESET);
ImTextureID hover_id = m_glcanvas.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_RESET_HOVER);
@@ -657,14 +661,17 @@ bool GizmoObjectManipulation::reset_button(ImGuiWrapper *imgui_wrapper, float ca
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f);
pressed = ImGui::ImageButton3(normal_id, hover_id, button_size);
pressed = ImGui::ImageButton3(normal_id, hover_id, button_size, {0,0}, {1,1}, -1, {0,0,0,0}, {1,1,1, enabled ? 1.f : 0.f}); // ORCA make icon invisible to prevent changes on layout
ImGui::PopStyleVar(1);
imgui_wrapper->disabled_end();
return pressed;
}
bool GizmoObjectManipulation::reset_zero_button(ImGuiWrapper *imgui_wrapper, float caption_max, float unit_size, float space_size, float end_text_size)
bool GizmoObjectManipulation::reset_zero_button(ImGuiWrapper *imgui_wrapper, bool enabled)
{
imgui_wrapper->disabled_begin(!enabled);
bool pressed = false;
ImTextureID normal_id = m_glcanvas.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_RESET_ZERO);
ImTextureID hover_id = m_glcanvas.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_RESET_ZERO_HOVER);
@@ -678,9 +685,11 @@ bool GizmoObjectManipulation::reset_zero_button(ImGuiWrapper *imgui_wrapper, flo
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f);
pressed = ImGui::ImageButton3(normal_id, hover_id, button_size);
pressed = ImGui::ImageButton3(normal_id, hover_id, button_size, {0,0}, {1,1}, -1, {0,0,0,0}, {1,1,1, enabled ? 1.f : 0.f}); // ORCA make icon invisible to prevent changes on layout
ImGui::PopStyleVar(1);
imgui_wrapper->disabled_end();
return pressed;
}
@@ -765,8 +774,17 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper,
};
float space_size = imgui_wrapper->get_style_scaling() * 8;
float position_size = imgui_wrapper->calc_text_size(_L("Position")).x + space_size;
float caption_max = imgui_wrapper->calc_text_size(_L("Object coordinates")).x + 2 * space_size;
//ORCA
float coord_combo_width = std::max({
imgui_wrapper->calc_text_size(_L("World")).x,
imgui_wrapper->calc_text_size(_L("Object")).x,
imgui_wrapper->calc_text_size(_L("Part")).x
}) + imgui_wrapper->calc_text_size("xxx"sv).x + imgui_wrapper->scaled(3.5f);
float label_max = std::max({
imgui_wrapper->calc_text_size(_L("Position")).x,
imgui_wrapper->calc_text_size(_L("Relative")).x
});
float caption_max = std::max(label_max, coord_combo_width - 3 * space_size);
float end_text_size = imgui_wrapper->calc_text_size(this->m_new_unit_string).x;
// position
@@ -786,7 +804,7 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper,
unsigned int current_active_id = ImGui::GetActiveID();
Selection & selection = m_glcanvas.get_selection();
std::vector<std::string> modes = {_u8L("World coordinates"), _u8L("Object coordinates")};//_u8L("Part coordinates")
std::vector<std::string> modes = {_u8L("World"), _u8L("Object")};//_u8L("Part") // ORCA use shorter terms to make UI more compact
if (selection.is_multiple_full_object() || selection.is_wipe_tower()) {
modes.pop_back();
}
@@ -796,16 +814,17 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper,
selection_idx = 0;
}
float caption_cs_size = imgui_wrapper->calc_text_size(""sv).x;
float caption_size = caption_cs_size + 2 * space_size;
float combox_content_size = imgui_wrapper->calc_text_size(_L("Object coordinates")).x * 1.2 + imgui_wrapper->calc_text_size("xxx"sv).x + imgui_wrapper->scaled(3);
ImGuiWrapper::push_combo_style(m_glcanvas.get_scale());
bool combox_changed = false;
if (render_combo(imgui_wrapper, "", modes, selection_idx, caption_size, combox_content_size)) {
if (render_combo(imgui_wrapper, "", modes, selection_idx, 0, coord_combo_width)) {
combox_changed = true;
}
if (ImGui::IsItemHovered()) {
auto tooltip_str = _L("Coordinate system used for transform actions.");
imgui_wrapper->tooltip(tooltip_str, imgui_wrapper->calc_text_size(tooltip_str).x + 3 * space_size);
}
ImGuiWrapper::pop_combo_style();
caption_max = combox_content_size - 4 * space_size;
// ORCA use TextColored to match axes color
float offset_to_center = (unit_size - ImGui::CalcTextSize("O").x) / 2;
ImGui::SameLine(caption_max + index * space_size + offset_to_center);
@@ -819,7 +838,7 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper,
index_unit = 1;
ImGui::AlignTextToFramePadding();
if (selection.is_single_full_instance() && is_instance_coordinates()) {
imgui_wrapper->text(_L("Translate(Relative)"));
imgui_wrapper->text(_L("Relative")); // ORCA
}
else {
imgui_wrapper->text(_L("Position"));
@@ -924,10 +943,15 @@ void GizmoObjectManipulation::do_render_rotate_window(ImGuiWrapper *imgui_wrappe
};
float space_size = imgui_wrapper->get_style_scaling() * 8;
float position_size = imgui_wrapper->calc_text_size(_L("Rotate (relative)")).x + space_size;
float World_size = imgui_wrapper->calc_text_size(_L("World coordinates")).x + space_size;
float caption_max = std::max(position_size, World_size) + 2 * space_size;
float end_text_size = imgui_wrapper->calc_text_size(this->m_new_unit_string).x;
// ORCA
float caption_max = std::max({
imgui_wrapper->calc_text_size(_L("Relative")).x,
imgui_wrapper->calc_text_size(_L("Absolute")).x,
imgui_wrapper->calc_text_size(_L("World")).x
//imgui_wrapper->calc_text_size(_L("Object")).x,
//imgui_wrapper->calc_text_size(_L("Part")).x
}) + 3.f * space_size;
float end_text_size = ImGui::CalcTextSize("°").x; // ORCA rotate gizmo not uses mm or inch
// position
Vec3d original_position;
@@ -946,7 +970,11 @@ void GizmoObjectManipulation::do_render_rotate_window(ImGuiWrapper *imgui_wrappe
ImGui::AlignTextToFramePadding();
unsigned int current_active_id = ImGui::GetActiveID();
ImGui::PushItemWidth(caption_max);
imgui_wrapper->text(_L("World coordinates"));
imgui_wrapper->text(_L("World")); // ORCA
if (ImGui::IsItemHovered()) {
auto tooltip_str = _L("Coordinate system used for transform actions.");
imgui_wrapper->tooltip(tooltip_str, imgui_wrapper->calc_text_size(tooltip_str).x + 3 * space_size);
}
// ORCA use TextColored to match axes color
float offset_to_center = (unit_size - ImGui::CalcTextSize("O").x) / 2;
ImGui::SameLine(caption_max + index * space_size + offset_to_center);
@@ -962,7 +990,7 @@ void GizmoObjectManipulation::do_render_rotate_window(ImGuiWrapper *imgui_wrappe
// ImGui::PushItemWidth(unit_size * 2);
bool is_relative_input = false;
ImGui::AlignTextToFramePadding();
imgui_wrapper->text(_L("Rotate (relative)"));
imgui_wrapper->text(_L("Relative")); // ORCA
ImGui::SameLine(caption_max + index * space_size);
ImGui::PushItemWidth(unit_size);
if (ImGui::BBLInputDouble(label_values[1][0], &rotation[0], 0.0f, 0.0f, "%.2f")) {
@@ -991,19 +1019,14 @@ void GizmoObjectManipulation::do_render_rotate_window(ImGuiWrapper *imgui_wrappe
}
}
if (m_show_clear_rotation) {
ImGui::SameLine(caption_max + 3 * unit_size + 4 * space_size + end_text_size);
if (reset_button(imgui_wrapper, caption_max, unit_size, space_size, end_text_size)) {
reset_rotation_value(true);
}
if (ImGui::IsItemHovered()) {
float tooltip_size = imgui_wrapper->calc_text_size(_L("Reset current rotation to the value when open the rotation tool.")).x + 3 * space_size;
imgui_wrapper->tooltip(_u8L("Reset current rotation to the value when open the rotation tool."), tooltip_size);
}
} else {
ImGui::SameLine(caption_max + 3 * unit_size + 5 * space_size + end_text_size);
ImGui::InvisibleButton("", ImVec2(ImGui::GetFontSize(), ImGui::GetFontSize()));
ImGui::SameLine(caption_max + index_unit * unit_size + (++index) * space_size + end_text_size);
if (reset_button(imgui_wrapper, m_show_clear_rotation)) // ORCA reserve icon space to prevent changes on layout
reset_rotation_value(true);
if (m_show_clear_rotation && ImGui::IsItemHovered()) {
float tooltip_size = imgui_wrapper->calc_text_size(_L("Reset current rotation to the value when open the rotation tool.")).x + 3 * space_size;
imgui_wrapper->tooltip(_u8L("Reset current rotation to the value when open the rotation tool."), tooltip_size);
}
// send focus to m_glcanvas
bool focued_on_text = false;
for (int j = 0; j < 3; j++) {
@@ -1018,7 +1041,7 @@ void GizmoObjectManipulation::do_render_rotate_window(ImGuiWrapper *imgui_wrappe
index = 1;
index_unit = 1;
ImGui::AlignTextToFramePadding();
imgui_wrapper->text(_L("Rotate (absolute)"));
imgui_wrapper->text(_L("Absolute"));
ImGui::SameLine(caption_max + index * space_size);
ImGui::PushItemWidth(unit_size);
bool is_absolute_input = false;
@@ -1048,13 +1071,12 @@ void GizmoObjectManipulation::do_render_rotate_window(ImGuiWrapper *imgui_wrappe
}
}
if (m_show_reset_0_rotation) {
ImGui::SameLine(caption_max + 3 * unit_size + 4 * space_size + end_text_size);
if (reset_zero_button(imgui_wrapper, caption_max, unit_size, space_size, end_text_size)) { reset_rotation_value(false); }
if (ImGui::IsItemHovered()) {
float tooltip_size = imgui_wrapper->calc_text_size(_L("Reset current rotation to real zeros.")).x + 3 * space_size;
imgui_wrapper->tooltip(_L("Reset current rotation to real zeros."), tooltip_size);
}
ImGui::SameLine(caption_max + index_unit * unit_size + (++index) * space_size + end_text_size);
if (reset_zero_button(imgui_wrapper, m_show_reset_0_rotation)) // ORCA reserve icon space to prevent changes on layout
reset_rotation_value(false);
if (m_show_reset_0_rotation && ImGui::IsItemHovered()) {
float tooltip_size = imgui_wrapper->calc_text_size(_L("Reset current rotation to real zeros.")).x + 3 * space_size;
imgui_wrapper->tooltip(_L("Reset current rotation to real zeros."), tooltip_size);
}
// send focus to m_glcanvas
bool absolute_focued_on_text = false;
@@ -1132,8 +1154,17 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w
};
float space_size = imgui_wrapper->get_style_scaling() * 8;
float scale_size = imgui_wrapper->calc_text_size(_L("Scale")).x + space_size;
float caption_max = imgui_wrapper->calc_text_size(_L("Object coordinates")).x + 2 * space_size;
// ORCA
float coord_combo_width = std::max({
imgui_wrapper->calc_text_size(_L("World")).x,
imgui_wrapper->calc_text_size(_L("Object")).x,
imgui_wrapper->calc_text_size(_L("Part")).x
}) + imgui_wrapper->calc_text_size("xxx"sv).x + imgui_wrapper->scaled(3.5f);
float label_max = std::max({
imgui_wrapper->calc_text_size(_L("Scale")).x,
imgui_wrapper->calc_text_size(_L("Size")).x
});
float caption_max = std::max(label_max, coord_combo_width - 3 * space_size);
float end_text_size = imgui_wrapper->calc_text_size(this->m_new_unit_string).x;
ImGui::AlignTextToFramePadding();
unsigned int current_active_id = ImGui::GetActiveID();
@@ -1150,7 +1181,7 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w
int index_unit = 1;
Selection & selection = m_glcanvas.get_selection();
std::vector<std::string> modes = {_u8L("World coordinates"), _u8L("Object coordinates"), _u8L("Part coordinates")};
std::vector<std::string> modes = {_u8L("World"), _u8L("Object"), _u8L("Part")}; // ORCA use shorter terms to make UI more compact
if (selection.is_single_full_object()) { modes.pop_back(); }
if (selection.is_multiple_full_object()) {
modes.pop_back();
@@ -1162,17 +1193,17 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w
selection_idx = 0;
}
float caption_cs_size = imgui_wrapper->calc_text_size(""sv).x;
float caption_size = caption_cs_size + 2 * space_size;
float combox_content_size = imgui_wrapper->calc_text_size(_L("Object coordinates")).x * 1.2 + imgui_wrapper->calc_text_size("xxx"sv).x + imgui_wrapper->scaled(3);
ImGuiWrapper::push_combo_style(m_glcanvas.get_scale());
bool combox_changed = false;
if (render_combo(imgui_wrapper, "", modes, selection_idx, caption_size, combox_content_size)) {
if (render_combo(imgui_wrapper, "", modes, selection_idx, 0, coord_combo_width)) {
combox_changed = true;
}
if (ImGui::IsItemHovered()) {
auto tooltip_str = _L("Coordinate system used for transform actions.");
imgui_wrapper->tooltip(tooltip_str, imgui_wrapper->calc_text_size(tooltip_str).x + 3 * space_size);
}
ImGuiWrapper::pop_combo_style();
caption_max = combox_content_size - 4 * space_size;
//ImGui::Dummy(ImVec2(caption_max, -1));
// ORCA use TextColored to match axes color
float offset_to_center = (unit_size - ImGui::CalcTextSize("O").x) / 2;
ImGui::SameLine(caption_max + space_size + offset_to_center);
@@ -1203,14 +1234,9 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w
m_buffered_scale = scale;
}
if (m_show_clear_scale) {
ImGui::SameLine(caption_max + 3 * unit_size + 4 * space_size + end_text_size);
if (reset_button(imgui_wrapper, caption_max, unit_size, space_size, end_text_size))
reset_scale_value();
} else {
ImGui::SameLine(caption_max + 3 * unit_size + 5 * space_size + end_text_size);
ImGui::InvisibleButton("", ImVec2(ImGui::GetFontSize(), ImGui::GetFontSize()));
}
ImGui::SameLine(caption_max + 3 * unit_size + 4 * space_size + end_text_size);
if (reset_button(imgui_wrapper, m_show_clear_scale))
reset_scale_value();
//Size
Vec3d original_size;

View File

@@ -139,8 +139,8 @@ public:
void do_render_rotate_window(ImGuiWrapper *imgui_wrapper, std::string window_name, float x, float y, float bottom_limit);
void do_render_scale_input_window(ImGuiWrapper* imgui_wrapper, std::string window_name, float x, float y, float bottom_limit);
float max_unit_size(int number, Vec3d &vec1, Vec3d &vec2,std::string str);
bool reset_button(ImGuiWrapper *imgui_wrapper, float caption_max, float unit_size, float space_size, float end_text_size);
bool reset_zero_button(ImGuiWrapper *imgui_wrapper, float caption_max, float unit_size, float space_size, float end_text_size);
bool reset_button(ImGuiWrapper *imgui_wrapper, bool enabled);
bool reset_zero_button(ImGuiWrapper *imgui_wrapper, bool enabled);
bool bbl_checkbox(const wxString &label, bool &value);
void set_init_rotation(const Geometry::Transformation &value);

View File

@@ -436,7 +436,9 @@ wxBitmap create_scaled_bitmap( const std::string& bmp_name_in,
return create_scaled_bitmap2(bmp_name_in, cache, win, px_cnt, grayscale, resize, array_new_color);
}
unsigned int width = 0;
unsigned int height = (unsigned int) (win->FromDIP(px_cnt) + 0.5f);
// win may be nullptr; use the static overload, which falls back to the primary display DPI.
// Calling win->FromDIP() on a null win is UB and lets the optimizer drop later null checks.
unsigned int height = (unsigned int) (wxWindow::FromDIP(px_cnt, win) + 0.5f);
std::string bmp_name = bmp_name_in;
boost::replace_last(bmp_name, ".png", "");
@@ -450,7 +452,7 @@ wxBitmap create_scaled_bitmap( const std::string& bmp_name_in,
// Try loading an SVG first, then PNG if SVG was not found:
wxBitmap *bmp = cache.load_svg(bmp_name, width, height, grayscale, dark_mode, new_color, resize ? em_unit(win) * 0.1f : 0.f);
if (bmp == nullptr) {
bmp = cache.load_png(bmp_name, width, height, grayscale, resize ? win->FromDIP(10) * 0.1f : 0.f);
bmp = cache.load_png(bmp_name, width, height, grayscale, resize ? wxWindow::FromDIP(10, win) * 0.1f : 0.f);
}
if (bmp == nullptr) {
@@ -471,7 +473,8 @@ wxBitmap create_scaled_bitmap2(const std::string& bmp_name_in, Slic3r::GUI::Bitm
const vector<std::string>& array_new_color/* = vector<std::string>()*/) // color witch will used instead of orange
{
unsigned int width = 0;
unsigned int height = (unsigned int)(win->FromDIP(px_cnt) + 0.5f);
// win may be nullptr; see create_scaled_bitmap() above.
unsigned int height = (unsigned int)(wxWindow::FromDIP(px_cnt, win) + 0.5f);
std::string bmp_name = bmp_name_in;
boost::replace_last(bmp_name, ".png", "");

View File

@@ -2,6 +2,11 @@
This guide provides comprehensive instructions for Claude Code when writing, maintaining, and understanding tests in the OrcaSlicer codebase.
> **Adding or organizing `fff_print` tests?** See
> [fff_print/README.md](fff_print/README.md) for where a test belongs and how to
> name it. This guide covers Catch2 mechanics; that README is the suite's
> organizing contract.
## ⚠️ CRITICAL RULES - MUST FOLLOW
### 1. **SECTIONS IN LOOPS - NEVER REUSE NAMES**

View File

@@ -1,17 +1,17 @@
get_filename_component(_TEST_NAME ${CMAKE_CURRENT_LIST_DIR} NAME)
add_executable(${_TEST_NAME}_tests
${_TEST_NAME}_tests.cpp
test_data.cpp
test_data.hpp
test_helpers.cpp
test_helpers.hpp
test_cooling.cpp
test_extrusion_entity.cpp
test_fill.cpp
test_flow.cpp
test_gcode.cpp
test_gcode_timing.cpp
test_gcodewriter.cpp
test_model.cpp
test_multifilament.cpp
test_print.cpp
test_printgcode.cpp
test_printobject.cpp
test_skirt_brim.cpp
test_support_material.cpp

93
tests/fff_print/README.md Normal file
View File

@@ -0,0 +1,93 @@
# fff_print test suite
Component- and pipeline-level tests for FFF slicing: the path from a `Model` plus config, through `Print` / `PrintObject`, to emitted G-code.
For Catch2 mechanics (assertions, generators, matchers, random ordering, thread-safety), see [../CLAUDE.md](../CLAUDE.md). This document is the organizing contract for the suite: where a test goes, and how it is named.
## Organizing principle
**One file per subsystem. A subsystem is usually a single production class (`Flow`, `PrintObject`), but may be a cohesive feature that spans several (skirt/brim lives in `Brim.cpp`, `Print.cpp`, and `GCode.cpp`). That file owns every test for the subsystem: in-memory-state assertions and emitted-G-code assertions alike.**
A test's home is decided by *what production code it exercises*, never by *how it observes the result*. A skirt test that inspects `print.skirt()` and one that greps the G-code for `; skirt` live in the same file.
If you touched code in a subsystem, its test file is where your test goes. If a subsystem has no file yet, add `test_<subsystem>.cpp` and list it in `CMakeLists.txt`.
## File ownership
### Building blocks (one class, exercised through its API)
| File | Source (`src/libslic3r/`) | Covers |
|---|---|---|
| `test_trianglemesh` | `TriangleMesh.{c,h}pp` | mesh stats, transforms, slicing, split/merge/cut |
| `test_flow` | `Flow.{c,h}pp` | extrusion width / area math |
| `test_extrusion_entity` | `ExtrusionEntity.{c,h}pp` | extrusion-collection geometry |
| `test_gcodewriter` | `GCodeWriter.{c,h}pp`, `GCode.cpp` | low-level G-code emit primitives, origin |
| `test_model` | `Model.{c,h}pp` | object / volume / instance construction |
### Slicing pipeline (build a `Print`, then assert state or G-code)
| File | Source (`src/libslic3r/`) | Covers |
|---|---|---|
| `test_printobject` | `PrintObject.cpp` | layer heights, perimeter generation |
| `test_fill` | `Fill/` | infill patterns and infill G-code |
| `test_skirt_brim` | `Brim.cpp`, `Print.cpp` | skirt/brim loop counts, grouping, brim ears, emission order |
| `test_support_material` | `Support/` | support & raft layers, contact distance |
| `test_cooling` | `GCode/CoolingBuffer.cpp` | fan control, speed-marker consumption |
| `test_multifilament` | `GCode/ToolOrdering.cpp` | per-feature and per-object filament routing |
| `test_print` | `Print.{c,h}pp` | `validate()`, solid-shell behavior, sequential printing, custom G-code & config comments, default-slice smoke |
Paths are under `src/libslic3r/`. A trailing `/` is a directory of related files; otherwise it is a single class. `{c,h}pp` means the `.cpp`/`.hpp` pair.
## Naming and tags
- **File:** `test_<subsystem>.cpp`.
- **Test name:** a plain behavioral sentence, present tense, stating the contract the test pins down. No `Subsystem:` prefix (the tag carries that).
- Good: `TEST_CASE("Skirt is emitted once per layer it spans", "[SkirtBrim]")`
- Avoid: `TEST_CASE("Print: Skirt generation", "[Print]")`
- **Tags:**
- Exactly one **subsystem** tag, PascalCase, matching the file (`[SkirtBrim]`, `[PrintObject]`, `[Fill]`). This is the grouping / filter key.
- Optional **cross-cutting** tags for a concern that genuinely spans files (`[validate]`, `[Regression]`).
- **Status** tags: `[NotWorking]` marks a test disabled for a known, documented reason; CI excludes it via `~[NotWorking]` (it does not hide itself). Use `[.]` to hide a test from default runs entirely. Either way, say why in a one-line comment.
## Test style
Prefer a flat `TEST_CASE` per behavior, with `GENERATE` for parameterized cases and shared setup factored into helpers. The test name carries the behavior, so the BDD scaffolding is usually redundant. Reserve `SCENARIO` / `GIVEN` / `WHEN` / `THEN` for a test with genuine shared setup that branches into a few closely related variations, and never let a `SCENARIO` accumulate unrelated `WHEN`s: that grab-bag is what this contract exists to prevent (and it hides failures behind a single coarse test case).
## Robust tests
A test should fail only when the behavior it names breaks, not from unrelated changes (the "change-detector" anti-pattern). Test behavior, not incidentals, and aim for one reason to fail. Concretely:
- Don't depend on or assert defaults: set the config keys the behavior needs, and derive expected values from those inputs (a 20mm cube at 0.2mm = 100 layers), not from a default that may change.
- Assert the defining property, not an incidental value: prefer "skirt present", "at least 2 brim loops", or "ears vs none" over exact coordinates, extrusion amounts, line counts, or byte sizes.
- Compare floats with a tolerance (`WithinAbs` / `WithinRel`), never `==`.
- Match the meaningful G-code token (`; skirt`), not whole lines, whitespace, or comment wording.
- Rely on ordering only when it is the contract (as `role_sequence` does).
- Keep tests self-contained: no shared state, green under `--order rand`.
## Helpers
Reuse these instead of building a `Print` or parsing G-code by hand.
- **Global** (`tests/test_utils.hpp`, available to every suite):
- `load_model("file.obj")`: load a `TriangleMesh` from `tests/data/`.
- `ScopedTemporaryFile`: an RAII temp-file path, removed on scope exit.
- **Suite harness** (`fff_print/test_helpers.{hpp,cpp}`):
- Build and run: `init_print(...)`, `init_and_process_print(...)`, `slice(...)` (returns the G-code string), and `gcode(print)`.
- Two-cube placement: `slice_two_cubes_arranged(...)` (arranger-positioned), and `place_two_cubes_apart(...)` / `slice_two_cubes_apart(...)` (a fixed gap, not arranged).
- Meshes: `cube(size)` / `make_cube(...)` for simple shapes; the `TestMesh` enum with `mesh(...)` for named fixtures.
- G-code analysis: `layers_with_role(gcode, role)`, `max_z(gcode)`, `role_passes(gcode, role)`, `role_sequence(gcode, roles)`. Subsystem-specific checks stay local (for example `brim_count` in `test_skirt_brim`).
Promote a helper into the suite harness when it is a general test primitive (not tied to one subsystem's logic), even if only one file uses it today; keep genuinely subsystem-specific helpers local (file-static). Reuse potential, not current usage count, is the test.
## Adding a test (checklist)
1. Find the subsystem's file in the tables; create `test_<subsystem>.cpp` if missing.
2. Build the print with a harness helper; set only the config keys the behavior needs.
3. Assert the behavior, in-memory or via parsed G-code, whichever is clearest.
4. Name it as a behavioral sentence and tag it `[Subsystem]`.
5. For a bug fix, add the regression test in the owning file. Name it for the behavior it protects; the test must stand on its own without relying on an external issue or PR for meaning.
## Running
ctest --test-dir build/tests/fff_print
build/tests/fff_print/<config>/fff_print_tests --order rand "~[NotWorking]"

View File

@@ -0,0 +1,27 @@
#include <catch2/catch_all.hpp>
#include "test_helpers.hpp"
#include <string>
using namespace Slic3r;
using namespace Slic3r::Test;
// The fan is held off for the first close_fan_the_first_x_layers layers, so an explicit
// fan-off command is emitted.
TEST_CASE("Fan is held off for the initial layers", "[Cooling]")
{
const std::string gcode = slice({ cube(20) }, {
{ "cooling", true },
{ "close_fan_the_first_x_layers", 5 },
});
CHECK(gcode.find("M106 S0") != std::string::npos);
}
// The cooling pass resolves and strips its internal speed placeholders; none leak into
// the final G-code.
TEST_CASE("Cooling consumes its internal speed markers", "[Cooling]")
{
const std::string gcode = slice({ cube(20) }, { { "layer_height", 0.2 } });
CHECK(gcode.find(";_EXTRUDE_SET_SPEED") == std::string::npos);
}

View File

@@ -1,95 +0,0 @@
#ifndef SLIC3R_TEST_DATA_HPP
#define SLIC3R_TEST_DATA_HPP
#include "libslic3r/Config.hpp"
#include "libslic3r/Geometry.hpp"
#include "libslic3r/Model.hpp"
#include "libslic3r/Point.hpp"
#include "libslic3r/Print.hpp"
#include "libslic3r/TriangleMesh.hpp"
#include <set>
#include <string>
#include <unordered_map>
namespace Slic3r { namespace Test {
constexpr double MM_PER_MIN = 60.0;
/// Enumeration of test meshes
enum class TestMesh {
A,
L,
V,
_40x10,
cube_20x20x20,
sphere_50mm,
bridge,
bridge_with_hole,
cube_with_concave_hole,
cube_with_hole,
gt2_teeth,
ipadstand,
overhang,
pyramid,
sloping_hole,
slopy_cube,
small_dorito,
step,
two_hollow_squares
};
// Necessary for <c++17
struct TestMeshHash {
std::size_t operator()(TestMesh tm) const {
return static_cast<std::size_t>(tm);
}
};
/// Mesh enumeration to name mapping
extern const std::unordered_map<TestMesh, const char*, TestMeshHash> mesh_names;
/// Port of Slic3r::Test::mesh
/// Basic cubes/boxes should call TriangleMesh::make_cube() directly and rescale/translate it
TriangleMesh mesh(TestMesh m);
TriangleMesh mesh(TestMesh m, Vec3d translate, Vec3d scale = Vec3d(1.0, 1.0, 1.0));
TriangleMesh mesh(TestMesh m, Vec3d translate, double scale = 1.0);
/// Templated function to see if two values are equivalent (+/- epsilon)
template <typename T>
bool _equiv(const T& a, const T& b) { return std::abs(a - b) < EPSILON; }
template <typename T>
bool _equiv(const T& a, const T& b, double epsilon) { return abs(a - b) < epsilon; }
Slic3r::Model model(const std::string& model_name, TriangleMesh&& _mesh);
void init_print(std::vector<TriangleMesh> &&meshes, Slic3r::Print &print, Slic3r::Model& model, const DynamicPrintConfig &config_in, bool comments = false);
void init_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, Slic3r::Model& model, const Slic3r::DynamicPrintConfig &config_in = Slic3r::DynamicPrintConfig::full_print_config(), bool comments = false);
void init_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, Slic3r::Model& model, const Slic3r::DynamicPrintConfig &config_in = Slic3r::DynamicPrintConfig::full_print_config(), bool comments = false);
void init_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, Slic3r::Model& model, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items, bool comments = false);
void init_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, Slic3r::Model& model, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items, bool comments = false);
void init_and_process_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, const DynamicPrintConfig& config, bool comments = false);
void init_and_process_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, const DynamicPrintConfig& config, bool comments = false);
void init_and_process_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items, bool comments = false);
void init_and_process_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items, bool comments = false);
std::string gcode(Print& print);
std::string slice(std::initializer_list<TestMesh> meshes, const DynamicPrintConfig &config, bool comments = false);
std::string slice(std::initializer_list<TriangleMesh> meshes, const DynamicPrintConfig &config, bool comments = false);
std::string slice(std::initializer_list<TestMesh> meshes, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items, bool comments = false);
std::string slice(std::initializer_list<TriangleMesh> meshes, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items, bool comments = false);
// Distinct layer Z heights that carry an extrusion tagged with the given role
// comment (requires gcode_comments), e.g. "skirt", "brim", "support".
std::set<double> layers_with_role(const std::string &gcode, const std::string &role);
// Highest Z reached by any move in the gcode.
double max_z(const std::string &gcode);
} } // namespace Slic3r::Test
#endif // SLIC3R_TEST_DATA_HPP

View File

@@ -7,7 +7,7 @@
#include "libslic3r/Point.hpp"
#include "libslic3r/libslic3r.h"
#include "test_data.hpp"
#include "test_helpers.hpp"
using namespace Slic3r;
@@ -35,7 +35,7 @@ static Slic3r::ExtrusionPaths random_paths(size_t count = 10, size_t length = 20
return p;
}
SCENARIO("ExtrusionEntityCollection: Polygon flattening", "[ExtrusionEntity]") {
SCENARIO("Polygon flattening", "[ExtrusionEntity]") {
srand(0xDEADBEEF); // consistent seed for test reproducibility.
// Generate one specific random path set and save it for later comparison

View File

@@ -11,14 +11,14 @@
#include "libslic3r/SVG.hpp"
#include "libslic3r/libslic3r.h"
#include "test_data.hpp"
#include "test_helpers.hpp"
using namespace Slic3r;
bool test_if_solid_surface_filled(const ExPolygon& expolygon, double flow_spacing, double angle = 0, double density = 1.0);
#if 0
TEST_CASE("Fill: adjusted solid distance") {
TEST_CASE("Adjusted solid distance", "[Fill]") {
int surface_width = 250;
int distance = Slic3r::Flow::solid_spacing(surface_width, 47);
REQUIRE(distance == Catch::Approx(50));
@@ -26,7 +26,7 @@ TEST_CASE("Fill: adjusted solid distance") {
}
#endif
TEST_CASE("Fill: Pattern Path Length", "[Fill]") {
TEST_CASE("Pattern path length", "[Fill]") {
std::unique_ptr<Slic3r::Fill> filler(Slic3r::Fill::new_from_type("rectilinear"));
filler->angle = float(-(PI)/2.0);
FillParams fill_params;

View File

@@ -3,7 +3,7 @@
#include <numeric>
#include <sstream>
#include "test_data.hpp" // get access to init_print, etc
#include "test_helpers.hpp" // get access to init_print, etc
#include "libslic3r/Config.hpp"
#include "libslic3r/Model.hpp"
@@ -17,7 +17,7 @@ using namespace Slic3r;
/// Test the expected behavior for auto-width,
/// spacing, etc
SCENARIO("Flow: Flow math for non-bridges", "[Flow]") {
SCENARIO("Flow math for non-bridges", "[Flow]") {
GIVEN("Nozzle Diameter of 0.4, a desired width of 1mm and layer height of 0.5") {
ConfigOptionFloatOrPercent width(1.0, false);
float nozzle_diameter = 0.4f;
@@ -79,7 +79,7 @@ SCENARIO("Flow: Flow math for non-bridges", "[Flow]") {
}
/// Spacing, width calculation for bridge extrusions
SCENARIO("Flow: Flow math for bridges", "[Flow]") {
SCENARIO("Flow math for bridges", "[Flow]") {
GIVEN("Nozzle Diameter of 0.4, a desired width of 1mm and layer height of 0.5") {
float nozzle_diameter = 0.4f;
float bridge_flow = 1.0f;

View File

@@ -1,22 +0,0 @@
#include <catch2/catch_all.hpp>
#include <memory>
#include "libslic3r/GCode.hpp"
using namespace Slic3r;
SCENARIO("Origin manipulation", "[GCode]") {
Slic3r::GCode gcodegen;
WHEN("set_origin to (10,0)") {
gcodegen.set_origin(Vec2d(10,0));
REQUIRE(gcodegen.origin() == Vec2d(10, 0));
}
WHEN("set_origin to (10,0) and translate by (5, 5)") {
gcodegen.set_origin(Vec2d(10,0));
gcodegen.set_origin(gcodegen.origin() + Vec2d(5, 5));
THEN("origin returns reference to point") {
REQUIRE(gcodegen.origin() == Vec2d(15,5));
}
}
}

View File

@@ -3,8 +3,15 @@
#include <memory>
#include "libslic3r/GCodeWriter.hpp"
#include "libslic3r/GCode.hpp"
#include "libslic3r/Model.hpp"
#include "libslic3r/Print.hpp"
#include "libslic3r/ModelArrange.hpp"
#include "test_helpers.hpp"
using namespace Slic3r;
using namespace Slic3r::Test;
SCENARIO("set_speed emits values with fixed-point output.", "[GCodeWriter]") {
@@ -57,3 +64,343 @@ SCENARIO("z_hop lifts the nozzle when a lift is requested", "[GCodeWriter]") {
}
}
}
SCENARIO("Origin manipulation", "[GCodeWriter]") {
Slic3r::GCode gcodegen;
WHEN("set_origin to (10,0)") {
gcodegen.set_origin(Vec2d(10,0));
REQUIRE(gcodegen.origin() == Vec2d(10, 0));
}
WHEN("set_origin to (10,0) and translate by (5, 5)") {
gcodegen.set_origin(Vec2d(10,0));
gcodegen.set_origin(gcodegen.origin() + Vec2d(5, 5));
THEN("origin returns reference to point") {
REQUIRE(gcodegen.origin() == Vec2d(15,5));
}
}
}
// Verify that emit_machine_limits_to_gcode emits the correct max value across
// used extruders (regression for commit b4ee665: "Emit max value of machine
// limit among used extruders").
TEST_CASE("Machine envelope emits max limit among used extruders", "[GCodeWriter]")
{
SECTION("Single extruder emits its configured values") {
const std::string gcode = Slic3r::Test::slice({ cube(20) }, {
{ "emit_machine_limits_to_gcode", "1" },
{ "gcode_flavor", "marlin2" },
{ "gcode_comments", "1" },
{ "machine_start_gcode", "" },
{ "layer_height", "0.2" },
{ "initial_layer_print_height", "0.2" },
{ "initial_layer_line_width", "0" },
{ "z_hop", "0" },
// stride-2 options: (normal, silent)
{ "machine_max_acceleration_x", "500,600" },
{ "machine_max_acceleration_y", "700,800" },
{ "machine_max_acceleration_z", "100,200" },
{ "machine_max_acceleration_e", "5000,6000" },
{ "machine_max_acceleration_extruding", "1200,1300" },
{ "machine_max_acceleration_retracting", "1400,1500" },
{ "machine_max_acceleration_travel", "1600,1700" },
// stride-2 options: (normal, silent)
{ "machine_max_speed_x", "100,100" },
{ "machine_max_speed_y", "110,110" },
{ "machine_max_speed_z", "10,10" },
{ "machine_max_speed_e", "50,50" },
{ "machine_max_jerk_x", "8,8" },
{ "machine_max_jerk_y", "9,9" },
{ "machine_max_jerk_z", "0.4,0.4" },
{ "machine_max_jerk_e", "5,5" },
{ "machine_max_junction_deviation", "0.02,0.03" },
});
THEN("M201 uses the normal acceleration values") {
REQUIRE(gcode.find("M201 X500 Y700 Z100 E5000") != std::string::npos);
}
THEN("M203 uses the speed values") {
REQUIRE(gcode.find("M203 X100 Y110 Z10 E50") != std::string::npos);
}
THEN("M204 (Marlin 2) uses extruding / retracting / travel") {
REQUIRE(gcode.find("M204 P1200 R1400 T1600") != std::string::npos);
}
THEN("M205 uses the jerk values") {
REQUIRE(gcode.find("M205 X8.00 Y9.00 Z0.40 E5.00") != std::string::npos);
}
THEN("M205 J uses the junction deviation") {
REQUIRE(gcode.find("M205 J0.020") != std::string::npos);
}
}
SECTION("Legacy Marlin flavor emits correct format") {
const std::string gcode = Slic3r::Test::slice({ cube(20) }, {
{ "emit_machine_limits_to_gcode", "1" },
{ "gcode_flavor", "marlin" },
{ "gcode_comments", "1" },
{ "machine_start_gcode", "" },
{ "layer_height", "0.2" },
{ "initial_layer_print_height", "0.2" },
{ "initial_layer_line_width", "0" },
{ "z_hop", "0" },
// All machine limits must be provided — defaults are empty vectors.
{ "machine_max_acceleration_x", "500,600" },
{ "machine_max_acceleration_y", "500,600" },
{ "machine_max_acceleration_z", "500,600" },
{ "machine_max_acceleration_e", "5000,6000" },
{ "machine_max_acceleration_extruding", "1200,1300" },
{ "machine_max_acceleration_retracting", "1400,1500" },
{ "machine_max_acceleration_travel", "1600,1700" },
{ "machine_max_speed_x", "100,100" },
{ "machine_max_speed_y", "110,110" },
{ "machine_max_speed_z", "10,10" },
{ "machine_max_speed_e", "50,50" },
{ "machine_max_jerk_x", "8,8" },
{ "machine_max_jerk_y", "9,9" },
{ "machine_max_jerk_z", "0.4,0.4" },
{ "machine_max_jerk_e", "5,5" },
{ "machine_max_junction_deviation", "0.02,0.03" },
});
THEN("Legacy Marlin: M204 travel_acc = extruding_acc") {
// gcfMarlinLegacy uses extruding acc for travel too
REQUIRE(gcode.find("M204 P1200 R1400 T1200") != std::string::npos);
}
THEN("Legacy Marlin: M205 uses mm/sec format") {
REQUIRE(gcode.find("M205 X8.00 Y9.00 Z0.40 E5.00") != std::string::npos);
}
}
SECTION("Multi extruder - max of used extruders is emitted") {
// Build config with 2 extruders that have *different* machine limits.
// Extruder 1 has higher values; the emitted G-code must use the max.
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
// Print basics
config.set_key_value("emit_machine_limits_to_gcode", new ConfigOptionBool(true));
config.set_key_value("gcode_flavor", new ConfigOptionEnum<GCodeFlavor>(gcfMarlinFirmware));
config.set_key_value("gcode_comments", new ConfigOptionBool(true));
config.set_key_value("machine_start_gcode", new ConfigOptionString(""));
config.set_key_value("layer_height", new ConfigOptionFloat(0.2));
config.set_key_value("initial_layer_print_height", new ConfigOptionFloat(0.2));
config.set_key_value("initial_layer_line_width", new ConfigOptionFloatOrPercent(0, false));
config.set_key_value("z_hop", new ConfigOptionFloats({0}));
// Print objects sequentially so each uses its own extruder without
// wipe-tower / tool-change complexity.
config.set_key_value("print_sequence", new ConfigOptionEnum<PrintSequence>(PrintSequence::ByObject));
// 2 extruders
config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4}));
config.set_key_value("printer_extruder_id", new ConfigOptionInts({1, 2}));
config.set_key_value("printer_extruder_variant", new ConfigOptionStrings({"Direct Drive Standard", "Direct Drive Standard"}));
config.set_key_value("filament_diameter", new ConfigOptionFloats({1.75, 1.75}));
config.set_key_value("filament_colour", new ConfigOptionStrings({"#FF0000", "#00FF00"}));
config.set_key_value("filament_type", new ConfigOptionStrings({"PLA", "PLA"}));
// filament_map maps filament slot index (1-based) → logical extruder ID (1-based).
// Default [1] maps everything to extruder 0. Need [1, 2] for two distinct extruders.
// fmmManual prevents auto-computation from overwriting the explicit mapping.
config.option<ConfigOptionEnum<FilamentMapMode>>("filament_map_mode", true)->value = fmmManual;
config.set_key_value("filament_map", new ConfigOptionInts({1, 2}));
config.set_key_value("default_filament_colour", new ConfigOptionStrings({"#FF0000", "#00FF00"}));
config.set_key_value("nozzle_temperature", new ConfigOptionInts({210, 210}));
config.set_key_value("nozzle_temperature_range_low", new ConfigOptionInts({190, 190}));
config.set_key_value("nozzle_temperature_range_high", new ConfigOptionInts({240, 240}));
// flush_volumes_matrix must be filament_count^2 * heads_count entries.
// 2 filaments * 2 * 1 head = 4 entries (all zero — flush volumes not tested here).
config.set_key_value("flush_multiplier", new ConfigOptionFloats({1}));
config.set_key_value("flush_volumes_matrix", new ConfigOptionFloats({0, 0, 0, 0}));
// Machine limits: extruder 0 low, extruder 1 high
// Stride-2 (normal, silent pairs): e0_n, e0_s, e1_n, e1_s
config.set_key_value("machine_max_acceleration_x", new ConfigOptionFloats({500, 0, 1000, 0}));
config.set_key_value("machine_max_acceleration_y", new ConfigOptionFloats({700, 0, 1100, 0}));
config.set_key_value("machine_max_acceleration_z", new ConfigOptionFloats({100, 0, 300, 0}));
config.set_key_value("machine_max_acceleration_e", new ConfigOptionFloats({5000, 0, 8000, 0}));
config.set_key_value("machine_max_acceleration_extruding", new ConfigOptionFloats({1200, 0, 2200, 0}));
config.set_key_value("machine_max_acceleration_retracting", new ConfigOptionFloats({1400, 0, 2400, 0}));
config.set_key_value("machine_max_acceleration_travel", new ConfigOptionFloats({1600, 0, 2600, 0}));
config.set_key_value("machine_max_speed_x", new ConfigOptionFloats({100, 0, 200, 0}));
config.set_key_value("machine_max_speed_y", new ConfigOptionFloats({110, 0, 210, 0}));
config.set_key_value("machine_max_speed_z", new ConfigOptionFloats({10, 0, 30, 0}));
config.set_key_value("machine_max_speed_e", new ConfigOptionFloats({50, 0, 80, 0}));
config.set_key_value("machine_max_jerk_x", new ConfigOptionFloats({8, 0, 12, 0}));
config.set_key_value("machine_max_jerk_y", new ConfigOptionFloats({9, 0, 13, 0}));
config.set_key_value("machine_max_jerk_z", new ConfigOptionFloats({0.4, 0, 0.6, 0}));
config.set_key_value("machine_max_jerk_e", new ConfigOptionFloats({5, 0, 10, 0}));
config.set_key_value("machine_max_junction_deviation", new ConfigOptionFloats({0.02, 0, 0.05, 0}));
// Model: two objects assigned to different extruders
Model model;
auto* obj1 = model.add_object();
obj1->add_volume(cube(20));
obj1->add_instance();
// obj1 uses default extruder=1 (0-based index 0)
auto* obj2 = model.add_object();
obj2->add_volume(cube(20));
obj2->add_instance();
obj2->config.set_key_value("extruder", new ConfigOptionInt(2)); // 0-based index 1
Print print;
arrange_objects(model, InfiniteBed{},
ArrangeParams{scaled(min_object_distance(config))});
for (auto* mo : model.objects) {
mo->ensure_on_bed();
print.auto_assign_extruders(mo);
}
print.apply(model, config);
print.validate();
print.set_status_silent();
print.process();
std::string gcode = Slic3r::Test::gcode(print);
THEN("M201 contains max (extruder 1's) acceleration values") {
REQUIRE(gcode.find("M201 X1000 Y1100 Z300 E8000") != std::string::npos);
}
THEN("M203 contains max speed values") {
REQUIRE(gcode.find("M203 X200 Y210 Z30 E80") != std::string::npos);
}
THEN("M204 contains max extruding / retracting / travel") {
REQUIRE(gcode.find("M204 P2200 R2400 T2600") != std::string::npos);
}
THEN("M205 contains max jerk values") {
REQUIRE(gcode.find("M205 X12.00 Y13.00 Z0.60 E10.00") != std::string::npos);
}
THEN("M205 contains max m_max_junction_deviation ") {
REQUIRE(gcode.find("M205 J0.050") != std::string::npos);
}
}
}
// Verify that the EXTRUDER_LIMIT macro (GCodeWriter.cpp) correctly:
// 1) Uses the active extruder's specific limit when filament() is known.
// 2) Falls back to the maximum of all extruder limits when filament() is nullptr.
//
// These two behaviours were introduced in:
// - "Use per-extruder motion limit" (1ab34a7454)
// - "Use max limit when current extruder is unknown" (b7240ab1c6)
TEST_CASE("EXTRUDER_LIMIT per-extruder clamping and max fallback", "[GCodeWriter]")
{
// --- Build config with 2 extruders that have different machine limits ---
// Extruder 0: low limits
// Extruder 1: high limits
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
config.set_key_value("emit_machine_limits_to_gcode", new ConfigOptionBool(true));
config.set_key_value("gcode_flavor", new ConfigOptionEnum<GCodeFlavor>(gcfMarlinFirmware));
config.set_key_value("gcode_comments", new ConfigOptionBool(true));
config.set_key_value("machine_start_gcode", new ConfigOptionString(""));
config.set_key_value("layer_height", new ConfigOptionFloat(0.2));
config.set_key_value("initial_layer_print_height", new ConfigOptionFloat(0.2));
config.set_key_value("initial_layer_line_width", new ConfigOptionFloatOrPercent(0, false));
config.set_key_value("z_hop", new ConfigOptionFloats({0}));
config.set_key_value("print_sequence", new ConfigOptionEnum<PrintSequence>(PrintSequence::ByObject));
// 2 extruders, 2 filaments
config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4}));
config.set_key_value("printer_extruder_id", new ConfigOptionInts({1, 2}));
config.set_key_value("printer_extruder_variant", new ConfigOptionStrings({"Direct Drive Standard", "Direct Drive Standard"}));
config.set_key_value("filament_diameter", new ConfigOptionFloats({1.75, 1.75}));
config.set_key_value("filament_colour", new ConfigOptionStrings({"#FF0000", "#00FF00"}));
config.set_key_value("filament_type", new ConfigOptionStrings({"PLA", "PLA"}));
config.option<ConfigOptionEnum<FilamentMapMode>>("filament_map_mode", true)->value = fmmManual;
config.set_key_value("filament_map", new ConfigOptionInts({1, 2}));
config.set_key_value("default_filament_colour", new ConfigOptionStrings({"#FF0000", "#00FF00"}));
config.set_key_value("nozzle_temperature", new ConfigOptionInts({210, 210}));
config.set_key_value("nozzle_temperature_range_low", new ConfigOptionInts({190, 190}));
config.set_key_value("nozzle_temperature_range_high", new ConfigOptionInts({240, 240}));
config.set_key_value("flush_multiplier", new ConfigOptionFloats({1}));
config.set_key_value("flush_volumes_matrix", new ConfigOptionFloats({0, 0, 0, 0}));
// --- Machine limits (stride-2: e0_n, e0_s, e1_n, e1_s) ---
// Extruder 0 has LOW limits, Extruder 1 has HIGH limits.
config.set_key_value("machine_max_acceleration_x", new ConfigOptionFloats({500, 0, 1000, 0}));
config.set_key_value("machine_max_acceleration_y", new ConfigOptionFloats({500, 0, 1000, 0}));
config.set_key_value("machine_max_acceleration_z", new ConfigOptionFloats({100, 0, 200, 0}));
config.set_key_value("machine_max_acceleration_e", new ConfigOptionFloats({5000, 0, 5000, 0}));
config.set_key_value("machine_max_acceleration_extruding", new ConfigOptionFloats({500, 0, 2000, 0}));
config.set_key_value("machine_max_acceleration_retracting", new ConfigOptionFloats({600, 0, 2000, 0}));
config.set_key_value("machine_max_acceleration_travel", new ConfigOptionFloats({700, 0, 2500, 0}));
config.set_key_value("machine_max_speed_x", new ConfigOptionFloats({100, 0, 200, 0}));
config.set_key_value("machine_max_speed_y", new ConfigOptionFloats({110, 0, 210, 0}));
config.set_key_value("machine_max_speed_z", new ConfigOptionFloats({10, 0, 30, 0}));
config.set_key_value("machine_max_speed_e", new ConfigOptionFloats({50, 0, 80, 0}));
config.set_key_value("machine_max_jerk_x", new ConfigOptionFloats({5, 0, 15, 0}));
config.set_key_value("machine_max_jerk_y", new ConfigOptionFloats({6, 0, 16, 0}));
config.set_key_value("machine_max_jerk_z", new ConfigOptionFloats({0.4, 0, 0.8, 0}));
config.set_key_value("machine_max_jerk_e", new ConfigOptionFloats({3, 0, 8, 0}));
config.set_key_value("machine_max_junction_deviation", new ConfigOptionFloats({0.02, 0, 0.08, 0}));
// --- Print acceleration: 1500 mm/s² ---
// Exceeds extruder 0's limit (500) → should be clamped to 500.
// Does NOT exceed extruder 1's limit (2000) → passes through as 1500.
config.set_key_value("default_acceleration", new ConfigOptionFloats({1500, 1500}));
config.set_key_value("outer_wall_acceleration", new ConfigOptionFloats({1500, 1500}));
config.set_key_value("inner_wall_acceleration", new ConfigOptionFloats({1500, 1500}));
config.set_key_value("top_surface_acceleration", new ConfigOptionFloats({1500, 1500}));
config.set_key_value("initial_layer_acceleration", new ConfigOptionFloats({1500, 1500}));
config.set_key_value("travel_acceleration", new ConfigOptionFloats({1500, 1500}));
// Model: two objects assigned to different extruders
Model model;
auto* obj1 = model.add_object();
obj1->add_volume(cube(20));
obj1->add_instance();
auto* obj2 = model.add_object();
obj2->add_volume(cube(20));
obj2->add_instance();
obj2->config.set_key_value("extruder", new ConfigOptionInt(2)); // 0-based index 1
Print print;
arrange_objects(model, InfiniteBed{}, ArrangeParams{scaled(min_object_distance(config))});
for (auto* mo : model.objects) {
mo->ensure_on_bed();
print.auto_assign_extruders(mo);
}
print.apply(model, config);
print.validate();
print.set_status_silent();
print.process();
std::string gcode = Slic3r::Test::gcode(print);
SECTION("Preamble: max limit among used extruders") {
THEN("M201 uses max (extruder 1's) acceleration values") {
REQUIRE(gcode.find("M201 X1000 Y1000 Z200 E5000") != std::string::npos);
}
THEN("M204 uses max extruding/retracting/travel") {
REQUIRE(gcode.find("M204 P2000 R2000 T2500") != std::string::npos);
}
THEN("M205 uses max jerk values") {
REQUIRE(gcode.find("M205 X15.00 Y16.00 Z0.80 E8.00") != std::string::npos);
}
}
SECTION("Preamble: EXTRUDER_LIMIT falls back to max when no filament is active") {
// set_junction_deviation() is called during preamble with no active filament.
// EXTRUDER_LIMIT(m_max_junction_deviation) → filament() == nullptr → max of all (0.08).
THEN("M205 J uses max junction deviation") {
REQUIRE(gcode.find("M205 J0.080") != std::string::npos);
}
}
SECTION("Print: extruder 0 acceleration clamped to its specific limit") {
// Extruder 0 machine limit = 500. Print accel = 1500 > 500 → clamped to 500.
THEN("M204 P500 appears (extruder 0 clamped)") {
REQUIRE(gcode.find("M204 P500") != std::string::npos);
}
THEN("M204 T700 appears (extruder 0 travel clamped)") {
REQUIRE(gcode.find("M204 T700") != std::string::npos);
}
}
SECTION("Print: extruder 1 acceleration NOT clamped to extruder 0's limit") {
// Extruder 1 machine limit = 2000. Print accel = 1500 < 2000 → not clamped.
THEN("M204 P1500 appears (extruder 1 not clamped to 500)") {
REQUIRE(gcode.find("M204 P1500") != std::string::npos);
}
}
}

View File

@@ -1,4 +1,4 @@
#include "test_data.hpp"
#include "test_helpers.hpp"
#include "libslic3r/TriangleMesh.hpp"
#include "libslic3r/GCodeReader.hpp"
@@ -19,13 +19,11 @@ using namespace std;
namespace Slic3r { namespace Test {
// Mesh enumeration to name mapping
const std::unordered_map<TestMesh, const char*, TestMeshHash> mesh_names {
std::pair<TestMesh, const char*>(TestMesh::A, "A"),
std::pair<TestMesh, const char*>(TestMesh::L, "L"),
std::pair<TestMesh, const char*>(TestMesh::V, "V"),
std::pair<TestMesh, const char*>(TestMesh::_40x10, "40x10"),
std::pair<TestMesh, const char*>(TestMesh::cube_20x20x20, "cube_20x20x20"),
std::pair<TestMesh, const char*>(TestMesh::sphere_50mm, "sphere_50mm"),
std::pair<TestMesh, const char*>(TestMesh::bridge, "bridge"),
std::pair<TestMesh, const char*>(TestMesh::bridge_with_hole, "bridge_with_hole"),
@@ -46,9 +44,6 @@ TriangleMesh mesh(TestMesh m)
{
TriangleMesh mesh;
switch(m) {
case TestMesh::cube_20x20x20:
mesh = Slic3r::make_cube(20, 20, 20);
break;
case TestMesh::sphere_50mm:
mesh = Slic3r::make_sphere(50, PI / 243.0);
break;
@@ -187,30 +182,72 @@ TriangleMesh mesh(TestMesh m)
return mesh;
}
static bool verbose_gcode()
Slic3r::Model model(const std::string &model_name, TriangleMesh &&_mesh)
{
const char *v = std::getenv("SLIC3R_TESTS_GCODE");
if (v == nullptr)
return false;
std::string s(v);
return s == "1" || s == "on" || s == "yes";
Slic3r::Model result;
ModelObject *object = result.add_object();
object->name += model_name + ".stl";
object->add_volume(_mesh);
object->add_instance();
return result;
}
void init_print(std::vector<TriangleMesh> &&meshes, Slic3r::Print &print, Slic3r::Model &model, const DynamicPrintConfig &config_in, bool comments)
DynamicPrintConfig multifilament_config(unsigned int filaments, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> extra)
{
// Single nozzle, `filaments` filaments. Colours must be DISTINCT: filament grouping
// treats same-colour filaments as one and the tool-order path then drops/segfaults.
static const char *palette[] = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00",
"#FF00FF", "#00FFFF", "#FF8000", "#8000FF" };
std::string diameters, colours, flush;
for (unsigned int i = 0; i < filaments; ++i) {
diameters += (i ? "," : "") + std::string("1.75");
colours += (i ? ";" : "") + std::string(palette[i % (sizeof(palette) / sizeof(palette[0]))]);
for (unsigned int j = 0; j < filaments; ++j)
flush += ((i || j) ? "," : "") + std::string(i == j ? "0" : "280");
}
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
config.set_deserialize_strict({ { "nozzle_diameter", "0.4" }, { "filament_diameter", diameters } });
config.set_num_filaments(filaments);
// These are read by filament id during export but absent from filament_option_keys(),
// so set_num_filaments leaves them size 1; size them too, else out-of-range access.
const auto &defaults = FullPrintConfig::defaults();
for (const char *key : { "filament_type", "filament_vendor", "filament_start_gcode" })
static_cast<ConfigOptionVectorBase *>(config.option(key, true))->resize(filaments, defaults.option(key));
// flush_volumes_matrix must be sized filaments*filaments or export rejects it.
config.set_deserialize_strict({ { "filament_colour", colours }, { "flush_volumes_matrix", flush } });
if (extra.size() > 0)
config.set_deserialize_strict(extra);
return config;
}
void init_print(std::vector<TriangleMesh> &&meshes, Slic3r::Print &print, Slic3r::Model &model, const DynamicPrintConfig &config_in,
const std::vector<std::vector<ConfigBase::SetDeserializeItem>> *per_object_overrides, bool arrange)
{
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
config.apply(config_in);
config.set_key_value("gcode_comments", new ConfigOptionBool(true));
if (verbose_gcode())
config.set_key_value("gcode_comments", new ConfigOptionBool(true));
size_t object_idx = 0;
for (const TriangleMesh &t : meshes) {
ModelObject *object = model.add_object();
object->name += "object.stl";
object->add_volume(std::move(t));
object->add_instance();
if (per_object_overrides && object_idx < per_object_overrides->size() && !(*per_object_overrides)[object_idx].empty()) {
DynamicPrintConfig oc;
for (const auto &item : (*per_object_overrides)[object_idx])
oc.set_deserialize_strict(item.opt_key, item.opt_value);
object->config.apply(oc);
}
++object_idx;
}
arrange_objects(model, InfiniteBed{}, ArrangeParams{ scaled(min_object_distance(config))});
if (arrange)
arrange_objects(model, InfiniteBed{}, ArrangeParams{ scaled(min_object_distance(config))});
for (ModelObject *mo : model.objects) {
mo->ensure_on_bed();
print.auto_assign_extruders(mo);
@@ -221,63 +258,63 @@ void init_print(std::vector<TriangleMesh> &&meshes, Slic3r::Print &print, Slic3r
print.set_status_silent();
}
void init_print(std::initializer_list<TestMesh> test_meshes, Slic3r::Print &print, Slic3r::Model &model, const Slic3r::DynamicPrintConfig &config_in, bool comments)
void init_print(std::initializer_list<TestMesh> test_meshes, Slic3r::Print &print, Slic3r::Model &model, const Slic3r::DynamicPrintConfig &config_in)
{
std::vector<TriangleMesh> triangle_meshes;
triangle_meshes.reserve(test_meshes.size());
for (const TestMesh test_mesh : test_meshes)
triangle_meshes.emplace_back(mesh(test_mesh));
init_print(std::move(triangle_meshes), print, model, config_in, comments);
init_print(std::move(triangle_meshes), print, model, config_in);
}
void init_print(std::initializer_list<TriangleMesh> input_meshes, Slic3r::Print &print, Slic3r::Model &model, const DynamicPrintConfig &config_in, bool comments)
void init_print(std::initializer_list<TriangleMesh> input_meshes, Slic3r::Print &print, Slic3r::Model &model, const DynamicPrintConfig &config_in)
{
std::vector<TriangleMesh> triangle_meshes;
triangle_meshes.reserve(input_meshes.size());
for (const TriangleMesh &input_mesh : input_meshes)
triangle_meshes.emplace_back(input_mesh);
init_print(std::move(triangle_meshes), print, model, config_in, comments);
init_print(std::move(triangle_meshes), print, model, config_in);
}
void init_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, Slic3r::Model &model, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items, bool comments)
void init_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, Slic3r::Model &model, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items)
{
Slic3r::DynamicPrintConfig config = Slic3r::DynamicPrintConfig::full_print_config();
config.set_deserialize_strict(config_items);
init_print(meshes, print, model, config, comments);
init_print(meshes, print, model, config);
}
void init_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, Slic3r::Model &model, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items, bool comments)
void init_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, Slic3r::Model &model, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items)
{
Slic3r::DynamicPrintConfig config = Slic3r::DynamicPrintConfig::full_print_config();
config.set_deserialize_strict(config_items);
init_print(meshes, print, model, config, comments);
init_print(meshes, print, model, config);
}
void init_and_process_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, const DynamicPrintConfig &config, bool comments)
void init_and_process_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, const DynamicPrintConfig &config)
{
Slic3r::Model model;
init_print(meshes, print, model, config, comments);
init_print(meshes, print, model, config);
print.process();
}
void init_and_process_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, const DynamicPrintConfig &config, bool comments)
void init_and_process_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, const DynamicPrintConfig &config)
{
Slic3r::Model model;
init_print(meshes, print, model, config, comments);
init_print(meshes, print, model, config);
print.process();
}
void init_and_process_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items, bool comments)
void init_and_process_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items)
{
Slic3r::Model model;
init_print(meshes, print, model, config_items, comments);
init_print(meshes, print, model, config_items);
print.process();
}
void init_and_process_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items, bool comments)
void init_and_process_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items)
{
Slic3r::Model model;
init_print(meshes, print, model, config_items, comments);
init_print(meshes, print, model, config_items);
print.process();
}
@@ -292,6 +329,76 @@ std::string gcode(Print & print)
return str;
}
std::string slice(std::initializer_list<TestMesh> meshes, const DynamicPrintConfig &config)
{
Slic3r::Print print;
Slic3r::Model model;
init_print(meshes, print, model, config);
return gcode(print);
}
std::string slice(std::initializer_list<TriangleMesh> meshes, const DynamicPrintConfig &config)
{
Slic3r::Print print;
Slic3r::Model model;
init_print(meshes, print, model, config);
return gcode(print);
}
std::string slice(std::initializer_list<TestMesh> meshes, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items)
{
Slic3r::Print print;
Slic3r::Model model;
init_print(meshes, print, model, config_items);
return gcode(print);
}
std::string slice(std::initializer_list<TriangleMesh> meshes, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items)
{
Slic3r::Print print;
Slic3r::Model model;
init_print(meshes, print, model, config_items);
return gcode(print);
}
std::string slice_with_object_overrides(std::initializer_list<TriangleMesh> meshes, const DynamicPrintConfig &config,
const std::vector<std::vector<ConfigBase::SetDeserializeItem>> &per_object_overrides)
{
Slic3r::Print print;
Slic3r::Model model;
init_print(std::vector<TriangleMesh>(meshes), print, model, config, &per_object_overrides);
return gcode(print);
}
std::string slice_two_cubes_arranged(std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items)
{
return slice({ cube(20), cube(20) }, config_items);
}
void place_two_cubes_apart(double gap, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items,
Print &print, Model &model)
{
TriangleMesh a = cube(20);
a.translate(80, 80, 0);
TriangleMesh b = cube(20);
b.translate(80 + 20 + gap, 80, 0);
std::vector<TriangleMesh> meshes;
meshes.push_back(std::move(a));
meshes.push_back(std::move(b));
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
config.set_deserialize_strict(config_items);
init_print(std::move(meshes), print, model, config, nullptr, /*arrange=*/false);
}
std::string slice_two_cubes_apart(double gap, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items)
{
Print print;
Model model;
place_two_cubes_apart(gap, config_items, print, model);
return gcode(print);
}
std::set<double> layers_with_role(const std::string &gcode, const std::string &role)
{
std::set<double> layers;
@@ -313,59 +420,48 @@ double max_z(const std::string &gcode)
return z;
}
Slic3r::Model model(const std::string &model_name, TriangleMesh &&_mesh)
int role_passes(const std::string &gcode, const std::string &role)
{
Slic3r::Model result;
ModelObject *object = result.add_object();
object->name += model_name + ".stl";
object->add_volume(_mesh);
object->add_instance();
return result;
int passes = 0;
bool in_role = false;
GCodeReader reader;
reader.parse_buffer(gcode, [&](GCodeReader &self, const GCodeReader::GCodeLine &line) {
if (! line.extruding(self)) return;
const bool is_role = line.comment().find(role) != std::string_view::npos;
if (is_role && ! in_role) ++passes;
in_role = is_role;
});
return passes;
}
std::string slice(std::initializer_list<TestMesh> meshes, const DynamicPrintConfig &config, bool comments)
std::vector<std::string> role_sequence(const std::string &gcode, const std::vector<std::string> &roles)
{
Slic3r::Print print;
Slic3r::Model model;
init_print(meshes, print, model, config, comments);
return gcode(print);
}
std::string slice(std::initializer_list<TriangleMesh> meshes, const DynamicPrintConfig &config, bool comments)
{
Slic3r::Print print;
Slic3r::Model model;
init_print(meshes, print, model, config, comments);
return gcode(print);
}
std::string slice(std::initializer_list<TestMesh> meshes, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items, bool comments)
{
Slic3r::Print print;
Slic3r::Model model;
init_print(meshes, print, model, config_items, comments);
return gcode(print);
}
std::string slice(std::initializer_list<TriangleMesh> meshes, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items, bool comments)
{
Slic3r::Print print;
Slic3r::Model model;
init_print(meshes, print, model, config_items, comments);
return gcode(print);
std::vector<std::string> seq;
std::string current;
GCodeReader reader;
reader.parse_buffer(gcode, [&](GCodeReader &self, const GCodeReader::GCodeLine &line) {
if (! line.extruding(self)) return;
const std::string_view comment = line.comment();
for (const std::string &role : roles)
if (comment.find(role) != std::string_view::npos) {
if (current != role) { seq.push_back(role); current = role; }
break;
}
});
return seq;
}
} } // namespace Slic3r::Test
#include <catch2/catch_all.hpp>
SCENARIO("init_print functionality", "[test_data]") {
SCENARIO("init_print functionality", "[test_helpers]") {
GIVEN("A default config") {
Slic3r::DynamicPrintConfig config = Slic3r::DynamicPrintConfig::full_print_config();
WHEN("init_print is called with a single mesh.") {
Slic3r::Model model;
Slic3r::Print print;
Slic3r::Test::init_print({ Slic3r::Test::TestMesh::cube_20x20x20 }, print, model, config, true);
Slic3r::Test::init_print({ Slic3r::Test::cube(20) }, print, model, config);
THEN("One mesh/printobject is in the resulting Print object.") {
REQUIRE(print.objects().size() == 1);
}

View File

@@ -0,0 +1,125 @@
#ifndef SLIC3R_TEST_HELPERS_HPP
#define SLIC3R_TEST_HELPERS_HPP
#include "libslic3r/Config.hpp"
#include "libslic3r/Geometry.hpp"
#include "libslic3r/Model.hpp"
#include "libslic3r/Point.hpp"
#include "libslic3r/Print.hpp"
#include "libslic3r/TriangleMesh.hpp"
#include <set>
#include <string>
#include <unordered_map>
#include <vector>
namespace Slic3r { namespace Test {
constexpr double MM_PER_MIN = 60.0;
// True when `a` and `b` are within EPSILON.
template <typename T>
bool _equiv(const T& a, const T& b) { return std::abs(a - b) < EPSILON; }
// True when `a` and `b` are within `epsilon`.
template <typename T>
bool _equiv(const T& a, const T& b, double epsilon) { return abs(a - b) < epsilon; }
// Named reusable test meshes, resolved by mesh().
enum class TestMesh {
A,
L,
V,
_40x10,
sphere_50mm,
bridge,
bridge_with_hole,
cube_with_concave_hole,
cube_with_hole,
gt2_teeth,
ipadstand,
overhang,
pyramid,
sloping_hole,
slopy_cube,
small_dorito,
step,
two_hollow_squares
};
// Hash for TestMesh (std::hash lacks scoped-enum support before C++17).
struct TestMeshHash {
std::size_t operator()(TestMesh tm) const {
return static_cast<std::size_t>(tm);
}
};
// TestMesh value to name mapping.
extern const std::unordered_map<TestMesh, const char*, TestMeshHash> mesh_names;
// Geometry for the named test fixture `m`, optionally translated and scaled.
TriangleMesh mesh(TestMesh m);
TriangleMesh mesh(TestMesh m, Vec3d translate, Vec3d scale = Vec3d(1.0, 1.0, 1.0));
TriangleMesh mesh(TestMesh m, Vec3d translate, double scale = 1.0);
// An equal-sided cube, `size` mm on each edge.
inline TriangleMesh cube(double size) { return make_cube(size, size, size); }
// A Model holding one object built from `mesh`.
Slic3r::Model model(const std::string& model_name, TriangleMesh&& _mesh);
// Single-nozzle, `filaments`-filament config from defaults; `extra` is applied last.
DynamicPrintConfig multifilament_config(unsigned int filaments,
std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> extra = {});
// Apply `meshes` and config to `print`/`model`; optional per-object overrides, auto-arranged unless `arrange` is false.
void init_print(std::vector<TriangleMesh> &&meshes, Slic3r::Print &print, Slic3r::Model &model, const DynamicPrintConfig &config_in,
const std::vector<std::vector<Slic3r::ConfigBase::SetDeserializeItem>> *per_object_overrides = nullptr, bool arrange = true);
void init_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, Slic3r::Model &model, const Slic3r::DynamicPrintConfig &config_in = Slic3r::DynamicPrintConfig::full_print_config());
void init_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, Slic3r::Model &model, const Slic3r::DynamicPrintConfig &config_in = Slic3r::DynamicPrintConfig::full_print_config());
void init_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, Slic3r::Model &model, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items);
void init_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, Slic3r::Model &model, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items);
// init_print followed by process(), leaving a sliced `print` to inspect.
void init_and_process_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, const DynamicPrintConfig& config);
void init_and_process_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, const DynamicPrintConfig& config);
void init_and_process_print(std::initializer_list<TestMesh> meshes, Slic3r::Print &print, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items);
void init_and_process_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Print &print, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items);
// Process `print` and return its exported G-code.
std::string gcode(Print& print);
// Build, slice, and return the G-code for `meshes` under the given config.
std::string slice(std::initializer_list<TestMesh> meshes, const DynamicPrintConfig &config);
std::string slice(std::initializer_list<TriangleMesh> meshes, const DynamicPrintConfig &config);
std::string slice(std::initializer_list<TestMesh> meshes, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items);
std::string slice(std::initializer_list<TriangleMesh> meshes, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items);
// Slice `meshes`, applying per_object_overrides[i] to object i first (empty entry = none).
std::string slice_with_object_overrides(std::initializer_list<TriangleMesh> meshes, const DynamicPrintConfig &config,
const std::vector<std::vector<Slic3r::ConfigBase::SetDeserializeItem>> &per_object_overrides);
// Slice two auto-arranged 20mm cubes (the arranger positions them).
std::string slice_two_cubes_arranged(std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items);
// Place two 20mm cubes `gap` mm apart edge-to-edge, not auto-arranged (the caller controls spacing).
void place_two_cubes_apart(double gap, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items,
Slic3r::Print &print, Slic3r::Model &model);
// Slice two 20mm cubes `gap` mm apart (not auto-arranged) and return the G-code.
std::string slice_two_cubes_apart(double gap, std::initializer_list<Slic3r::ConfigBase::SetDeserializeItem> config_items);
// Distinct layer Z heights carrying an extrusion of the given `role` (e.g. "skirt").
std::set<double> layers_with_role(const std::string &gcode, const std::string &role);
// Highest Z reached by any move in the G-code.
double max_z(const std::string &gcode);
// Count of contiguous extrusion blocks of `role` (each uninterrupted run counts once).
int role_passes(const std::string &gcode, const std::string &role);
// The `roles` in the order their extrusion blocks first appear, consecutive repeats collapsed.
std::vector<std::string> role_sequence(const std::string &gcode, const std::vector<std::string> &roles);
} } // namespace Slic3r::Test
#endif // SLIC3R_TEST_HELPERS_HPP

View File

@@ -6,7 +6,7 @@
#include <boost/filesystem.hpp>
#include "test_data.hpp"
#include "test_helpers.hpp"
#include "test_utils.hpp"
using namespace Slic3r;

View File

@@ -0,0 +1,87 @@
#include <catch2/catch_all.hpp>
#include "libslic3r/GCodeReader.hpp"
#include "test_helpers.hpp"
#include <cctype>
#include <set>
#include <string>
using namespace Slic3r;
using namespace Slic3r::Test;
// 0-based tool indices used by extrusions whose role comment contains `role` (needs gcode_comments).
static std::set<int> tools_for_role(const std::string& gcode, const std::string& role)
{
std::set<int> tools;
int current_tool = 0;
GCodeReader reader;
reader.parse_buffer(gcode, [&](GCodeReader& self, const GCodeReader::GCodeLine& line) {
const std::string cmd(line.cmd());
if (cmd.size() >= 2 && cmd[0] == 'T' && std::isdigit((unsigned char)cmd[1]))
current_tool = std::stoi(cmd.substr(1));
else if (line.extruding(self) && std::string(line.comment()).find(role) != std::string::npos)
tools.insert(current_tool);
});
return tools;
}
// Tool index = filament id - 1; brim and skirt follow the wall filament.
TEST_CASE("Each feature prints with its assigned filament", "[MultiFilament]")
{
auto [infill_filament, wall_filament] = GENERATE(table<int, int>({ {1, 1}, {1, 2}, {2, 1}, {2, 2} }));
DYNAMIC_SECTION("infill filament " << infill_filament << ", wall filament " << wall_filament) {
const std::string gcode = slice({ cube(20) },
multifilament_config(2, {
{ "sparse_infill_filament_id", infill_filament },
{ "internal_solid_filament_id", infill_filament },
{ "top_surface_filament_id", infill_filament },
{ "bottom_surface_filament_id", infill_filament },
{ "outer_wall_filament_id", wall_filament },
{ "inner_wall_filament_id", wall_filament },
{ "skirt_loops", 1 },
{ "brim_type", "outer_only" },
{ "brim_width", 5 },
}));
const std::set<int> wall_tool{ wall_filament - 1 };
const std::set<int> infill_tool{ infill_filament - 1 };
CHECK(tools_for_role(gcode, "perimeter") == wall_tool);
CHECK(tools_for_role(gcode, "infill") == infill_tool); // sparse + solid + top/bottom
CHECK(tools_for_role(gcode, "brim") == wall_tool);
CHECK(tools_for_role(gcode, "skirt") == wall_tool);
}
}
TEST_CASE("Each feature prints with its assigned filament (three filaments)", "[MultiFilament]")
{
const std::string gcode = slice({ cube(20) },
multifilament_config(3, {
{ "sparse_infill_filament_id", 2 },
{ "internal_solid_filament_id", 2 },
{ "top_surface_filament_id", 2 },
{ "bottom_surface_filament_id", 2 },
{ "outer_wall_filament_id", 3 },
{ "inner_wall_filament_id", 3 },
{ "skirt_loops", 0 },
{ "brim_type", "no_brim" },
}));
CHECK(tools_for_role(gcode, "perimeter") == std::set<int>{ 2 }); // filament 3
CHECK(tools_for_role(gcode, "infill") == std::set<int>{ 1 }); // filament 2
}
// The override must survive tool ordering: object 1's walls print on their filament's
// tool, object 0 stays on the first. If dropped, every wall prints on tool 0.
TEST_CASE("Per-object wall filament override is honored", "[MultiFilament]")
{
const std::string gcode = slice_with_object_overrides(
{ cube(20), cube(20) },
multifilament_config(2, {
{ "skirt_loops", 0 },
{ "brim_type", "no_brim" },
{ "print_sequence", "by object" },
}),
{ {}, { { "outer_wall_filament_id", 2 }, { "inner_wall_filament_id", 2 } } });
CHECK(tools_for_role(gcode, "perimeter") == std::set<int>{ 0, 1 });
CHECK(tools_for_role(gcode, "infill") == std::set<int>{ 0 }); // infill not overridden: stays on F1
}

View File

@@ -1,35 +1,32 @@
#ifdef WIN32
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include <Windows.h>
#endif
#include <catch2/catch_all.hpp>
#include "libslic3r/libslic3r.h"
#include "libslic3r/Print.hpp"
#include "libslic3r/Layer.hpp"
#include "libslic3r/Model.hpp"
#include "libslic3r/GCodeReader.hpp"
#include "test_data.hpp"
#include "test_helpers.hpp"
#include "test_utils.hpp"
#include <algorithm>
#include <fstream>
#include <iterator>
using namespace Slic3r;
using namespace Slic3r::Test;
SCENARIO("Print: Skirt generation", "[Print]") {
GIVEN("20mm cube and default config") {
WHEN("skirt_loops is set to 2") {
Slic3r::Print print;
Slic3r::Test::init_and_process_print({TestMesh::cube_20x20x20}, print, {
{ "skirt_height", 1 },
{ "skirt_distance", 1 },
{ "skirt_loops", 2 }
});
THEN("Skirt Extrusion collection has 2 loops in it") {
REQUIRE(print.skirt().items_count() == 2);
REQUIRE(print.skirt().flatten().entities.size() == 2);
}
}
}
}
SCENARIO("Print: Changing number of solid shell layers does not cause all surfaces to become internal.", "[Print]") {
SCENARIO("Changing the number of solid shell layers does not make all surfaces internal", "[Print]") {
GIVEN("sliced 20mm cube and config with top_shell_layers = 2 and bottom_shell_layers = 1") {
Slic3r::DynamicPrintConfig config = Slic3r::DynamicPrintConfig::full_print_config();
config.set_deserialize_strict({
@@ -40,7 +37,7 @@ SCENARIO("Print: Changing number of solid shell layers does not cause all surfac
});
Slic3r::Print print;
Slic3r::Model model;
Slic3r::Test::init_print({TestMesh::cube_20x20x20}, print, model, config);
Slic3r::Test::init_print({cube(20)}, print, model, config);
// Precondition: Ensure that the model has 2 solid top layers (79, 78)
// and one solid bottom layer (0).
auto test_is_solid_infill = [&print](size_t obj_id, size_t layer_id) {
@@ -72,41 +69,6 @@ SCENARIO("Print: Changing number of solid shell layers does not cause all surfac
}
}
SCENARIO("Print: Brim generation", "[Print]") {
GIVEN("20mm cube and default config, 1mm first layer width") {
WHEN("Brim is set to 6mm") {
Slic3r::Print print;
Slic3r::Test::init_and_process_print({TestMesh::cube_20x20x20}, print, {
{ "brim_type", "outer_only" },
{ "initial_layer_line_width", 1 },
{ "brim_width", 6 }
});
THEN("Brim Extrusion collection has 6 loops in it") {
size_t total_items = 0;
for (const auto& pair : print.get_brimMap()) {
total_items += pair.second.items_count();
}
REQUIRE(total_items == 6);
}
}
WHEN("Brim is set to 6mm, extrusion width 0.5mm") {
Slic3r::Print print;
Slic3r::Test::init_and_process_print({TestMesh::cube_20x20x20}, print, {
{ "brim_type", "outer_only" },
{ "brim_width", 6 },
{ "initial_layer_line_width", 0.5 }
});
THEN("Brim Extrusion collection has 12 loops in it") {
size_t total_items = 0;
for (const auto& pair : print.get_brimMap()) {
total_items += pair.second.items_count();
}
REQUIRE(total_items == 12);
}
}
}
}
// ---------------------------------------------------------------------------
// Print::validate() warning collection
//
@@ -129,7 +91,7 @@ void build_cubes(Slic3r::Model& model, Slic3r::Print& print,
for (int i = 0; i < n; ++i) {
ModelObject* object = model.add_object();
object->add_volume(Slic3r::Test::mesh(TestMesh::cube_20x20x20));
object->add_volume(cube(20));
ModelInstance* inst = object->add_instance();
inst->set_offset(Vec3d(overlap ? 0.0 : i * 60.0, 0.0, 0.0));
}
@@ -337,3 +299,122 @@ TEST_CASE("Print::validate tolerates a null warnings pointer", "[Print][validate
StringObjectException err = print.validate(); // warnings == nullptr
CHECK(err.string.empty());
}
TEST_CASE("A default slice emits perimeter, infill, and skirt", "[Print]")
{
const std::string gcode = slice({ cube(20) }, {
{ "layer_height", 0.2 },
{ "initial_layer_print_height", 0.2 },
{ "z_hop", 0 } // keep recorded Z at the printed height
});
CHECK(role_passes(gcode, "perimeter") > 0);
CHECK(role_passes(gcode, "infill") > 0);
CHECK(role_passes(gcode, "skirt") > 0);
CHECK_THAT(max_z(gcode), Catch::Matchers::WithinAbs(20.0, 1e-4));
}
// The G-code carries a config-comment block describing the resolved settings. The
// per-region width lines are always present; the support and first-layer lines appear
// only when those features are configured.
TEST_CASE("G-code lists the resolved extrusion-width settings", "[Print]")
{
const std::string gcode = slice({ cube(20) }, { { "initial_layer_line_width", 0 } });
CHECK(gcode.find("; external perimeters extrusion width") != std::string::npos);
CHECK(gcode.find("; perimeters extrusion width") != std::string::npos);
CHECK(gcode.find("; infill extrusion width") != std::string::npos);
CHECK(gcode.find("; solid infill extrusion width") != std::string::npos);
CHECK(gcode.find("; top infill extrusion width") != std::string::npos);
CHECK(gcode.find("; support material extrusion width") == std::string::npos);
CHECK(gcode.find("; first layer extrusion width") == std::string::npos);
CHECK(gcode.find("; layer_height") != std::string::npos);
CHECK(gcode.find("; sparse_infill_density") != std::string::npos);
const std::string with_support = slice({ cube(20) }, {
{ "initial_layer_line_width", 0 }, { "enable_support", true }, { "raft_layers", 3 },
});
CHECK(with_support.find("; support material extrusion width") != std::string::npos);
const std::string with_first_layer = slice({ cube(20) }, { { "initial_layer_line_width", "0.5" } });
CHECK(with_first_layer.find("; first layer extrusion width") != std::string::npos);
}
// Custom G-code templates substitute placeholders during export.
TEST_CASE("Custom G-code placeholders are substituted", "[Print]")
{
// [current_extruder] in the start G-code.
CHECK(slice({ cube(20) }, { { "machine_start_gcode", "; Extruder [current_extruder]" } })
.find("; Extruder 0") != std::string::npos);
// [layer_num] / [layer_z] in the end G-code (a 20mm cube at 0.1mm is 200 layers).
const std::string end_gcode = slice({ cube(20) }, {
{ "machine_end_gcode", "; Layer_num [layer_num]\n; Layer_z [layer_z]" },
{ "layer_height", 0.1 },
{ "initial_layer_print_height", 0.1 },
});
CHECK(end_gcode.find("; Layer_num 199") != std::string::npos);
CHECK(end_gcode.find("; Layer_z 20") != std::string::npos);
// printing_by_object_gcode is emitted between sequentially printed objects.
CHECK(slice_two_cubes_arranged({
{ "print_sequence", "by object" },
{ "printing_by_object_gcode", "; between-object-gcode" },
})
.find("; between-object-gcode") != std::string::npos);
// [layer_num] keeps counting across sequentially printed objects (199 then 399).
const std::string per_layer = slice_two_cubes_arranged({
{ "print_sequence", "by object" },
{ "layer_change_gcode", ";Layer:[layer_num] ([layer_z] mm)" },
{ "layer_height", 0.1 },
{ "initial_layer_print_height", 0.1 },
});
CHECK(per_layer.find(";Layer:199 ") != std::string::npos);
CHECK(per_layer.find(";Layer:399 ") != std::string::npos);
}
TEST_CASE("export_gcode writes G-code without a result pointer", "[Print][export_gcode]")
{
Print print;
Model model;
Slic3r::Test::init_print({cube(20)}, print, model);
print.process();
SECTION("non-BBL printer") {}
SECTION("BBL printer") { print.is_BBL_printer() = true; }
ScopedTemporaryFile temp(".gcode");
REQUIRE_NOTHROW(print.export_gcode(temp.string(), nullptr, nullptr));
std::ifstream in(temp.string());
const std::string gcode((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>());
REQUIRE_FALSE(gcode.empty());
}
TEST_CASE("Sequential printing follows model order", "[Print]")
{
// Two objects of different heights, taller one added first. Orca prints
// sequential objects in model order, so the taller one is printed first.
const std::string gcode = Slic3r::Test::slice({ cube(20), Slic3r::make_cube(20, 20, 10) }, {
{ "print_sequence", "by object" },
{ "layer_height", 0.2 },
{ "initial_layer_print_height", 0.2 },
{ "z_hop", 0 }
});
// The first object's height is the peak Z reached before Z drops back to the
// first layer (the object change). With by-object printing only an object
// change returns Z to the bottom.
double first_object_peak_z = 0.0;
double running_peak = 0.0;
GCodeReader reader;
reader.parse_buffer(gcode, [&] (GCodeReader& self, const GCodeReader::GCodeLine& line) {
if (first_object_peak_z != 0.0 || !line.extruding(self)) return; // ignore travels (e.g. start-gcode Z lift)
if (running_peak > 1.0 && self.z() < 1.0)
first_object_peak_z = running_peak;
else
running_peak = std::max(running_peak, static_cast<double>(self.z()));
});
REQUIRE_THAT(first_object_peak_z, Catch::Matchers::WithinAbs(20.0, 0.3));
}

View File

@@ -1,629 +0,0 @@
#ifdef WIN32
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include <Windows.h>
#endif
#include <catch2/catch_all.hpp>
#include "libslic3r/libslic3r.h"
#include "libslic3r/GCodeReader.hpp"
#include "test_data.hpp"
#include "test_utils.hpp"
#include <algorithm>
#include <boost/regex.hpp>
#include <libslic3r/ModelArrange.hpp>
#include <boost/filesystem.hpp>
#include <fstream>
#include <iterator>
#include <set>
using namespace Slic3r;
using namespace Slic3r::Test;
boost::regex perimeters_regex("G1 X[-0-9.]* Y[-0-9.]* E[-0-9.]* ; perimeter");
boost::regex infill_regex("G1 X[-0-9.]* Y[-0-9.]* E[-0-9.]* ; infill");
boost::regex skirt_regex("G1 X[-0-9.]* Y[-0-9.]* E[-0-9.]* ; skirt");
SCENARIO( "PrintGCode basic functionality", "[PrintGCode]") {
GIVEN("A default configuration and a print test object") {
WHEN("the output is executed with no support material") {
Slic3r::Print print;
Slic3r::Model model;
Slic3r::Test::init_print({TestMesh::cube_20x20x20}, print, model, {
{ "layer_height", 0.2 },
{ "initial_layer_print_height", 0.2 },
{ "initial_layer_line_width", 0 },
{ "gcode_comments", true },
{ "machine_start_gcode", "" },
{ "z_hop", 0 }
});
std::string gcode = Slic3r::Test::gcode(print);
THEN("Some text output is generated.") {
REQUIRE(gcode.size() > 0);
}
//THEN("Exported text contains git commit id") {
// REQUIRE(gcode.find("; Git Commit") != std::string::npos);
// REQUIRE(gcode.find(SLIC3R_BUILD_ID) != std::string::npos);
//}
THEN("Exported text contains extrusion statistics.") {
REQUIRE(gcode.find("; external perimeters extrusion width") != std::string::npos);
REQUIRE(gcode.find("; perimeters extrusion width") != std::string::npos);
REQUIRE(gcode.find("; infill extrusion width") != std::string::npos);
REQUIRE(gcode.find("; solid infill extrusion width") != std::string::npos);
REQUIRE(gcode.find("; top infill extrusion width") != std::string::npos);
REQUIRE(gcode.find("; support material extrusion width") == std::string::npos);
REQUIRE(gcode.find("; first layer extrusion width") == std::string::npos);
}
THEN("Exported text does not contain cooling markers (they were consumed)") {
REQUIRE(gcode.find(";_EXTRUDE_SET_SPEED") == std::string::npos);
}
THEN("The config trailer includes print and region settings") {
REQUIRE(gcode.find("; layer_height") != std::string::npos);
REQUIRE(gcode.find("; sparse_infill_density") != std::string::npos);
}
THEN("Infill is emitted.") {
boost::smatch has_match;
REQUIRE(boost::regex_search(gcode, has_match, infill_regex));
}
THEN("Perimeters are emitted.") {
boost::smatch has_match;
REQUIRE(boost::regex_search(gcode, has_match, perimeters_regex));
}
THEN("Skirt is emitted.") {
boost::smatch has_match;
REQUIRE(boost::regex_search(gcode, has_match, skirt_regex));
}
THEN("final Z height is 20mm") {
REQUIRE_THAT(max_z(gcode), Catch::Matchers::WithinAbs(20., 1e-4));
}
}
WHEN("output is executed with two objects printed sequentially") {
Slic3r::Print print;
Slic3r::Model model;
Slic3r::Test::init_print({TestMesh::cube_20x20x20,TestMesh::cube_20x20x20}, print, model, {
{ "initial_layer_line_width", 0 },
{ "initial_layer_print_height", 0.3 },
{ "layer_height", 0.2 },
{ "enable_support", false },
{ "raft_layers", 0 },
{ "print_sequence", "by object" },
{ "gcode_comments", true },
{ "printing_by_object_gcode", "; between-object-gcode" },
{ "z_hop", 0 }
});
std::string gcode = Slic3r::Test::gcode(print);
THEN("Some text output is generated.") {
REQUIRE(gcode.size() > 0);
}
THEN("Infill is emitted.") {
boost::smatch has_match;
REQUIRE(boost::regex_search(gcode, has_match, infill_regex));
}
THEN("Perimeters are emitted.") {
boost::smatch has_match;
REQUIRE(boost::regex_search(gcode, has_match, perimeters_regex));
}
THEN("Skirt is emitted.") {
boost::smatch has_match;
REQUIRE(boost::regex_search(gcode, has_match, skirt_regex));
}
THEN("Between-object-gcode is emitted.") {
REQUIRE(gcode.find("; between-object-gcode") != std::string::npos);
}
THEN("final Z height is 20.1mm") {
REQUIRE_THAT(max_z(gcode), Catch::Matchers::WithinAbs(20.1, 1e-4));
}
THEN("Z height resets on object change") {
double final_z = 0.0;
bool reset = false;
GCodeReader reader;
reader.apply_config(print.config());
reader.parse_buffer(gcode, [&final_z, &reset] (GCodeReader& self, const GCodeReader::GCodeLine& line) {
if (final_z > 0 && std::abs(self.z() - 0.3) < 0.01 ) { // saw higher Z before this, now it's lower
reset = true;
} else {
final_z = std::max(final_z, static_cast<double>(self.z())); // record the highest Z point we reach
}
});
REQUIRE(reset == true);
}
}
WHEN("the output is executed with support material") {
std::string gcode = ::Test::slice({TestMesh::cube_20x20x20}, {
{ "initial_layer_line_width", 0 },
{ "enable_support", true },
{ "raft_layers", 3 },
{ "gcode_comments", true }
});
THEN("Some text output is generated.") {
REQUIRE(gcode.size() > 0);
}
THEN("Exported text contains extrusion statistics.") {
REQUIRE(gcode.find("; external perimeters extrusion width") != std::string::npos);
REQUIRE(gcode.find("; perimeters extrusion width") != std::string::npos);
REQUIRE(gcode.find("; infill extrusion width") != std::string::npos);
REQUIRE(gcode.find("; solid infill extrusion width") != std::string::npos);
REQUIRE(gcode.find("; top infill extrusion width") != std::string::npos);
REQUIRE(gcode.find("; support material extrusion width") != std::string::npos);
REQUIRE(gcode.find("; first layer extrusion width") == std::string::npos);
}
THEN("Raft is emitted.") {
REQUIRE(gcode.find("; raft") != std::string::npos);
}
}
WHEN("the output is executed with a separate first layer extrusion width") {
std::string gcode = ::Test::slice({ TestMesh::cube_20x20x20 }, {
{ "initial_layer_line_width", "0.5" }
});
THEN("Some text output is generated.") {
REQUIRE(gcode.size() > 0);
}
THEN("Exported text contains extrusion statistics.") {
REQUIRE(gcode.find("; external perimeters extrusion width") != std::string::npos);
REQUIRE(gcode.find("; perimeters extrusion width") != std::string::npos);
REQUIRE(gcode.find("; infill extrusion width") != std::string::npos);
REQUIRE(gcode.find("; solid infill extrusion width") != std::string::npos);
REQUIRE(gcode.find("; top infill extrusion width") != std::string::npos);
REQUIRE(gcode.find("; support material extrusion width") == std::string::npos);
REQUIRE(gcode.find("; first layer extrusion width") != std::string::npos);
}
}
WHEN("Cooling is enabled and the fan is disabled.") {
std::string gcode = ::Test::slice({ TestMesh::cube_20x20x20 }, {
{ "cooling", true },
{ "close_fan_the_first_x_layers", 5 }
});
THEN("GCode to disable fan is emitted."){
REQUIRE(gcode.find("M106 S0") != std::string::npos);
}
}
WHEN("end_gcode exists with layer_num and layer_z") {
std::string gcode = ::Test::slice({ TestMesh::cube_20x20x20 }, {
{ "machine_end_gcode", "; Layer_num [layer_num]\n; Layer_z [layer_z]" },
{ "layer_height", 0.1 },
{ "initial_layer_print_height", 0.1 }
});
THEN("layer_num and layer_z are processed in the end gcode") {
REQUIRE(gcode.find("; Layer_num 199") != std::string::npos);
REQUIRE(gcode.find("; Layer_z 20") != std::string::npos);
}
}
WHEN("current_extruder exists in start_gcode") {
std::string gcode = ::Test::slice({ TestMesh::cube_20x20x20 }, {
{ "machine_start_gcode", "; Extruder [current_extruder]" }
});
THEN("current_extruder is processed in the start gcode and set for first extruder") {
REQUIRE(gcode.find("; Extruder 0") != std::string::npos);
}
}
WHEN("layer_num represents the layer's index from z=0") {
std::string gcode = ::Test::slice({ TestMesh::cube_20x20x20, TestMesh::cube_20x20x20 }, {
{ "print_sequence", "by object" },
{ "gcode_comments", true },
{ "layer_change_gcode", ";Layer:[layer_num] ([layer_z] mm)" },
{ "layer_height", 0.1 },
{ "initial_layer_print_height", 0.1 }
});
// End of the 1st object.
std::string token = ";Layer:199 ";
size_t pos = gcode.find(token);
THEN("First and second object last layer is emitted") {
// First object
REQUIRE(pos != std::string::npos);
pos += token.size();
REQUIRE(pos < gcode.size());
double z = 0;
REQUIRE((sscanf(gcode.data() + pos, "(%lf mm)", &z) == 1));
REQUIRE_THAT(z, Catch::Matchers::WithinAbs(20., 1e-4));
// Second object
pos = gcode.find(";Layer:399 ", pos);
REQUIRE(pos != std::string::npos);
pos += token.size();
REQUIRE(pos < gcode.size());
REQUIRE((sscanf(gcode.data() + pos, "(%lf mm)", &z) == 1));
REQUIRE_THAT(z, Catch::Matchers::WithinAbs(20., 1e-4));
}
}
}
}
TEST_CASE("export_gcode writes G-code without a result pointer", "[PrintGCode][export_gcode]")
{
Print print;
Model model;
Slic3r::Test::init_print({TestMesh::cube_20x20x20}, print, model);
print.process();
SECTION("non-BBL printer") {}
SECTION("BBL printer") { print.is_BBL_printer() = true; }
ScopedTemporaryFile temp(".gcode");
REQUIRE_NOTHROW(print.export_gcode(temp.string(), nullptr, nullptr));
std::ifstream in(temp.string());
const std::string gcode((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>());
REQUIRE_FALSE(gcode.empty());
}
TEST_CASE("Initial layer height is honored", "[PrintGCode]")
{
const std::string gcode = Slic3r::Test::slice({TestMesh::cube_20x20x20}, {
{ "initial_layer_print_height", 0.3 },
{ "layer_height", 0.2 },
{ "z_hop", 0 } // keep recorded Z equal to the printed layer height
});
std::set<double> layer_zs;
GCodeReader reader;
reader.parse_buffer(gcode, [&layer_zs] (GCodeReader& self, const GCodeReader::GCodeLine& line) {
if (line.extruding(self) && line.dist_XY(self) > 0)
layer_zs.insert(self.z());
});
REQUIRE(layer_zs.size() > 1);
REQUIRE_THAT(*layer_zs.begin(), Catch::Matchers::WithinAbs(0.3, 1e-4));
REQUIRE_THAT(*std::next(layer_zs.begin()), Catch::Matchers::WithinAbs(0.5, 1e-4));
}
TEST_CASE("Sequential printing follows model order", "[PrintGCode]")
{
// Two objects of different heights, taller one added first. Orca prints
// sequential objects in model order, so the taller one is printed first.
const std::string gcode = Slic3r::Test::slice({ Slic3r::make_cube(20, 20, 20), Slic3r::make_cube(20, 20, 10) }, {
{ "print_sequence", "by object" },
{ "layer_height", 0.2 },
{ "initial_layer_print_height", 0.2 },
{ "z_hop", 0 }
});
// The first object's height is the peak Z reached before Z drops back to the
// first layer (the object change). With by-object printing only an object
// change returns Z to the bottom.
double first_object_peak_z = 0.0;
double running_peak = 0.0;
GCodeReader reader;
reader.parse_buffer(gcode, [&] (GCodeReader& self, const GCodeReader::GCodeLine& line) {
if (first_object_peak_z != 0.0 || !line.extruding(self)) return; // ignore travels (e.g. start-gcode Z lift)
if (running_peak > 1.0 && self.z() < 1.0)
first_object_peak_z = running_peak;
else
running_peak = std::max(running_peak, static_cast<double>(self.z()));
});
REQUIRE_THAT(first_object_peak_z, Catch::Matchers::WithinAbs(20.0, 0.3));
}
// Verify that emit_machine_limits_to_gcode emits the correct max value across
// used extruders (regression for commit b4ee665: "Emit max value of machine
// limit among used extruders").
TEST_CASE("Machine envelope emits max limit among used extruders", "[PrintGCode][MachineEnvelope]")
{
SECTION("Single extruder emits its configured values") {
const std::string gcode = Slic3r::Test::slice({TestMesh::cube_20x20x20}, {
{ "emit_machine_limits_to_gcode", "1" },
{ "gcode_flavor", "marlin2" },
{ "gcode_comments", "1" },
{ "machine_start_gcode", "" },
{ "layer_height", "0.2" },
{ "initial_layer_print_height", "0.2" },
{ "initial_layer_line_width", "0" },
{ "z_hop", "0" },
// stride-2 options: (normal, silent)
{ "machine_max_acceleration_x", "500,600" },
{ "machine_max_acceleration_y", "700,800" },
{ "machine_max_acceleration_z", "100,200" },
{ "machine_max_acceleration_e", "5000,6000" },
{ "machine_max_acceleration_extruding", "1200,1300" },
{ "machine_max_acceleration_retracting", "1400,1500" },
{ "machine_max_acceleration_travel", "1600,1700" },
// stride-2 options: (normal, silent)
{ "machine_max_speed_x", "100,100" },
{ "machine_max_speed_y", "110,110" },
{ "machine_max_speed_z", "10,10" },
{ "machine_max_speed_e", "50,50" },
{ "machine_max_jerk_x", "8,8" },
{ "machine_max_jerk_y", "9,9" },
{ "machine_max_jerk_z", "0.4,0.4" },
{ "machine_max_jerk_e", "5,5" },
{ "machine_max_junction_deviation", "0.02,0.03" },
});
THEN("M201 uses the normal acceleration values") {
REQUIRE(gcode.find("M201 X500 Y700 Z100 E5000") != std::string::npos);
}
THEN("M203 uses the speed values") {
REQUIRE(gcode.find("M203 X100 Y110 Z10 E50") != std::string::npos);
}
THEN("M204 (Marlin 2) uses extruding / retracting / travel") {
REQUIRE(gcode.find("M204 P1200 R1400 T1600") != std::string::npos);
}
THEN("M205 uses the jerk values") {
REQUIRE(gcode.find("M205 X8.00 Y9.00 Z0.40 E5.00") != std::string::npos);
}
THEN("M205 J uses the junction deviation") {
REQUIRE(gcode.find("M205 J0.020") != std::string::npos);
}
}
SECTION("Legacy Marlin flavor emits correct format") {
const std::string gcode = Slic3r::Test::slice({TestMesh::cube_20x20x20}, {
{ "emit_machine_limits_to_gcode", "1" },
{ "gcode_flavor", "marlin" },
{ "gcode_comments", "1" },
{ "machine_start_gcode", "" },
{ "layer_height", "0.2" },
{ "initial_layer_print_height", "0.2" },
{ "initial_layer_line_width", "0" },
{ "z_hop", "0" },
// All machine limits must be provided — defaults are empty vectors.
{ "machine_max_acceleration_x", "500,600" },
{ "machine_max_acceleration_y", "500,600" },
{ "machine_max_acceleration_z", "500,600" },
{ "machine_max_acceleration_e", "5000,6000" },
{ "machine_max_acceleration_extruding", "1200,1300" },
{ "machine_max_acceleration_retracting", "1400,1500" },
{ "machine_max_acceleration_travel", "1600,1700" },
{ "machine_max_speed_x", "100,100" },
{ "machine_max_speed_y", "110,110" },
{ "machine_max_speed_z", "10,10" },
{ "machine_max_speed_e", "50,50" },
{ "machine_max_jerk_x", "8,8" },
{ "machine_max_jerk_y", "9,9" },
{ "machine_max_jerk_z", "0.4,0.4" },
{ "machine_max_jerk_e", "5,5" },
{ "machine_max_junction_deviation", "0.02,0.03" },
});
THEN("Legacy Marlin: M204 travel_acc = extruding_acc") {
// gcfMarlinLegacy uses extruding acc for travel too
REQUIRE(gcode.find("M204 P1200 R1400 T1200") != std::string::npos);
}
THEN("Legacy Marlin: M205 uses mm/sec format") {
REQUIRE(gcode.find("M205 X8.00 Y9.00 Z0.40 E5.00") != std::string::npos);
}
}
SECTION("Multi extruder - max of used extruders is emitted") {
// Build config with 2 extruders that have *different* machine limits.
// Extruder 1 has higher values; the emitted G-code must use the max.
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
// Print basics
config.set_key_value("emit_machine_limits_to_gcode", new ConfigOptionBool(true));
config.set_key_value("gcode_flavor", new ConfigOptionEnum<GCodeFlavor>(gcfMarlinFirmware));
config.set_key_value("gcode_comments", new ConfigOptionBool(true));
config.set_key_value("machine_start_gcode", new ConfigOptionString(""));
config.set_key_value("layer_height", new ConfigOptionFloat(0.2));
config.set_key_value("initial_layer_print_height", new ConfigOptionFloat(0.2));
config.set_key_value("initial_layer_line_width", new ConfigOptionFloatOrPercent(0, false));
config.set_key_value("z_hop", new ConfigOptionFloats({0}));
// Print objects sequentially so each uses its own extruder without
// wipe-tower / tool-change complexity.
config.set_key_value("print_sequence", new ConfigOptionEnum<PrintSequence>(PrintSequence::ByObject));
// 2 extruders
config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4}));
config.set_key_value("printer_extruder_id", new ConfigOptionInts({1, 2}));
config.set_key_value("printer_extruder_variant", new ConfigOptionStrings({"Direct Drive Standard", "Direct Drive Standard"}));
config.set_key_value("filament_diameter", new ConfigOptionFloats({1.75, 1.75}));
config.set_key_value("filament_colour", new ConfigOptionStrings({"#FF0000", "#00FF00"}));
config.set_key_value("filament_type", new ConfigOptionStrings({"PLA", "PLA"}));
// filament_map maps filament slot index (1-based) → logical extruder ID (1-based).
// Default [1] maps everything to extruder 0. Need [1, 2] for two distinct extruders.
// fmmManual prevents auto-computation from overwriting the explicit mapping.
config.option<ConfigOptionEnum<FilamentMapMode>>("filament_map_mode", true)->value = fmmManual;
config.set_key_value("filament_map", new ConfigOptionInts({1, 2}));
config.set_key_value("default_filament_colour", new ConfigOptionStrings({"#FF0000", "#00FF00"}));
config.set_key_value("nozzle_temperature", new ConfigOptionInts({210, 210}));
config.set_key_value("nozzle_temperature_range_low", new ConfigOptionInts({190, 190}));
config.set_key_value("nozzle_temperature_range_high", new ConfigOptionInts({240, 240}));
// flush_volumes_matrix must be filament_count^2 * heads_count entries.
// 2 filaments * 2 * 1 head = 4 entries (all zero — flush volumes not tested here).
config.set_key_value("flush_multiplier", new ConfigOptionFloats({1}));
config.set_key_value("flush_volumes_matrix", new ConfigOptionFloats({0, 0, 0, 0}));
// Machine limits: extruder 0 low, extruder 1 high
// Stride-2 (normal, silent pairs): e0_n, e0_s, e1_n, e1_s
config.set_key_value("machine_max_acceleration_x", new ConfigOptionFloats({500, 0, 1000, 0}));
config.set_key_value("machine_max_acceleration_y", new ConfigOptionFloats({700, 0, 1100, 0}));
config.set_key_value("machine_max_acceleration_z", new ConfigOptionFloats({100, 0, 300, 0}));
config.set_key_value("machine_max_acceleration_e", new ConfigOptionFloats({5000, 0, 8000, 0}));
config.set_key_value("machine_max_acceleration_extruding", new ConfigOptionFloats({1200, 0, 2200, 0}));
config.set_key_value("machine_max_acceleration_retracting", new ConfigOptionFloats({1400, 0, 2400, 0}));
config.set_key_value("machine_max_acceleration_travel", new ConfigOptionFloats({1600, 0, 2600, 0}));
config.set_key_value("machine_max_speed_x", new ConfigOptionFloats({100, 0, 200, 0}));
config.set_key_value("machine_max_speed_y", new ConfigOptionFloats({110, 0, 210, 0}));
config.set_key_value("machine_max_speed_z", new ConfigOptionFloats({10, 0, 30, 0}));
config.set_key_value("machine_max_speed_e", new ConfigOptionFloats({50, 0, 80, 0}));
config.set_key_value("machine_max_jerk_x", new ConfigOptionFloats({8, 0, 12, 0}));
config.set_key_value("machine_max_jerk_y", new ConfigOptionFloats({9, 0, 13, 0}));
config.set_key_value("machine_max_jerk_z", new ConfigOptionFloats({0.4, 0, 0.6, 0}));
config.set_key_value("machine_max_jerk_e", new ConfigOptionFloats({5, 0, 10, 0}));
config.set_key_value("machine_max_junction_deviation", new ConfigOptionFloats({0.02, 0, 0.05, 0}));
// Model: two objects assigned to different extruders
Model model;
auto* obj1 = model.add_object();
obj1->add_volume(mesh(TestMesh::cube_20x20x20));
obj1->add_instance();
// obj1 uses default extruder=1 (0-based index 0)
auto* obj2 = model.add_object();
obj2->add_volume(mesh(TestMesh::cube_20x20x20));
obj2->add_instance();
obj2->config.set_key_value("extruder", new ConfigOptionInt(2)); // 0-based index 1
Print print;
arrange_objects(model, InfiniteBed{},
ArrangeParams{scaled(min_object_distance(config))});
for (auto* mo : model.objects) {
mo->ensure_on_bed();
print.auto_assign_extruders(mo);
}
print.apply(model, config);
print.validate();
print.set_status_silent();
print.process();
std::string gcode = Slic3r::Test::gcode(print);
THEN("M201 contains max (extruder 1's) acceleration values") {
REQUIRE(gcode.find("M201 X1000 Y1100 Z300 E8000") != std::string::npos);
}
THEN("M203 contains max speed values") {
REQUIRE(gcode.find("M203 X200 Y210 Z30 E80") != std::string::npos);
}
THEN("M204 contains max extruding / retracting / travel") {
REQUIRE(gcode.find("M204 P2200 R2400 T2600") != std::string::npos);
}
THEN("M205 contains max jerk values") {
REQUIRE(gcode.find("M205 X12.00 Y13.00 Z0.60 E10.00") != std::string::npos);
}
THEN("M205 contains max m_max_junction_deviation ") {
REQUIRE(gcode.find("M205 J0.050") != std::string::npos);
}
}
}
// Verify that the EXTRUDER_LIMIT macro (GCodeWriter.cpp) correctly:
// 1) Uses the active extruder's specific limit when filament() is known.
// 2) Falls back to the maximum of all extruder limits when filament() is nullptr.
//
// These two behaviours were introduced in:
// - "Use per-extruder motion limit" (1ab34a7454)
// - "Use max limit when current extruder is unknown" (b7240ab1c6)
TEST_CASE("EXTRUDER_LIMIT per-extruder clamping and max fallback", "[PrintGCode][MachineEnvelope]")
{
// --- Build config with 2 extruders that have different machine limits ---
// Extruder 0: low limits
// Extruder 1: high limits
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
config.set_key_value("emit_machine_limits_to_gcode", new ConfigOptionBool(true));
config.set_key_value("gcode_flavor", new ConfigOptionEnum<GCodeFlavor>(gcfMarlinFirmware));
config.set_key_value("gcode_comments", new ConfigOptionBool(true));
config.set_key_value("machine_start_gcode", new ConfigOptionString(""));
config.set_key_value("layer_height", new ConfigOptionFloat(0.2));
config.set_key_value("initial_layer_print_height", new ConfigOptionFloat(0.2));
config.set_key_value("initial_layer_line_width", new ConfigOptionFloatOrPercent(0, false));
config.set_key_value("z_hop", new ConfigOptionFloats({0}));
config.set_key_value("print_sequence", new ConfigOptionEnum<PrintSequence>(PrintSequence::ByObject));
// 2 extruders, 2 filaments
config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4}));
config.set_key_value("printer_extruder_id", new ConfigOptionInts({1, 2}));
config.set_key_value("printer_extruder_variant", new ConfigOptionStrings({"Direct Drive Standard", "Direct Drive Standard"}));
config.set_key_value("filament_diameter", new ConfigOptionFloats({1.75, 1.75}));
config.set_key_value("filament_colour", new ConfigOptionStrings({"#FF0000", "#00FF00"}));
config.set_key_value("filament_type", new ConfigOptionStrings({"PLA", "PLA"}));
config.option<ConfigOptionEnum<FilamentMapMode>>("filament_map_mode", true)->value = fmmManual;
config.set_key_value("filament_map", new ConfigOptionInts({1, 2}));
config.set_key_value("default_filament_colour", new ConfigOptionStrings({"#FF0000", "#00FF00"}));
config.set_key_value("nozzle_temperature", new ConfigOptionInts({210, 210}));
config.set_key_value("nozzle_temperature_range_low", new ConfigOptionInts({190, 190}));
config.set_key_value("nozzle_temperature_range_high", new ConfigOptionInts({240, 240}));
config.set_key_value("flush_multiplier", new ConfigOptionFloats({1}));
config.set_key_value("flush_volumes_matrix", new ConfigOptionFloats({0, 0, 0, 0}));
// --- Machine limits (stride-2: e0_n, e0_s, e1_n, e1_s) ---
// Extruder 0 has LOW limits, Extruder 1 has HIGH limits.
config.set_key_value("machine_max_acceleration_x", new ConfigOptionFloats({500, 0, 1000, 0}));
config.set_key_value("machine_max_acceleration_y", new ConfigOptionFloats({500, 0, 1000, 0}));
config.set_key_value("machine_max_acceleration_z", new ConfigOptionFloats({100, 0, 200, 0}));
config.set_key_value("machine_max_acceleration_e", new ConfigOptionFloats({5000, 0, 5000, 0}));
config.set_key_value("machine_max_acceleration_extruding", new ConfigOptionFloats({500, 0, 2000, 0}));
config.set_key_value("machine_max_acceleration_retracting", new ConfigOptionFloats({600, 0, 2000, 0}));
config.set_key_value("machine_max_acceleration_travel", new ConfigOptionFloats({700, 0, 2500, 0}));
config.set_key_value("machine_max_speed_x", new ConfigOptionFloats({100, 0, 200, 0}));
config.set_key_value("machine_max_speed_y", new ConfigOptionFloats({110, 0, 210, 0}));
config.set_key_value("machine_max_speed_z", new ConfigOptionFloats({10, 0, 30, 0}));
config.set_key_value("machine_max_speed_e", new ConfigOptionFloats({50, 0, 80, 0}));
config.set_key_value("machine_max_jerk_x", new ConfigOptionFloats({5, 0, 15, 0}));
config.set_key_value("machine_max_jerk_y", new ConfigOptionFloats({6, 0, 16, 0}));
config.set_key_value("machine_max_jerk_z", new ConfigOptionFloats({0.4, 0, 0.8, 0}));
config.set_key_value("machine_max_jerk_e", new ConfigOptionFloats({3, 0, 8, 0}));
config.set_key_value("machine_max_junction_deviation", new ConfigOptionFloats({0.02, 0, 0.08, 0}));
// --- Print acceleration: 1500 mm/s² ---
// Exceeds extruder 0's limit (500) → should be clamped to 500.
// Does NOT exceed extruder 1's limit (2000) → passes through as 1500.
config.set_key_value("default_acceleration", new ConfigOptionFloats({1500, 1500}));
config.set_key_value("outer_wall_acceleration", new ConfigOptionFloats({1500, 1500}));
config.set_key_value("inner_wall_acceleration", new ConfigOptionFloats({1500, 1500}));
config.set_key_value("top_surface_acceleration", new ConfigOptionFloats({1500, 1500}));
config.set_key_value("initial_layer_acceleration", new ConfigOptionFloats({1500, 1500}));
config.set_key_value("travel_acceleration", new ConfigOptionFloats({1500, 1500}));
// Model: two objects assigned to different extruders
Model model;
auto* obj1 = model.add_object();
obj1->add_volume(mesh(TestMesh::cube_20x20x20));
obj1->add_instance();
auto* obj2 = model.add_object();
obj2->add_volume(mesh(TestMesh::cube_20x20x20));
obj2->add_instance();
obj2->config.set_key_value("extruder", new ConfigOptionInt(2)); // 0-based index 1
Print print;
arrange_objects(model, InfiniteBed{}, ArrangeParams{scaled(min_object_distance(config))});
for (auto* mo : model.objects) {
mo->ensure_on_bed();
print.auto_assign_extruders(mo);
}
print.apply(model, config);
print.validate();
print.set_status_silent();
print.process();
std::string gcode = Slic3r::Test::gcode(print);
SECTION("Preamble: max limit among used extruders") {
THEN("M201 uses max (extruder 1's) acceleration values") {
REQUIRE(gcode.find("M201 X1000 Y1000 Z200 E5000") != std::string::npos);
}
THEN("M204 uses max extruding/retracting/travel") {
REQUIRE(gcode.find("M204 P2000 R2000 T2500") != std::string::npos);
}
THEN("M205 uses max jerk values") {
REQUIRE(gcode.find("M205 X15.00 Y16.00 Z0.80 E8.00") != std::string::npos);
}
}
SECTION("Preamble: EXTRUDER_LIMIT falls back to max when no filament is active") {
// set_junction_deviation() is called during preamble with no active filament.
// EXTRUDER_LIMIT(m_max_junction_deviation) → filament() == nullptr → max of all (0.08).
THEN("M205 J uses max junction deviation") {
REQUIRE(gcode.find("M205 J0.080") != std::string::npos);
}
}
SECTION("Print: extruder 0 acceleration clamped to its specific limit") {
// Extruder 0 machine limit = 500. Print accel = 1500 > 500 → clamped to 500.
THEN("M204 P500 appears (extruder 0 clamped)") {
REQUIRE(gcode.find("M204 P500") != std::string::npos);
}
THEN("M204 T700 appears (extruder 0 travel clamped)") {
REQUIRE(gcode.find("M204 T700") != std::string::npos);
}
}
SECTION("Print: extruder 1 acceleration NOT clamped to extruder 0's limit") {
// Extruder 1 machine limit = 2000. Print accel = 1500 < 2000 → not clamped.
THEN("M204 P1500 appears (extruder 1 not clamped to 500)") {
REQUIRE(gcode.find("M204 P1500") != std::string::npos);
}
}
}

View File

@@ -3,17 +3,21 @@
#include "libslic3r/libslic3r.h"
#include "libslic3r/Print.hpp"
#include "libslic3r/Layer.hpp"
#include "libslic3r/GCodeReader.hpp"
#include "test_data.hpp"
#include "test_helpers.hpp"
#include <iterator>
#include <set>
using namespace Slic3r;
using namespace Slic3r::Test;
SCENARIO("PrintObject: object layer heights", "[PrintObject]") {
SCENARIO("Object layer heights", "[PrintObject]") {
GIVEN("A 20mm cube") {
WHEN("sliced with a 2mm layer height and a 3mm nozzle") {
Slic3r::Print print;
Slic3r::Test::init_and_process_print({TestMesh::cube_20x20x20}, print, {
Slic3r::Test::init_and_process_print({cube(20)}, print, {
{ "initial_layer_print_height", 2 },
{ "layer_height", 2 },
{ "nozzle_diameter", 3 }
@@ -32,7 +36,7 @@ SCENARIO("PrintObject: object layer heights", "[PrintObject]") {
}
WHEN("sliced with a 10mm layer height and an 11mm nozzle") {
Slic3r::Print print;
Slic3r::Test::init_and_process_print({TestMesh::cube_20x20x20}, print, {
Slic3r::Test::init_and_process_print({cube(20)}, print, {
{ "initial_layer_print_height", 2 },
{ "layer_height", 10 },
{ "nozzle_diameter", 11 }
@@ -50,7 +54,7 @@ SCENARIO("PrintObject: object layer heights", "[PrintObject]") {
}
WHEN("sliced with a 15mm layer height and a 16mm nozzle") {
Slic3r::Print print;
Slic3r::Test::init_and_process_print({TestMesh::cube_20x20x20}, print, {
Slic3r::Test::init_and_process_print({cube(20)}, print, {
{ "initial_layer_print_height", 2 },
{ "layer_height", 15 },
{ "nozzle_diameter", 16 }
@@ -71,7 +75,7 @@ SCENARIO("PrintObject: object layer heights", "[PrintObject]") {
// rejects the slice during flow computation. Pin that behavior.
THEN("Slicing is rejected") {
Slic3r::Print print;
REQUIRE_THROWS(Slic3r::Test::init_and_process_print({TestMesh::cube_20x20x20}, print, {
REQUIRE_THROWS(Slic3r::Test::init_and_process_print({cube(20)}, print, {
{ "initial_layer_print_height", 0.3 },
{ "layer_height", 0.5 },
{ "nozzle_diameter", 0.4 }
@@ -81,11 +85,11 @@ SCENARIO("PrintObject: object layer heights", "[PrintObject]") {
}
}
SCENARIO("PrintObject: Perimeter generation", "[PrintObject]") {
SCENARIO("Perimeter generation", "[PrintObject]") {
GIVEN("20mm cube and default config") {
WHEN("make_perimeters() is called") {
Slic3r::Print print;
Slic3r::Test::init_and_process_print({TestMesh::cube_20x20x20}, print, { { "sparse_infill_density", 0 } });
Slic3r::Test::init_and_process_print({cube(20)}, print, { { "sparse_infill_density", 0 } });
const PrintObject &object = *print.objects().front();
THEN("Every layer in region 0 has 1 island of perimeters") {
for (const Layer *layer : object.layers())
@@ -94,7 +98,7 @@ SCENARIO("PrintObject: Perimeter generation", "[PrintObject]") {
}
WHEN("wall_loops is set to 3") {
Slic3r::Print print;
Slic3r::Test::init_and_process_print({TestMesh::cube_20x20x20}, print, {
Slic3r::Test::init_and_process_print({cube(20)}, print, {
{ "sparse_infill_density", 0 },
{ "wall_loops", 3 }
});
@@ -106,3 +110,23 @@ SCENARIO("PrintObject: Perimeter generation", "[PrintObject]") {
}
}
}
TEST_CASE("Initial layer height is honored", "[PrintObject]")
{
const std::string gcode = Slic3r::Test::slice({cube(20)}, {
{ "initial_layer_print_height", 0.3 },
{ "layer_height", 0.2 },
{ "z_hop", 0 } // keep recorded Z equal to the printed layer height
});
std::set<double> layer_zs;
GCodeReader reader;
reader.parse_buffer(gcode, [&layer_zs] (GCodeReader& self, const GCodeReader::GCodeLine& line) {
if (line.extruding(self) && line.dist_XY(self) > 0)
layer_zs.insert(self.z());
});
REQUIRE(layer_zs.size() > 1);
REQUIRE_THAT(*layer_zs.begin(), Catch::Matchers::WithinAbs(0.3, 1e-4));
REQUIRE_THAT(*std::next(layer_zs.begin()), Catch::Matchers::WithinAbs(0.5, 1e-4));
}

View File

@@ -9,190 +9,319 @@
#include <cmath>
#include "test_data.hpp" // get access to init_print, etc
#include "test_helpers.hpp" // get access to init_print, etc
using namespace Slic3r::Test;
using namespace Slic3r;
/// Helper method to find the tool used for the brim (always the first extrusion).
[[maybe_unused]] static int get_brim_tool(const std::string &gcode)
// Distinct brim regions (combine_brims merges touching brims into one covering >1 object).
static int brim_count(const Print &print)
{
int brim_tool = -1;
int tool = -1;
GCodeReader parser;
parser.parse_buffer(gcode, [&tool, &brim_tool] (Slic3r::GCodeReader &self, const Slic3r::GCodeReader::GCodeLine &line)
{
// if the command is a T command, set the current tool
if (boost::starts_with(line.cmd(), "T")) {
tool = atoi(line.cmd().data() + 1);
} else if (line.cmd() == "G1" && line.extruding(self) && line.dist_XY(self) > 0 && brim_tool < 0) {
brim_tool = tool;
int n = 0;
for (const auto &group : print.skirt_brim_groups())
n += (int) group.brims.size();
return n;
}
// Total brim loops across all objects.
static size_t brim_loop_count(Print &print)
{
size_t n = 0;
for (const auto &kv : print.get_brimMap())
n += kv.second.items_count();
return n;
}
// The span is skirt_height layers, or every layer when a draft shield is on (forced even at
// height 0); per-object skirts are rejected in By object printing (no room between objects).
TEST_CASE("Skirt is emitted once per layer it spans", "[SkirtBrim]")
{
const int object_layers = 100; // 20mm cube at 0.2mm layers
const char *skirt_type = GENERATE("combined", "perobject");
const char *print_seq = GENERATE("by layer", "by object");
const char *draft_shield = GENERATE("disabled", "enabled");
const int skirt_height = GENERATE(0, 1, 3);
DYNAMIC_SECTION(skirt_type << " | " << print_seq << " | draft=" << draft_shield << " | height=" << skirt_height) {
auto do_slice = [&] {
return slice_two_cubes_arranged({
{ "skirt_loops", 1 },
{ "skirt_height", skirt_height },
{ "skirt_distance", 3 },
{ "skirt_type", skirt_type },
{ "draft_shield", draft_shield },
{ "print_sequence", print_seq },
{ "layer_height", 0.2 },
});
};
const bool draft = std::string(draft_shield) == "enabled";
const bool has_skirt = draft || skirt_height > 0;
const bool unsafe_by_object = std::string(skirt_type) == "perobject"
&& std::string(print_seq) == "by object" && has_skirt;
if (unsafe_by_object) {
REQUIRE_THROWS(do_slice());
} else {
const int expected_layers = draft ? object_layers : skirt_height;
CHECK(role_passes(do_slice(), "skirt") == expected_layers);
}
}
}
// Each per-object skirt prints right before its own object, so distant objects yield two
// non-contiguous skirt passes; close objects group into a single skirt.
TEST_CASE("Per-object skirts group when objects are close", "[SkirtBrim]")
{
auto [gap, expected_skirts] = GENERATE(table<double, int>({ { 5.0, 1 }, { 60.0, 2 } }));
DYNAMIC_SECTION("gap=" << gap) {
const std::string gcode = slice_two_cubes_apart(gap, {
{ "skirt_loops", 1 },
{ "skirt_height", 1 },
{ "skirt_distance", 3 },
{ "skirt_type", "perobject" },
{ "print_sequence", "by layer" },
{ "layer_height", 0.2 },
});
CHECK(role_passes(gcode, "skirt") == expected_skirts);
}
}
TEST_CASE("Combine brims merges touching brims", "[SkirtBrim]")
{
auto [gap, combine, expected_brims] = GENERATE(table<double, int, int>({
{ 5.0, 1, 1 }, // touching + combine -> one merged brim
{ 5.0, 0, 2 }, // touching, no combine -> separate
{ 60.0, 1, 2 }, // far apart -> nothing to merge
}));
DYNAMIC_SECTION("gap=" << gap << " combine_brims=" << combine) {
Print print;
Model model;
place_two_cubes_apart(gap, {
{ "skirt_loops", 1 },
{ "skirt_height", 1 },
{ "skirt_distance", 3 },
{ "skirt_type", "perobject" },
{ "print_sequence", "by layer" },
{ "brim_type", "outer_only" },
{ "brim_width", 5 },
{ "combine_brims", combine },
{ "layer_height", 0.2 },
}, print, model);
print.process();
CHECK(brim_count(print) == expected_brims);
}
}
// Each object's skirt and brim come right before that object, not all skirts then all brims first.
TEST_CASE("By-layer per-object skirt and brim precede each object", "[SkirtBrim]")
{
const std::string gcode = slice_two_cubes_apart(60, { // far apart: a skirt+brim per object
{ "skirt_loops", 1 },
{ "skirt_height", 1 },
{ "skirt_distance", 3 },
{ "skirt_type", "perobject" },
{ "print_sequence", "by layer" },
{ "brim_type", "outer_only" },
{ "brim_width", 5 },
{ "layer_height", 0.2 },
});
const std::vector<std::string> expected{ "skirt", "brim", "perimeter", "skirt", "brim", "perimeter" };
CHECK(role_sequence(gcode, { "skirt", "brim", "perimeter" }) == expected);
}
// A square's corners are 90 degrees, so they get ears only when brim_ears_max_angle is above 90.
TEST_CASE("Brim ears appear only at corners within the max angle", "[SkirtBrim]")
{
auto [max_angle, expect_ears] = GENERATE(table<int, bool>({ { 91, true }, { 90, false }, { 89, false } }));
DYNAMIC_SECTION("brim_ears_max_angle=" << max_angle) {
Print print;
init_and_process_print({ cube(20) }, print, {
{ "skirt_loops", 0 },
{ "brim_type", "brim_ears" },
{ "brim_width", 1 },
{ "brim_ears_max_angle", max_angle },
{ "initial_layer_line_width", 0.5 },
});
if (expect_ears) CHECK(brim_loop_count(print) > 0);
else CHECK(brim_loop_count(print) == 0);
}
}
SCENARIO("Skirt has the configured number of loops", "[SkirtBrim]") {
GIVEN("20mm cube and default config") {
WHEN("skirt_loops is set to 2") {
Print print;
init_and_process_print({cube(20)}, print, {
{ "skirt_height", 1 },
{ "skirt_distance", 1 },
{ "skirt_loops", 2 }
});
THEN("Skirt Extrusion collection has 2 loops in it") {
REQUIRE(print.skirt().items_count() == 2);
REQUIRE(print.skirt().flatten().entities.size() == 2);
}
}
}
}
SCENARIO("Brim has the configured number of loops", "[SkirtBrim]") {
GIVEN("20mm cube and default config, 1mm first layer width") {
WHEN("Brim is set to 6mm") {
Print print;
init_and_process_print({cube(20)}, print, {
{ "brim_type", "outer_only" },
{ "initial_layer_line_width", 1 },
{ "brim_width", 6 }
});
THEN("Brim Extrusion collection has 6 loops in it") {
REQUIRE(brim_loop_count(print) == 6);
}
}
WHEN("Brim is set to 6mm, extrusion width 0.5mm") {
Print print;
init_and_process_print({cube(20)}, print, {
{ "brim_type", "outer_only" },
{ "brim_width", 6 },
{ "initial_layer_line_width", 0.5 }
});
THEN("Brim Extrusion collection has 12 loops in it") {
REQUIRE(brim_loop_count(print) == 12);
}
}
}
}
static double first_extrusion_feedrate_for_feature(const std::string &gcode, const std::string_view feature)
{
double feedrate = 0.0;
bool feature_active = false;
GCodeReader parser;
parser.parse_buffer(gcode, [&feedrate, &feature_active, feature] (GCodeReader &self, const GCodeReader::GCodeLine &line) {
const std::string_view comment = line.comment();
if (comment.find("FEATURE:") != std::string_view::npos || comment.find("TYPE:") != std::string_view::npos)
feature_active = comment.find(feature) != std::string_view::npos;
if (feature_active && line.extruding(self) && line.dist_XY(self) > 0) {
feedrate = line.new_F(self);
self.quit_parsing();
}
});
return brim_tool;
return feedrate;
}
TEST_CASE("Skirt height is honored", "[SkirtBrim]") {
DynamicPrintConfig config = Slic3r::DynamicPrintConfig::full_print_config();
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
config.set_deserialize_strict({
{ "skirt_loops", 1 },
{ "skirt_height", 5 },
{ "wall_loops", 0 },
{ "gcode_comments", true }
{ "skirt_loops", 1 },
{ "skirt_height", 5 },
{ "wall_loops", 0 },
});
std::string gcode;
std::string gcode;
SECTION("printing a single object") {
gcode = Slic3r::Test::slice({TestMesh::cube_20x20x20}, config);
gcode = slice({ cube(20) }, config);
}
SECTION("printing multiple objects") {
gcode = Slic3r::Test::slice({TestMesh::cube_20x20x20, TestMesh::cube_20x20x20}, config);
gcode = slice({ cube(20), cube(20) }, config);
}
REQUIRE(layers_with_role(gcode, "skirt").size() == (size_t)config.opt_int("skirt_height"));
REQUIRE(layers_with_role(gcode, "skirt").size() == (size_t) config.opt_int("skirt_height"));
}
TEST_CASE("Brim uses first layer speed", "[SkirtBrim]") {
DynamicPrintConfig config = Slic3r::DynamicPrintConfig::full_print_config();
config.set_deserialize_strict({
{ "brim_type", "outer_only" },
{ "brim_width", 5 },
{ "gcode_comments", true },
{ "initial_layer_speed", 10 },
{ "initial_layer_infill_speed", 20 },
{ "machine_start_gcode", "" },
{ "skirt_loops", 0 },
{ "slow_down_for_layer_cooling", false },
{ "z_hop", 0 }
});
const std::string gcode = Slic3r::Test::slice({TestMesh::cube_20x20x20}, config);
const double brim_feedrate = first_extrusion_feedrate_for_feature(gcode, "Brim");
REQUIRE(brim_feedrate > 0.0);
REQUIRE_THAT(brim_feedrate, Catch::Matchers::WithinAbs(600.0, 1e-3));
const double bottom_surface_feedrate = first_extrusion_feedrate_for_feature(gcode, "Bottom surface");
REQUIRE(bottom_surface_feedrate > 0.0);
REQUIRE_THAT(bottom_surface_feedrate, Catch::Matchers::WithinAbs(1200.0, 1e-3));
}
SCENARIO("Skirt and brim generation", "[SkirtBrim]") {
GIVEN("A default configuration") {
DynamicPrintConfig config = Slic3r::DynamicPrintConfig::full_print_config();
config.set_num_extruders(4);
config.set_deserialize_strict({
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
config.set_num_extruders(4);
config.set_deserialize_strict({
{ "initial_layer_print_height", 0.3 },
{ "gcode_comments", true },
// avoid altering speeds unexpectedly
// avoid altering speeds unexpectedly
{ "slow_down_for_layer_cooling", false },
{ "initial_layer_speed", "100%" },
// remove noise from top/solid layers
// remove noise from top/solid layers
{ "top_shell_layers", 0 },
{ "bottom_shell_layers", 1 },
{ "machine_start_gcode", "T[initial_tool]\n" }
{ "machine_start_gcode", "T[initial_tool]\n" },
});
WHEN("Brim width is set to 5") {
config.set_deserialize_strict({
config.set_deserialize_strict({
{ "wall_loops", 0 },
{ "skirt_loops", 0 },
{ "brim_type", "outer_only" },
{ "brim_width", 5 }
});
THEN("Brim is generated") {
std::string gcode = Slic3r::Test::slice({TestMesh::cube_20x20x20}, config);
{ "brim_width", 5 },
});
THEN("Brim is generated") {
std::string gcode = slice({ cube(20) }, config);
REQUIRE(! layers_with_role(gcode, "brim").empty());
}
}
#if 0
// This is a real error! One shall print the brim with the external perimeter extruder!
WHEN("Perimeter extruder = 2 and support extruders = 3") {
THEN("Brim is printed with the extruder used for the perimeters of first object") {
config.set_deserialize_strict({
{ "skirts", 0 },
{ "brim_width", 5 },
{ "perimeter_extruder", 2 },
{ "support_material_extruder", 3 },
{ "infill_extruder", 4 }
});
std::string gcode = Slic3r::Test::slice({TestMesh::cube_20x20x20}, config);
int tool = get_brim_tool(gcode);
REQUIRE(tool == config.opt_int("perimeter_extruder") - 1);
}
}
WHEN("Perimeter extruder = 2, support extruders = 3, raft is enabled") {
THEN("brim is printed with same extruder as skirt") {
config.set_deserialize_strict({
{ "skirts", 0 },
{ "brim_width", 5 },
{ "perimeter_extruder", 2 },
{ "support_material_extruder", 3 },
{ "infill_extruder", 4 },
{ "raft_layers", 1 }
});
std::string gcode = Slic3r::Test::slice({TestMesh::cube_20x20x20}, config);
int tool = get_brim_tool(gcode);
REQUIRE(tool == config.opt_int("support_material_extruder") - 1);
}
}
#endif
WHEN("brim width to 1 with layer_width of 0.5") {
config.set_deserialize_strict({
config.set_deserialize_strict({
{ "skirt_loops", 0 },
{ "initial_layer_line_width", 0.5 },
{ "brim_type", "outer_only" },
{ "brim_width", 1 }
});
{ "brim_width", 1 },
});
THEN("2 brim lines") {
Slic3r::Print print;
Slic3r::Test::init_and_process_print({TestMesh::cube_20x20x20}, print, config);
size_t total_entities = 0;
for (const auto& pair : print.get_brimMap()) {
total_entities += pair.second.entities.size();
}
REQUIRE(total_entities == 2);
Print print;
init_and_process_print({ cube(20) }, print, config);
REQUIRE(brim_loop_count(print) == 2);
}
}
#if 0
WHEN("brim ears on a square") {
config.set_deserialize_strict({
{ "skirts", 0 },
{ "first_layer_extrusion_width", 0.5 },
{ "brim_width", 1 },
{ "brim_ears", 1 },
{ "brim_ears_max_angle", 91 }
});
Slic3r::Print print;
Slic3r::Test::init_and_process_print({TestMesh::cube_20x20x20}, print, config);
THEN("Four brim ears") {
REQUIRE(print.brim().entities.size() == 4);
}
}
WHEN("brim ears on a square but with a too small max angle") {
config.set_deserialize_strict({
{ "skirts", 0 },
{ "first_layer_extrusion_width", 0.5 },
{ "brim_width", 1 },
{ "brim_ears", 1 },
{ "brim_ears_max_angle", 89 }
});
THEN("no brim") {
Slic3r::Print print;
Slic3r::Test::init_and_process_print({ TestMesh::cube_20x20x20 }, print, config);
REQUIRE(print.brim().entities.size() == 0);
}
}
#endif
WHEN("Object is plated with overhang support and a brim") {
config.set_deserialize_strict({
config.set_deserialize_strict({
{ "layer_height", 0.4 },
{ "initial_layer_print_height", 0.4 },
{ "skirt_loops", 1 },
{ "skirt_distance", 0 },
{ "enable_support", 1 },
{ "brim_type", "outer_only" },
{ "brim_width", 5 }
});
{ "brim_width", 5 },
});
THEN("Support and brim are both emitted") {
std::string gcode = Slic3r::Test::slice({TestMesh::overhang}, config);
std::string gcode = slice({ TestMesh::overhang }, config);
REQUIRE(! layers_with_role(gcode, "support").empty());
REQUIRE(! layers_with_role(gcode, "brim").empty());
}
}
WHEN("an object with support is surrounded by a skirt") {
config.set_deserialize_strict({
{ "enable_support", 1 },
{ "skirt_loops", 1 },
{ "skirt_distance", 2 },
{ "brim_type", "no_brim" },
{ "z_hop", 0 }
{ "z_hop", 0 },
});
THEN("the skirt is long enough to enclose the object and its support") {
std::string gcode = Slic3r::Test::slice({TestMesh::overhang}, config);
std::string gcode = slice({ TestMesh::overhang }, config);
const double first_layer_z = config.opt_float("initial_layer_print_height");
// On the first layer, accumulate the skirt loop length and collect the
@@ -200,7 +329,7 @@ SCENARIO("Skirt and brim generation", "[SkirtBrim]") {
double skirt_length = 0.0;
Points footprint;
GCodeReader parser;
parser.parse_buffer(gcode, [&] (GCodeReader& self, const GCodeReader::GCodeLine& line) {
parser.parse_buffer(gcode, [&](GCodeReader &self, const GCodeReader::GCodeLine &line) {
if (! line.extruding(self) || line.dist_XY(self) <= 0 || std::abs(self.z() - first_layer_z) > 0.01)
return;
if (line.comment().find("skirt") != std::string_view::npos)
@@ -214,17 +343,18 @@ SCENARIO("Skirt and brim generation", "[SkirtBrim]") {
REQUIRE(skirt_length > hull_perimeter);
}
}
WHEN("Large minimum skirt length is used.") {
// One skirt loop around a 20mm cube is ~88mm, so 500mm forces extra loops.
config.set_deserialize_strict({
{ "skirt_loops", 1 },
{ "min_skirt_length", 500 }
{ "min_skirt_length", 500 },
});
THEN("The skirt is extended to at least the minimum length") {
std::string gcode = Slic3r::Test::slice({TestMesh::cube_20x20x20}, config);
std::string gcode = slice({ cube(20) }, config);
double skirt_length = 0.0;
GCodeReader parser;
parser.parse_buffer(gcode, [&skirt_length] (GCodeReader& self, const GCodeReader::GCodeLine& line) {
parser.parse_buffer(gcode, [&skirt_length](GCodeReader &self, const GCodeReader::GCodeLine &line) {
if (line.extruding(self) && line.comment().find("skirt") != std::string_view::npos)
skirt_length += line.dist_XY(self);
});

View File

@@ -3,22 +3,22 @@
#include "libslic3r/GCodeReader.hpp"
#include "libslic3r/Layer.hpp"
#include "test_data.hpp" // get access to init_print, etc
#include "test_helpers.hpp" // get access to init_print, etc
using namespace Slic3r::Test;
using namespace Slic3r;
TEST_CASE("SupportMaterial: Three raft layers created", "[SupportMaterial]")
TEST_CASE("Three raft layers are created", "[SupportMaterial]")
{
Slic3r::Print print;
Slic3r::Test::init_and_process_print({ TestMesh::cube_20x20x20 }, print, {
Slic3r::Test::init_and_process_print({ cube(20) }, print, {
{ "enable_support", 1 },
{ "raft_layers", 3 }
});
REQUIRE(print.objects().front()->support_layers().size() == 3);
}
TEST_CASE("SupportMaterial: enforced support layers are generated", "[SupportMaterial]")
TEST_CASE("Enforced support layers are generated", "[SupportMaterial]")
{
// enforce_support_layers forces support on the first N layers even with support off.
Slic3r::Print baseline;
@@ -36,7 +36,7 @@ TEST_CASE("SupportMaterial: enforced support layers are generated", "[SupportMat
REQUIRE(enforced.objects().front()->support_layers().size() > 0);
}
SCENARIO("SupportMaterial: support_layers_z and contact_distance", "[SupportMaterial]")
SCENARIO("Support layer Z honors contact distance", "[SupportMaterial]")
{
// Box h = 20mm, hole bottom at 5mm, hole height 10mm (top edge at 15mm).
TriangleMesh mesh = Slic3r::Test::mesh(Slic3r::Test::TestMesh::cube_with_hole);

View File

@@ -12,14 +12,14 @@
#include <chrono>
//#include "test_options.hpp"
#include "test_data.hpp"
#include "test_helpers.hpp"
using namespace Slic3r;
using namespace std;
static inline TriangleMesh make_cube() { return make_cube(20., 20, 20); }
SCENARIO( "TriangleMesh: Basic mesh statistics") {
SCENARIO("Basic mesh statistics", "[TriangleMesh]") {
GIVEN( "A 20mm cube, built from constexpr std::array" ) {
std::vector<Vec3f> vertices { {20,20,0}, {20,0,0}, {0,0,0}, {0,20,0}, {20,20,20}, {0,20,20}, {0,0,20}, {20,0,20} };
std::vector<Vec3i32> facets { {0,1,2}, {0,2,3}, {4,5,6}, {4,6,7}, {0,4,7}, {0,7,1}, {1,7,6}, {1,6,2}, {2,6,5}, {2,5,3}, {4,0,3}, {4,3,5} };
@@ -71,7 +71,7 @@ SCENARIO( "TriangleMesh: Basic mesh statistics") {
}
}
SCENARIO( "TriangleMesh: Transformation functions affect mesh as expected.") {
SCENARIO("Transformation functions affect the mesh as expected", "[TriangleMesh]") {
GIVEN( "A 20mm cube with one corner on the origin") {
auto cube = make_cube();
@@ -134,7 +134,7 @@ SCENARIO( "TriangleMesh: Transformation functions affect mesh as expected.") {
}
}
SCENARIO( "TriangleMesh: slice behavior.") {
SCENARIO("Slice behavior", "[TriangleMesh]") {
GIVEN( "A 20mm cube with one corner on the origin") {
auto cube = make_cube();
@@ -177,7 +177,7 @@ SCENARIO( "TriangleMesh: slice behavior.") {
}
}
SCENARIO( "make_xxx functions produce meshes.") {
SCENARIO("make_xxx functions produce meshes", "[TriangleMesh]") {
GIVEN("make_cube() function") {
WHEN("make_cube() is called with arguments 20,20,20") {
TriangleMesh cube = make_cube(20,20,20);
@@ -232,7 +232,7 @@ SCENARIO( "make_xxx functions produce meshes.") {
}
}
SCENARIO( "TriangleMesh: split functionality.") {
SCENARIO("Split functionality", "[TriangleMesh]") {
GIVEN( "A 20mm cube with one corner on the origin") {
auto cube = make_cube();
WHEN( "The mesh is split into its component parts.") {
@@ -260,7 +260,7 @@ SCENARIO( "TriangleMesh: split functionality.") {
}
}
SCENARIO( "TriangleMesh: Mesh merge functions") {
SCENARIO("Mesh merge functions", "[TriangleMesh]") {
GIVEN( "Two 20mm cubes, each with one corner on the origin") {
auto cube = make_cube();
TriangleMesh cube2(cube);
@@ -274,7 +274,7 @@ SCENARIO( "TriangleMesh: Mesh merge functions") {
}
}
SCENARIO( "TriangleMeshSlicer: Cut behavior.") {
SCENARIO("Cut behavior", "[TriangleMesh]") {
GIVEN( "A 20mm cube with one corner on the origin") {
auto cube = make_cube();
WHEN( "Object is cut at the bottom") {
@@ -302,7 +302,7 @@ SCENARIO( "TriangleMeshSlicer: Cut behavior.") {
}
}
#ifdef TEST_PERFORMANCE
TEST_CASE("Regression test for issue #4486 - files take forever to slice") {
TEST_CASE("Large mesh slices within the time budget (#4486)", "[TriangleMesh][Regression]") {
TriangleMesh mesh;
DynamicPrintConfig config = Slic3r::DynamicPrintConfig::full_print_config();
mesh.ReadSTLFile(std::string(testfile_dir) + "test_trianglemesh/4486/100_000.stl");
@@ -329,7 +329,7 @@ TEST_CASE("Regression test for issue #4486 - files take forever to slice") {
#endif // TEST_PERFORMANCE
#ifdef BUILD_PROFILE
TEST_CASE("Profile test for issue #4486 - files take forever to slice") {
TEST_CASE("Large mesh slicing profile (#4486)", "[TriangleMesh][Profile]") {
TriangleMesh mesh;
DynamicPrintConfig config = Slic3r::DynamicPrintConfig::full_print_config();
mesh.ReadSTLFile(std::string(testfile_dir) + "test_trianglemesh/4486/10_000.stl");

View File

@@ -23,6 +23,7 @@ add_executable(${_TEST_NAME}_tests
test_stl.cpp
test_meshboolean.cpp
test_marchingsquares.cpp
test_utils.cpp
test_timeutils.cpp
test_voronoi.cpp
test_optimizers.cpp

View File

@@ -0,0 +1,54 @@
#include <catch2/catch_all.hpp>
#include "libslic3r/Utils.hpp"
#ifndef _WIN32
#include <unistd.h> // getuid
#endif
using namespace Slic3r;
TEST_CASE("per_user_temp_dir composes a per-user temp root", "[utils]") {
const std::string base = "/tmp";
SECTION("an empty id returns base unchanged") {
REQUIRE(per_user_temp_dir(base, "") == base);
}
SECTION("a non-empty id is appended at the top level") {
REQUIRE(per_user_temp_dir(base, "1000") == base + "/orcaslicer_1000");
}
SECTION("distinct ids produce distinct roots") {
REQUIRE(per_user_temp_dir(base, "1000") != per_user_temp_dir(base, "1001"));
}
}
TEST_CASE("per_user_temp_id follows the platform contract", "[utils]") {
const std::string id = per_user_temp_id();
SECTION("stable across calls") {
REQUIRE(per_user_temp_id() == id);
}
#ifdef _WIN32
SECTION("empty on Windows (its temp dir is already per-user)") {
REQUIRE(id.empty());
}
#else
SECTION("the current uid on Linux/macOS") {
REQUIRE_FALSE(id.empty());
REQUIRE(id == std::to_string(static_cast<unsigned long>(::getuid())));
}
#endif
}
// The end-to-end contract callers depend on: the temp root is left alone on
// Windows and isolated per user on Linux/macOS.
TEST_CASE("per-user temp root is unchanged on Windows, isolated elsewhere", "[utils]") {
const std::string base = "/tmp";
const std::string root = per_user_temp_dir(base, per_user_temp_id());
#ifdef _WIN32
REQUIRE(root == base);
#else
REQUIRE(root != base);
REQUIRE_THAT(root, Catch::Matchers::StartsWith(base + "/orcaslicer_"));
#endif
}